任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 911

 
Viktorline14:

与复制EA的文本相比,截图并张贴在这里是否更容易?你认为有人会从截图中手动输入到他们的ME中并试图弄清楚吗?

如果编译器说应该检查函数的结果,就必须检查。这并不难。

if(!OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), 3, SL, TP, NULL, 0, 0,clrBlue)) Print("Opening Buy error #", GetLastError()); //ну и другие действия по усмотрению, в случае ошибки
 

 if(S1a == S1b && S1a<20.0000 && S1b<20.0000 )

 {OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), Slippage, SL, TP, NULL, 0, 0,clrBlue);

     MyOrderStateB = 1; 

      if(!OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), 3, SL, TP, NULL, 0, 0,clrBlue)) 

   Print("Opening Buy error #", GetLastError());}

   else Sleep(2);

谢谢你。对还是错? 警告还是出现了

 
你有绝对值的止损和止盈,而你需要相对值的止损和止盈,如Bid - Sl*Point。
 
abeiks:

你好!

在我的专家顾问中,会检查前一个蜡烛图,如果条件允许,就开仓,如果不允许,就不开仓。问题是,在检查前一根蜡烛的状况之前就开仓了。然后我看到日志中的头寸打开了,然后我看到它不应该被打开。如何解决这个问题?

谢谢你,我自己也搞清楚了。我把检查前一根蜡烛的功能放在了开仓 的功能之上。
 
我为我的草率表示歉意
 
如果(S1a == S1b && S1a<20.0000 && S1b<20.0000 )
{OrderSend(Symbol(), OP_BUY, OrderValue,NormalizeDouble(Ask, Digits), Slippage, Bid - SL * Point, Ask + TP * Point, NULL, 0, 0,clrBlue)。
MyOrderStateB = 1;
if(!OrderSend(Symbol(, OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), 3, SL, TP, NULL, 0, 0,clrBlue))
Print("Opening Buy error #", GetLastError()); }
否则Sleep(2)。

如果(S1a == S1b && S1a>80.0000 && S1b>80.0000 )

{OrderSend(Symbol(), OP_SELL, OrderValue, NormalizeDouble(Bid, Digits), Slippage, Ask + SL * Point, Bid - TP * Point , NULL, 0, 0, clrRed);
MyOrderStateS = 1; }

否则Sleep(2)。

而相对的,它给出了同样的东西(

 
Viktorline14:

 if(S1a == S1b && S1a<20.0000 && S1b<20.0000 )

 {OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), Slippage, SL, TP, NULL, 0, 0,clrBlue);

     MyOrderStateB = 1; 

      if(!OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), 3, SL, TP, NULL, 0, 0,clrBlue)) 

   Print("Opening Buy error #", GetLastError());}

   else Sleep(2);

谢谢你。对还是错? 警告还是出现了

错了,你不需要调用OrderSend两次。而且我们应该相对于价格来计算SL和TP,而不是以点来计算。我们不应该把公开的 卖价和买价标准化,而应该把SL和TP的计算结果标准化。

一般来说,"学习、学习、再学习" ))))

 
evillive:

错了,不需要调用OrderSend两次。而SL和TP应该是相对于价格计算的,而不是以点数计算的。我们不应该把公开的卖价和买价标准化,而应该把SL和TP的计算结果标准化。

一般来说,"学习、学习、再学习" ))))

非常感谢你))))。你帮了我大忙,现在一切都正常了:3
 

再次非常感谢您!

现在有一个问题,EA连续开了几个订单,而不是我想要的一个(

int start()



  { S1a = NormalizeDouble(iStochastic(NULL, 0, S1_period, 3, S1_slowing, MODE_SMA, 1, MODE_MAIN, 1), 0);

   S1b = NormalizeDouble(iStochastic(NULL, 0, S1_period, 3, S1_slowing, MODE_SMA, 1, MODE_SIGNAL, 1), 0);

   

   if(MyOrderStateB == 1)Sleep(300000);

    else MyOrderStateB = 0;

   if(MyOrderStateS == 1)Sleep(300000);

    else MyOrderStateS = 0;

    

 

     

   if(S1a == S1b && S1a<20.0000 && S1b<20.0000 )

 

      if(!OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), Slippage, Bid - SL * Point, Ask + TP * Point, NULL, 0, 0,clrBlue))

   Print("Opening Buy error #", GetLastError());  

     else Sleep(2);

   MyOrderStateB = 1;

  

   


      

   if(S1a == S1b && S1a>80.0000 && S1b>80.0000 )


    

    

       if(!OrderSend(Symbol(), OP_SELL, OrderValue, NormalizeDouble(Bid, Digits), Slippage, Ask + SL * Point, Bid - TP * Point , NULL, 0, 0,clrRed))

       Print("Opening Sell error #", GetLastError()); 

       else Sleep(2);

       MyOrderStateS = 1;

       

      

       

       

       

   return(0);}

 

我在策略测试器中 看到一些奇怪的行为。我的EA设置并拖动挂单止损。会发生以下情况。专家顾问将买入止损和卖出止损设置在距离当前价格30点的位置(符号 - GbpUsd. 四位数。 最小水平=3点)。一段时间后,如果他们没有触发,它就会跟随市场把他们拉起来。所以我看到的是。修改成功,修改成功,然后在某个时间点上抨击,错误#1弹出。也就是说,一切都很好,EA也在做同样的动作,突然就出现了这个错误。所有价格都已归一化为位数。一般来说,所有传递给OrderModify()函数输入的值都是经过规范化处理的!

在测试器中,EA的这种行为可能是什么原因?