[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 458

 
mamba5:

在测试EA的过程中,我得到错误130--错误的停止。在NewOrder函数中,应该传递外部变量TakeProfit和StopLoss,在我看来,我已经做了一切来实现这一点,但正如打印显示的那样,传递的是零。我明白这个错误的原因在于此,但我还没能找到它。请帮助我。

Extern int TakeProfit=100;
extern int StopLoss=100。

....................................

NewOrder(OP_BUYSTOP, Lot, TakeProfit, StopLoss);
NewOrder(OP_SELLSTOP, Lot, TakeProfit, StopLoss) 。

int NewOrder(int Cmd,double Lot,int TakeProfit,int StopLoss)

这里的问题是,有全局变量 StopLoss,它们被作为参数传递给程序。最好在程序中重新命名它们。

 
fore-x:

Как в mql4 из одного индикатора управлять более чем 8 буферами обмена, существует ли способ обхода данного ограничения?

Ну, как пример, мне нужно построить более 8 индикаторных линий, но из одной программы.

竺可桢

趋势线。

还有更多的细节?至少给我一个链接,在哪里读?
 
splxgf:

这里的问题是,有全局性的StopLoss变量,它们也被作为参数传递给程序。最好是在程序中重新命名它们。


你是对的。这确实更符合逻辑。纠正了。

//+----------Функция открытия ордера-----------------------------------+
int NewOrder(int Cmd,double Lot,int TaPr,int StLo)
{
 double TP=0;// тейкпрофит
 double SL=0;// стоплос
 double PR=0;// цена
 while(!IsTradeAllowed())Sleep(100);
 if(TaPr<MarketInfo(Symbol(),MODE_STOPLEVEL))  
    TaPr=MarketInfo(Symbol(),MODE_STOPLEVEL);
 if(StLo<MarketInfo(Symbol(),MODE_STOPLEVEL))  
    StLo=MarketInfo(Symbol(),MODE_STOPLEVEL);
 if(Cmd==OP_BUY)
   {
    PR=NormalizeDouble(Ask, Digits);
    if(TaPr>0)TP=NormalizeDouble(Ask,Digits)+NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)SL=NormalizeDouble(Bid,Digits)-NormalizeDouble(StLo*Point,Digits);
   }
 if(Cmd==OP_SELL)
   {
    PR=NormalizeDouble(Bid, Digits);
    if(TaPr>0)TP=NormalizeDouble(Bid,Digits)-NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)  SL=NormalizeDouble(Ask,Digits)+NormalizeDouble(StLo*Point,Digits);
   }
 Print("TaPr=",TaPr," StLo=",StLo," StopLevel=",MarketInfo(Symbol(),MODE_STOPLEVEL));
 tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP,"",0,0,CLR_NONE);
 if(tic<0)Print("ошибка открытия ордера:",GetLastError()); Print("Cmd-",Cmd," Lot=",Lot," PR=",PR," SL=",SL," TP=",TP);
return(tic);
}
但这并没有什么帮助。TaPr和StLo=100,但PR、SL和TP因某种原因为零.....
附加的文件:
 

你好,你能不能帮我写一个条件,让订单只开一次,现在它在每个tick上都开。

   topOrder=OrderSend(Symbol(),OP_BUYSTOP,1,Hinput,3,Price_high-(height_box/100*sl),Price_high+(height_box/100*tp),"my order #",16384,0,Green);
                     if (topOrder<0)
                        {
                           Print("Верхний ордер ошибка #", GetLastError());
                           return(0);
                        }

我只需要做一些事情,让它看起来像这样:如果我已经有一个已经下好的订单,它不会在没有OrderComment的情况下打开 另一个订单,我还不知道该怎么处理它。

预先感谢

 
fore-x:
更多细节如何?至少给我一个链接,在哪里读?
什么链接?你将条形图与趋势线 连接起来。你将独立于缓冲器和它们的故障。
 
artmedia70:
除非你自己把它放在图表上,否则它不会在EA期间反映出来。你是怎么做到的?
我在测试器中运行该EA,当测试器完成后,出现了指标线 的信息。
 
mamba5:


你是对的。这样做确实更有意义。纠正了。

但这并没有什么帮助。TaPr和StLo=100,但PR、SL和TP因某种原因为零


  NewOrder(OP_BUYSTOP, Lot, TakeProfit, StopLoss);
  NewOrder(OP_SELLSTOP, Lot, TakeProfit, StopLoss);
if(Cmd==OP_BUY)
   {
    PR=NormalizeDouble(Ask, Digits);
    if(TaPr>0)TP=NormalizeDouble(Ask,Digits)+NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)SL=NormalizeDouble(Bid,Digits)-NormalizeDouble(StLo*Point,Digits);
   }
 if(Cmd==OP_SELL)
   {
    PR=NormalizeDouble(Bid, Digits);
    if(TaPr>0)TP=NormalizeDouble(Bid,Digits)-NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)  SL=NormalizeDouble(Ask,Digits)+NormalizeDouble(StLo*Point,Digits);
   }
 

请告知如何计算亏损的交易。

即被止损关闭的交易。

并在交易获利后重置计数器。

即在获利平仓后,将计数器重置为零。

初始计数器数字=1

int Schetcik = 1;

所有的交易,包括买入和卖出,都应该被计算在内。

 
Vinin:



谢谢你!)))直到如此清晰的比较,才发现了错误
 
belck:

请告知如何计算亏损的交易。

即被止损关闭的交易。

并在交易获利后重置计数器。

即在获利平仓后,将计数器重置为零。

初始计数器数字=1

所有的交易,包括买入和卖出,都应该被计算在内。


在止损点上收盘并不意味着交易在亏损,反之亦然。当然,除非在开场时就设定了停顿和取舍,并且没有再被触及。