Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1577

 
Mihail Matkovskij:

A OnTradeTransaction será acionada quando qualquer ordem de parada no servidor for acionada.

Mas a função tem que ser prescrita?
 
Eugen8519:
Que tal através?

DEAL_REASON_SL
DEAL_REASON_TP

não

há um exemplo muito bom de OnTradeTransaction nos documentos

 
MakarFX:
Mas a função tem que ser prescrita?

Se você acrescentar uma função específica para este fim, ela seria útil. Por que não...?

Mas não há necessidade de rastrear travessias de parada nele, pois o servidor fará isso e enviará um sinal para aOnTradeTransaction.

 
Mihail Matkovskij:

Se você acrescentar uma função específica para este fim, ela seria útil. Por que não...?

Mas não é necessário rastrear a travessia de paradas nela, pois ela será feita pelo servidor e enviará um sinal para aOnTradeTransaction.

Misha, eu não sou realmente bom em mql5, estou apenas no começo,

mas acho que primeiro devemos escrever algo como.

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

Se eu estiver errado, eu ficaria feliz em corrigi-lo

 
MakarFX:

Misha, eu não sou muito bom em mql5, estou apenas começando a entrar nele,

mas acho que primeiro você deveria escrever algo como...

Se eu estiver errado, eu ficaria feliz em corrigi-lo.

A OnTradeTransaction é uma empresa que trata de eventos deste tipo. Portanto, todo o código de processamento deve estar nele. Ou ligue para a função de processamento, se quiser. Veja a descrição na documentação no link.
 
Mihail Matkovskij:
A OnTradeTransaction é uma empresa que trata de eventos deste tipo. Portanto, todo o código de processamento deve estar nele. Ou função de processamento, se você quiser. Veja a descrição na documentação no link.

Estamos falando da mesma coisa?

if(OnTradeTransaction(...)==....)  SendNotification ("текст");
 
Que tal isto? Acho que encontrei um do 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:
Que tal isto? Encontrei um do mql4
OrdersHistoryTotal

não em mql5

 
MakarFX:

Estamos falando da mesma coisa?

Não. Você vai chamar o manipulador na condição (se). Mas não é preciso chamá-lo de qualquer lugar. Basta escrever o código de processamento naOnTradeTransaction e isso é tudo. Veja os parâmetros que são passados àOnTradeTransaction quando uma parada é acionada.

Embora, você deve saber o que são eventos e manipuladores de eventos, que eventos há na MQL. Então, você começará a entender tudo isso.

Aqui está um link para o que são os Organizadores de Eventoshttps://www.mql5.com/ru/docs/basis/function/events#ontradetransaction.

Eles são freqüentemente chamados apenas de manipuladores de eventos para evitar confusão. Por exemplo, como você confundiua OnTradeTransaction com uma função comum que é chamada de "se".

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Функции обработки событий - Функции - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Eugen8519:
Que tal isto? Encontrei um do mql4

Tente isto (ainda não testei)

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ão: