Stop cBot after trade executed
31 Aug 2018, 18:09
Hi,
How do I stop or switch off a cBot immediately after a trade is executed? The cBot attached stops the bot only after Take Profit or Stop Loss is triggered. I want the bot to stop or switch off immediately after a trade ib executed.
King regards
using System;
using System.Threading;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.API.Requests;
using cAlgo.Indicators;
namespace cAlgo.Robots
{
[Robot(TimeZone = TimeZones.UTC)]
public class MAcBotStop : Robot
{
[Parameter("Stop Loss", DefaultValue = 20)]
public int StopLoss { get; set; }
[Parameter("Take Profit", DefaultValue = 40)]
public int TakeProfit { get; set; }
[Parameter("MA_Fast_Period", DefaultValue = 15)]
public int _MA_Fast_Period { get; set; }
[Parameter("MA_Slow_Period", DefaultValue = 100)]
public int _MA_Slow_Period { get; set; }
[Parameter(DefaultValue = 1000, MinValue = 0)]
public int Vol_1 { get; set; }
[Parameter(DefaultValue = 2000, MinValue = 0)]
public int Vol_2 { get; set; }
//Global declaration
private ExponentialMovingAverage i_Moving_Average;
private ExponentialMovingAverage i_Moving_Average_1;
private ExponentialMovingAverage i_Moving_Average_2;
private ExponentialMovingAverage i_Moving_Average_3;
bool _Compare;
bool _Compare_1;
bool _MA_cross_down;
bool _MA_cross_up;
DateTime LastTradeExecution = new DateTime(0);
protected override void OnStart()
{
Positions.Closed += PositionClosed;
i_Moving_Average = Indicators.ExponentialMovingAverage(MarketSeries.Close, (int)_MA_Fast_Period);
i_Moving_Average_1 = Indicators.ExponentialMovingAverage(MarketSeries.Close, (int)_MA_Slow_Period);
i_Moving_Average_2 = Indicators.ExponentialMovingAverage(MarketSeries.Close, (int)_MA_Slow_Period);
i_Moving_Average_3 = Indicators.ExponentialMovingAverage(MarketSeries.Close, (int)_MA_Fast_Period);
}
protected override void OnTick()
{
if (Trade.IsExecuting)
return;
var longPosition = Positions.Find("Order1", Symbol, TradeType.Buy);
var shortPosition = Positions.Find("Order#1", Symbol, TradeType.Sell);
//Step 1
//Step 2
_Compare = (i_Moving_Average_3.Result.Last(1) >= i_Moving_Average_1.Result.Last(1));
_Compare_1 = (i_Moving_Average.Result.Last(0) >= i_Moving_Average_2.Result.Last(0));
//Step 3
_MA_cross_up = (!_Compare && _Compare_1);
_MA_cross_down = (_Compare && !_Compare_1);
//Step 4
if (_MA_cross_down && shortPosition == null && Positions.Count == 0)
{
ExecuteMarketOrder(TradeType.Sell, Symbol, Vol_1, "Order#1", StopLoss, TakeProfit);
}
if (_MA_cross_up && longPosition == null && Positions.Count == 0)
{
ExecuteMarketOrder(TradeType.Buy, Symbol, Vol_1, "Order1", StopLoss, TakeProfit);
}
}
private void PositionClosed(PositionClosedEventArgs args)
{
var position = args.Position;
if (position.SymbolCode == Symbol.Code && position.GrossProfit > 0)
{
foreach (var order in PendingOrders)
{
if (order.SymbolCode == Symbol.Code)
{
CancelPendingOrder(order);
}
}
}
Stop();
}
}
}
Replies
collinganesh
02 Sep 2018, 20:31
RE: RE:
patrick.sifneos@gmail.com said:
//Step 4 if (_MA_cross_down && shortPosition == null && Positions.Count == 0) { ExecuteMarketOrder(TradeType.Sell, Symbol, Vol_1, "Order#1", StopLoss, TakeProfit); stop(); } if (_MA_cross_up && longPosition == null && Positions.Count == 0) { ExecuteMarketOrder(TradeType.Buy, Symbol, Vol_1, "Order1", StopLoss, TakeProfit); stop(); }
collinganesh said: Thank you for your help. Wil try it.
Hi,
How do I stop or switch off a cBot immediately after a trade is executed? The cBot attached stops the bot only after Take Profit or Stop Loss is triggered. I want the bot to stop or switch off immediately after a trade ib executed.
King regards
using System; using System.Threading; using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.API.Internals; using cAlgo.API.Requests; using cAlgo.Indicators; namespace cAlgo.Robots { [Robot(TimeZone = TimeZones.UTC)] public class MAcBotStop : Robot { [Parameter("Stop Loss", DefaultValue = 20)] public int StopLoss { get; set; } [Parameter("Take Profit", DefaultValue = 40)] public int TakeProfit { get; set; } [Parameter("MA_Fast_Period", DefaultValue = 15)] public int _MA_Fast_Period { get; set; } [Parameter("MA_Slow_Period", DefaultValue = 100)] public int _MA_Slow_Period { get; set; } [Parameter(DefaultValue = 1000, MinValue = 0)] public int Vol_1 { get; set; } [Parameter(DefaultValue = 2000, MinValue = 0)] public int Vol_2 { get; set; } //Global declaration private ExponentialMovingAverage i_Moving_Average; private ExponentialMovingAverage i_Moving_Average_1; private ExponentialMovingAverage i_Moving_Average_2; private ExponentialMovingAverage i_Moving_Average_3; bool _Compare; bool _Compare_1; bool _MA_cross_down; bool _MA_cross_up; DateTime LastTradeExecution = new DateTime(0); protected override void OnStart() { Positions.Closed += PositionClosed; i_Moving_Average = Indicators.ExponentialMovingAverage(MarketSeries.Close, (int)_MA_Fast_Period); i_Moving_Average_1 = Indicators.ExponentialMovingAverage(MarketSeries.Close, (int)_MA_Slow_Period); i_Moving_Average_2 = Indicators.ExponentialMovingAverage(MarketSeries.Close, (int)_MA_Slow_Period); i_Moving_Average_3 = Indicators.ExponentialMovingAverage(MarketSeries.Close, (int)_MA_Fast_Period); } protected override void OnTick() { if (Trade.IsExecuting) return; var longPosition = Positions.Find("Order1", Symbol, TradeType.Buy); var shortPosition = Positions.Find("Order#1", Symbol, TradeType.Sell); //Step 1 //Step 2 _Compare = (i_Moving_Average_3.Result.Last(1) >= i_Moving_Average_1.Result.Last(1)); _Compare_1 = (i_Moving_Average.Result.Last(0) >= i_Moving_Average_2.Result.Last(0)); //Step 3 _MA_cross_up = (!_Compare && _Compare_1); _MA_cross_down = (_Compare && !_Compare_1); //Step 4 if (_MA_cross_down && shortPosition == null && Positions.Count == 0) { ExecuteMarketOrder(TradeType.Sell, Symbol, Vol_1, "Order#1", StopLoss, TakeProfit); } if (_MA_cross_up && longPosition == null && Positions.Count == 0) { ExecuteMarketOrder(TradeType.Buy, Symbol, Vol_1, "Order1", StopLoss, TakeProfit); } } private void PositionClosed(PositionClosedEventArgs args) { var position = args.Position; if (position.SymbolCode == Symbol.Code && position.GrossProfit > 0) { foreach (var order in PendingOrders) { if (order.SymbolCode == Symbol.Code) { CancelPendingOrder(order); } } } Stop(); } } }
@collinganesh

sifneos4fx
01 Sep 2018, 11:15
RE:
//Step 4 if (_MA_cross_down && shortPosition == null && Positions.Count == 0) { ExecuteMarketOrder(TradeType.Sell, Symbol, Vol_1, "Order#1", StopLoss, TakeProfit); stop(); } if (_MA_cross_up && longPosition == null && Positions.Count == 0) { ExecuteMarketOrder(TradeType.Buy, Symbol, Vol_1, "Order1", StopLoss, TakeProfit); stop(); }collinganesh said:
@sifneos4fx