Beispiel #1
0
        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);
        }
Beispiel #2
0
        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));
            }
        }
Beispiel #3
0
        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);
        }