public bool CheckTradeAllowed(SignalInfo signal) { var acc = todayStat.Accounts.Find(c => c.Number == signal.ObjectId); if (acc != null) { var balance = new decimal(0); decimal.TryParse((string)signal.Data, out balance); if (balance > 0) { acc.Balance = balance; } CheckRiskForAccount(ref acc); signal.Value = acc.StopTrading ? 1 : 0; signal.SetData(acc.StopReason); if (acc.StopTrading && !string.IsNullOrEmpty(acc.StopReason)) { var log = Program.Container.Resolve <IWebLog>(); if (log != null) { log.Log(acc.StopReason); } } return(acc.StopTrading); } return(true); }
public ActionResult ClosePosition([FromQuery] int account, [FromQuery] int Magic, [FromQuery] int Ticket) { try { SignalInfo signalPos = null; if (Ticket > 0) { signalPos = MainService.CreateSignal(SignalFlags.Terminal, account, EnumSignals.SIGNAL_CLOSE_POSITION, 0); } else { signalPos = MainService.CreateSignal(SignalFlags.Expert, Magic, EnumSignals.SIGNAL_CLOSE_POSITION, 0); } signalPos.Value = Ticket; signalPos.SetData(Magic.ToString()); //signalPos.Data = Magic.ToString(); MainService.PostSignalTo(signalPos); var terminals = MainService.Container.Resolve <ITerminalEvents>(); if (terminals != null) { terminals.DeletePosition(Ticket); } return(Ok()); } catch (Exception e) { log.Error(e.ToString()); return(Problem(e.ToString(), "Error", StatusCodes.Status500InternalServerError)); } }
public SignalInfo SendSignal(SignalInfo signal) { SignalInfo result = null; switch ((EnumSignals)signal.Id) { case EnumSignals.SIGNAL_POST_LOG: { if (signal.Data == null) { break; } DoLog(signal); result = signal; } break; case EnumSignals.SIGNAL_INIT_EXPERT: if (signal.Data != null) { var ei = JsonConvert.DeserializeObject <ExpertInfo>(signal.Data.ToString()); var expertInfo = InitExpert(ei); result = CreateSignal(SignalFlags.Expert, signal.ObjectId, (EnumSignals)signal.Id, signal.ChartId); result.SetData(JsonConvert.SerializeObject(expertInfo)); } break; case EnumSignals.SIGNAL_INIT_TERMINAL: if (signal.Data != null) { var ei = JsonConvert.DeserializeObject <ExpertInfo>(signal.Data.ToString()); var expertInfo = InitTerminal(ei); result = CreateSignal(SignalFlags.Expert, signal.ObjectId, (EnumSignals)signal.Id, signal.ChartId); result.SetData(JsonConvert.SerializeObject(expertInfo)); } break; case EnumSignals.SIGNAL_TODAYS_STAT: { var ds = Container.Resolve <ITerminalEvents>(); if (ds == null) { break; } result = CreateSignal(SignalFlags.Expert, signal.ObjectId, (EnumSignals)signal.Id, signal.ChartId); var stat = ds.GetTodayStat(); result.SetData(JsonConvert.SerializeObject(stat)); } break; case EnumSignals.SIGNAL_CHECK_TRADEALLOWED: { var ds = Container.Resolve <ITerminalEvents>(); if (ds == null && signal.Data == null) { break; } var info = Utils.ExtractList <BalanceInfo>(signal.Data); if (Utils.HasAny(info)) { BalanceInfo balanceInfo = info.FirstOrDefault(); signal.SetData(balanceInfo.ToString()); ds.GetTodayStat(); ds.CheckTradeAllowed(signal); result = signal; } } break; case EnumSignals.SIGNAL_GETMAINLOGPATH: { var path = GetGlobalProp(xtradeConstants.SETTINGS_PROPERTY_INSTALLDIR); //var di = new DirectoryInfo(path); //if (!di.Exists) // path = MainLogFilePath; path = Path.Combine(path, "FinCore.MainServer.log"); signal.SetData(path); result = signal; } break; case EnumSignals.SIGNAL_LEVELS4SYMBOL: { var symbol = signal.Data.ToString(); var levelsString = Levels4Symbol(symbol); result = CreateSignal(SignalFlags.Expert, signal.ObjectId, (EnumSignals)signal.Id, signal.ChartId); result.SetData(levelsString); } break; } return(result); }