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

 
MakarFX:

Versuchen Sie es (ich habe es nicht getestet)

Grazie, controllerò più tardi.

 
Eugen8519:



Per favore, aiutatemi a posizionare correttamente la funzione

...

Ma come e dove inserire

Per inviare un messaggio quando viene raggiunto uno stop loss o untake profit?


MakarFX:

Stiamo parlando della stessa cosa?

Ho trovato un esempio che traccia l'uscita SL conOnTradeTransaction:https://www.mql5.com/ru/code/21147.

Candle shadows v1
Candle shadows v1
  • www.mql5.com
Анализ размера свечи и тени свечи. В OnTradeTransaction отлавливаем открытие (DEAL_ENTRY_IN) и закрытие позиций (DEAL_ENTRY_OUT), а также закрытие по Stop loss (DEAL_REASON_SL).
 

Lo stesso EA su due strumenti diversi

Ciao, potresti aiutarmi per favore?

Ho un EA che lavora sul grafico su cui è stato trascinato (il valore Symbol() è preso come nome del simbolo).

Ma questo EA ha anche una variabile ticket_exist che contiene un ticket dell'ordine impostato e l'EA capisce che se il ticket_exist non è uguale a zero, l'ordine è impostato qui.

Domanda: se apro un tale EA su due strumenti diversi e la variabile ticket_exist non è uguale a zero su uno strumento, la variabile con lo stesso nome rimarrà uguale a zero sull'altro strumento?

SU.

 
Mihail Nefedov:

Lo stesso EA su due strumenti diversi

Ciao, potresti aiutarmi per favore?

Ho un EA che lavora sul grafico su cui è stato trascinato (il valore Symbol() è preso come nome del simbolo).

Ma questo EA ha anche una variabile ticket_exist che contiene un ticket dell'ordine impostato e l'EA capisce che se il ticket_exist non è uguale a zero, l'ordine è impostato qui.

Domanda: se apro un tale EA su due strumenti diversi e la variabile ticket_exist non è uguale a zero su uno strumento, la variabile con lo stesso nome rimarrà uguale a zero sull'altro strumento?

SU.

Il valore della variabile in un EA non è disponibile per un altro EA. La cosa principale è che o i simboli, o i maghi, o entrambi sono diversi.

 

Puoi dirmi che ora è in tick? Ora del server o UTC?

Ricordo di aver letto da qualche parte, ma non ricordo dove...

 
Alexey Viktorov:

Il valore di una variabile in un EA non è disponibile per un altro EA. La cosa principale è che o i simboli, o le magie, o entrambi dovrebbero essere diversi.

Se ho capito bene, allora per ottenere un conflitto di EAs (due assolutamente identici) che lavorano con simboli diversi, le loro variabili dovrebbero essere impostate come globali (per tutto il terminale) o, per esempio, un ordine dovrebbe essere accessibile dal suo numero di sequenza o semplicemente dal fatto della sua esistenza?

 
MakarFX:

Prova questo (non l'ho testato)

Non funziona, dà errori di compilazione.


Ho provato in questo modo e compila senza problemi, ma non posso testarlo con la pista chiusa

Tornerò al lavoro domani.

  void OnTradeTransaction(const MqlTradeTransaction &trans,
                          const MqlTradeRequest &request,
                          const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      long     deal_entry        =0;
      string   deal_symbol       ="";
      long     deal_magic        =0;
      long     deal_reason       =-1;
      if(HistoryDealSelect(trans.deal))
        {
         deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
         deal_reason=HistoryDealGetInteger(trans.deal,DEAL_REASON);
        }
      else
         return;

      if(deal_symbol==m_symbol.Name() && deal_magic==m_magic)
         if(deal_entry==DEAL_ENTRY_OUT)
           {
            if(deal_reason==DEAL_REASON_SL)
               SendNotification ("Закрыл  позицию > StopLoss");

            if(deal_reason==DEAL_REASON_TP)
               SendNotification ("Закрыл  позицию > TakeProfit");
           }
       }
  }
File:
x4.PNG  11 kb
 
Eugen8519:

non funziona, dà errori di compilazione


Ho provato in questo modo, compila senza problemi, ma quando la pista è chiusa non posso testarlo

Lo finirò domani.

non hai inserito il codice correttamente!

L'ho aggiustato un po' e funziona.

  datetime lastclouse; 
//+------------------------------------------------------------------+
int OnInit()
  {
   lastclouse=TimeCurrent();
   .....
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if(LastClouseProfit()!=EMPTY_VALUE)
     {
      SendNotification (LastClouseProfit()); lastclouse=TimeCurrent();
     }
   .....   
  }
//+------------------------------------------------------------------+
double LastClouseProfit()
  {
   ulong ticket=0;
   double profit=EMPTY_VALUE;
   HistorySelect(lastclouse,TimeCurrent());
   uint total=HistoryDealsTotal(); 
   for(uint i=0;i<total;i++) 
     { 
      if((ticket=HistoryDealGetTicket(i))>0) 
        { 
         profit+=HistoryDealGetDouble(ticket,DEAL_PROFIT); 
        }
     } 
   return(profit);
  }
//+------------------------------------------------------------------+
 
MakarFX:

Non hai inserito il codice correttamente!

L'ho corretto un po', funziona (l'ho controllato).

Qui, dobbiamo rintracciare il fatto che l'affare è stato chiuso esattamente a SL o TP. E usandoOnTradeTransaction otteniamo i dati pronti subito dopo la chiusura dell'affare.

double LastClouseProfit()
  {
   ulong ticket=0;
   double profit=EMPTY_VALUE;
   HistorySelect(lastclouse,TimeCurrent());
   uint total=HistoryDealsTotal(); 
   for(uint i=0;i<total;i++) 
     { 
      if((ticket=HistoryDealGetTicket(i))>0) 
        { 
         profit=HistoryDealGetDouble(ticket,DEAL_PROFIT); 
        }
     } 
   return(profit);
  }

Se c'è più di un trade chiuso a TimeCurrent, quale risultato dovrebbe essere restituito? E la presenza di un profitto non significa che il trade sia stato chiuso dallo SL o dal TP. Questo deve essere monitorato, come ho detto prima. Quindi, usareOnTradeTransaction è la soluzione più semplice!

 
Mihail Matkovskij:

Qui, abbiamo anche bisogno di tracciare che il trade sia stato chiuso esattamente sullo SL o TP.

L'avevo capito come una notifica di chiusura dell'affare, forse mi sono sbagliato...

Mihail Matkovskij:

Se più di un trade è chiuso a TimeCurrent, quale risultato dovrei ottenere?

non lo so, devo controllare

Motivazione: