关闭半数地段。 - 页 6

 
你是说如果我把 "if(FirstTarget_Buy == Bid)"?(显然不是,因为它不起作用。)
 
DomGilberto:
你的意思是如果我把 "if(FirstTarget_Buy == Bid)"?(显然不是这样,因为它不起作用。)

或者类似于 . . .

if(Bid >= FirstTarget_Buy + (Point / 2) )
   {
   //  close the Order
   }

. . . . 考虑到比较双数的问题(价格!=价格吗?)

你还需要考虑价差问题,以及你的目标是包括还是不包括价差的。

 

(叹气)好吧--谢谢你的帮助,猛禽!这正变得令人沮丧。我发誓,它不需要如此耗费时间......上面的If语句是行不通的。

我真的是一筹莫展了......

如果我不包括上面的 "如果 "语句(在这种情况下什么都不会发生),而只是把关闭顺序改为 "出价",它就会关闭几个半成品(半成品的半成品等)--但我不知道它是如何知道何时关闭这个半成品的......

如果有更多的建议,我们将不胜感激,感谢您的帮助!

 
DomGilberto:

(叹气)好吧--谢谢你的帮助,Raptor!这变得令人沮丧了。我发誓,它不需要如此耗费时间......上面的If语句是行不通的。

我真的是一筹莫展了......

如果我不包括上面的 "如果 "语句(在这种情况下什么都不会发生),而只是把关闭顺序改为 "出价",它就会关闭几个半成品(半成品的半成品等)--但我不知道它是如何知道何时关闭这个半成品的......

如果你没有指定一个必须满足的价格条件,那么它就会尽快关闭一半的订单,Bid 始终是Bid,对关闭OP_BUY有效。

if语句会起作用 . . . 如果它没有找到原因,在它之前添加一个Print() . . . 在它之后。

Print("Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );

if(Bid >= FirstTarget_Buy + (Point / 2) )
   {
   Print("Bid >= FirstTarget_Buy - Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );

   //  close the Order
   }

别担心,当你的代码按照你的要求工作时,你在策略测试器中运行它,发现它就像抛硬币一样好时,就会变得更加令人沮丧了。

 
好的,谢谢!你能不能告诉我,为什么有时我运行ST,然后停止它,在日志中没有任何东西被打印出来...?

"当你的代码按照你的要求运行时,你在策略测试器中 运行它,发现它就像抛硬币一样好"

是的,我只能想象!我实际上已经写了6页(不知道那是多少行)的代码--我正在加入这些关键部分......其中之一是在1:1时关闭50%,并移动到收支平衡......。但是NOOOOOO,这个地段的关闭恰好是反直觉的(就我而言)。
 
DomGilberto:
好的,谢谢!你能不能启发我,为什么有时我运行ST,然后停止它,在日志内什么都没有打印出来...?

你看的是正确的日志标签吗?有两个......你应该看的是策略测试器 窗口中的那个,你应该看的是专家标签旁边的那个。 最好的方法是查看保存在tester/logs中的日志文件。

 
2013.08.01 13:44:27     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: FirstTarget_Buy: 1.37931
2013.08.01 13:44:27     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Order Lots Open = 0.18
2013.08.01 13:44:27     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Order Ticker Number = 10
2013.08.01 13:44:27     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The Lots to close is: 0.09000
2013.08.01 13:44:27     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The Lotstep is: 0.01000
2013.08.01 13:44:27     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The minimum lots are: 0.01000
   if(OrderType()==OP_BUY && Bid >= FirstTarget_Buy +(Point / 2)){
                  Print("Bid >= FirstTarget_Buy - Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );
                  bool Close_Half_Order_Buy = OrderClose(OrderTicket(),half,Bid,3,CLR_NONE);
                  if(Close_Half_Order_Buy!=TRUE)Print("Close_Half_Order_Buy Last Error = ", GetLastError());
                  }
这是完美的--第一个目标_买入是完全正确的。关闭的手数也完全正确。这一切都在挂单上打印出来--然而,即使我的计算正确,它也没有在这个价格上关闭?我是在 "OP_BUY "时选择它的...我很抱歉问了这么多问题,但我不明白为什么这不起作用?
 
DomGilberto:
这很完美 - firsttarget_buy是完全正确的。关闭的手数也是完全正确的。这一切都在挂单上打印出来--但是,即使我的计算正确,它也没有在这个价格上关闭?我是在 "OP_BUY "时选择它的...我很抱歉问了这么多问题,但我不明白为什么这不起作用?

你没有在if()前加上打印,没有打印你怎么知道Bid大于或等于FirstTarget_buy?

Print("Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );   //  add this line too . . .

if(Bid >= FirstTarget_Buy + (Point / 2) )
   {
   Print("Bid >= FirstTarget_Buy - Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );

   //  close the Order
   }

如果不是这样,那么if()就不是真的,订单也不是部分关闭的 ... ...如果它仍然是一个挂单,那么它就不是一个OP_BUY。

 
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Current Bid: 1.35972 FirstTarget_Buy: 1.37931
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: FirstTarget_Buy: 1.37931
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Order Lots Open = 0.18
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Order Ticker Number = 9
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The Lots to close is: 0.09000
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The Lotstep is: 0.01000
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The minimum lots are: 0.01000

我可以看到当买入价等于或大于"FirstTarget_buy"?我在交易中测试,一直运行到2:1回报率的止盈目标......。所以我知道它的回报率是1:1 - 这就是手数应该减半的地方...所有的打印功能 在挂单时都会打印出来(即如果有一个挂单,我停止测试,所有的打印都会显示出来--然而,如果我在一个挂单触发后停止测试,在日志中没有任何打印出来的 "打印"?)

我不相信我被这个问题困扰了--这正成为迄今为止最大的挑战--但我觉得我还有其他更复杂的事情......

(更新:我假设我需要逐点监测Bid,以便将价格拉入我的 "for "循环?

为了使 "IF() "语句为真,Bid最终将等于我的"FirstTarget_buy"?

 
DomGilberto:

我可以看到当买入价等于或大于"FirstTarget_buy"?我在交易中测试,一直运行到2:1回报率的止盈目标......。所以我知道它的回报率是1:1 - 这就是手数应该减半的地方...所有的打印功能都是在挂单上打印出来的(即如果有一个挂单,我停止测试,所有的打印都会显示出来--然而,如果我在一个挂单触发后停止测试,在日志中没有任何打印出来的 "打印"?)

好的,现在你有进展了......你只需要找出为什么OP_BUY没有触发你的代码,以挂单 的方式打印出所有的变量......如果你想贴出代码,我可以看看。