Description
//这是一个简单的马丁格尔策略,其交易逻辑如下:
//在OnStart()方法中,初始化一个Random对象,然后执行一个市价单,交易量为InitialVolume,交易方向为随机的买入或卖出。
//当有一个持仓被平仓时,OnPositionsClosed()方法被调用。如果这个持仓的标签为“Martingale”,并且交易品种为当前的交易品种,那么就会执行以下操作:
//a. 如果这个持仓的毛利润大于0,那么就再次执行一个市价单,交易量为InitialVolume,交易方向为随机的买入或卖出。
//b. 如果这个持仓的毛利润小于等于0,那么就再次执行一个市价单,交易量为上一个持仓的交易量的两倍,交易方向与上一个持仓的交易方向相反。
//如果执行市价单时出现了“无资金”错误,那么就停止策略的执行。
//在每个市价单中,止损和止盈的值都是固定的,分别为StopLoss和TakeProfit参数的值。
using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;
namespace cAlgo.Robots
{
[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
public class SampleMartingaleRobot : Robot
{
[Parameter("Initial Volume", DefaultValue = 1000, MinValue = 0)]
public int InitialVolume { get; set; }
[Parameter("Stop Loss", DefaultValue = 40)]
public int StopLoss { get; set; }
[Parameter("Take Profit", DefaultValue = 40)]
public int TakeProfit { get; set; }
private Random random = new Random();
protected override void OnStart()
{
Positions.Closed += OnPositionsClosed;
ExecuteOrder(InitialVolume, GetRandomTradeType());
}
private void ExecuteOrder(long volume, TradeType tradeType)
{
var result = ExecuteMarketOrder(tradeType, Symbol, volume, "Martingale", StopLoss, TakeProfit);
if (result.Error == ErrorCode.NoMoney)
Stop();
}
private void OnPositionsClosed(PositionClosedEventArgs args)
{
Print("Closed");
var position = args.Position;
if (position.Label != "Martingale" || position.SymbolCode != Symbol.Code)
return;
if (position.GrossProfit > 0)
{
ExecuteOrder(InitialVolume, GetRandomTradeType());
}
else
{
TradeType oppositeTradeType = position.TradeType == TradeType.Buy ? TradeType.Sell : TradeType.Buy;
ExecuteOrder((int)position.Volume * 2, oppositeTradeType);
}
}
private TradeType GetRandomTradeType()
{
return random.Next(2) == 0 ? TradeType.Buy : TradeType.Sell;
}
}
}
//修改时请不要删除以下注释!
//这是一个简单的马丁格尔策略,其交易逻辑如下:
//在OnStart()方法中,初始化一个Random对象,然后执行一个市价单,交易量为InitialVolume,交易方向为随机的买入或卖出。
//当有一个持仓被平仓时,OnPositionsClosed()方法被调用。如果这个持仓的标签为“Martingale”,并且交易品种为当前的交易品种,那么就会执行以下操作:
//a. 如果这个持仓的毛利润大于0,那么就再次执行一个市价单,交易量为InitialVolume,交易方向为随机的买入或卖出。
//b. 如果这个持仓的毛利润小于等于0,那么就再次执行一个市价单,交易量为上一个持仓的交易量的两倍,交易方向与上一个持仓的交易方向相反。
//如果执行市价单时出现了“无资金”错误,那么就停止策略的执行。
//在每个市价单中,止损和止盈的值都是固定的,分别为StopLoss和TakeProfit参数的值。
vn18
Joined on 01.06.2022
- Distribution: Free
- Language: C#
- Trading platform: cTrader Automate
- File name: 马丁格尔机器人.algo
- Rating: 0
- Installs: 240
- Modified: 26/04/2024 08:06
Warning! Running cBots downloaded from this section may lead to financial losses. Use them at your own risk.
Note that publishing copyrighted material is strictly prohibited. If you believe there is copyrighted material in this section, please use the Copyright Infringement Notification form to submit a claim.
Comments
Log in to add a comment.
C#语言代写机器人!
联系方式:vn18@qq.com