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