CH
Topics
12 Nov 2018, 18:45
1252
2
15 Sep 2017, 14:02
3272
5
06 Sep 2017, 20:43
2500
3
Replies
chris.wandel00
15 Sep 2017, 17:19
RE:
Spotware said:
Dear Trader,
Thanks for posting in the forum. You can find a sample of how to program a trailing stop loss here. It might be helpful in your effort to incorporate trailing stop loss logic inside your cBot.
Best Regards,
cTrader Team
Thanks, I have been trying all afternoon but I keep getting errors.
@chris.wandel00
chris.wandel00
06 Sep 2017, 23:11
RE:
I meant to say workspace, when I said panle and work station above.
@chris.wandel00
chris.wandel00
15 Sep 2017, 18:26
This is where I am and it works apart from this : Error occured during parsing project file: 'Syntax for an XML declaration is invalid. Line 1, position 7.'
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 SampleRSIRobot : Robot { [Parameter("Source")] public DataSeries Source { get; set; } [Parameter("Periods", DefaultValue = 14)] public int Periods { get; set; } [Parameter("Volume", DefaultValue = 10000, MinValue = 1000)] public int Volume { get; set; } [Parameter("Stop Loss (pips)", DefaultValue = 50, MinValue = 1)] public int StopLoss { get; set; } [Parameter("Take Profit (pips)", DefaultValue = 50, MinValue = 1)] public int TakeProfit { get; set; } [Parameter("Trigger (pips)", DefaultValue = 20)] public int Trigger { get; set; } [Parameter("Trailing Stop (pips)", DefaultValue = 10)] public int TrailingStop { get; set; } private RelativeStrengthIndex rsi; protected override void OnStart() { rsi = Indicators.RelativeStrengthIndex(Source, Periods); } protected override void OnTick() { if (rsi.Result.LastValue < 30) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 70) { Close(TradeType.Buy); Open(TradeType.Sell); } var position = Positions.Find("SampleBuyTrailing"); if (position == null) { Stop(); return; } double distance = position.EntryPrice - Symbol.Ask; if (distance >= Trigger * Symbol.PipSize) { double newStopLossPrice = Symbol.Ask + TrailingStop * Symbol.PipSize; if (position.StopLoss == null || newStopLossPrice < position.StopLoss) { ModifyPosition(position, newStopLossPrice, position.TakeProfit); } } } private void Close(TradeType tradeType) { foreach (var position in Positions.FindAll("SampleRSI", Symbol, tradeType)) ClosePosition(position); } private void Open(TradeType tradeType) { var position = Positions.Find("SampleRSI", Symbol, tradeType); if (position == null) ExecuteMarketOrder(tradeType, Symbol, Volume, "SampleRSI"); } } }@chris.wandel00