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

 
Alexey Viktorov #:

Valery, presta atención a la línea

en mi código... Llevo un tiempo utilizando funciones hexagonales, pero una función similar

dio un rancio 0.

Así que, piensa donde están las cucarachas... Y como mt4 se niega a soportarlo, puedes asumir que nunca se arreglará...

Hay que comprobar todo lo demás. Hace tanto tiempo que no me ocupo de ello que no quiero ni acordarme.

Hmmm... El tiempo es emulado) Tendré que ponerme a ello)

int sd;
/*******************Expert initialization function*******************/
int OnInit()
 {
  sd = (int)MarketInfo("EURJPY", MODE_DIGITS);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {
  datetime lt = iTime(_Symbol, PERIOD_M15, 0);
  static datetime ct = 0;
  if(ct != lt)
  {
   ct = lt;
   Print(DoubleToString(iMA("EURJPY", PERIOD_M15, 21, 0, MODE_SMA, PRICE_CLOSE, 0), sd),
    " Time[0] ",TimeToStr( Time[0])," iTime(EURJPY,0,0) ",TimeToStr(iTime("EURJPY",0,0)));
  }

Resultado

2021.09.21 15:30:48.696 2021.08.13 20:15:00  testMulti EURUSD,M15: 129.482 Time[0] 2021.08.13 20:15 iTime(EURJPY,0,0) 2021.08.13 20:15
2021.09.21 15:30:48.632 2021.08.13 20:00:00  testMulti EURUSD,M15: 129.495 Time[0] 2021.08.13 20:00 iTime(EURJPY,0,0) 2021.08.13 20:00
2021.09.21 15:30:48.568 2021.08.13 19:45:00  testMulti EURUSD,M15: 129.512 Time[0] 2021.08.13 19:45 iTime(EURJPY,0,0) 2021.08.13 19:45
2021.09.21 15:30:48.504 2021.08.13 19:30:00  testMulti EURUSD,M15: 129.527 Time[0] 2021.08.13 19:30 iTime(EURJPY,0,0) 2021.08.13 19:30
2021.09.21 15:30:48.440 2021.08.13 19:15:00  testMulti EURUSD,M15: 129.539 Time[0] 2021.08.13 19:15 iTime(EURJPY,0,0) 2021.08.13 19:15

ZZY trabaja en la obtención de datos de barras de otros personajes)))) Pero la historia necesita ser cargada específicamente, saliendo de la matriz sólo así en un instrumento descargado o solicitando datos de una barra distante.

ZS ZS

¡¡¡Realmente funciona!!! Tuve que subir los archivos de cotización de todos !!! los pares de divisas necesarios y funciona en un minuto de junio de 21, en los inicios más antiguos y posteriores)

 
giros #:

¿Pueden sugerirme dónde puedo aprender MQL5 (en ruso)?

Aquí. No he leído nada más.
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
  • www.mql5.com
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 


double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice=0;
   ticket=0;
   
   for(int i=OrdersTotal()- 2 ; i>=0; i--)
   {
      if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
            oldticket = OrderTicket();
            if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return(oldopenprice);
}

Hola. Intentando encontrar el precio de apertura de la penúltima orden, pero funciona bien si no hay órdenes de venta, ¿Me pueden decir cuál es el error? Creo que también los cuenta. MQL4

 
makssub #:


Hola. Intentando encontrar el precio de apertura de la penúltima orden, pero funciona bien si no hay órdenes de venta, ¿Me pueden decir cuál es el error? Creo que también los cuenta. MQL4

double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice=0;
   ticket=0;
   
   for(int i=OrdersTotal()- 2 ; i>=0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) // внимательней к копипасту) цикл по i а перебираешь cnt))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
            oldticket = OrderTicket();
            if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return(oldopenprice);
}
 
Valeriy Yastremskiy #:


double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice=0;
   ticket=0;
   
   for(int cnt=OrdersTotal()- 2 ; cnt>=0; cnt--)
   {
      if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
            oldticket = OrderTicket();
            if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return(oldopenprice);
}

Gracias. Revisado de nuevo, sigue contando la venta también(

 
makssub #:


Gracias. Revisado de nuevo, sigue contando la venta también(

Probablemente porque estás restando del número total de pedidos

OrdersTotal()- 2 

y sólo mirar en

OP_BUY
 
makssub #:


Gracias. Revisado de nuevo, sigue contando la venta también(

Desimprimir antes del segundo si y dentro del segundo si el número, el ticket y el tipo de pedido.

double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice=0;
   ticket=0;
   
   for(int cnt=OrdersTotal()- 2 ; cnt>=0; cnt--)
   {
    if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
      {
Print("Print 1 "," cnt ",cnt," OrderTicket() ",OrderTicket()," OrderType() ",OrderType());
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
Print("Print 2 "," cnt ",cnt," OrderTicket() ",OrderTicket()," OrderType() ",OrderType());
            oldticket = OrderTicket();
            if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return(oldopenprice);
}
 
 private:
   CPoint             *startPoint;
   CPoint             *endPoint;

Hay dos constructores. Cuando llamo al primero desde el segundo y establezco valores para las variables anteriores, cuando vuelvo de él al segundo, estas variables pasan a NULL.
Pero si simplemente copio el código del primer constructor al segundo y no lo llamo, todo funciona. ¿Cuál es el problema?

CWave::CWave(string namePref,
             double startPrice,
             datetime startTime,
             double endPrice,
             datetime endTime)
  {
   prevWave = NULL;
   nextWave = NULL;
   name = namePref+"_"+TimeToString(startTime, TIME_DATE|TIME_MINUTES);
   startPoint = new CPoint(startPrice, startTime);
   endPoint = new CPoint(endPrice, endTime);
   dir = startPrice < endPrice ? true : false;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
CWave::CWave(string namePref,
             double startPrice,
             datetime startTime,
             double endPrice,
             datetime endTime,
             CWave *prevWave)
  {
   CWave(namePref, startPrice, startTime, endPrice, endTime);
   this.prevWave = prevWave;
   prevWave.nextWave = &this;
  }
 
Roman Sharanov NULL.
Pero si simplemente copio el código del primer constructor al segundo y no lo llamo, todo funciona. ¿Cuál es el problema?


El problema está en el MQL.

En tales situaciones, pongo la inicialización en un método separado que saco de diferentes constructores.

---

También hay un problema con la llamada al constructor padre.

 
Valeriy Yastremskiy #:

Imprime antes del segundo si y dentro del segundo si el número, el ticket y el tipo de pedido.

Gracias. Lo comprobaré más tarde hoy.

Razón de la queja: