设为首页收藏本站

 找回密码
 注册
查看: 1576|回复: 6
打印 上一主题 下一主题

我跟IF语句之间可能有些误会 [复制链接]

Rank: 1

精华
0
UID
231728
积分
38
帖子
23
主题
7
阅读权限
10
注册时间
2016-4-7
最后登录
2018-12-2
跳转到指定楼层
1#
发表于 2018-11-27 23:12:12 |只看该作者 |倒序浏览
先上代码:
  1. Params
  2. Numeric D1(5);
  3. Numeric StopLoss(8);
  4. Numeric PTPOINT(10);

  5. Vars
  6. NumericSeries KDALLOW;
  7. NumericSeries PDALLOW;
  8. Numeric KD1(0);
  9. Numeric KD2(0);
  10. Numeric PD1(0);
  11. Numeric PD2(0);
  12. Numeric STPRICE;
  13. Numeric PTPRICE;
  14. Numeric PTSTPRICE;
  15. Bool TRADE1;
  16. Bool TRADE2;

  17. Begin
  18. If(Time>=0.2105 AND Time<=0.2320) TRADE1=True;
  19. If(Time>=0.0905 AND Time<=0.1450) TRADE1=True;
  20. If(TRADE1 OR TRADE2)
  21. {
  22. If(Time<>Time[1])
  23. {
  24. SetGlobalVar(10,0);
  25. }
  26. KDALLOW=GetGlobalVar(2);
  27. PDALLOW=GetGlobalVar(3);
  28. If(High>Highest(High[1],D1)) KD1=1;
  29. If(Low>=Lowest(Low[1],D1)) KD2=1;
  30. If(Low<lowest(Low[1],D1)) PD1=1;
  31. If(High<=Highest(High[1],D1)) PD2=1;
  32. Commentary("KD1:"+Text(KD1));
  33. Commentary("KD2:"+Text(KD2));
  34. Commentary("PD1:"+Text(PD1));
  35. Commentary("PD2:"+Text(PD2));
  36. Commentary(IIFString(High>Highest(High[1],D1),"True","False"));
  37. Commentary("持仓1:"+Text(A_BuyPosition));
  38. If(A_BuyPosition==0 AND GetGlobalVar(0)==0)
  39. {
  40. If(KD1>0 AND KD2>0)
  41.   {
  42.    KDALLOW=1;
  43.    SetGlobalVar(2,KDALLOW);
  44.    }
  45. If(KDALLOW[1]==1  And GetGlobalVar(10)==0)
  46.   {
  47.    SetGlobalVar(1,Q_AskPrice);
  48.    KDALLOW=0;
  49.    SetGlobalVar(2,KDALLOW);
  50.    A_SendOrder(Enum_Buy,Enum_Entry,1,Q_AskPrice);
  51.    SetGlobalVar(0,1);
  52.    SetGlobalVar(10,1);
  53.    }
  54. }
  55. Commentary("持仓2:"+Text(A_BuyPosition));
  56. Commentary("开仓价:"+Text(GetGlobalVar(1)));//以上为开仓
  57. Commentary("平推许可:"+Text(GetGlobalVar(4)));
  58. If(A_BuyPosition==1 AND GetGlobalVar(0)==1)
  59. {
  60. PTPRICE=GetGlobalVar(1)+PTPOINT*MinMove*PriceScale;
  61. Commentary("平推价:"+Text(PTPRICE));
  62. If(Close>PTPRICE)
  63. {
  64. SetGlobalVar(4,1);
  65. }
  66. Commentary("平推许可:"+Text(GetGlobalVar(4)));
  67. If(GetGlobalVar(4)==0)
  68. {
  69. STPRICE=GetGlobalVar(1)-StopLoss*MinMove*PriceScale;
  70. Commentary("止损价:"+Text(STPRICE));
  71. If(Close<STPRICE)
  72.   {
  73.    PDALLOW=0;
  74.    SetGlobalVar(3,PDALLOW);
  75.    SetGlobalVar(1,0);
  76.    Commentary("止损平仓:"+Text(Q_BidPrice));
  77.    SetGlobalVar(4,0);
  78.    A_SendOrder(Enum_Sell,Enum_Exit,1,Q_BidPrice);
  79.    SetGlobalVar(0,0);
  80.    }
  81. Else
  82. {
  83. If(PD1>0 AND PD2>0)
  84.   {
  85.    PDALLOW=1;
  86.    SetGlobalVar(3,PDALLOW);
  87.    }
  88. If(PDALLOW[1]==1)
  89.   {
  90.    PDALLOW=0;
  91.    SetGlobalVar(3,PDALLOW);
  92.    SetGlobalVar(1,0);
  93.    Commentary("策略平仓:"+Text(Q_BidPrice));
  94.    SetGlobalVar(4,0);
  95.    A_SendOrder(Enum_Sell,Enum_Exit,1,Q_BidPrice);
  96.    SetGlobalVar(0,0);
  97.    }
  98. }
  99. }
  100. Else
  101. {
  102. PTSTPRICE=GetGlobalVar(1)+2*MinMove*PriceScale;
  103. Commentary("平推止损价:"+Text(PTSTPRICE));
  104. If(Close<PTSTPRICE)
  105.   {
  106.    SetGlobalVar(1,0);
  107.    Commentary("平推平仓:"+Text(Q_BidPrice));
  108.    SetGlobalVar(4,0);
  109.    A_SendOrder(Enum_Sell,Enum_Exit,1,Q_BidPrice);
  110.    SetGlobalVar(0,0);
  111.    PDALLOW=0;
  112.    SetGlobalVar(3,PDALLOW);
  113.    }
  114. Else
  115. {
  116. If(PD1>0 AND PD2>0)
  117.   {
  118.    PDALLOW=1;
  119.    SetGlobalVar(3,PDALLOW);
  120.    }
  121. If(PDALLOW[1]==1)
  122.   {
  123.    PDALLOW=0;
  124.    SetGlobalVar(3,PDALLOW);
  125.    SetGlobalVar(1,0);
  126.    Commentary("策略平仓:"+Text(Q_BidPrice));
  127.    SetGlobalVar(4,0);
  128.    A_SendOrder(Enum_Sell,Enum_Exit,1,Q_BidPrice);
  129.    SetGlobalVar(0,0);
  130.    }
  131. }
  132. }
  133. }
  134. Commentary("KDALLOW:"+Text(KDALLOW));
  135. Commentary("PDALLOW:"+Text(PDALLOW));
  136. Commentary("持仓3:"+Text(A_BuyPosition));
  137. }
  138. Else
  139. {
  140. If(A_BuyPosition==1)
  141. {
  142. A_SendOrder(Enum_Sell,Enum_Exit,1,Q_BidPrice);
  143. }
  144. SetGlobalVar(0,0);
  145. SetGlobalVar(1,0);
  146. SetGlobalVar(2,0);
  147. SetGlobalVar(3,0);
  148. SetGlobalVar(4,0);
  149. SetGlobalVar(10,0);
  150. Commentary("非允许交易时间!");
  151. }
  152. Commentary("全局变量0:"+Text(GetGlobalVar(0)));
  153. Commentary("全局变量1:"+Text(GetGlobalVar(1)));
  154. Commentary("全局变量2:"+Text(GetGlobalVar(2)));
  155. Commentary("全局变量3:"+Text(GetGlobalVar(3)));
  156. Commentary("全局变量4:"+Text(GetGlobalVar(4)));
  157. Commentary("全局变量10:"+Text(GetGlobalVar(10)));
  158. End
复制代码
这段代码用在白糖1901合约5分钟K上,11月27日9:05的数据是这样的,请看红色圈起来的地方,KD1是1,KD2是1,不想看代码可以只看30-38行。当根K最高点大于前五根K最高点,KD1=1;当根K 最低点不小于前五根K最低点,KD2=1。然而,这跟K的最高点并没有高于前五根K的最高点,KD1被赋值1。请看图:

然而,若是begin-end部分只保留30-38行(Params和Vars部分保留相应参数或都保留),将得到以下这张图,这张图是符合逻辑的

第二张图是对的

经过我的试验,发现是最前面限制交易时间的IF语句在作怪,把日内交易的时间限制取消后,恢复正常。
偶滴神呐~~这让我怎么放心呀
请老师们帮我解答一下吧,这个可怎么是好啊
我觉得我跟IF语句肯定有些误会!!!
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
2#
发表于 2018-11-28 10:39:28 |只看该作者
声明几个中间变量,将highest(hgih[1],D1)  lowest(low[1],D1)等运算赋值 给中间变量,再将中间变量代入条件判断中使用。

使用道具 举报

Rank: 1

精华
0
UID
231728
积分
38
帖子
23
主题
7
阅读权限
10
注册时间
2016-4-7
最后登录
2018-12-2
3#
发表于 2018-11-28 20:46:03 |只看该作者
小米 发表于 2018-11-28 10:39
声明几个中间变量,将highest(hgih[1],D1)  lowest(low[1],D1)等运算赋值 给中间变量,再将中间变量代入条 ...

小米老师,我按照您的方法试了,没起作用,还是原来的样子。
我把那几句if语句提到了日内交易限制的外面,恢复正常了。但是留在里面的iifstring里面的判断依然错误
我把代码简化了一下,如下:
  1. Params
  2. Numeric D1(5);

  3. Vars
  4. Numeric KD1(0);
  5. Numeric KD2(0);
  6. Numeric PD1(0);
  7. Numeric PD2(0);
  8. Bool TRADE1;
  9. Bool TRADE2;
  10. Bool PKD1(False);
  11. Bool PKD2(False);
  12. Bool PPD1(False);
  13. Bool PPD2(False);


  14. Begin
  15. PKD1=High>Highest(High[1],D1);
  16. PKD2=Low>=Lowest(Low[1],D1);
  17. PPD1=Low<lowest(Low[1],D1);
  18. PPD2=High<=Highest(High[1],D1);
  19. If(PKD1) KD1=1;
  20. If(PKD2) KD2=1;
  21. If(PPD1) PD1=1;
  22. If(PPD2) PD2=1;
  23. If(Time<>Time[1])
  24. {
  25. SetGlobalVar(10,0);
  26. }
  27. If(Time>=0.2105 AND Time<=0.2320) TRADE1=True;
  28. If(Time>=0.0905 AND Time<=0.1450) TRADE1=True;
  29. If(TRADE1 OR TRADE2)
  30. {
  31. Commentary("KD1:"+Text(KD1));
  32. Commentary("KD2:"+Text(KD2));
  33. Commentary("PD1:"+Text(PD1));
  34. Commentary("PD2:"+Text(PD2));
  35. Commentary(IIFString(High>Highest(High[1],D1),"True","False"));
  36. }
  37. End
复制代码
结果如图:


我觉得肯定是更底层的地方出了问题
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
4#
发表于 2018-11-29 08:39:06 |只看该作者
qwas121 发表于 2018-11-28 20:46
小米老师,我按照您的方法试了,没起作用,还是原来的样子。
我把那几句if语句提到了日内交易限制的外面 ...

PKD1=High>Highest(High[1],D1);
PKD2=Low>=Lowest(Low[1],D1);
PPD1=Low<lowest(Low[1],D1);
PPD2=High<=Highest(High[1],D1);
这是换汤没换药啊!!!
我所说的将中highest(high[1],D1)等赋值给中间变量,没说将high>highest(high[1],D1)赋值 给布尔变量啊!

使用道具 举报

Rank: 1

精华
0
UID
231728
积分
38
帖子
23
主题
7
阅读权限
10
注册时间
2016-4-7
最后登录
2018-12-2
5#
发表于 2018-11-29 11:16:09 |只看该作者
小米 发表于 2018-11-29 08:39
PKD1=High>Highest(High[1],D1);
PKD2=Low>=Lowest(Low[1],D1);
PPD1=Low

额,我没明白。有个变量叫中间变量吗?
请小米老师解释一下,这个真心没看懂

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
6#
发表于 2018-11-29 11:24:18 |只看该作者
qwas121 发表于 2018-11-29 11:16
额,我没明白。有个变量叫中间变量吗?
请小米老师解释一下,这个真心没看懂 ...
  1. vars
  2.     numeric myhigh;  //声明两个变量
  3.     numeric mylow ;
  4. begin
  5.     myhigh = highest(high[1],D1);   //将序列函数的运算赋值给变量
  6.     mylow = lowest(low[1],D1);
  7.    .....
  8.     if(high>myhigh) KD1=1;   //将变量代入条件中进行运算
  9.     if(low>=mylow) KD2 =1;
复制代码

使用道具 举报

Rank: 1

精华
0
UID
231728
积分
38
帖子
23
主题
7
阅读权限
10
注册时间
2016-4-7
最后登录
2018-12-2
7#
发表于 2018-12-2 17:38:39 |只看该作者
小米 发表于 2018-11-29 11:24

好的 明白了 我试试

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-4-26 00:25

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部