Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1577

 
Mihail Matkovskij:

OnTradeTransaction si attiverà quando qualsiasi ordine stop sul server viene attivato.

Ma la funzione deve essere prescritta?
 
Eugen8519:
Che ne dici di attraverso?

DEAL_REASON_SL
DEAL_REASON_TP

no

c'è un ottimo esempio di OnTradeTransaction nei documenti

 
MakarFX:
Ma la funzione deve essere prescritta?

Se si aggiunge una funzione specifica per questo scopo, sarebbe utile. Perché non...?

Ma non c'è bisogno di tracciare gli incroci di stop in esso, perché il server lo farà e invierà un segnale aOnTradeTransaction.

 
Mihail Matkovskij:

Se si aggiunge una funzione specifica per questo scopo, sarebbe utile. Perché non...?

Ma non è necessario tracciare l'incrocio degli stop in esso, perché sarà fatto dal server e invierà un segnale aOnTradeTransaction.

Misha, non sono molto bravo con mql5, sono solo all'inizio,

ma penso che dovremmo prima scrivere qualcosa come.

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

Se mi sbaglio, sarei felice di correggerlo

 
MakarFX:

Misha, non sono molto bravo con mql5, ho appena iniziato ad entrarci,

ma penso che prima dovresti scrivere qualcosa come...

Se mi sbaglio, sarei felice di correggerti.

OnTradeTransaction è un tale gestore di eventi. Pertanto, tutto il codice di elaborazione dovrebbe essere in esso. Oppure chiamate la funzione di elaborazione, se volete. Vedere la descrizione nella documentazione al link.
 
Mihail Matkovskij:
OnTradeTransaction è un tale gestore di eventi. Pertanto, tutto il codice di elaborazione dovrebbe essere in esso. O funzione di elaborazione, se volete. Vedere la descrizione nella documentazione al link.

Stiamo parlando della stessa cosa?

if(OnTradeTransaction(...)==....)  SendNotification ("текст");
 
Che ne dici di questo? Penso di averne trovato uno da 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:
Che ne dici di questo? Ne ho trovato uno da mql4
OrdersHistoryTotal

non in mql5

 
MakarFX:

Stiamo parlando della stessa cosa?

No. Chiamerai il gestore nella condizione (if). Ma non c'è bisogno di chiamarlo da nessuna parte. Basta scrivere il codice di elaborazione inOnTradeTransaction e questo è tutto. Guarda i parametri che vengono passati aOnTradeTransaction quando viene attivato uno stop.

Anche se dovete sapere cosa sono gli eventi e i gestori di eventi, quali eventi ci sono in MQL. Allora comincerete a capire tutto.

Ecco un link a cosa sono i gestori di eventihttps://www.mql5.com/ru/docs/basis/function/events#ontradetransaction.

Sono spesso chiamati semplicemente gestori di eventi per evitare confusione. Per esempio, poiché avete confusoOnTradeTransaction con una funzione ordinaria che viene chiamata in if.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Функции обработки событий - Функции - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Eugen8519:
Che ne dici di questo? Ne ho trovato uno da mql4

Prova questo (non l'ho testato)

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);
  }