: | : | :期货量化学习 | :期货量化 |
返回列表 发帖

鼎元C++程序化交易系统教程【跟交易相关的发单,撤单,重发,优先平今或优先平昨等程式码】

鼎元C++程序化交易系统教程【跟交易相关的发单,撤单,重发,优先平今或优先平昨等程式码】

程式码:
  1. void test::OnRtnOrder(CThostFtdcOrderField t)
  2. {

  3.         mapOrder[t.OrderLocalID] = t;
  4.         if (!mapMd.count(t.InstrumentID))SubscribeMarketData(t.InstrumentID);
  5.         if (state != "run")return;
  6.         if (t.MacAddress == sName)lstActionOrdrSysID.push_back(t.OrderLocalID);
  7.         if (t.OrderStatus == '5' && t.MacAddress == sName && sfcd == "1" && IsActionOrdrSysID(t.OrderLocalID)) chongfa(t);
  8.         if (t.OrderStatus == '5' && t.MacAddress != sName)
  9.         {
  10.                 string s1 = t.InstrumentID;
  11.                 string s = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "  非本策略撤单  " + s1 + "   委托单号   " + t.OrderSysID + "    " + t.MacAddress;
  12.                 InsertLog(s1);
  13.         }
  14. }

  15. void test::OnRtnTrade(CThostFtdcTradeField t)
  16. {
  17.         mapTrade[t.OrderSysID] = t;
  18.         if (state != "run")return;
  19.         if (t.InstrumentID == dyt && IsActionOrdrSysID(t.OrderLocalID)) dytcj = true;
  20.         if (t.InstrumentID == det && IsActionOrdrSysID(t.OrderLocalID))detcj = true;
  21.         if (dytcj && detcj && !tz)
  22.         {
  23.                 tz = true;
  24.                 OnState("stop");
  25.                 string s = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "      两腿都有成交,套利策略停止   ";
  26.                 InsertLog(s);
  27.         }
  28.         RsqPosition();
  29.         RsqPositionDetail(t.InvestorID);
  30. }

  31. void test::OnRsqBar(string sPeriod, string sInst, map<string, TKVALUE> mp)
  32. {

  33. }


  34. void test::OnBarOpen(TKVALUE t)
  35. {

  36. }

  37. void test::OnInstrument(CThostFtdcInstrumentField t)
  38. {

  39.         mapInstrument[t.InstrumentID] = t;

  40. }


  41. void test::OnRspQryOrder(map<string, CThostFtdcOrderField>* m)
  42. {
  43.         mapOrder = *m;
  44. }

  45. void test::OnRspQryTrade(map<string, CThostFtdcTradeField>* m)
  46. {
  47.         mapTrade = *m;
  48. }



  49. void test::OnPosition(map<string, map<string, TPOSITION>>* m)
  50. {
  51.         //InsertLog("     持仓回报   ");
  52.         mapPos = *m;
  53. }

  54. void test::OnPositionDetail(map<string, TDETAIL>* m)
  55. {
  56.         mapPosDeta = *m;
  57.         /*map<string, TDETAIL>::iterator it;
  58.         for (it = mapPosDeta.begin(); it != mapPosDeta.end(); it++)
  59.         {
  60.                 string s1 = "  编号  " + it->first + "  账户  " + it->second.sAcc + "   合约   " + it->second.sInst + "  方向  " + it->second.sBuySell + "  数量  " + to_string(it->second.nVol) + "    平仓数量    " + to_string(it->second.nCloseVol) + "  价格  " + to_string(it->second.dOpenPrice) + "  时间  " + it->second.sOpenDate;
  61.                 if (it->second.nVol - it->second.nCloseVol != 0)InsertLog(s1);
  62.         }*/
  63. }


  64. void test::OnCommissionRate(map<string, map<string, TCOMMISSION>>* m)
  65. {
  66.         //        InsertLog("     手续费回报   ");
  67.         mapCom = *m;
  68. }

  69. void test::OnAccount(map<string, CThostFtdcTradingAccountField>* m)
  70. {
  71.         //InsertLog("    资金回报    ");
  72.         mapAcc = *m;
  73. }

  74. void test::OnInstrumentStatus(CThostFtdcInstrumentStatusField* t)
  75. {
  76.         //        InsertLog("     状态改变汇报   ");
  77.                 /* if (state != "run")return;
  78.                  if (t.InstrumentID != sMainInst)return;
  79.                  string sInst = t.InstrumentID;
  80.                  string sTime = t.EnterTime;
  81.                  string status;
  82.                  if (t.InstrumentStatus == '0')status = "开盘前";
  83.                  if (t.InstrumentStatus == '1')status = "非交易";
  84.                  if (t.InstrumentStatus == '2')status = "连续交易";
  85.                  if (t.InstrumentStatus == '3')status = "集合竞价报单";
  86.                  if (t.InstrumentStatus == '4')status = "集合竞价价格平衡";
  87.                  if (t.InstrumentStatus == '5')status = "集合竞价撮合";
  88.                  if (t.InstrumentStatus == '6')status = "收盘";
  89.                  InsertLog(sTime + "--->>>" + sInst + ":" + status);*/
  90. }

  91. void test::OnInstrumentAll(map<string, CThostFtdcInstrumentField>* m)
  92. {
  93.         mapInstrument = *m;
  94. }

  95. void test::chedan()
  96. {
  97.         map<string, CThostFtdcOrderField>::iterator it;
  98.         for (it = mapOrder.begin(); it != mapOrder.end(); it++)
  99.         {
  100.                 if (it->second.MacAddress == sName)
  101.                 {
  102.                         if (it->second.OrderStatus == '3' || it->second.OrderStatus == '1')
  103.                         {
  104.                                 string bs;
  105.                                 string soc;
  106.                                 if (it->second.Direction == '0')bs = "买入";
  107.                                 if (it->second.Direction == '1')bs = "卖出";
  108.                                 if (it->second.CombOffsetFlag == "0")soc = "开仓";
  109.                                 if (it->second.CombOffsetFlag == "1")soc = "平仓";
  110.                                 if (it->second.CombOffsetFlag == "3")soc = "平今仓";
  111.                                 if (it->second.CombOffsetFlag == "4")soc = "平昨仓";
  112.                                 OrderAction(it->second);
  113.                                 string s1 = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "    " + it->second.InvestorID + "   有未成交委托,委托买卖方向   " + bs + soc + "    未成交数量委托数量    " + to_string((it->second.VolumeTotal - it->second.VolumeTraded)) + "    委托价格    " + to_string(it->second.LimitPrice) + "    " + it->second.InstrumentID;
  114.                                 maps[num] = s1;
  115.                                 num++;
  116.                                 lstActionOrdrSysID.push_back(it->second.OrderLocalID);
  117.                         }
  118.                 }
  119.         }
  120.         if (num != 0)shuchurizhi();

  121. }

  122. void test::shuchurizhi()
  123. {

  124.         map<int, string>::iterator it;
  125.         for (it = maps.begin(); it != maps.end(); it++)
  126.         {
  127.                 InsertLog(it->second);
  128.         }
  129.         maps.clear();
  130.         num = 0;

  131. }


  132. void test::chongfa(CThostFtdcOrderField t)
  133. {
  134.         string bs;
  135.         string soc;
  136.         if (t.Direction == '0')bs = "买入";
  137.         if (t.Direction == '1')bs = "卖出";
  138.         if (t.CombOffsetFlag == "0")soc = "开仓";
  139.         if (t.CombOffsetFlag == "1")soc = "平仓";
  140.         if (t.CombOffsetFlag == "3")soc = "平今仓";
  141.         if (t.CombOffsetFlag == "4")soc = "平昨仓";
  142.         char oc = t.CombOffsetFlag[0];
  143.         double dsj;
  144.         if (t.Direction == '0')
  145.         {
  146.                 dsj = mapMd[t.InstrumentID].AskPrice1;
  147.         }
  148.         else if (t.Direction == '1')
  149.         {
  150.                 dsj = mapMd[t.InstrumentID].BidPrice1;
  151.         }
  152.         OrderInsert(t.InvestorID, t.InstrumentID, t.Direction, oc, (t.VolumeTotal - t.VolumeTraded), dsj, "", "");
  153.         string s = t.InvestorID;
  154.         string s1 = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "    " + s + "   有撤单成功重发,重发委托买卖方向   " + bs + soc + "    未成交数量委托数量    " + to_string((t.VolumeTotal - t.VolumeTraded)) + "    重发价格    " + to_string(dsj) + "    " + t.InstrumentID;
  155.         InsertLog(s1);
  156. }



  157. //   卖出平仓  优先平昨仓
  158. void test::closesell1(string sInvestorID, string sName, int sl, double jg)
  159. {
  160.         //if (mapInstrument[sName].ExchangeID != "SHFE")
  161.         //{
  162.         //        OrderInsert(sInvestorID, sName, '1', '1', sl, jg, "", "");
  163.         //}
  164.         //else
  165.         //{
  166.         if (mapPos[sInvestorID][sName].nLongPosYd >= sl)
  167.         {
  168.                 OrderInsert(sInvestorID, sName, '1', '4', sl, jg, "", "");
  169.                 string s1 = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "    " + "  账户  " + sInvestorID + " 合约   " + sName + "  卖出平昨  " + to_string(sl) + "  手,账户持仓有多单今仓数量  " + to_string(mapPos[sInvestorID][sName].nLongPosTd) + "   手持有昨仓多单数量 " + to_string(mapPos[sInvestorID][sName].nLongPosYd);
  170.                 InsertLog(s1);
  171.         }
  172.         else if (mapPos[sInvestorID][sName].nLongPosYd > 0)
  173.         {
  174.                 OrderInsert(sInvestorID, sName, '1', '4', mapPos[sInvestorID][sName].nLongPosYd, jg, "", "");
  175.                 int jys2 = min(mapPos[sInvestorID][sName].nLongPosTd, sl - mapPos[sInvestorID][sName].nLongPosYd);
  176.                 if (mapPos[sInvestorID][sName].nLongPosTd > 0)
  177.                 {

  178.                         OrderInsert(sInvestorID, sName, '1', '3', jys2, jg, "", "");
  179.                 }
  180.                 string s1 = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "    " + "  账户  " + sInvestorID + " 合约   " + sName + "  卖出平昨  " + to_string(mapPos[sInvestorID][sName].nLongPosYd) + "  卖出平今仓  " + to_string(jys2) + "  手,账户持仓有多单今仓数量  " + to_string(mapPos[sInvestorID][sName].nLongPosTd) + "   手持有昨仓多单数量 " + to_string(mapPos[sInvestorID][sName].nLongPosYd);
  181.                 InsertLog(s1);
  182.         }
  183.         else if (mapPos[sInvestorID][sName].nLongPosTd > 0)
  184.         {
  185.                 int jys3 = min(sl, mapPos[sInvestorID][sName].nLongPosTd);
  186.                 OrderInsert(sInvestorID, sName, '1', '3', jys3, jg, "", "");
  187.                 string s1 = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "    " + "  账户  " + sInvestorID + " 合约   " + sName + "  卖出平今仓  " + to_string(jys3) + "  手,账户持仓有多单今仓数量  " + to_string(mapPos[sInvestorID][sName].nLongPosTd) + "   手持有昨仓多单数量 " + to_string(mapPos[sInvestorID][sName].nLongPosYd);
  188.                 InsertLog(s1);
  189.         }
  190.         else
  191.         {
  192.                 string s1 = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "    " + "  账户  " + sInvestorID + " 合约   " + sName + "  账户持仓有多单今仓数量  " + to_string(mapPos[sInvestorID][sName].nLongPosTd) + "   手持有昨仓多单数量 " + to_string(mapPos[sInvestorID][sName].nLongPosYd) + "  账户持仓有空单今仓数量  " + to_string(mapPos[sInvestorID][sName].nShortPosTd) + "   手持有昨仓空单数量 " + to_string(mapPos[sInvestorID][sName].nShortPosYd);;
  193.                 InsertLog(s1);
  194.         }
  195.         //        }



  196. }
  197. //  买入平仓 优先平昨仓
  198. void test::closebuy1(string sInvestorID, string sName, int sl, double jg)
  199. {

  200.         //if (mapInstrument[sName].ExchangeID != "SHFE")
  201.         //{
  202.         //        OrderInsert(sInvestorID, sName, '0', '1', sl, jg, "", "");
  203.         //}
  204.         //else
  205.         //{
  206.         if (mapPos[sInvestorID][sName].nShortPosYd >= sl)
  207.         {
  208.                 OrderInsert(sInvestorID, sName, '0', '4', sl, jg, "", "");
  209.                 string s1 = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "    " + "  账户  " + sInvestorID + " 合约   " + sName + "  买入平昨  " + to_string(sl) + "  手,账户持仓有空单今仓数量  " + to_string(mapPos[sInvestorID][sName].nShortPosTd) + "   手持有昨仓空单数量 " + to_string(mapPos[sInvestorID][sName].nShortPosYd);
  210.                 InsertLog(s1);
  211.         }
  212.         else if (mapPos[sInvestorID][sName].nShortPosYd > 0)
  213.         {
  214.                 OrderInsert(sInvestorID, sName, '0', '4', mapPos[sInvestorID][sName].nShortPosYd, jg, "", "");
  215.                 int jys2 = min(mapPos[sInvestorID][sName].nShortPosTd, sl - mapPos[sInvestorID][sName].nShortPosYd);
  216.                 if (mapPos[sInvestorID][sName].nShortPosTd > 0)
  217.                 {

  218.                         OrderInsert(sInvestorID, sName, '0', '3', jys2, jg, "", "");
  219.                 }
  220.                 string s1 = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "    " + "  账户  " + sInvestorID + " 合约   " + sName + "  买入平昨  " + to_string(mapPos[sInvestorID][sName].nShortPosYd) + "  买入平今仓  " + to_string(jys2) + "  手,账户持仓有空单今仓数量  " + to_string(mapPos[sInvestorID][sName].nShortPosTd) + "   手持有昨仓空单数量 " + to_string(mapPos[sInvestorID][sName].nShortPosYd);
  221.                 InsertLog(s1);
  222.         }
  223.         else if (mapPos[sInvestorID][sName].nShortPosTd > 0)
  224.         {
  225.                 int jys3 = min(mapPos[sInvestorID][sName].nShortPosTd, sl);
  226.                 OrderInsert(sInvestorID, sName, '0', '3', jys3, jg, "", "");
  227.                 string s1 = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "    " + "  账户  " + sInvestorID + " 合约   " + sName + "  买入平昨仓  " + to_string(jys3) + "  手,账户持仓有空单今仓数量  " + to_string(mapPos[sInvestorID][sName].nShortPosTd) + "   手持有昨仓空单数量 " + to_string(mapPos[sInvestorID][sName].nShortPosYd);
  228.                 InsertLog(s1);
  229.         }
  230.         else
  231.         {
  232.                 string s1 = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "    " + "  账户  " + sInvestorID + " 合约   " + sName + "  账户持仓有多单今仓数量  " + to_string(mapPos[sInvestorID][sName].nLongPosTd) + "   手持有昨仓多单数量 " + to_string(mapPos[sInvestorID][sName].nLongPosYd) + "  账户持仓有空单今仓数量  " + to_string(mapPos[sInvestorID][sName].nShortPosTd) + "   手持有昨仓空单数量 " + to_string(mapPos[sInvestorID][sName].nShortPosYd);;
  233.                 InsertLog(s1);
  234.         }
  235.         //        }
  236. }

  237. //   卖出平仓  优先平今仓
  238. void test::closesell2(string sInvestorID, string sName, int sl, double jg)
  239. {
  240.         //if (mapInstrument[sName].ExchangeID != "SHFE")
  241.         //{
  242.         //        OrderInsert(sInvestorID, sName, '1', '1', sl, jg, "", "");
  243.         //}
  244.         //else
  245.         //{
  246.         if (mapPos[sInvestorID][sName].nLongPosTd >= sl)
  247.         {
  248.                 OrderInsert(sInvestorID, sName, '1', '3', sl, jg, "", "");
  249.                 string s1 = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "    " + "  账户  " + sInvestorID + " 合约   " + sName + "  卖出平今  " + to_string(sl) + "  手,账户持仓有多单今仓数量  " + to_string(mapPos[sInvestorID][sName].nLongPosTd) + "   手持有昨仓多单数量 " + to_string(mapPos[sInvestorID][sName].nLongPosYd);
  250.                 InsertLog(s1);
  251.         }
  252.         else if (mapPos[sInvestorID][sName].nLongPosTd > 0)
  253.         {
  254.                 OrderInsert(sInvestorID, sName, '1', '3', mapPos[sInvestorID][sName].nLongPosTd, jg, "", "");
  255.                 int jys2 = min(mapPos[sInvestorID][sName].nLongPosYd, sl - mapPos[sInvestorID][sName].nLongPosTd);
  256.                 if (mapPos[sInvestorID][sName].nLongPosYd > 0)
  257.                 {
  258.                         OrderInsert(sInvestorID, sName, '1', '4', jys2, jg, "", "");
  259.                 }
  260.                 string s1 = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "    " + "  账户  " + sInvestorID + " 合约   " + sName + "  卖出平今  " + to_string(mapPos[sInvestorID][sName].nLongPosTd) + "  卖出平昨仓  " + to_string(jys2) + "  手,账户持仓有多单今仓数量  " + to_string(mapPos[sInvestorID][sName].nLongPosTd) + "   手持有昨仓多单数量 " + to_string(mapPos[sInvestorID][sName].nLongPosYd);
  261.                 InsertLog(s1);
  262.         }
  263.         else if (mapPos[sInvestorID][sName].nLongPosYd > 0)
  264.         {
  265.                 int jys3 = min(mapPos[sInvestorID][sName].nLongPosYd, sl);
  266.                 OrderInsert(sInvestorID, sName, '1', '4', jys3, jg, "", "");
  267.                 string s1 = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "    " + "  账户  " + sInvestorID + " 合约   " + sName + "  卖出平昨仓  " + to_string(jys3) + "  手,账户持仓有多单今仓数量  " + to_string(mapPos[sInvestorID][sName].nLongPosTd) + "   手持有昨仓多单数量 " + to_string(mapPos[sInvestorID][sName].nLongPosYd);
  268.                 InsertLog(s1);
  269.         }
  270.         else
  271.         {
  272.                 string s1 = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "    " + "  账户  " + sInvestorID + " 合约   " + sName + "  账户持仓有多单今仓数量  " + to_string(mapPos[sInvestorID][sName].nLongPosTd) + "   手持有昨仓多单数量 " + to_string(mapPos[sInvestorID][sName].nLongPosYd) + "  账户持仓有空单今仓数量  " + to_string(mapPos[sInvestorID][sName].nShortPosTd) + "   手持有昨仓空单数量 " + to_string(mapPos[sInvestorID][sName].nShortPosYd);;
  273.                 InsertLog(s1);
  274.         }
  275. }


  276. //
  277. //}
  278. //  买入平仓 优先平今仓
  279. void test::closebuy2(string sInvestorID, string sName, int sl, double jg)
  280. {

  281.         //if (mapInstrument[sName].ExchangeID != "SHFE")
  282.         //{
  283.         //        OrderInsert(sInvestorID, sName, '0', '1', sl, jg, "", "");
  284.         //}
  285.         //else
  286.         //{
  287.         if (mapPos[sInvestorID][sName].nShortPosTd >= sl)
  288.         {
  289.                 OrderInsert(sInvestorID, sName, '0', '3', sl, jg, "", "");
  290.                 string s1 = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "    " + "  账户  " + sInvestorID + " 合约   " + sName + "  买入平今  " + to_string(sl) + "  手,账户持仓有空单今仓数量  " + to_string(mapPos[sInvestorID][sName].nShortPosTd) + "   手持有昨仓空单数量 " + to_string(mapPos[sInvestorID][sName].nShortPosYd);
  291.                 InsertLog(s1);
  292.         }
  293.         else if (mapPos[sInvestorID][sName].nShortPosTd > 0)
  294.         {
  295.                 OrderInsert(sInvestorID, sName, '0', '3', mapPos[sInvestorID][sName].nShortPosTd, jg, "", "");
  296.                 int jys2 = min(mapPos[sInvestorID][sName].nShortPosYd, sl - mapPos[sInvestorID][sName].nShortPosTd);
  297.                 if (mapPos[sInvestorID][sName].nShortPosYd > 0)
  298.                 {
  299.                         OrderInsert(sInvestorID, sName, '0', '4', jys2, jg, "", "");
  300.                 }
  301.                 string s1 = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "    " + "  账户  " + sInvestorID + " 合约   " + sName + "  买入平今  " + to_string(mapPos[sInvestorID][sName].nShortPosTd) + "  买入平昨仓  " + to_string(jys2) + "  手,账户持仓有空单今仓数量  " + to_string(mapPos[sInvestorID][sName].nShortPosTd) + "   手持有昨仓空单数量 " + to_string(mapPos[sInvestorID][sName].nShortPosYd);
  302.                 InsertLog(s1);
  303.         }
  304.         else if (mapPos[sInvestorID][sName].nShortPosYd > 0)
  305.         {
  306.                 int jys2 = min(mapPos[sInvestorID][sName].nShortPosYd, sl);
  307.                 OrderInsert(sInvestorID, sName, '0', '4', jys2, jg, "", "");
  308.                 string s1 = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "    " + "  账户  " + sInvestorID + " 合约   " + sName + "  买入平昨仓  " + to_string(jys2) + "  手,账户持仓有空单今仓数量  " + to_string(mapPos[sInvestorID][sName].nShortPosTd) + "   手持有昨仓空单数量 " + to_string(mapPos[sInvestorID][sName].nShortPosYd);
  309.                 InsertLog(s1);
  310.         }
  311.         else
  312.         {
  313.                 string s1 = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "    " + "  账户  " + sInvestorID + " 合约   " + sName + "  账户持仓有多单今仓数量  " + to_string(mapPos[sInvestorID][sName].nLongPosTd) + "   手持有昨仓多单数量 " + to_string(mapPos[sInvestorID][sName].nLongPosYd) + "  账户持仓有空单今仓数量  " + to_string(mapPos[sInvestorID][sName].nShortPosTd) + "   手持有昨仓空单数量 " + to_string(mapPos[sInvestorID][sName].nShortPosYd);;
  314.                 InsertLog(s1);
  315.         }
  316. }
复制代码

论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
 
期货论坛 - 版权/免责声明   1.本站发布源码(包括函数、指标、策略等)均属开放源码,用意在于让使用者学习程序化语法撰写,使用者可以任意修改语法內容并调整参数。仅限用于个人学习使用,请勿转载、滥用,严禁私自连接实盘账户交易
  2.本站发布资讯(包括文章、视频、历史记录、教材、评论、资讯、交易方案等)均系转载自网络主流媒体,内容仅为作者当日个人观点,本网转载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网不对该类信息或数据做任何保证。不对您构成任何投资建议,不能依靠信息而取代自身独立判断,不对因使用本篇文章所诉信息或观点等导致的损失承担任何责任。
  3.本站发布资源(包括书籍、杂志、文档、软件等)均从互联网搜索而来,仅供个人免费交流学习,不可用作商业用途,本站不对显示的内容承担任何责任。请在下载后24小时内删除。如果喜欢,请购买正版,谢谢合作!
  4.龙听期货论坛原创文章属本网版权作品,转载须注明来源“龙听期货论坛”,违者本网将保留追究其相关法律责任的权力。本论坛除发布原创文章外,亦致力于优秀财经文章的交流分享,部分文章推送时若未能及时与原作者取得联系并涉及版权问题时,请及时联系删除。联系方式:http://www.qhlt.cn/thread-262-1-1.html
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

返回列表