Exemplo n.º 1
0
        public StrategyHelper(Framework framework, SmartQuant.Strategy strategy)
        {
            this.framework = framework;
            this.strategy  = strategy;

            this.DualPositionContainer = new DualPositionContainer(framework);
            this.OpenCloseHelper       = new OpenCloseHelper(framework, strategy);
            this.PositionHelper        = new PositionHelper(framework);

            this.Strategies = new Dictionary <int, InstrumentStrategyHelper>();

            {
                // 创建多空两套持仓,只是显示用,实际上不以此为依据
                Long = new Portfolio(framework, strategy.Name + "_Long");
                framework.PortfolioManager.Add(Long);
                Long.Parent = strategy.Portfolio;

                Short = new Portfolio(framework, strategy.Name + "_Short");
                framework.PortfolioManager.Add(Short);
                Short.Parent = strategy.Portfolio;
            }

            {
                // 在实际下单时需要使用指定所操作的Portfolio
                OpenCloseHelper.Long  = Long;
                OpenCloseHelper.Short = Short;
            }
        }
Exemplo n.º 2
0
        public void DualPositionToPortfolio(DualPositionContainer dualPosition, Portfolio Net)
        {
            foreach (var kv in dualPosition.Positions)
            {
                Instrument instrument = framework.InstrumentManager.GetById(kv.Key);
                if (instrument == null)
                {
                    continue;
                }
                kv.Value.Instrument = instrument;

                QtyToNet(instrument,
                         kv.Value.Long.Qty - kv.Value.Short.Qty,
                         Net);
            }
        }
Exemplo n.º 3
0
        public void DualPositionToPortfolio(DualPositionContainer dualPosition, Portfolio Long, Portfolio Short)
        {
            foreach (var kv in dualPosition.Positions)
            {
                Instrument instrument = framework.InstrumentManager.GetById(kv.Key);
                if (instrument == null)
                {
                    continue;
                }
                // 从文件中还原出来,可能insrument丢失
                kv.Value.Instrument = instrument;

                QtyToLongShort(instrument,
                               kv.Value.Long.Qty, kv.Value.Short.Qty,
                               Long, Short);
            }
        }
Exemplo n.º 4
0
        public void ReadCsv(string path, DualPositionContainer container)
        {
            using (TextReader file = new StreamReader(File.Open(path, FileMode.Open, FileAccess.Read), Encoding.GetEncoding("GBK")))
            {
                int i = 0;
                // 第一行丢弃
                string str = file.ReadLine();
                do
                {
                    ++i;
                    str = file.ReadLine();
                    if (str == null)
                    {
                        break;
                    }

                    string[] arr = str.Split(',');

                    Instrument instrument = framework.InstrumentManager.Get(arr[0]);
                    if (instrument == null)
                    {
                        continue;
                    }

                    var record = container.GetPositionRecord(instrument);

                    MonoPositionRecord mpr = null;
                    if (arr[1].StartsWith("买"))
                    {
                        mpr = record.Long;
                    }
                    else
                    {
                        mpr = record.Short;
                    }

                    mpr.Qty      = double.Parse(arr[2]);
                    mpr.QtyToday = double.Parse(arr[3]);
                } while (str != null);
                file.Close();
            }
        }
Exemplo n.º 5
0
        public void SyncPosition(byte providerId, byte route, Portfolio Long, Portfolio Short, DualPositionContainer container)
        {
            var accountDataEntry = framework.AccountDataManager.GetSnapshot(providerId, route).Entries[0];

            AccountPositionToPortfolio(accountDataEntry.Positions, true, Long, Short);
            AccountPositionToDualPosition(accountDataEntry.Positions, true, container);
        }
Exemplo n.º 6
0
        public void AccountPositionToDualPosition(AccountData[] Positions, bool bOnlyToday, DualPositionContainer container)
        {
            foreach (var pos in Positions)
            {
                string     symbol     = (string)pos.Fields[AccountDataField.SYMBOL];
                Instrument instrument = framework.InstrumentManager.Get(symbol);
                if (instrument == null)
                {
                    continue;
                }

                int date = (int)pos.Fields[AccountDataFieldEx.DATE];
                if (bOnlyToday)
                {
                    if (date != TimeHelper.GetDate(DateTime.Today))
                    {
                        continue;
                    }
                }

                PositionFieldEx pfe = (PositionFieldEx)pos.Fields[AccountDataFieldEx.USER_DATA];

                var record = container.GetPositionRecord(instrument);
                record.Long.Qty       = pfe.Long.Position;
                record.Long.QtyToday  = pfe.Long.TodayPosition;
                record.Short.Qty      = pfe.Short.Position;
                record.Short.QtyToday = pfe.Short.TodayPosition;
            }
        }