[存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. - 页 513

 

关于如何使其在自动优化器中优化开盘价 的专业提示。

https://forum.mql4.com/ru/42125

 
你好,我是一个初学者,想了解如何编写一个EA
请教如何写 "如果之前的平仓订单是买入订单,并且以止损方式平仓,那么卖出0.1手,止损50,获利50"。)
 

专家们!帮助!如何实现这一点?


int start() 
{
 bool OPEN=false;

 условие1=х;//вычисление условия1
 условие2=y;//вычисление условия2
 
 if(условие1==х)OPEN=true;
 
 if(условие2==y&&OPEN==true)
 OrderSend;

我们需要固定OPEN=true,直到
条件2。在此期间,条件1可能发生变化。

提前感谢!

 

拿出来做个开头

 bool OPEN=false;
 
sergeev:

拿出来做个开头


非常感谢您!正如他们所说的,一切都非常简单。而我一整天都在绞尽脑汁。
 

请告诉我,在计算只对应于缓冲区上方或下方的条件的第一条杠( Quant_Bars )的数量时,我做错了什么。也就是说,只要指标画在收盘条(1)之前,我就应该用指标在条(不符合条件的除外)下面计算以前的条,反之亦然,运动方向相反。 我的变体给出了错误的值。

谁知道怎么做?

#property indicator_chart_window     
#property indicator_buffers 1
#property indicator_color1 Green
double step = 0.1;
double max = 0.2;

int n = 1;
double S;
double barA;
double barB;
double Bufer[];
int k,k1;
//---------------------------------
int init()
{
   SetIndexStyle(0, DRAW_ARROW,EMPTY,0,Green); 
   SetIndexArrow(0, 159); 
   SetIndexBuffer(0, Bufer);
   return (0);
}
//---------------------------------
int deinit() 
{
   return (0);
}
//----------------------------------
int start()
{

 k1=k;
 for(int i=Bars-2; i>=0; i--)  
    {
     if(i == Bars-2)
       {
         Bufer[i] = Low[i] - 10.0 * Point;
         n = 1;
         S = step;
         barA = High[i];
         barB = Low[i];
       }
    else
       {
         if(Close[i] > barA)
           {
             barA = Close[i];
               if (n==1 && S <= max - step)
                  { S = S + step; }
             k=1;
           }          
         if(Close[i] < barB)
           {
            barB = Close[i];
              if (n == -1 && S <= max - step)
                 { S = S + step;}
            k=2;
           }
        if (n == 1)
           { Bufer[i] = Bufer[i + 1] + S * (barA - (Bufer[i + 1]));}
       else
           { Bufer[i] = Bufer[i + 1] + S * (barB - (Bufer[i + 1]));}
      
       if ((Bufer[i+1] < Close[i + 1] && Bufer[i] > Close[i]) || (Bufer[i + 1] > Close[i + 1] && Bufer[i] < Close[i]))
          {
           S = step;
             if (n == 1)
                {Bufer[i] = barA;}
             else
                {Bufer[i] = barB;}
           barB = Close[i];
           barA = Close[i];
           n = -1 * n;
          }
       }
   }
    
//--------------------------Подсчитать бары:
   int num1 = 2;  // бар  
   int counted_bars = IndicatorCounted(); 
 //-----СЕЛЛ
if(Bufer[2]<Close[2] && Bufer[1]>Close[1])    
   {
     for( i=num1; i<=Bars; i++ )
        { 
          if(Bufer[i]<Close[i])
                                 
             {int Quant_Bars = Quant_Bars+i;}
          if(Bufer[i]>Close[i] && Bufer[i-1]<Close[i-1]) 
          break;
         }
     Alert("Число баров= ",Quant_Bars, "  counted_bars= ",counted_bars," бары= ", Bars );    
    }
    
 //-----БАЙ  
if(Bufer[2]>Close[2] && Bufer[1]<Close[1])     
   {
     for( i=num1; i<=Bars; i++ )
        { 
          if(Bufer[i]<Close[i])                     
            {Quant_Bars = Quant_Bars+i;}
          if(Bufer[i]>Close[i] && Bufer[i-1]<Close[i-1]) 
          break;
         }
     Alert("Число баров= ",Quant_Bars, "  counted_bars= ",counted_bars," бары= ", Bars );    
    }  

   return (0);
}
 

问题。

为什么,当我的专家顾问整齐地耗尽了整个存款,而且几乎所有的交易都在亏损,然后当我改变信号的 "极性 "时,存款并没有迅速增加,而是已经?)))) 点是一样的,错误只在开单方向,还是有其他原因?

 
Maxaxa:

问题。

为什么,当我的专家顾问整齐地耗尽了整个存款,而且几乎所有的交易都在亏损,然后当我改变信号的 "极性 "时,存款并没有迅速增加,而是已经?)))) 点是一样的,错误只在开单方向,还是有其他原因?

这是一种交易哲学。
 
Maxaxa:


还有别的东西
 
Solree:

下午好。

有4个订单,2个卖出,2个买入。形象地说,封条是在价格上涨时产生的,在价格下跌时买入。买入时卖出被删除,反之亦然。当一张票被创建时,第一笔卖出或买入被存储在变量pos 中。所有4个都有相同的评论--"Aelit"。因此,有一个代码。

顺序是由票据正常选择的,但很多时候评论比较失败。出于兴趣,我做了别的Alert(OrderComment());而日志显示 "Alert: Aelit[sl]"。什么是[sl]?是不是因为所有的订单都有相同的评论?那么,为什么当我发表与其他人不一致的评论时,同样是[sl]的测试?如果你去掉评论检查,OrderModify的日志中就会出现票据错误。起初我以为这个条件是在任何订单创建之前达到的,但不是,当时订单已经存在,在条件触发和不触发的情况下,票据是一样的。我们如何理解它呢?

这不是一个奇迹,你的经纪公司对你的评论进行了补充--当达到StopLoss时,订单已经关闭。

你没有正确组织票面上的订单选择。当进行这样的选择时,首先,MODE_TRADES是不必要的--它在OrderSelect()函数中 被省略了。

第二,在成功选择订单后,你没有检查该订单是否根据票据从订单阵列中选择--从市场上的订单或从关闭的订单中选择。

要做到这一点,在订单被选中后,检查它的收盘时间,如果它等于零,那么只有这样的订单才是市场订单,否则 - 它是从已经关闭的订单中选择的(因此在你的评论中增加了这一点)。