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

 
Mihail Matkovskij:

OnTradeTransaction se activará cuando se active cualquier orden de stop en el servidor.

¿Pero la función tiene que ser prescrita?
 
Eugen8519:
¿Qué tal a través de?

DEAL_REASON_SL
DEAL_REASON_TP

no

hay un muy buen ejemplo de OnTradeTransaction en los documentos

 
MakarFX:
¿Pero la función tiene que ser prescrita?

Si se añade una función específica para este fin, sería muy útil. ¿Por qué no...?

Pero no es necesario hacer un seguimiento de los cruces de parada en él, porque el servidor lo hará y enviará una señal aOnTradeTransaction.

 
Mihail Matkovskij:

Si se añade una función específica para este fin, sería muy útil. ¿Por qué no...?

Pero no es necesario rastrear el cruce de stops en él, porque lo hará el servidor y enviará una señal aOnTradeTransaction.

Misha, no soy muy bueno en mql5, sólo estoy al principio,

pero creo que primero deberíamos escribir algo como

if(OnTradeTransaction(...)==....)  SendNotification ("текст");

Si me equivoco, estaré encantado de corregirlo

 
MakarFX:

Misha, no soy muy bueno en mql5, estoy empezando a meterme en él,

pero creo que primero deberías escribir algo como...

Si me equivoco, estaré encantado de corregirlo.

OnTradeTransaction es un manejador de eventos de este tipo. Por lo tanto, todo el código de procesamiento debe estar en él. O llame a la función de procesamiento si lo desea. Véase la descripción en la documentación en el enlace.
 
Mihail Matkovskij:
OnTradeTransaction es un manejador de eventos de este tipo. Por lo tanto, todo el código de procesamiento debe estar en él. O la función de procesamiento si lo desea. Vea la descripción en la documentación en el enlace.

¿Estamos hablando de lo mismo?

if(OnTradeTransaction(...)==....)  SendNotification ("текст");
 
¿Qué tal esto? Creo que encontré uno de mql4
void AlertOrder()

{

   string txt;

   double OCP;

   int i=OrdersHistoryTotal()-1;

   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)

   {                                

      OCP=OrderClosePrice();

      if (OCP==OrderStopLoss()) txt="SL";

      if (OCP==OrderTakeProfit()) txt="TP";

      }

      SendNotification(Symbol() + " hit "+txt+"");

 }
 
Eugen8519:
¿Qué tal esto? Encontré uno de mql4
OrdersHistoryTotal

no en mql5

 
MakarFX:

¿Estamos hablando de lo mismo?

No. Vas a llamar al manejador en la condición (if). Pero no es necesario llamarlo en ningún sitio. Simplemente escriba el código de procesamiento enOnTradeTransaction y eso es todo. Mira los parámetros que se pasan aOnTradeTransaction cuando se activa un stop.

Aunque hay que saber qué son los eventos y los manejadores de eventos, qué eventos hay en MQL. Entonces empezarás a entenderlo todo.

Aquí hay un enlace a lo que son los manejadores de eventoshttps://www.mql5.com/ru/docs/basis/function/events#ontradetransaction.

A menudo se les llama simplemente manejadores de eventos para evitar confusiones. Por ejemplo, como has confundidoOnTradeTransaction con una función ordinaria que se llama en if.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Функции обработки событий - Функции - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Eugen8519:
¿Qué tal esto? Encontré uno de mql4

Prueba esto (no lo he probado)

datetime lastclouse; 
int OnInit()
  {
   lastclouse=TimeCurrent();
   .....
  }
void OnTick()
  {
   if(LastClouseProfit()!=EMPTY_VALUE) SendNotification (LastClouseProfit());
   .....   
  }  
double LastClouseProfit()
  {
   ulong ticket=0;
   double profit=EMPTY_VALUE;
   HistorySelect(lastclouse,TimeCurrent());
   ticket=HistoryDealGetTicket();
   profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);
   if(profit!=EMPTY_VALUE) lastclouse=TimeCurrent();
   return(profit);
  }
Razón de la queja: