private void transferToTarget(long targetFromPosition, long targetToPosition, OkexFutureContractType fromContract, OkexFutureContractType toContract) { long curFromPosition = getAvailablePositionByContract(m_instrument, fromContract, m_tradeDirection);// - getOrderedPositionByContract(m_spotContract, true); //long curTargetForwardPosition = getPositionByContract(m_instrument, toContract, m_tradeDirection) // + getOrderedPositionByContract(m_instrument, toContract, m_tradeDirection, true); if (curFromPosition > targetFromPosition) { long targetVol = curFromPosition - targetFromPosition; OkexFutureDepthData fromDD = OkexFutureTrader.Instance.getMarketDepthData(m_instrument, fromContract); OkexFutureDepthData toDD = OkexFutureTrader.Instance.getMarketDepthData(m_instrument, toContract); if (m_tradeDirection == OkexFutureTradeDirectionType.FTD_Sell) { long bidVol = fromDD.bids[0].volume; long askVol = toDD.asks[0].volume; long vol = Math.Min(bidVol, askVol); vol = Math.Min(vol, targetVol); trade(m_instrument, fromContract, fromDD.bids[0].price, vol, OkexContractTradeType.TT_CloseBuy); trade(m_instrument, toContract, toDD.asks[0].price, vol, OkexContractTradeType.TT_OpenSell); } else { long askVol = fromDD.asks[0].volume; long bidVol = toDD.asks[0].volume; long vol = Math.Min(askVol, bidVol); vol = Math.Min(vol, targetVol); trade(m_instrument, fromContract, fromDD.asks[0].price, vol, OkexContractTradeType.TT_CloseSell); trade(m_instrument, toContract, toDD.bids[0].price, vol, OkexContractTradeType.TT_OpenBuy); } } }
private void queryDepthData() { OkexFutureDepthData dd = OkexFutureTrader.Instance.getMarketDepthData(m_instrument, m_contract); if (dd != null) { dd.receiveTimestamp = DateUtil.getCurTimestamp();//System.Environment.TickCount; MarketDataMgr.Instance.saveDepthData(m_instrument, m_contract, dd); } }
private void queryDepthData(OkexFutureInstrumentType instrument, OkexFutureContractType contract) { OkexFutureDepthData dd = OkexFutureTrader.Instance.getMarketDepthData(instrument, contract); if (dd != null) { //saveDepthData(instrument, contract, ref dd); m_depthData[instrument][contract] = dd; } }
public void saveDepthData(OkexFutureInstrumentType instrument, OkexFutureContractType contract, OkexFutureDepthData depthData) { if (!m_depthData.ContainsKey(instrument)) { ConcurrentDictionary <OkexFutureContractType, OkexFutureDepthData> ddMap = new ConcurrentDictionary <OkexFutureContractType, OkexFutureDepthData>(); m_depthData.TryAdd(instrument, ddMap); } m_depthData[instrument][contract] = depthData; }
public OkexFutureDepthData getDepthDataWithTimeLimit(OkexFutureInstrumentType instrument, OkexFutureContractType contract, long limitMillisec) { OkexFutureDepthData dd = getDepthData(instrument, contract); if (dd == null) { return(null); } long curTimestamp = DateUtil.getCurTimestamp(); if (curTimestamp - dd.receiveTimestamp - GlobalSetting.marketDataBias > limitMillisec) { return(null); } return(dd); }