/// <summary> /// This function dumps decision logs /// </summary> /// <param name="robotInput"></param> /// <param name="strategyData"></param> public static void DumpToLog(RobotInput robotInput, StrategyData strategyData) { string timeutc530 = DateTime.Now.ToUniversalTime().AddMinutes(330).ToString(); var skipReasons = ""; if (strategyData.SkipReasons != null && strategyData.SkipReasons.Count > 0) { foreach (var AvoidReason in strategyData.SkipReasons) { skipReasons += AvoidReason.ToString() + "\t"; } } string debuginfo = string.Format("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}\t{8}\t{9}\t{10}\t{11}\t{12}\t{13}", timeutc530, strategyData.Decision.ToString(), strategyData.DecisionType.ToString(), strategyData.currentClose, strategyData.DecisionType != StrategyDecision.None ? strategyData.Percentage : 0, strategyData.histdata, strategyData.BollingerUpperPercentage, strategyData.BollingerMiddlePercentage, strategyData.BollingerLowerPercentage, strategyData.SignalGap0, strategyData.SignalGap1, strategyData.trend, strategyData.mood, skipReasons); File.AppendAllLines(PrimaryLogPath, new[] { debuginfo }); File.AppendAllLines(SecondaryLogPath, new[] { debuginfo }); }
/// <summary> /// This function dumps to display /// </summary> /// <param name="strategyData"></param> /// <param name="order"></param> /// <param name="robotInput"></param> /// <param name="BollingerFactor"></param> /// <param name="LastAvoidReason"></param> /// <param name="cycleTime"></param> public static void DumpToConsole(StrategyData strategyData, SimplePosition order, RobotInput robotInput, decimal BollingerFactor, ref string LastAvoidReason, long cycleTime) { Console.Clear(); Console.WriteLine("\n\n--------------------------------------------------------------------------"); Console.WriteLine("\nMARKET DETAILS: \n"); //latest price Console.WriteLine("{0} : {1} \n", robotInput.symbol, strategyData.currentClose); Console.WriteLine("BBAND : {0}% {1}% {2}% {3}{4}{5}\n", strategyData.BollingerUpperPercentage, strategyData.BollingerMiddlePercentage, strategyData.BollingerLowerPercentage, strategyData.BollTopCrossed ? "*TOPCROSSED*" : "", strategyData.BollBottomCrossed ? "*BOTTOMCROSSED*" : "", strategyData.BollMiddleCrossed ? "*MIDDLECROSSED*" : "" ); //mood if (strategyData.mood == "BULLISH") { Console.Write("MOOD : [{0}] ", "UP"); } else if (strategyData.mood == "BEARISH") { Console.Write("MOOD : [{0}] ", "DOWN"); } else { Console.Write("MOOD : [{0}] ", ""); } //trend if (strategyData.trend == "BULLISH") { Console.WriteLine(" TREND : [{0}]\n", "UP"); } else if (strategyData.trend == "BEARISH") { Console.WriteLine(" TREND : [{0}]\n", "DOWN"); } else { Console.WriteLine("TREND : {0}\n", ""); } if (strategyData.PrevDecisionType == StrategyDecision.Buy && strategyData.LatestSignalStrength != 0) { //signal Console.WriteLine("DECISION : {0}{1} {2}% @STRENGTH OF {3}\n", strategyData.PrevDecision, strategyData.PrevDecisionType, 100 * strategyData.BuyCounter / strategyData.LatestSignalStrength, strategyData.LatestSignalStrength); } else if (strategyData.PrevDecisionType == StrategyDecision.Sell && strategyData.LatestSignalStrength != 0) { Console.WriteLine("DECISION : {0}{1} {2}% @STRENGTH OF {3}\n", strategyData.PrevDecision, strategyData.PrevDecisionType, 100 * strategyData.SellCounter / strategyData.LatestSignalStrength, strategyData.LatestSignalStrength); } else { Console.WriteLine("DECISION : {0}\n", "NO DECISION"); } Console.WriteLine("SGNLHISTORY :{0}\n", strategyData.histdata); if (strategyData.SkipReasons != null && strategyData.SkipReasons.Count > 0) { LastAvoidReason = ""; foreach (var AvoidReason in strategyData.SkipReasons) { LastAvoidReason += AvoidReason.ToString() + " "; } } Console.WriteLine("SKIPHISTORY : {0}", LastAvoidReason); Console.WriteLine("\n--------------------------------------------------------------------------"); Console.WriteLine("\nORDER DETAILS: \n"); Console.WriteLine("TYPE {0} \n", order?.PositionType); Console.WriteLine("ENTRY PRICE {0} \n", order?.EntryPrice); if (order?.PositionType != PositionType.None) { Console.WriteLine("PERCENTAGE {0} \n", Math.Round(strategyData.Percentage, 3)); } Console.WriteLine("LIMITS > ADJPROFIT *{0}%* PROFIT *{1}%* LOSS *{2}%* BOLL *{3}%*\n", Math.Round(robotInput.reward * strategyData.profitFactor, 3), robotInput.reward, robotInput.risk, Math.Round(robotInput.reward * BollingerFactor, 3)); Console.WriteLine("LEVERAGE {0}x\n", robotInput.leverage); Console.WriteLine("--------------------------------------------------------------------------\n"); Console.WriteLine("Refresh Rate {0} milliseconds\n", cycleTime); }