cBot when TP hit open 2 Stop Order Buy/Sell....
Created at 08 Mar 2017, 07:00
cBot when TP hit open 2 Stop Order Buy/Sell....
08 Mar 2017, 07:00
Please I need Help to finish the Bot.
The 1st excutemarketorder is trigged then when the TakeProfit is hit 2 StopOrders are open Buy/Sell.
When 1 StopOrder is Hit the other is cancelled ....and then the cBot should start again opening 2 StopOrders Buy/Sell when the TP is hit....and so again.
The problem is that when the TP of the 1st MarketOrder is hit the bot open 2 StopOrder....then when one of the StopOrder is Hit the Bot crash and stop with the error "Crashed in OnTick with NullReferenceException".
Any suggestions would be really appreciate.
using System; using System.Linq; using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.API.Internals; using cAlgo.Indicators; namespace cAlgo { [Robot("Trend_Stop_OCO_NP_TP", TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)] public class Trend_Stop_OCO_NP_TP : Robot { [Parameter("Order Size", DefaultValue = 1000)] public int OrderSize { get; set; } [Parameter("SL (pips)", DefaultValue = 20)] public int SL { get; set; } [Parameter("TP (pips)", DefaultValue = 8)] public double TP { get; set; } [Parameter("Diff su current Open/Close", DefaultValue = 0.2, MinValue = 0.1, MaxValue = 30)] public double diffopenclosePips { get; set; } [Parameter("Pips away", DefaultValue = 4, MaxValue = 100, MinValue = 1)] public double PipsAway { get; set; } public double NetProfit; public int Count; string _Label = "Trend_Stop_OCO_NP_TP"; protected override void OnStart() { //Positions.Closed += OnPositionClosed; //Positions.Opened += OnPositionOpened; } protected override void OnTick() { double currentOpen = MarketSeries.Open.Last(0); double currentClose = MarketSeries.Close.Last(0); //------------------------------------------------------------------------------------------------------------------ var diffOpenCloseBuy = (currentOpen - currentClose) < (diffopenclosePips * Symbol.PipSize) * -1; var diffOpenCloseSell = (currentOpen - currentClose) > diffopenclosePips * Symbol.PipSize; //---------------------------------------------------------------------------------------------------------------- double buyOrderTargetPrice = Symbol.Ask + PipsAway * Symbol.PipSize; double sellOrderTargetPrice = Symbol.Bid - PipsAway * Symbol.PipSize; var positionSell = Positions.Find(_Label, Symbol, TradeType.Sell); var positionBuy = Positions.Find(_Label, Symbol, TradeType.Buy); var totalOrders = PendingOrders.Count; //---------------------------------------------------------------------------------------------------------------- if (totalOrders == 0 && positionBuy == null && positionSell == null && currentOpen < Symbol.Bid && diffOpenCloseBuy) { { ExecuteMarketOrder(TradeType.Buy, Symbol, OrderSize, _Label, SL, TP); } } else if (totalOrders == 0 && positionBuy == null && positionSell == null && currentOpen > Symbol.Ask && diffOpenCloseSell) { { ExecuteMarketOrder(TradeType.Sell, Symbol, OrderSize, _Label, SL, TP); } } //-----------------------SELL------------- ------------------------------------------------------------------- else { if (positionBuy != null && Symbol.Bid >= LastResult.Position.TakeProfit || positionSell != null && Symbol.Ask <= LastResult.Position.TakeProfit) { { PlaceStopOrder(TradeType.Sell, Symbol, OrderSize, sellOrderTargetPrice, _Label, SL, TP); PlaceStopOrder(TradeType.Buy, Symbol, OrderSize, buyOrderTargetPrice, _Label, SL, TP); } } } //--------------------------------------------------------------------------------------------------------------------------------- foreach (var order in PendingOrders) { if (totalOrders > 0) { if (positionBuy != null || positionSell != null) { CancelPendingOrder(order); } } } } //------------------------------------------------------------------------------------------- } }