Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1830

 
Tretyakov Rostyslav #:

Ya veo. Gracias.

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

Sólo me preocupa una pequeña cosa: todas las órdenes se cierran de vez en cuando (es decir, todas y siempre), pero a veces, si abro 3-4 órdenes, sólo 2 o 1 de ellas pueden cerrarse. Creo que hay un i-check especial, puede ser que tenga una pista.

No descuides los paréntesis, prueba esto

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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");
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
 
Cómo obtener los extremos de ZZ en formato D' 2021.01.05
¿a lo largo de varios años?
 
Vladimir Baskakov #:
Cómo obtener los extremos de ZZ en formato D' 2021.01.05
¿en unos años?
if(ZZ[i]!=EMPTY_VALUE) string iDate=TimeToString(time[i],TIME_DATE|TIME_MINUTES);
 
Tretyakov Rostyslav #:
¿No hay guión?
 
Vladimir Baskakov #:
¿No hay guión?
No
 
Hola a todos. Puede alguien ayudar a editar el EA. Necesito eliminar la función de apertura de órdenes, para que el EA no abra órdenes por sí mismo, sino que sólo funcione con órdenes abiertas manualmente. Muchas gracias de antemano.
Archivos adjuntos:
 
Vladimir Baskakov #:
¿No hay guión?

Tomamos un zig-zag y en OnCalculace comprobamos su buffer en busca de valores normalmente mayores que 0 (significa que el buffer almacena el valor del extremo, bajo o alto). Hacemos un bucle a través del buffer utilizando el

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);
}

el bucle anterior (de derecha a izquierda) está pensado para MQL5

para MQL4 el bucle será de izquierda a derecha

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

Los ejemplos anteriores dan primero nuevos valores de tiempo. Para obtener primero los valores anteriores en el tiempo, utilice ArraySetAsSeries o invierta la dirección del bucle.

Los datos pueden ser recuperados desde el script utilizando iCustom, CopyTime o iTime, así como iBars (en lugar de rates_total).

 
Tretyakov Rostyslav #:

Debo estar malinterpretando algo.

si cambio la función en

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();
  }

entonces la parada y la retirada se desplazan instantáneamente un número infinito de veces

Sino se utiliza TrailingOrders(); entonces nada se desplaza.

Mi tarea no era crear un movimiento de arrastre, sino mover el stop y el takeout una/dos veces.

Llevo todo el día "inventando" cosas, de momento nada funciona.

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

Debo estar malinterpretando algo.

si cambio la función en

entonces la parada y la retirada se desplazan instantáneamente un número infinito de veces

Sino se utiliza TrailingOrders(); entonces nada se desplaza.

Mi tarea no era crear un movimiento de arrastre, sino mover el stop y el takeout una/dos veces.

Llevo todo el día "inventando" cosas, de momento nada funciona.

El trailing stop debe funcionar si el precio se mueve en la dirección del TP, y no debe hacer nada si el precio retrocede. El nivel de SL debe ir sólo en la dirección del TP y no retroceder.

Razón de la queja: