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; } }
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); } }
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); } }
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(); } }
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); }
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; } }