コード例 #1
0
        public TrdGetHistoryOrderFillList.Response GetHistoryOrderFillListSync(ulong accID, TrdCommon.TrdMarket trdMarket, TrdCommon.TrdEnv trdEnv,
                                                                               TrdCommon.TrdFilterConditions filterConditions)
        {
            ReqInfo reqInfo   = null;
            Object  syncEvent = new Object();

            lock (syncEvent)
            {
                lock (trdLock)
                {
                    if (trdConnStatus != ConnStatus.READY)
                    {
                        return(null);
                    }
                    TrdCommon.TrdHeader trdHeader = MakeTrdHeader(trdEnv, accID, trdMarket);
                    TrdGetHistoryOrderFillList.C2S.Builder c2s = TrdGetHistoryOrderFillList.C2S.CreateBuilder()
                                                                 .SetHeader(trdHeader);
                    if (filterConditions != null)
                    {
                        c2s.SetFilterConditions(filterConditions);
                    }
                    TrdGetHistoryOrderFillList.Request req = TrdGetHistoryOrderFillList.Request.CreateBuilder().SetC2S(c2s).Build();
                    uint sn = trd.GetHistoryOrderFillList(req);
                    if (sn == 0)
                    {
                        return(null);
                    }
                    reqInfo = new ReqInfo(ProtoID.TrdGetHistoryOrderFillList, syncEvent);
                    trdReqInfoMap.Add(sn, reqInfo);
                }
                Monitor.Wait(syncEvent);
                return((TrdGetHistoryOrderFillList.Response)reqInfo.Rsp);
            }
        }
コード例 #2
0
        public TrdGetPositionList.Response GetPositionListSync(ulong accID, TrdCommon.TrdMarket trdMarket, TrdCommon.TrdEnv trdEnv,
                                                               TrdCommon.TrdFilterConditions filterConditions,
                                                               double?filterPLRatioMin,
                                                               double?filterPLRatioMax,
                                                               bool isRefreshCache)
        {
            ReqInfo reqInfo   = null;
            Object  syncEvent = new Object();

            lock (syncEvent)
            {
                lock (trdLock)
                {
                    if (trdConnStatus != ConnStatus.READY)
                    {
                        return(null);
                    }
                    TrdCommon.TrdHeader            trdHeader = MakeTrdHeader(trdEnv, accID, trdMarket);
                    TrdGetPositionList.C2S.Builder c2s       = TrdGetPositionList.C2S.CreateBuilder()
                                                               .SetHeader(trdHeader);
                    if (filterConditions != null)
                    {
                        c2s.SetFilterConditions(filterConditions);
                    }
                    if (filterPLRatioMin.HasValue)
                    {
                        c2s.SetFilterPLRatioMin(filterPLRatioMin.Value);
                    }
                    if (filterPLRatioMax.HasValue)
                    {
                        c2s.SetFilterPLRatioMax(filterPLRatioMax.Value);
                    }
                    c2s.SetRefreshCache(isRefreshCache);
                    TrdGetPositionList.Request req = TrdGetPositionList.Request.CreateBuilder().SetC2S(c2s).Build();
                    uint sn = trd.GetPositionList(req);
                    if (sn == 0)
                    {
                        return(null);
                    }
                    reqInfo = new ReqInfo(ProtoID.TrdGetPositionList, syncEvent);
                    trdReqInfoMap.Add(sn, reqInfo);
                }
                Monitor.Wait(syncEvent);
                return((TrdGetPositionList.Response)reqInfo.Rsp);
            }
        }
コード例 #3
0
        public TrdGetOrderList.Response GetOrderListSync(ulong accID, TrdCommon.TrdMarket trdMarket, TrdCommon.TrdEnv trdEnv,
                                                         bool isRefreshCache,
                                                         TrdCommon.TrdFilterConditions filterConditions,
                                                         List <TrdCommon.OrderStatus> filterStatusList)
        {
            ReqInfo reqInfo   = null;
            Object  syncEvent = new Object();

            lock (syncEvent)
            {
                lock (trdLock)
                {
                    if (trdConnStatus != ConnStatus.READY)
                    {
                        return(null);
                    }
                    TrdCommon.TrdHeader         trdHeader = MakeTrdHeader(trdEnv, accID, trdMarket);
                    TrdGetOrderList.C2S.Builder c2s       = TrdGetOrderList.C2S.CreateBuilder()
                                                            .SetHeader(trdHeader)
                                                            .SetRefreshCache(isRefreshCache);
                    if (filterConditions != null)
                    {
                        c2s.SetFilterConditions(filterConditions);
                    }
                    if (filterStatusList.Count > 0)
                    {
                        foreach (TrdCommon.OrderStatus status in filterStatusList)
                        {
                            c2s.AddFilterStatusList((int)status);
                        }
                    }
                    TrdGetOrderList.Request req = TrdGetOrderList.Request.CreateBuilder().SetC2S(c2s).Build();
                    uint sn = trd.GetOrderList(req);
                    if (sn == 0)
                    {
                        return(null);
                    }
                    reqInfo = new ReqInfo(ProtoID.TrdGetOrderList, syncEvent);
                    trdReqInfoMap.Add(sn, reqInfo);
                }
                Monitor.Wait(syncEvent);
                return((TrdGetOrderList.Response)reqInfo.Rsp);
            }
        }
コード例 #4
0
        void Run(ulong trdAcc, String unlockTrdPwdMD5, TrdCommon.TrdMarket trdMarket,
                 TrdCommon.TrdEnv trdEnv,
                 QotCommon.Security sec)
        {
            if (sec.Market != (int)QotCommon.QotMarket.QotMarket_HK_Security &&
                sec.Market != (int)QotCommon.QotMarket.QotMarket_US_Security)
            {
                Console.Error.WriteLine("unsupported stock market");
                return;
            }
            bool ret = InitConnectTrdSync(Config.OpendIP, Config.OpendPort);

            if (!ret)
            {
                Console.Error.WriteLine("fail to connect trd");
                return;
            }
            ret = InitConnectQotSync(Config.OpendIP, Config.OpendPort);
            if (!ret)
            {
                Console.Error.WriteLine("fail to connect qot");
                return;
            }

            TrdUnlockTrade.Response unlockTrdRsp = UnlockTradeSync(unlockTrdPwdMD5, true);
            if (unlockTrdRsp.RetType != (int)Common.RetType.RetType_Succeed)
            {
                Console.Error.Write("fail to unlock trade; retType={0} msg={1}\n", unlockTrdRsp.RetType, unlockTrdRsp.RetMsg);
                return;
            }

            DateTime now       = DateTime.Now;
            DateTime startDate = now.Subtract(new TimeSpan(100, 0, 0, 0));

            QotRequestHistoryKL.Response historyKLRsp = RequestHistoryKLSync(sec, QotCommon.KLType.KLType_Day,
                                                                             QotCommon.RehabType.RehabType_Forward,
                                                                             startDate.ToString("yyyy-MM-dd"),
                                                                             now.ToString("yyyy-MM-dd"),
                                                                             1000,
                                                                             null,
                                                                             new byte[] {},
                                                                             false);
            List <double> klCloseList = new List <double>();
            List <double> difList     = new List <double>();
            List <double> deaList     = new List <double>();
            List <double> macdList    = new List <double>();

            foreach (QotCommon.KLine kl in historyKLRsp.S2C.KlListList)
            {
                klCloseList.Add(kl.ClosePrice);
            }
            MACDUtil.CalcMACD(klCloseList, 12, 26, 9, difList, deaList, macdList);
            int difCount = difList.Count;
            int deaCount = deaList.Count;

            if (difCount > 0 && deaCount > 0)
            {
                if (difList[difCount - 1] < deaList[deaCount - 1] &&
                    difList[difCount - 2] > deaList[deaCount - 2])
                {
                    TrdCommon.TrdFilterConditions filterConditions = TrdCommon.TrdFilterConditions.CreateBuilder()
                                                                     .AddCodeList(sec.Code)
                                                                     .Build();
                    TrdGetPositionList.Response getPositionListRsp = GetPositionListSync(trdAcc, trdMarket,
                                                                                         trdEnv, filterConditions, null, null, false);
                    if (getPositionListRsp.RetType != (int)Common.RetType.RetType_Succeed)
                    {
                        Console.Error.Write("getPositionListSync err; retType={0} msg={1}\n", getPositionListRsp.RetType,
                                            getPositionListRsp.RetMsg);
                        return;
                    }
                    foreach (TrdCommon.Position pstn in getPositionListRsp.S2C.PositionListList)
                    {
                        if (pstn.CanSellQty > 0)
                        {
                            Sell(sec, pstn, trdAcc, trdMarket, trdEnv);
                        }
                    }
                }
                else if (difList[difCount - 1] > deaList[deaCount - 1] &&
                         difList[difCount - 2] < deaList[deaCount - 2])
                {
                    Buy(sec, trdAcc, trdMarket, trdEnv);
                }
            }
        }
コード例 #5
0
        public void TradeHkTest()
        {
            bool ret = InitConnectTrdSync(Config.OpendIP, Config.OpendPort);

            if (!ret)
            {
                Console.Error.WriteLine("Fail to connect opend");
                return;
            }
            else
            {
                Console.WriteLine("trd connected");
            }

            TrdUnlockTrade.Response unlockTradeRsp = UnlockTradeSync(Config.UnlockTradePwdMd5, true);
            if (unlockTradeRsp.RetType != (int)Common.RetType.RetType_Succeed)
            {
                Console.Error.Write("unlockTradeSync err; retType={0} msg={1}\n", unlockTradeRsp.RetType, unlockTradeRsp.RetMsg);
            }
            else
            {
                Console.WriteLine("unlock succeed");
            }

            TrdGetFunds.Response getFundsRsp = GetFundsSync(Config.TrdAcc, TrdCommon.TrdMarket.TrdMarket_HK, TrdCommon.TrdEnv.TrdEnv_Real,
                                                            false, TrdCommon.Currency.Currency_Unknown);
            Console.Write("getFundsSync: {0}\n", getFundsRsp);

            TrdGetAccList.Response getAccListRsp = GetAccListSync(Config.UserID);
            Console.Write("getAccList: {0}\n", getAccListRsp);

            {
                TrdGetPositionList.Response getPositionListRsp = GetPositionListSync(Config.TrdAcc,
                                                                                     TrdCommon.TrdMarket.TrdMarket_HK,
                                                                                     TrdCommon.TrdEnv.TrdEnv_Real, null,
                                                                                     -50.0, 50.0, false);
                Console.Write("getPositionList: {0}\n", getPositionListRsp);
            }

            {
                TrdGetOrderList.Response getOrderListRsp = GetOrderListSync(Config.TrdAcc, TrdCommon.TrdMarket.TrdMarket_HK,
                                                                            TrdCommon.TrdEnv.TrdEnv_Real, false, null,
                                                                            new List <TrdCommon.OrderStatus> {
                    TrdCommon.OrderStatus.OrderStatus_Submitted
                });
                Console.Write("getOrderList: {0}\n", getOrderListRsp);
            }

            {
                TrdCommon.TrdHeader header = TrdCommon.TrdHeader.CreateBuilder()
                                             .SetTrdEnv((int)TrdCommon.TrdEnv.TrdEnv_Real)
                                             .SetAccID(Config.TrdAcc)
                                             .SetTrdMarket((int)TrdCommon.TrdMarket.TrdMarket_HK)
                                             .Build();
                TrdPlaceOrder.C2S c2s = TrdPlaceOrder.C2S.CreateBuilder()
                                        .SetPacketID(trd.NextPacketID())
                                        .SetHeader(header)
                                        .SetTrdSide((int)TrdCommon.TrdSide.TrdSide_Sell)
                                        .SetOrderType((int)TrdCommon.OrderType.OrderType_Normal)
                                        .SetCode("00700")
                                        .SetQty(100)
                                        .SetPrice(700)
                                        .SetAdjustPrice(true)
                                        .SetSecMarket((int)TrdCommon.TrdSecMarket.TrdSecMarket_HK)
                                        .Build();
                TrdPlaceOrder.Response placeOrderRsp = PlaceOrderSync(c2s);
                Console.Write("placeOrder: {0}\n", placeOrderRsp);
            }

            {
                TrdCommon.TrdFilterConditions filterConditions = TrdCommon.TrdFilterConditions.CreateBuilder()
                                                                 .AddCodeList("00700")
                                                                 .Build();
                TrdGetOrderFillList.Response getOrderFillListRsp = GetOrderFillListSync(Config.TrdAcc,
                                                                                        TrdCommon.TrdMarket.TrdMarket_HK,
                                                                                        TrdCommon.TrdEnv.TrdEnv_Real, false, filterConditions);
                Console.Write("getOrderFillList: {0}\n", getOrderFillListRsp);
            }
        }