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

 
Andrey Barinov:

Así es como se compila:


Gracias. Ingenuamente pensé que arreglar una docena de errores de compilación haría que un código mql4 que funcionaba se convirtiera en un indicador mql5)

No quiere mostrar el máximo, el mínimo de un día. ¿A qué distancia está la meta?

 
bij:

Gracias. Ingenuamente pensé que arreglar una docena de errores de compilación haría que un código mql4 que funcionaba se convirtiera en un indicador mql5)

No quiere mostrar un mínimo de un día. ¿A qué distancia está la meta?

No lo sé :)

Intenta expandir las matrices de los buffers al principio de OnCalculate usando ArraySetAsSeries

 
bij:

Gracias. Ingenuamente pensé que arreglando una docena de errores de compilación convertiría un código mql4 que funcionaba en un indicador mql5)

No quiere mostrar el máximo, el mínimo de un día. ¿A qué distancia está el objetivo?

Hay una cantidad tan grande de líneas de código, sólo para mostrar la alta y la baja del día?
 
Alexey Viktorov:
¿Es una cantidad enorme de líneas de código sólo para mostrar las subidas y bajadas del día?
Sí, también está el cierre del día, pero está en el historial, no sólo el día anterior. Esa es la dificultad.
 
bij:
Sí, también el cierre del día, pero está en el historial, no sólo el día anterior. Esa es la parte complicada.

¿Es este su código? ¿O fue escrito por encargo?

¿Puedes mostrarme una instantánea de cómo se ve en MT4?

 
Alexey Viktorov:

¿Es este su código? ¿O fue escrito por encargo?

¿Puedes mostrarme una instantánea de cómo se ve en MT4?

El indicador es de la red. No tengo MT4 a mano, te lo diré con palabras. Líneas desde el inicio hasta el final de cada día, por precios máximos, mínimos y de cierre del día. Pero, en lugar de una línea al precio decierre del día, quiero poner una línea al precio de cierre de la barra a las 21:00

Tal vez realmente se pueda hacer más fácil que artificioso.

 

Estoy cerrando 4 posiciones a la vez, ¿cómo puedo contarlas como una sola en la función de recuento de pérdidas?

Pueden cerrar, debido a los deslizamientos, no al mismo precio y la hora puede ser diferente

Inténtalo:

int CountLOS()
  {
  double priceold=0;
  datetime datold;
   int count=0;
   for(int trade=OrdersHistoryTotal()-1;trade>=0; trade--)
     {
      OrderSelect(trade,SELECT_BY_POS,MODE_HISTORY);
      if(OrderSymbol()==Symbol())
        {
         if(OrderType()==OP_BUY || OrderType()==OP_SELL)
           {
            if(OrderMagicNumber()==_MagicNumber)
              {
               if(OrderProfit()<=0&&datold !=OrderCloseTime()) {count++; datold =OrderCloseTime();}
               //if(OrderProfit()<=0&&priceold !=OrderClosePrice()) {count++; priceold =OrderClosePrice();}
               else  break;
              }
           }
        }
     }
   return(count);
  }
 
lil_lil:

Estoy cerrando 4 posiciones a la vez, ¿cómo puedo contarlas como una sola en la función de recuento de pérdidas?

Es posible que no se cierren al mismo precio debido al deslizamiento, y el calendario puede ser diferente

El precio por el deslizamiento es diferente y también lo es el tiempo; uno ha cerrado al final del segundo, mientras que el otro ha cerrado al principio del siguiente segundo. Intente registrar los teletipos de las órdenes en el momento del cierre. Puedes grabarlos en un archivo...

 
lil_lil:

Estoy cerrando 4 posiciones a la vez, ¿cómo puedo contarlas como una sola en la función de recuento de pérdidas?

Pueden cerrar, debido a los deslizamientos, no al mismo precio y la hora puede ser diferente

Juicio:

Recorro los últimos cerrados. Si el último cerrado es negativo, entonces miro todos los cerrados durante 120 segundos (2 minutos) y calculo el beneficio total

 
lil_lil:

Estoy cerrando 4 posiciones a la vez, ¿cómo puedo contarlas como una sola en la función de recuento de pérdidas?

Pueden cerrar, debido a los deslizamientos, no al mismo precio y la hora puede ser diferente

Lo intenté:

Algo así:

 datetime _oct=0,time=0,_pt=0;
 int _cnt=0;
  for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
   if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
    if(OrderSymbol()==symb && OrderMagicNumber()==mg) {
     int OrdersType=OrderType();
     // BUY && SELL
     if(OrdersType<=1) {
       CopyTime(OrderSymbol(),PERIOD_D1,0,1,itime);
       if((OrderCloseTime()>=itime[0] && OrderCloseTime()<itime[0]+86400)) {
         _Get.Hist.BS._ProfitDaily+=OrderProfit()+OrderCommission()+OrderSwap(); // Profit за сегодня
       }
       // 120 секунд разницы между закрытием первой и последней в сетке
       _oct=OrderCloseTime();
       if(_cnt==0 && _oct!=0) time=_oct;
        if(_oct+120>=time) {
          _Get.Hist.BS._ProfitOldClose+=OrderProfit()+OrderSwap()+OrderCommission(); // Profit последнего трейда
          _cnt++;
        }
     }
  }}} 
Razón de la queja: