Esempio n. 1
0
        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;
            }
        }