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

 
Valeriy Yastremskiy #:

Non capisco un po' la logica. Gli eventi di apertura della posizione, modifica di SL, chiusura della posizione su diversi simboli sono monitorati. Apertura della posizione - cerca se una finestra con il simbolo dato è aperta (cerca l'id della finestra), se è aperta, allora disegniamo i livelli e poi monitoriamo lo SL trawl. In caso contrario, o apriamo una finestra con il simbolo e il timeframe richiesti e disegniamo i livelli o non la apriamo. L'evento di modifica, trova la finestra del simbolo richiesto, i livelli sono già stati disegnati e cambia il colore del livello o cancellalo e disegna di nuovo il livello.

In generale, per escludere l'influenza del cliente, all'inizio del lavoro dovremmo analizzare le posizioni e le finestre e aprire le finestre per i simboli con posizioni aperte e non aperte.

La cosa importante in tutto questo è un algoritmo di trawl correttamente funzionante, cioè le operazioni di trading stesse.

Il disegno è in background, è informativo e non ha nulla a che fare con la redditività del sistema.

Quindi, se c'è una posizione ma il grafico è chiuso e non si è chiuso da solo, non c'è bisogno di aprire nulla, l'algoritmo a strascico funzionerà e gli stop saranno spostati. Una situazione molto peggiore è quando il grafico è ovviamente chiuso, ma il programma lo ha aperto di nuovo letteralmente per disegnare il grafico - questo è già male.

 

Colleghi - ho esportato un file di cache di ottimizzazione nel cloud, come posso usarlo su un altro computer per selezionare una variante per le offerte?


Risposta:

Se qualcuno ne ha bisogno - qui.


Оптимизация стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Оптимизация стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии ( советники ) перед началом использования их в реальной торговле. При...
 
Vitaly Muzichenko #:

La cosa importante in tutto questo è un algoritmo di pesca a strascico che funziona correttamente, cioè gli stessi scambi.

Il disegno è in background, è informativo e non ha nulla a che fare con la redditività del sistema.

Quindi, se c'è una posizione ma il grafico è chiuso e non si è chiuso da solo, non c'è bisogno di aprire nulla, l'algoritmo a strascico funzionerà e gli stop saranno spostati. È molto peggio, quando il grafico è chiuso, ma il programma lo ha aperto di nuovo letteralmente per disegnare il grafico - questo è già male.

Possiamo farlo anche così. Ma in questo caso, se c'è un grafico aperto basato sull'evento, può essere disegnato. In generale, possiamo ridisegnare i livelli ogni volta per evitare confusione. Abbiamo tutti i dati per questo. Il livello di innesco per la rete a strascico, il passo della rete a strascico, il prezzo della posizione. Il numero di livello e il numero di livelli attivati per la posizione sono facilmente calcolabili.

 
Valeriy Yastremskiy #:

Anche questo è possibile. Ma poi disegniamo se c'è un grafico aperto per l'evento. In generale, i livelli possono essere ridisegnati ogni volta per evitare confusione. Abbiamo tutti i dati per questo. Livello di innesco della rete a strascico, passo della rete a strascico, prezzo della posizione. Il numero di livello e il numero di livelli attivati per una posizione sono facilmente calcolabili.

Direi che se c'è una posizione, dovremmo disegnare in anticipo i livelli che faranno scattare una pesca a strascico. Se è apparsa un'ulteriore posizione, ridisegna le linee ai nuovi livelli anche in avanti.

Non vedo l'utilità di cambiare il colore dopo il passaggio/modifica. Dopo la chiusura delle posizioni tutte le linee possono essere cancellate.

Sull'esempio mostrato come dovrebbe essere

Gli oggetti dove le posizioni saranno aperte sono disegnati qui, è solo informativo, questo è tutto


---

P.S. Al momento non posso fare i conti, purtroppo

 

Domanda su OnTimer

Se l'evento del timer si verifica prima dell'esecuzione del programma, aspetterà (il programma salterà l'evento del timer), o il programma si interromperà e inizierà a lavorare sul nuovo evento del timer? Rimarrà appeso in un loop infinito, o andrà in loop ogni secondo?

int OnInit()
{
 EventSetTimer(1);
      
    }
//---
  return(INIT_SUCCEEDED);
}

void OnTimer()
{
  
  int i=0;
  while(i<1) {
   
  }
}

Non c'è alcuna indicazione diretta nei documenti sulla priorità dell'evento del timer e sul corso del programma, solo sull'ordine degli eventi.

O forse non ho capito bene. L'evento del timer su cui è iniziata l'azione conta come se fosse nella coda?

Banchine:

EventSetTimer

Non può essere avviato più di un evento timer per ogni programma. Ogni programma mql4 e ogni grafico ha la sua coda di eventi, dove vengono memorizzati tutti gli eventi appena arrivati. Se c'è già un evento Timer nella coda o se questo evento è in stato di elaborazione, un nuovo evento Timer non viene messo nella coda di mql4-program.


 
Valeriy Yastremskiy esecuzione del programma, aspetterà (il programma salterà l'evento del timer), o il programma si interromperà e inizierà a lavorare sul nuovo evento del timer? Rimarrà appeso in un loop infinito, o andrà in loop ogni secondo?

Non c'è alcuna indicazione diretta nei documenti sulla priorità dell'evento del timer e sul corso del programma, solo sull'ordine degli eventi.

O forse non ho capito bene. L'evento del timer su cui è iniziata l'azione conta come se fosse nella coda?

Banchine:

EventSetTimer

Non può essere avviato più di un evento timer per ogni programma. Ogni programma mql4 e ogni grafico ha la sua coda di eventi, dove vengono memorizzati tutti gli eventi appena arrivati. Se c'è già un evento nella coda di Timer, o se questo evento è in stato di elaborazione, un nuovo evento Timer non viene messo nella coda del programma mql4.


Gli eventi NON sono tempi. Sono gestiti in OnXXX uno per uno, senza interrompere nessuna delle funzioni.

Finché OnInit non termina nessun altro gestore OnTimer OnTick sarà chiamato dal terminale. (A meno che non lo si strappi da soli come funzione).

 
Maxim Kuznetsov #:

Gli eventi NON sono interruzioni. Vengono processati in OnXXX uno per uno, senza interrompere le funzioni di testo.

Finché OnInit non termina, nessun altro gestore OnTimer OnTick sarà chiamato dal terminale. (A meno che non lo si strappi da soli come funzione).

Grazie)

 
Vitaly Muzichenko #:

La cosa importante in tutto questo è un algoritmo di pesca a strascico che funziona correttamente, cioè gli stessi scambi.

Il disegno è in background, è informativo e non ha nulla a che fare con la redditività del sistema.

Quindi, se c'è una posizione ma il grafico è chiuso e non si è chiuso da solo, non c'è bisogno di aprire nulla, l'algoritmo a strascico funzionerà e gli stop saranno spostati. È molto peggio, quando un grafico è chiuso, ma il programma lo ha aperto di nuovo letteralmente per disegnare un grafico - questo è male.

Mio Dio - perché sei stato mandato all'autolavaggio? Hai scritto in un posto sbagliato e variabili sbagliate: z o v...?

 
Ciao, se qualcuno non è troppo difficile per favore scriva o mi aiuti a scrivere una funzione per un EA MT4. L'idea è che se cambio manualmente una posizione aperta o un ordine a mercato, l'EA invierà un messaggio alla posta elettronica. Per esempio: ho spostato lo stop loss di un ordine Limit aperto, l'EA scriverà una mail dicendo che lo stop loss per quell'ordine è cambiato da così e così a così e così.
 
Vitaly Muzichenko #:


Sembra che dovrebbe funzionare. Non l'ho testato.

Logica del disegno. Non controllo i livelli, disegno di nuovo e sotto il prezzo, se in Buy disegno in grigio, sopra in blu, in Sell, se sopra il livello di prezzo, è grigio, sotto in rosso.

Sì, ho dimenticato di impostare la rimozione dei livelli)))

File: