private List <OHLCKandle> GetSmoothData(List <OHLCKandle> kandles, int lookback, string smoothing) { PineScriptFunction fn = new PineScriptFunction(); if (smoothing.ToUpper() == "DEMA") { kandles = fn.dema(kandles, lookback); } else { kandles = fn.smma(kandles, lookback); } return(kandles); }
public void RunStrategy(List <OHLCKandle> inputkandles, RobotInput robotInput, ref StrategyData strategyData, ref SimplePosition currentPosition) { PineScriptFunction fn = new PineScriptFunction(); //convert to higher timeframe var largekandles = fn.converttohighertimeframe(inputkandles, KandleMultiplier);//3 if (Smoothing.ToUpper() == "DEMA") { //higher timeframe candles with dema values largekandles = fn.dema(largekandles, 8); //lower timeframe candles with dema values inputkandles = fn.dema(inputkandles, 8); } else { //higher timeframe candles with smma values largekandles = fn.smma(largekandles, 8); //lower timeframe candles with smma values inputkandles = fn.smma(inputkandles, 8); } var closeseriesmma = inputkandles.Select(x => x.Close).ToList(); //map higher timeframe values to lower timeframe values var altkandles = fn.superimposekandles(largekandles, inputkandles); var closeSeriesAlt = altkandles.Select(x => x.Close).ToList(); var openSeriesAlt = altkandles.Select(x => x.Open).ToList(); //trend and mood calculation- strategyData.trend = closeSeriesAlt.Last() > openSeriesAlt.Last() ? "BULLISH" : "BEARISH"; strategyData.mood = closeseriesmma.Last() > openSeriesAlt.Last() ? "BULLISH" : "BEARISH"; //buy sell signal var xlong = fn.crossover(closeSeriesAlt, openSeriesAlt); var xshort = fn.crossunder(closeSeriesAlt, openSeriesAlt); strategyData.isBuy = xlong.Last(); strategyData.isSell = xshort.Last(); //historical data strategyData.histdata = ""; for (int i = 0; i < xlong.Count; i++) { if (xlong[i]) { strategyData.histdata += " B" + (xlong.Count - i - 1).ToString(); } else if (xshort[i]) { strategyData.histdata += " S" + (xlong.Count - i - 1).ToString(); } else { // meh :\ } } MakeBuySellDecision(ref strategyData, ref currentPosition, robotInput); if (strategyData.Output != StrategyOutput.None) { ResetCounters(); strategyData.profitFactor = 1m; } }