: | : | :期货程序化 | :期货程序化研究 | :期货量化学习 | :期货量化 |
返回列表 发帖

[文华源码] 经典白糖程序化交易模型源码[文华财经公式]

[文华源码] 经典白糖程序化交易模型源码[文华财经公式]

  1. //该模型模型不错,主要是一些高手提供出来给大家学习

  2. // 文华财经免费白糖
  3. BA:= BARPOS; // 当前K线位置(从1开始)
  4. VOL1:= IFELSE(LLV(VOL,0)=0, 1, INTPART(VOL*100)); // 从头到尾遍历。只要出现 成交量=0时,返回1。否则,返回VOL*100取整。
  5. HC:=LLV(IFELSE(H-C=0, 1000, H-C), 0); // 从头到尾遍历,寻找最小的 最高价与 收盘价的距离。默认当最高价= 最低价时,返回1000。
  6. CL:=LLV(IFELSE(C-L=0, 1000, ABS(C-L)), 0); // 从头到尾遍历,寻找最小的收盘价与最低价距离。
  7. CO:=LLV(IFELSE(C-O=0, 1000, ABS(C-O)), 0); // 从头到尾遍历,寻找最小的收盘价与 开盘价距离。
  8. ZXBD:=MIN(HC, MIN(CL, CO)); // 找当前周期之前的最小的HC, CL, CO。
  9. DFX:= REF(L, 2)=LLV(L,15) && REF(L,1)>REF(L,2) && L>REF(L,1) && REF(L,2)<=REF(L,3); // 是否上涨起点。原:“L>REF(L, 2)” 【参数】
  10. GFX:= REF(H, 2)=HHV(H,9) && REF(H,1)<REF(H,2) && H<REF(H,1) && REF(H,2)>=REF(H,3); // 是否下跌起点。 原:“H<REF(H, 2)” 【参数】
  11. DFXI:= VALUEWHEN(DFX, BA); // 取上涨起点的K线位置。若是上涨起点,则返回K线位置。反之返回前一个上涨起点的K线位置。
  12. GFXI:= VALUEWHEN(GFX, BA); // 跟上面类似,取下跌起点K线位置。
  13. DDP1:= VALUEWHEN(DFX, REF(L, 2)); // 取上涨起点的最低值。
  14. GDP1:= VALUEWHEN(GFX, REF(H, 2)); // 取下跌起点的最高值。
  15. DDP:= VALUEWHEN(DFX && DDP1<>REF(DDP1, 1), DDP1); // 取当前的上涨起点最低值。实际等于DDP1。
  16. GDP:= VALUEWHEN(GFX && GDP1<>REF(GDP1, 1), GDP1); // 取当前的下跌起点最高值。实际等于GDP1。
  17. DFX1I:= VALUEWHEN(DFX, REF(DFXI, 1)); // 取上涨起点的前一个上涨起点的K线位置。
  18. DFX1P:= VALUEWHEN(DFX, REF(DDP, BA-DFX1I)); // 取上涨起点的前一个上涨起点的K线位置的最低值。原"DFX1P:= VALUEWHEN(DFX, REF(DDP, BA-DFX1I+1));"。
  19. GFX1I:= VALUEWHEN(GFX, REF(GFXI, 1)); // 取下跌起点的前一个下跌起点的K线位置。
  20. GFX1P:= VALUEWHEN(GFX, REF(GDP,BA-GFX1I)); // 取下跌起点的前一下跌起点的K线位置的最高值。原"GFX1P:= VALUEWHEN(GFX, REF(GDP,BA-GFX1I+1));"。
  21. DFXP:= VALUEWHEN(DFX && DDP<>REF(DDP,1), MIN(DDP, MIN(DFX1P, REF(DDP, 1)))); // 取当前上涨起点最低值、前一个上涨起点值、上一个周期最低值中的最低值。
  22. GFXP:= VALUEWHEN(GFX && GDP<>REF(GDP,1), MAX(GDP, MAX(GFX1P, REF(GDP, 1)))); // 取当前下跌起点最高值、前一个下跌起点值、上一个周期最高值中的最高值。
  23. // ---------------------------------------抛物转向------------------------------------------
  24. SA:= SAR(4, 0.02, 0.2); // 抛物转向值 【参数】
  25. DZZ:= SA>0 && REF(SA, 1)<=0; // 抛物转向值是否上涨启动。原"SA>0 && NOT(REF(SA,1)>0) || BA=0"。
  26. GZZ:= SA<0 && REF(SA, 1)>=0; // 抛物转向值是否下跌启动。原"SA<0 && NOT(REF(SA,1)<0) || BA=0"。
  27. DZZI:= VALUEWHEN(DZZ, BA); // 返回抛物转向值上涨的K线位置。
  28. GZZI:= VALUEWHEN(GZZ, BA); // 返回抛物转向值下跌的K线位置。
  29. DZZ0I:= IFELSE(
  30. NOT(
  31.   VALUEWHEN(
  32.    DFX && REF(SA, 2)<0 && REF(L, 2)=LLV(L, BA-GZZI),  // 原"REF(L, 2)=LLV(L, BA-GZZI+1)"
  33.   BA-2)>=0
  34. ),
  35. 0,
  36. VALUEWHEN(
  37.   (DFX && REF(DZZ, 2)=1)
  38.   || (DFX && REF(SA, 2)<0 && REF(L, 2)=LLV(L, BA-GZZI)), // 原"REF(L, 2)=LLV(L, BA-GZZI+1)"
  39. BA-2)
  40. ); // 确认DFXI-2位置上是否是最低点,找DFX的最低点。是:返回DFXI-2。否:返回上一个DZZ0I。
  41. GZZ0I:= IFELSE(
  42. NOT(
  43.   VALUEWHEN(
  44.    GFX && REF(SA, 2)>0 && REF(H, 2)=HHV(H, BA-DZZI+1),  // 原"REF(H, 2)=HHV(H, BA-DZZI+1)"
  45.   BA-2)>=0),
  46. 0,
  47. VALUEWHEN(
  48.   (GFX && REF(GZZ, 2)=1)
  49.   || (GFX && REF(SA, 2)>0 && REF(H, 2)=HHV(H, BA-DZZI+1)), // 原"REF(H, 2)=HHV(H, BA-DZZI+1)"
  50. BA-2)
  51. ); // 确认GFXI-2位置上是否是最高点,找GFX的最高点。是:返回GFXI-2。否:返回上一个GZZ0I。
  52. DD0I:= VALUEWHEN(DZZ || DZZ0I=0, DZZ0I); // 返回抛物转向上涨启动最低点。落后于DZZ0I。
  53. GD0I:= VALUEWHEN(GZZ || GZZ0I=0, GZZ0I); // 返回抛物转向下跌启动最高点。落后于GZZ0I。
  54. DZZ0P:= VALUEWHEN(DZZ && DZZI-GZZI>3, LLV(L, BA-GZZ0I)); // 抛物转向上涨启动对应的最低点。原"LLV(L, BA-GZZ0I+1)"。 【参数】
  55. GZZ0P:= VALUEWHEN(GZZ && GZZI-DZZI>3, HHV(H, BA-DZZ0I)); // 抛物转向下跌启动对应的最高点。原"HHV(H, BA-DZZ0I+1)"。 【参数】
  56. DD0P:= VALUEWHEN(DZZ, DZZ0P); // 等于DZZ0P。实际与DD0I并不是一一对应。
  57. GD0P:= VALUEWHEN(GZZ, GZZ0P); // 等于GZZ0P。实际与GD0I并不是一一对应。
  58. DD0RP:= VALUEWHEN(DZZ, REF(DD0P,1)); // DD0P前一个周期值。
  59. GD0RP:= VALUEWHEN(GZZ, REF(GD0P,1)); // GD0P前一个周期值。
  60. DZP:= VALUEWHEN(DZZ, MIN(DD0P, DD0RP)); // DD0P与DD0RP最小值。一路下来,抛物转向上涨启动的最低点。
  61. GZP:= VALUEWHEN(GZZ, MAX(GD0P, GD0RP)); // GD0P与GD0RP最大值。一路下来,抛物转向下跌启动的最高点。
  62. QSI:= IFELSE(DZZ0I=0, 0, VALUEWHEN(DZZ, REF(DZZ0I, BA-GZZI))); // 上涨启动时,返回前面一个DZZ0I。原"REF(DZZ0I, BA-GZZI+1)"。
  63. GQSI:= IFELSE(GZZ0I=0, 0, VALUEWHEN(GZZ, REF(GZZ0I, BA-DZZI))); // 下跌启动时,返回前面一个GZZ0I。原"REF(GZZ0I, BA-DZZI+1)"。
  64. SZR:= IFELSE(SA>0, 1, 0); // 是否在上涨。是:1;否:0。
  65. XDR:= IFELSE(SA<0, 1, 0); // 是否在下跌。是:1;否:0。
  66. XDTS2:= VALUEWHEN(DZZ && SUM(XDR, DZZI-GZZI+1) > 3, SUM(XDR, DZZI-GZZI+1)); // 抛物转向上涨启动 && 前面下跌超过3个单位时,统计前面下跌的周期。【参数】
  67. SZTS2:= VALUEWHEN(GZZ && SUM(SZR, GZZI-DZZI+1) > 3, SUM(SZR, GZZI-DZZI+1)); // 抛物转向下跌启动 && 前面上涨超过3个单位时,统计前面上涨的周期。【参数】
  68. XDTS2I:= VALUEWHEN(DZZ && SUM(XDR, DZZI-GZZI+1) > 3, BA); // 满足XDTS2条件的上涨起点位置。
  69. SZTS2I:= VALUEWHEN(GZZ && SUM(SZR, GZZI-DZZI+1) > 3, BA); // 满足SZTS2条件的下跌起点位置。
  70. XDTS1:= VALUEWHEN(DZZ && SUM(SZR, DZZI-REF(GZZI, BA-REF(DZZI, 2))+1) < 4, DZZI-REF(GZZI, BA-REF(DZZI, 2))); // 上涨启动 && 至前2个上涨周期的上涨小于4个单位时,返回这个时间跨度。【参数】
  71. XDTS1I:= VALUEWHEN(DZZ && SUM(SZR, DZZI-REF(GZZI, BA-REF(DZZI, 2))+1) < 4, BA); // XDTS1的位置。 【参数】
  72. XDTS:= IFELSE(DZZ && SUM(SZR, DZZI-REF(GZZI, BA-REF(DZZI, 2))+1) < 4, XDTS1, XDTS2); // 上涨启动 && 至前2个上涨周期的上涨小于4个单位时,返回XSDTS1。否则返回XDTS2。 【参数】
  73. SZTS1:= VALUEWHEN(GZZ && SUM(XDR, GZZI-REF(DZZI, BA-REF(GZZI, 2))+1) < 4, GZZI-REF(DZZI, BA-REF(GZZI, 2))); // 下跌启动 && 至前2个下跌周期的下跌小于4个单位时,返回这个时间跨度。【参数】
  74. SZTS1I:= VALUEWHEN(GZZ && SUM(XDR, GZZI-REF(DZZI, BA-REF(GZZI, 2))+1) < 4, BA); // SZTS1的位置。 【参数】
  75. SZTS:= IFELSE(GZZ && SUM(XDR, GZZI-REF(DZZI, BA-REF(GZZI, 2))+1) < 4, SZTS1, SZTS2); // 下跌启动 && 至前2个上涨周期的上涨小于4个单位时,返回SZTS1。否则返回SZTS2。 【参数】
  76. // DZZ0I是在BA前2个单位,个人认为此判断条件不会成立(除了第一根K线外)。TODO: 不理解。
  77. DINI:= IFELSE(BA=DZZ0I || BA-DZZ0I=1, SUM(L*VOL1, BA-QSI+1) / SUM(VOL1, BA-QSI+1) , SUM(L*VOL1, BA-DZZ0I+1) / SUM(VOL1, BA-DZZ0I+1));
  78. GINI:= IFELSE(BA=GZZ0I || BA-GZZ0I=1, SUM(H*VOL1, BA-GQSI+1) / SUM(VOL1, BA-GQSI+1), SUM(H*VOL1, BA-GZZ0I+1) / SUM(VOL1, BA-GZZ0I+1));
  79. DDT0:= DFX && (REF(C, 2)<REF(DINI, 2) || REF(C, 3)<REF(DINI, 3));
  80. DDT0I:= VALUEWHEN(DDT0, DZZ0I);
  81. DDT01I:= VALUEWHEN(DDT0, REF(DDT0I, 1));
  82. DINI0:= IFELSE(BA=DDT0I || BA-DDT0I=1, SUM(L*VOL1, BA-DDT01I+1) / SUM(VOL1, BA-DDT01I+1), SUM(L*VOL1, BA-DDT0I+1) / SUM(VOL1, BA-DDT0I+1));
  83. DDT00:= (DZZ && SZTS<=XDTS && DZZI-GZZI>3);
  84. DDT00I:= IFELSE(NOT(DDT00), 0, VALUEWHEN(DDT00, DD0I));
  85. DZ00I:= VALUEWHEN(DFX && (REF(C, 3)<REF(DINI0, 3) || REF(C, 2)<REF(DINI0, 2)), DZZ0I);
  86. DZ0I:= MAX(DDT00I, DZ00I);
  87. DZ0:= IFELSE(BA=DZ0I||BA-DZ0I=1,(SUM(L*VOL1,BA-REF(DZ0I,1)+1))/(SUM(VOL1,BA-REF(DZ0I,1)+1)),(SUM(L*VOL1,BA-DZ0I+1))/(SUM      (VOL1,BA-DZ0I+1)));
  88. DZ1I:= VALUEWHEN(DFX&&(REF(C,3)<REF(DZ0,3)||REF(C,2)<REF(DZ0,2)),DZZ0I);
  89. DZ1:= IFELSE(BA=DZ1I||BA-DZ1I=1,(SUM(L*VOL1,BA-REF(DZ1I,1)+1))/(SUM(VOL1,BA-REF(DZ1I,1)+1)),(SUM(L*VOL1,BA-DZ1I+1))/(SUM      (VOL1,BA-DZ1I+1)));
  90. DZ2I:= VALUEWHEN(DFX&&(REF(C,3)<REF(DZ1,3)||REF(C,2)<REF(DZ1,2)),DZZ0I);
  91. DZ2:= IFELSE(BA=DZ2I||BA-DZ2I=1,(SUM(L*VOL1,BA-REF(DZ2I,1)+1))/(SUM(VOL1,BA-REF(DZ2I,1)+1)),(SUM(L*VOL1,BA-DZ2I+1))/(SUM      (VOL1,BA-DZ2I+1)));
  92. DZ3I:= VALUEWHEN(DFX&&(REF(C,3)<REF(DZ2,3)||REF(C,2)<REF(DZ2,2)),DZZ0I);
  93. DZ3:= IFELSE(BA=DZ3I||BA-DZ3I=1,(SUM(L*VOL1,BA-REF(DZ3I,1)+1))/(SUM(VOL1,BA-REF(DZ3I,1)+1)),(SUM(L*VOL1,BA-DZ3I+1))/(SUM      (VOL1,BA-DZ3I+1)));
  94. GDT0:= GFX&&(REF(C,2)>REF(GINI,2)||REF(C,3)>REF(GINI,3));
  95. GDT0I:= VALUEWHEN(GDT0,GZZ0I);
  96. GDT01I:= VALUEWHEN(GDT0,REF(GDT0I,1));
  97. GINI0:= IFELSE(BA=GDT0I||BA-GDT0I=1,SUM(H*VOL1,BA-GDT01I+1)/SUM(VOL1,BA-GDT01I+1),SUM(H*VOL1,BA-GDT0I+1)/SUM(VOL1,BA-  GDT0I+1));
  98. GDT00:= (GZZ&&SZTS>=XDTS&&GZZI-DZZI>3);
  99. GDT00I:= IFELSE(NOT(GDT00),0,VALUEWHEN(GDT00,GD0I));
  100. GZ00I:= VALUEWHEN(GFX&&(REF(C,3)>REF(GINI0,3)||REF(C,2)>REF(GINI0,2)),GZZ0I);
  101. GZ0I:= MAX(GDT00I,GZ00I);
  102. GZ0:= IFELSE(BA=GZ0I||BA-GZ0I=1,(SUM(H*VOL1,BA-REF(GZ0I,1)+1))/(SUM(VOL1,BA-REF(GZ0I,1)+1)),(SUM(H*VOL1,BA-GZ0I+1))/(SUM      (VOL1,BA-GZ0I+1)));
  103. GZ1I:= VALUEWHEN(GFX&&(REF(C,3)>REF(GZ0,3)||REF(C,2)>REF(GZ0,2)),GZZ0I);
  104. GZ1:= IFELSE(BA=GZ1I||BA-GZ1I=1,(SUM(H*VOL1,BA-REF(GZ1I,1)+1))/(SUM(VOL1,BA-REF(GZ1I,1)+1)),(SUM(H*VOL1,BA-GZ1I+1))/(SUM      (VOL1,BA-GZ1I+1)));
  105. GZ2I:= VALUEWHEN(GFX&&(REF(C,3)>REF(GZ1,3)||REF(C,2)>REF(GZ1,2)),GZZ0I);
  106. GZ2:= IFELSE(BA=GZ2I||BA-GZ2I=1,(SUM(H*VOL1,BA-REF(GZ2I,1)+1))/(SUM(VOL1,BA-REF(GZ2I,1)+1)),(SUM(H*VOL1,BA-GZ2I+1))/(SUM      (VOL1,BA-GZ2I+1)));
  107. GZ3I:= VALUEWHEN(GFX&&(REF(C,3)>REF(GZ2,3)||REF(C,2)>REF(GZ2,2)),GZZ0I);
  108. GZ3:= IFELSE(BA=GZ3I||BA-GZ3I=1,(SUM(H*VOL1,BA-REF(GZ3I,1)+1))/(SUM(VOL1,BA-REF(GZ3I,1)+1)),(SUM(H*VOL1,BA-GZ3I+1))/(SUM      (VOL1,BA-GZ3I+1)));
  109. DD:= FLOOR((DZ3+ZXBD)/ZXBD)*ZXBD-ZXBD;
  110. GD:= FLOOR((GZ3+ZXBD)/ZXBD)*ZXBD;
  111. GDW:= VALUEWHEN(CROSS(C,GD),BA);
  112. DDW:= VALUEWHEN(CROSS(DD,C),BA);
  113. DK:= IFELSE(DDW>GDW,GD,DD);
  114. DD1:= FLOOR((DINI+ZXBD)/ZXBD)*ZXBD-ZXBD;
  115. GD1:= FLOOR((GINI+ZXBD)/ZXBD)*ZXBD;
  116. GDW11:= VALUEWHEN(CROSS(C,GD1),BA);
  117. DDW11:= VALUEWHEN(CROSS(DD1,C),BA);
  118. DKD:= IFELSE(DDW11>GDW11,GD1,DD1);
  119. DWD:= VALUEWHEN(CROSS(C,DKD),BA);
  120. GWD:= VALUEWHEN(CROSS(DKD,C),BA);
  121. GDW1:= VALUEWHEN(CROSS(C,GFXP)||BA=0,BA);
  122. DDW1:= VALUEWHEN(CROSS(DFXP,C)||BA=0,BA);
  123. DKP:= IFELSE(DDW1>GDW1,GFXP,DFXP);
  124. BZD:= MAX(DK,MAX(DKD,GFXP));
  125. SZD:= MIN(DK,MIN(DKD,DFXP));
  126. DTA:= CROSS(C,BZD);
  127. KTA:= CROSS(SZD,C);
  128. DTAI:= VALUEWHEN(DTA||BA=0,BA);
  129. KTAI:= VALUEWHEN(KTA||BA=0,BA);
  130. DTB:= C<DK&&C<DKD&&REF(CROSS(DKP,C),1)=1&&C>REF(DKP,2)&&DFX;
  131. KTB:= C>DK&&C>DKD&&REF(CROSS(C,DKP),1)=1&&C<REF(DKP,2)&&GFX;
  132. DTC:= C<DK&&C<DKD&&SUM(L<DKP&&C>DKP,2)=2;
  133. KTC:= C>DK&&C>DKD&&SUM(H>DKP&&C<DKP,2)=2;
  134. DTD:= C>DKD&&SUM(C>DK,2)>=2&&SUM(DKD=DK,BA-DWD+1)=BA-DWD&&DKD>DK&&REF(DKD=DK,1)=1;
  135. KTD:= C<DKD&&SUM(C<DK,2)>=2&&SUM(DKD=DK,BA-GWD+1)=BA-GWD&&DKD<DK&&REF(DKD=DK,1)=1;
  136. DTE:= CROSS(C,DK)&&SUM(DK=DKD,BA-REF(DWD,1)+1)=BA-REF(DWD,1)+1;
  137. KTE:= CROSS(DK,C)&&SUM(DK=DKD,BA-REF(GWD,1)+1)=BA-REF(GWD,1)+1;
  138. DTF:= CROSS(C,DK)&&SUM(CROSS(C,GFXP),BA-1)=0;
  139. KTF:= CROSS(DK,C)&&SUM(CROSS(DFXP,C),BA-1)=0;
  140. KTG:= C>DK&&CROSS(DKD,C)&&SUM(C>DK&&C>DKP&&L<DKD&&C>DKD&&O=L,BA-DWD+1)>=1;
  141. DTG0:= C>DK&&CROSS(C,DKD)&&SUM(KTG,BA-GWD+1)>=1;
  142. KTH:= REF(SUM(DK=DKD,2)=2&&CROSS(DK,C)&&ISUP,1)=1&&C<REF(C,1);
  143. DTJ:= C>DKP&&C<DK&&CROSS(C,DKD)&&SUM(C<DK&&L<DKP&&C>DKP&&ISUP,BA-GWD+1)>=1;
  144. KTJ0:= C<DK&&CROSS(DKD,C)&&SUM(DTJ,BA-DWD+1)>=1;
  145. DTK:= C<DK&&CROSS(C,DKD)&&SUM(CROSS(DKP,C),BA-GWD+1)>=1&&ISUP&&L>REF(H,1)&&SUM(L<DK&&C>DK,BA-GWD+1)>=1;
  146. KTK0:= C<DK&&CROSS(DKD,C)&&SUM(DTK,BA-DWD+1)>=1;
  147. KTL:= CROSS(DKD,C)&&SUM(CROSS(C,DKP)&&C>DKD&&DKD>DK,BA-DWD+1);
  148. KTM:= CROSS(DKD,C)&&SUM(SUM(L<DKD&&C>DKD,2)=2,BA-DWD+1)>=1&&SUM(CROSS(C,DKP)||CROSS(C,DK),BA-DWD+1)=0;
  149. DTL:= CROSS(C,DKD)&&O-L<0.5&&SUM(CROSS(DK,C)&&DK<>DKD,BA-GWD+1);
  150. DT1:= DTA || DTC || DTB || DTD || DTE || DTF || DTG0 || DTJ || DTK || DTL;
  151. KT1:= KTA || KTC || KTB || KTD || KTE || KTF || KTG || KTH || KTJ0 || KTK0 || KTL || KTM;
  152. DTI:= VALUEWHEN(DT1 || BA=0, BA);
  153. KTI:= VALUEWHEN(KT1 || BA=0, BA);
  154. REF(DTI<=KTI,1)=1&&DTI>KTI,BPK;
  155. REF(DTI>=KTI,1)=1&&DTI<KTI,SPK;
复制代码

论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
 
期货论坛 - 版权/免责声明   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

返回列表