Organizzazione del ciclo dell'ordine - pagina 4

 
fxsaber:

Non lo sarà, perché non è forte.


In primo luogo, il TS è scritto per il tester, dove le condizioni di trading sono ideali. Se tutto va bene, allora cercano di scrivere la versione live in modo tale che sia il più vicino possibile a quello che vedono nel tester. Qualsiasi altro approccio alla scrittura del TS è il colpo di fortuna, non l'algoritmizzazione dell'idea.

Quindi ecco la domanda fondamentale: qual è la situazione di combattimento più vicina a un tester? Ho espresso la mia opinione (e dato un esempio), ho sentito la tua.

Mi trovo di fronte al compito di tradurre la logica di trading di un Expert Advisor dal tick-testing nel tester di strategie (MT4) al suo lavoro su un conto reale.

Il mio ragionamento:

Nel tester, l'Expert Advisor funziona non solo in condizioni di trading ideali, ma in realtà in un altro modo - in tempo reale, cioè ha il tempo di calcolare il TS, e inviare un ordine e ottenere la sua risposta in un solo tick, ma non è così nel trading reale. Sembra che abbiamo una specie di due diversi robot : uno in tempo reale e uno senza tempo. Se inviamo/modifichiamo un ordine (anche uno solo!) a un conto reale = ping + tempo di esecuzione, ecc. = nel migliore dei casi 100-500ms, e durante questo tempo i tick vanno e devono essere contati - e noi stiamo, aspettiamo... e poi entriamo nel flusso a caso (dove è andato il prezzo durante questo tempo rispetto alle nostre medie di tick non lo sappiamo. + dobbiamo aver perso alcuni dei tic più veloci e di solito più importanti). Quindi, come risultato, potrebbe non rimanere nulla della strategia che abbiamo eseguito nel tester.

Pertanto, riflettendo, sono giunto a quanto segue:

  1. Nella modalità di battaglia, la logica di trading nell'Expert Advisor è disabilitata, e funziona, di fatto, come un follower.
  2. Il sistema di trading viene spostato nell'indicatore e genera comandi di apertura e chiusura, e non aspetta che l'esperto esegua questi comandi, ma esegue semplicemente il TS che ha in condizioni ideali, quasi come nel tester. Per quanto ne so l'indicatore non deve saltare i tick, anche se dubito che sia tecnicamente possibile - ma almeno deve saltarli meno dell'Expert Advisor dove questa possibilità era inizialmente descritta nella sua documentazione. + Anche a spese della separazione degli errori di calcolo di TC dovrebbe essere inferiore, perché non ci sono interruzioni per tutti i tipi di operazioni secondarie in relazione alla logica di TC.
 
zenz:

Così, riflettendo, sono giunto a quanto segue:

  1. Nella modalità di battaglia la logica di trading nell'Expert Advisor è disabilitata e funziona, di fatto, come una macchina da copia.
  2. Il sistema di trading viene spostato nell'indicatore e genera comandi di apertura e chiusura, e non aspetta che questi comandi vengano eseguiti dall'Expert Advisor ma semplicemente esegue il TS in condizioni ideali, quasi come in un tester. Per quanto ne so l'indicatore non deve saltare i tick, anche se dubito che sia tecnicamente possibile - ma almeno deve saltarli meno dell'Expert Advisor dove questa possibilità era inizialmente descritta nella sua documentazione. + Anche a scapito della separazione degli errori nel calcolo di TC dovrebbe essere meno, perché non ci sono interruzioni per tutti i tipi di secondario alla logica delle operazioni di TC.

Sì, uso lo stesso approccio - una specie di tester ideale interno con i propri ordini aperti e un copiatore che cerca di materializzare questi ordini virtuali. Questo schema aggira molti problemi seri molto facilmente.


In MT5 è più facile perché possiamo richiedere la cronologia dei tick. E potete richiederlo per diversi simboli.

 
Stanislav Korotky:

Non si tratta di tempo, ma di logica (sul tempo - questo è in un altro thread ;-) ). La tua logica (e la mia logica, visto che sono d'accordo su tutto, compresa l'analogia dell'automobile) è di fare l'analisi ambientale "in un colpo solo e in un pezzo solo", piuttosto che in modo frammentario. L'elaborazione di eventuali effetti collaterali è rimandata alla prossima esecuzione, poiché questi effetti saranno incorporati nel nuovo ambiente di trading.

Beh, se non ci fosse una correzione temporale, allora entrambe le logiche (la mia e quella di fxsaber) sarebbero identiche - tutti gli ordini verrebbero processati su ogni tick anche dopo diversi errori.

L'obiettivo è proprio quello di approssimare la realtà con un'esecuzione non istantanea al modello ideale ottenuto nei test.

 
fxsaber:

Sì, uso lo stesso approccio - una specie di tester ideale interno con i suoi ordini aperti e un copiatore che cerca di materializzare quegli ordini virtuali.

Se ti materializzi con il tuo approccio (in un ciclo, rimanendo sul primo ordine finché non si sincronizza con successo con la realtà), potresti incorrere nello stesso problema degli ordini rimanenti che si perdono dalla vista (o semplicemente vengono elaborati più tardi). Ma questo riguarda lo stesso argomento, presumibilmente completato).

 
Andrey Khatimlianskii:

Se ti materializzi con il tuo approccio (in un ciclo, rimanendo sul primo ordine finché non si sincronizza con successo con la realtà), potresti incorrere nello stesso problema degli ordini rimanenti che si perdono dalla vista (o semplicemente vengono elaborati più tardi). Ma si tratta della stessa questione che si suppone sia stata risolta).

Questo è il nostro modo di commerciare!

 
fxsaber:

Stiamo aspettando un esempio OOP. E la vedo ancora come la stessa spina dorsale sotto forma di loop. La logica non cambierà perché prima sarà per determinare cosa deve essere cambiato, e poi per sulle decisioni che abbiamo già preso.

Non scriverò un esempio specifico per questo compito. Ma potete vedere un concetto semplificato dell'approccio nel mio blog. Lì la coda non è analizzata in profondità ma solo controllata per il vuoto. Chi lo desidera può migliorarlo.

Se per logica intendiamo il compito "modificare una pila di ordini a causa del cambiamento dei prezzi", c'è solo un compito. La domanda è cosa è più importante: modificare tutti gli ordini o modificarli per adattarli agli ultimi prezzi? A seconda delle vostre preferenze, la logica sarà diversa. Un semplice ciclo garantirebbe che tutti gli ordini siano modificati, e sono a favore di questa opzione. Come è già stato detto, l'OOP fornisce una chiara divisione del compito in blocchi di responsabilità, e in base a questa decomposizione, "tutti gli ordini" è più importante della "rilevanza del prezzo". Questo è chiaro anche dal fatto che i prezzi cambiano continuamente, e gli ordini ci sono solo occasionalmente. Sono più importanti.

 
Stanislav Korotky:

L'OLP fornisce chiarezza nel dividere il compito in blocchi di responsabilità, e in base a questa decomposizione "tutti gli ordini" sono più importanti della "rilevanza del prezzo"

Sulla base di questa decomposizione, segue solo la divisione. La "rilevanza del prezzo" in questo OLP si ottiene stabilendo un posto in coda.
 
fxsaber:
Sulla base di questa decomposizione, segue solo la separazione. La "rilevanza del prezzo" in questa OOP si ottiene stabilendo un posto nella coda.

Questa è un po' una "filosofia" ormai. L'elaborazione è per coda d'ordine e non per flusso di tick come suggerito nell'alternativa. Comunque, mi ritiro da questa discussione. Tutte le argomentazioni sono già state fatte.

 
Stanislav Korotky:

Comunque, mi ritiro da questa discussione. Tutte le argomentazioni sono già state fatte.

C'è già la tendenza a finire così.

 
fxsaber:

Di seguito tratteremo un argomento che non riguarda solo MT4, ma anche MT5 con altre piattaforme. Ma la logica sarà scritta in MQL4 per una facile percezione, quindi in questo ramo.

Il più delle volte la spina dorsale (la carne di qualsiasi ordine) della modifica/cancellazione dell'ordine si riduce alla seguente logica

Ora, l'approccio è raro, ma molto più corretto

Dopo l'invio di un ordine di trading, l'ambiente di trading cambia, quindi è consigliabile eseguire l'intera logica di trading del TS da zero immediatamente dopo la risposta del server di trading.

Il looping è uno dei trucchi di programmazione più pericolosi. Causa strani errori che si verificano raramente e che sono quasi impossibili da analizzare.

Invece di andare in loop, dovreste al contrario cercare di finire il thread utente il più rapidamente possibile. Se vuoi tenere la mano sul polso - analizza OnTradeTransaction in MT5. MT4 non è generalmente adatto per tali cicli, perché la semplicità è, come si dice, peggiore del furto.