using System; using System.Linq; using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.API.Internals; using cAlgo.Indicators; namespace cAlgo { [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.fullAccessRights)] public class SampleRSIeditedfull : Robot { [Parameter("Quantity (Lots)", Group = "Volume", DefaultValue = 1, MinValue = 0.01, Step = 0.01)] public double Quantity { get; set; } [Parameter("Source", Group = "RSI")] public DataSeries Source { get; set; } [Parameter("Periods", Group = "RSI", DefaultValue = 14)] public int Periods { get; set; } private RelativeStrengthIndex rsi; protected override void OnStart() { rsi = Indicators.RelativeStrengthIndex(Source, Periods); } protected override void OnTick() { if (rsi.Result.LastValue < 20.0) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 22.5) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 22.6) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 25.0) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 25.1) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 27.5) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 27.6) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 30.0) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 30.1) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 32.5) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 32.6) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 35.0) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 35.1) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 37.5) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 37.6) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 40.0) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 40.1) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 42.5) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 42.6) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 45.0) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 45.1) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 47.5) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 47.6) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 50.0) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 50.1) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 52.5) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 52.6) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 55.0) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 55.1) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 57.5) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 57.6) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 60.0) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 60.1) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 62.5) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 62.6) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 65.0) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 65.1) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 67.5) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 67.6) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 70.0) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 70.1) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 72.5) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 72.6) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 75.5) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 75.6) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 77.5) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 77.6) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 80.0) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 80.1) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 82.5) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 82.6) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 85.0) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 85.1) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 87.5) { Close(TradeType.Buy); Open(TradeType.Sell); } if (rsi.Result.LastValue < 87.6) { Close(TradeType.Sell); Open(TradeType.Buy); } else if (rsi.Result.LastValue > 90.0) { Close(TradeType.Buy); Open(TradeType.Sell); } } private void Close(TradeType tradeType) { foreach (var position in Positions.FindAll("SampleRSI", SymbolName, tradeType)) ClosePosition(position); } private void Open(TradeType tradeType) { var position = Positions.Find("SampleRSI", SymbolName, tradeType); var volumeInUnits = Symbol.QuantityToVolumeInUnits(Quantity); if (position == null) ExecuteMarketOrder(tradeType, SymbolName, volumeInUnits, "SampleRSI"); } } }