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

 
Maxim Kuznetsov:

Sólo añadir que NO SE GARANTIZA que el terminal tenga y dé suficiente historial.

en el ejemplo anterior no hay ninguna referencia a la historia

por lo que se garantiza que el resultado de OrderSelect() es verdadero

UPD: OrderSelect en 4 funciona muy bien, lo probé una vez - para las órdenes de mercado el tiempo de acceso a las propiedades de la orden.... realmente es millones de veces por segundo, no quiero buscarlo, creo que estaba discutiendo con el moderador Artem, pero como dicen "todas las puntas son diferentes", me gusta - guardarlo

 

Hola, se necesitan datos sobre la detracción de cada operación.

¿Puede alguien conocer un script que recoja estas estadísticas y las presente en forma de informe?

Gracias

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

Hola, se necesitan datos sobre la detracción de cada operación.

¿Puede alguien conocer un script que recoja estas estadísticas y las presente en forma de informe?

Gracias

for(int i=OrdersTotal()-1;i>=0;i--) {

   if (!OrderSelect(i,SELECT_BY_POSITON,MODE_TRADES)) continue;

   double prosad=DBL_MIN;

   if (OrderType()!=OP_BUY && OrderType!=OP_SELL) continue;

   for(int j=iBarShift(OrderSymbol(),OrderOpenTime(),PERIOD_M1); j>=0;j--) {

      double delta=( OrderType()==OP_BUY? OrderOpenPrice()-iLow(OrderSymbol(),PERIOD_M1,j) : iHigh(OrderSymbol(),PERIOD_M1,j)-OrderOpenPrice() );

      delta /= MarketInfo(OrderSymbol(),MODE_POINT);

      if (delta>prosad) prosad=delta;

   }

  PrintFormat("Максимальная просадка по ордеру %d = %d пунктов , %f денег",OrderTicket(),(int)(prosad),prosad*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE);

}

está "escrito a mano", sin probar, lleno de errores :-) sólo tienes que ajustarlo a tus necesidades y utilizarlo

 
Maxim Kuznetsov:

for(int i=OrdersTotal()-1;i>=0;i--) {

   if (!OrderSelect(i,SELECT_BY_POSITON,MODE_TRADES)) continue;

   double prosad=DBL_MIN;

   if (OrderType()!=OP_BUY && OrderType!=OP_SELL) continue;

   for(int j=iBarShift(OrderSymbol(),OrderOpenTime(),PERIOD_M1); j>=0;j--) {

      double delta=( OrderType()==OP_BUY? OrderOpenPrice()-iLow(OrderSymbol(),PERIOD_M1,j) : iHigh(OrderSymbol(),PERIOD_M1,j)-OrderOpenPrice() );

      delta /= MarketInfo(OrderSymbol(),MODE_POINT);

      if (delta>prosad) prosad=delta;

   }

  PrintFormat("Максимальная просадка по ордеру %d = %d пунктов , %f денег",OrderTicket(),(int)(prosad),prosad*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE);

}

escrito "a mano", no revisado, lleno de errores :-) ajústelo a sus necesidades y utilícelo

gracias, ¡intentaré averiguarlo!

 
@Igor Makanu, muchas gracias por tus respuestas sobre la clasificación de las órdenes en el terminal. Probablemente los guarde como una matriz de estructuras y los clasifique yo mismo. Mis dudas se debían principalmente a que temía que esas acciones realizadas en cada tic tuvieran un impacto negativo notable en el rendimiento.
 
Janis Ozols:
@Igor Makanu, muchas gracias por tus respuestas sobre la clasificación de las órdenes en el terminal. Probablemente los guarde como una matriz de estructuras y los clasifique yo mismo. Las dudas se debían principalmente a que temía que esas acciones realizadas en cada tic tuvieran un notable impacto negativo en el rendimiento.

Entonces, ¿por qué clasificar en cada garrapata? Suficiente sólo cuando el número de entradas cambia o la lista cambia completamente...

 
Buenas tardes Por favor, ayúdenme a entender por qué el indicador descargado desde el navegador no se arrastra al gráfico. Está en el catálogo.
Archivos adjuntos:
image002.jpg  38 kb
 
Por la tarde. Si no hay una carga automática de la herramienta de indicadores del mercado enel terminal de operaciones, ¿cuál es el problema?
 
Igor Makanu:

en el ejemplo anterior no hay ninguna referencia a la historia

por lo que se garantiza que el resultado de OrderSelect() es verdadero

UPD: OrderSelect en 4 funciona muy bien, lo estuve probando una vez - para las órdenes de mercado el tiempo de acceso a las propiedades de la orden.... realmente son millones de veces por segundo, no quiero buscarlo, creo que estaba discutiendo con el moderador Artem, pero es como dicen "todas las puntillas difieren", si te gusta, quédate con ella

El moderador Artem no discute. El moderador Artem está debatiendo :)
 
void OnTick()
  {
    if(isCrossing() == 1)          
      
    ... 

    if(isCrossing() == 2)
      
    ... 
  }

int isCrossing(){  
  double ma = iMA(NULL, g_timeFrame, g_maPeriod, g_maShift, g_maMethod, g_maApplietPrice, 0);
  double low = iLow(Symbol(), g_timeFrame, 0);
  double high = iHigh(Symbol(), g_timeFrame, 0);

  if(g_barTime < iTime(NULL,g_timeFrame,0) && high > ma && Bid <= ma){
    g_barTime = iTime(NULL,g_timeFrame,0);
    return 1;
  } 
  
  if(g_barTime < iTime(NULL,g_timeFrame,0) && low < ma && Bid >= ma){
    g_barTime = iTime(NULL,g_timeFrame,0);
    return 2;
  }
   
  return 0;
}
¿Por qué isCrossing() no devuelve 2? La propia isCrossing () tiene una segunda entrada if, pero entonces no hay ninguna entrada if en OnTick() cuando isCrossing() == 2. ¿Qué es esta tontería...
Razón de la queja: