Esempio n. 1
0
        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);
                }
            }
        }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
        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;
            }
        }
Esempio n. 4
0
        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;
        }
Esempio n. 5
0
        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);
        }