新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1830

 
Tretyakov Rostyslav #:

我明白了,谢谢你。

 
Порт-моне тв #:

我只有一件小事要担心。 所有的订单都在不时地关闭(即全部和总是!),但有时,如果我打开3-4个订单,只有2或1个可能关闭。我想有一个特殊的i-check,也许你有线索。

不要忽视括号,试试这个

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseBuyPositions1()
  {
   int pos=OrdersTotal()-1;
   for(int i=pos; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()==OP_BUY)
           {
            if(OrderClose(OrderTicket(), OrderLots(), Bid, 0, NULL))
              {
               Print("Order Close");
              }
           }
        }
     }
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseSellPositions2()
  {
   int pos=OrdersTotal()-1;
   for(int i=pos; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()==OP_SELL)
           {
            if(OrderClose(OrderTicket(), OrderLots(), Ask, 0, NULL))
              {
               Print("Order Close");
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
 
如何获得D'格式下ZZ的极值 2021.01.05
几年来?
 
Vladimir Baskakov #:
如何获得D'格式下ZZ的极值 2021.01.05
在几年内?
if(ZZ[i]!=EMPTY_VALUE) string iDate=TimeToString(time[i],TIME_DATE|TIME_MINUTES);
 
Tretyakov Rostyslav #:
没有剧本?
 
Vladimir Baskakov #:
没有剧本?
没有
 
大家好。谁能帮我编辑一下这个EA。我需要删除开单功能,这样EA就不会自己开单,而是只与手动开单一起工作。事先非常感谢。
附加的文件:
 
Vladimir Baskakov #:
没有剧本?

我们取一个之字形,在OnCalculace中检查其缓冲区的值通常大于0(这意味着缓冲区存储了一个极值,低或高)。我们用下面的方法循环浏览缓冲区

int OnCalculate( const int rates_total,      // размер входных таймсерий 
                 const int prev_calculated,  // обработано баров на предыдущем вызове 
                 const datetime& time[],     // Time 
                 const double& open[],       // Open 
                 const double& high[],       // High 
                 const double& low[],        // Low 
                 const double& close[],      // Close 
                 const long& tick_volume[],  // Tick Volume 
                 const long& volume[],       // Real Volume 
                 const int& spread[]         // Spread 
) {
 // код зиг-зага
 ...
 if (prev_calculated > 0) // дальнейший код сработает только один раз
   return (rates_total);
 // обработка значений зиг-зага
 for (int i = rates_total - 1; i >= 0; i--) {
   if (zigZag[i] > 0) { // найден экстремум
     // сохраняем time[i] в любую удобную форму для дальнейшей работы
   }
 }
 return (rates_total);
}

上面的循环(从右到左)是为MQL5准备的。

对于MQL4,循环将从左到右进行

for (int i = 0; i < rates_total; i++)

上述例子首先给出了新的时间值。要想先得到时间上的高级值,可以使用ArraySetAsSeries或扭转循环方向。

可以使用iCustom、CopyTime或iTime以及iBars(代替rate_total)从脚本中获取数据。

 
Tretyakov Rostyslav #:

我一定是误解了什么。

如果我把函数切换到

void OnTick()
  {
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.
   
// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
     {

// Если появился сигнал на покупку, то откроем ордер на покупку
      if(bSignalBuy() == true)
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
      if(bSignalSell() == true)
         vOrderOpenSell();
     } 
       DrawLABEL("nextlot",1,5,0,Color1(),StringConcatenate("CURRENT LOT: ",DoubleToStr(LOT(),2)));
       DrawLABEL("currentlot",1,5,0,Color2(),StringConcatenate("NEXT LOT: ",DoubleToStr(LOT(),2)));
       TrailingOrders();
  }

然后停止和外卖被瞬间转移了无数次

如果你不使用TrailingOrders();,就没有什么变化。

我的任务不是创造一个尾随的动作,而是将止损和取出的动作进行一次/两次。

我今天一整天都在 "发明 "东西,到目前为止,没有任何东西可以用。

 
законопослушный гражданин #:

我一定是误解了什么。

如果我把函数切换到

然后停止和外卖被瞬间 转移了无数次

如果你不使用TrailingOrders();,就没有什么变化。

我的任务不是创造一个尾随的动作,而是将止损和取出的动作做一/两次。

我整天都在 "发明 "东西,到目前为止,没有任何东西可以用。

如果价格向TP的方向移动,追踪止损应该起作用,如果价格回滚,它不应该做任何事情。SL水平应该只向TP的方向发展,而不是回滚。

原因: