public void EnqueueUpdateVm(int botID)
        {
            if (!IsNeedSenUserPosLog(botID))
            {
                return;
            }

            var res = _dictBotIdConnId.FirstOrDefault(a => a.Key == botID);

            if (res.Key == 0)
            {
                return;               //not found
            }
            int connId = res.Value;


            CUserVMUpdate updateVM = new CUserVMUpdate();
            CBotTrader    bot      = _dictKBotIdVBotTrader[botID];

            lock (bot.DictVMBotSessionTotalClosed)
            {
                foreach (var kvp in bot.DictVMBotSessionTotalClosed)
                {
                    updateVM.ListVM.Add(new CUserVmInstrumentRecord {
                        Isin = kvp.Key, VM = kvp.Value
                    });
                }

                updateVM.VMStockRecord = new CUserVMStockRecord
                {
                    StockName = CodesStockExch.GetStockName(_stockExchId),
                    TotalVM   = bot.VMAllInstrClosed
                };
            }

            _bqTraderData.Add(new CTradingData
            {
                ConnId = connId,
                Data   = (object)updateVM,
                Event  = enmTradingEvent.UserUpdateVM
            }
                              );
        }
示例#2
0
        /* private object GeSettingsSupervisor(XmlNode node)
         * {
         *
         *   XmlNodeList xnList = node.SelectNodes("StrategySettings/limits/limit");
         *   CBotSupervisorSettings bss = new CBotSupervisorSettings();
         *   foreach (XmlNode lim in xnList)
         *   {
         *       string isin = lim.Attributes["isin"].Value.ToString();
         *
         *       bss.DictInstrumentLimits[isin] = new CBotSupervisorInstrumentLimits();
         *       bss.DictInstrumentLimits[isin].MaxOpenedPos = Convert.ToInt32(lim.Attributes["MaxOpenedPos"].Value.ToString());
         *       bss.DictInstrumentLimits[isin].MaxLossVM = Convert.ToDecimal(lim.Attributes["MaxLossVM"].Value.ToString());
         *   }
         *
         *   return (object)bss;
         *
         * }
         */


        public void CreateOneBotFromConfig(Dictionary <string, object> botConfig, List <Dictionary <string, object> > lstBotsInstrumentsConfig, int num, ref List <CBotBase> listBots,
                                           bool needSynchroOnLoad)
        {
            try
            {
                Log("Start CreateOneBotFromConfig");
                string type = (string)botConfig["type"];

                bool bEnabled        = Convert.ToBoolean(botConfig["Enabled"].ToString());
                bool bExternal       = Convert.ToBoolean(botConfig["External"].ToString());
                bool bNeedTFAnalyzer = Convert.ToBoolean(botConfig["NeedTFAnalyzer"].ToString());

                decimal maxLossVMClosedTotal = Convert.ToDecimal(botConfig["MaxLossVMClosedTotal"]);

                int StockExhId = Convert.ToInt16(botConfig["StockExchId"]);


                System.Xml.XmlDocument document = new System.Xml.XmlDocument();
                document.LoadXml((string)botConfig["StrategySettings"]);


                XmlNode xmlNLStrategySettings = document.SelectSingleNode("StrategySettings");

                Dictionary <string, string> dictSettingsStrategy = new Dictionary <string, string>();
                foreach (XmlNode nd in xmlNLStrategySettings)
                {
                    dictSettingsStrategy[nd.Name] = nd.InnerText;
                }

                enmStrategysCode code = m_dictBotNameCode[type];



                string botName = GenerateBotName(type, num);



                Dictionary <string, CBotLimits>       dictBotIsinLimits        = new Dictionary <string, CBotLimits>();
                Dictionary <string, CTradingSettings> dictBotIsinTradeSettings = new Dictionary <string, CTradingSettings>();



                var res = lstBotsInstrumentsConfig.FindAll(a => (int)a["BotId"] == num);
                if (res != null)
                {
                    List <string> listIsins = new List <string>();


                    foreach (var instConf in res)
                    {
                        string instrument = (string)instConf["Instrument"];
                        dictBotIsinLimits[instrument] = new CBotLimits((int)instConf["MaxSendOrderRuntime"],
                                                                       (int)instConf["MaxPosition"],
                                                                       (int)instConf["MaxAddedOrder"],
                                                                       (decimal)instConf["MaxLossVM"]);

                        long SL  = 0;
                        long TP  = 0;
                        int  lot = 0;

                        if (instConf["StopLoss"] != null)
                        {
                            SL = Convert.ToInt32(instConf["StopLoss"]);
                        }

                        if (instConf["TakeProfit"] != null)
                        {
                            TP = Convert.ToInt32(instConf["TakeProfit"]);
                        }

                        if (instConf["Lot"] != null)
                        {
                            lot = Convert.ToInt32(instConf["Lot"]);
                        }


                        dictBotIsinTradeSettings[instrument] = new CTradingSettings(SL, TP, lot);

                        listIsins.Add(instrument);
                    }



                    CSettingsBot settingsBot = new CSettingsBot(code, bEnabled, listIsins, dictBotIsinLimits,
                                                                dictBotIsinTradeSettings, bExternal, bNeedTFAnalyzer, maxLossVMClosedTotal);


                    object stratSettings = null;
                    settingsBot.StrategySettings = stratSettings;


                    CBotBase bot = null;
                    if (!bExternal)
                    {
                        if (code == enmStrategysCode.StrategyTest)
                        {
                            bot = new CBotTester(num, botName, settingsBot, dictSettingsStrategy, _dealingServer);
                        }
                        else if (code == enmStrategysCode.StrategyTesterPos)
                        {
                            bot = new CBotTesterPos(num, botName, settingsBot, dictSettingsStrategy, _dealingServer);
                        }
                        else if (code == enmStrategysCode.StrategyHighLowContra)
                        {
                            bot = new CBotHighLowContra(num, botName, settingsBot, dictSettingsStrategy, _dealingServer);
                        }
                        else if (code == enmStrategysCode.StrategyTesterCrossFirst)
                        {
                            bot = new CBotTesterCrossFirst(num, botName, settingsBot, dictSettingsStrategy, _dealingServer);
                        }
                        else if (code == enmStrategysCode.StrategyTesterCrossSecond)
                        {
                            bot = new CBotTesterCrossSecond(num, botName, settingsBot, dictSettingsStrategy, _dealingServer);
                        }
                        else if (code == enmStrategysCode.StrategyTesterLimits)
                        {
                            bot = new CBotTesterLimits(num, botName, settingsBot, dictSettingsStrategy, _dealingServer);
                        }
                        else if (code == enmStrategysCode.StrategyTrader)
                        {
                            bot = new CBotTrader(num, botName, settingsBot, dictSettingsStrategy, _dealingServer);
                        }

                        Log("Created bot num=" + num + " botName=" + botName);
                        //listBots.Last().Start();
                    }
                    else
                    {
                        // if (code == enmStrategysCode.StrategyTesterExternal)
                        //   bot = CreateExternalBot(num, type, botName, settingsBot, dictSettingsStrategy, typeof(CBotTesterExternal).Assembly);
                    }

                    if (bot != null)
                    {
                        listBots.Add(bot);
                        _dealingServer.DictBots[bot.BotId] = bot;
                        bot.Start();
                        if (needSynchroOnLoad)
                        {
                            bot.SynchronizeOnBotReload();
                        }
                        //listBots.Last().Start();
                    }
                    Log("End CreateOneBotFromConfig");


                    ;
                }



                /*
                 * XmlNodeList xnList = botXML.SelectNodes("isins/isin");
                 *
                 *
                 * List<string> listIsins = new List<string>();
                 * Dictionary<string, CBotLimits> dictBotIsinLimits = new Dictionary<string, CBotLimits>();
                 * Dictionary<string, CTradingSettings> dictBotIsinTradeSettings = new Dictionary<string, CTradingSettings>();
                 * foreach (XmlNode lst in xnList)
                 * {
                 *  string isin = lst.InnerText;
                 *  listIsins.Add(isin);
                 *
                 *  dictBotIsinLimits[isin] = new CBotLimits(lst.Attributes["MaxSendOrderRuntime"].Value.ToString(), lst.Attributes["MaxPosition"].Value.ToString(),
                 *                                               lst.Attributes["MaxAddedOrder"].Value.ToString(), lst.Attributes["MaxLossVM"].Value.ToString());
                 *
                 *
                 *  long SL = 0;
                 *  long TP = 0;
                 *  int lot = 0;
                 *  if (lst.Attributes["StopLoss"] != null)
                 *      SL = Convert.ToInt32((lst.Attributes["StopLoss"].Value.ToString()));
                 *
                 *  if (lst.Attributes["TakeProfit"] != null)
                 *      TP = Convert.ToInt32((lst.Attributes["TakeProfit"].Value.ToString()));
                 *
                 *  if (lst.Attributes["Lot"] != null)
                 *      lot = Convert.ToInt32((lst.Attributes["Lot"].Value.ToString()));
                 *
                 *
                 *  dictBotIsinTradeSettings[isin] = new CTradingSettings(SL, TP, lot);
                 *
                 * }
                 *
                 * object stratSettings = null;
                 * //if (type == "Supervisor") stratSettings = GeSettingsSupervisor(botXML);
                 *
                 *
                 *
                 * XmlNode xmlNLStrategySettings = botXML.SelectSingleNode("StrategySettings");
                 * Dictionary<string, string> dictSettingsStrategy = new Dictionary<string, string>();
                 * foreach (XmlNode nd in xmlNLStrategySettings)
                 *  dictSettingsStrategy[nd.Name] = nd.InnerText;
                 *
                 *
                 *
                 * CSettingsBot settingsBot = new CSettingsBot(code, bEnabled, listIsins, dictBotIsinLimits,
                 *                                          dictBotIsinTradeSettings, bExternal, bNeedTFAnalyzer,maxLossVMClosedTotal);
                 * settingsBot.StrategySettings = stratSettings;
                 * //--- exp ------
                 *
                 *
                 * CBotBase bot = null;
                 *
                 * //TO DO refactor it
                 * //-----------
                 * if (!bExternal)
                 * {
                 *  if (code == enmStrategysCode.StrategyTest)
                 *      bot = new CBotTester(num, botName, settingsBot, dictSettingsStrategy, _dealingServer);
                 *  else if (code == enmStrategysCode.StrategyTesterPos)
                 *      bot = new CBotTesterPos(num, botName, settingsBot, dictSettingsStrategy, _dealingServer);
                 *  else if (code == enmStrategysCode.StrategyHighLowContra)
                 *      bot = new CBotHighLowContra(num, botName, settingsBot, dictSettingsStrategy, _dealingServer);
                 *  else if (code == enmStrategysCode.StrategyTesterCrossFirst)
                 *      bot = new CBotTesterCrossFirst(num, botName, settingsBot, dictSettingsStrategy, _dealingServer);
                 *  else if (code == enmStrategysCode.StrategyTesterCrossSecond)
                 *      bot = new CBotTesterCrossSecond(num, botName, settingsBot, dictSettingsStrategy, _dealingServer);
                 *  else if (code == enmStrategysCode.StrategyTesterLimits)
                 *      bot = new CBotTesterLimits(num, botName, settingsBot, dictSettingsStrategy, _dealingServer);
                 *  else if (code == enmStrategysCode.StrategyTrader)
                 *      bot = new CBotTrader (num, botName, settingsBot, dictSettingsStrategy, _dealingServer);
                 *
                 *                      Log("Created bot num="+num+" botName="+botName);
                 *  //listBots.Last().Start();
                 * }
                 * else
                 * {
                 * // if (code == enmStrategysCode.StrategyTesterExternal)
                 *   //   bot = CreateExternalBot(num, type, botName, settingsBot, dictSettingsStrategy, typeof(CBotTesterExternal).Assembly);
                 *
                 * }
                 *
                 * if (bot != null)
                 * {
                 *  listBots.Add(bot);
                 *  _dealingServer.DictBots[bot.BotId] = bot;
                 *  bot.Start();
                 *  if (needSynchroOnLoad)
                 *      bot.SynchronizeOnBotReload();
                 *  //listBots.Last().Start();
                 *
                 * }
                 *              Log("End CreateOneBotFromConfig");
                 */
            }
            catch (Exception e)
            {
                Error("CBotFactory.CreateOneBotFromConfig", e);
            }
        }