La mia insoddisfazione al tester di strategia. agli sviluppatori di MQL - pagina 2

 
Alexey Volchanskiy:

Renat, colgo l'occasione per chiedere, visto che sei qui. Ci saranno servizi nella nuova costruzione o è rimandata per ora?

Più tardi.

Nel frattempo, puoi scrivere i datafeed per gli strumenti sintetici senza di loro.

 
Renat Fatkhullin:

Più tardi.

Nel frattempo, posso scrivere feed di dati per strumenti sintetici senza di loro.


Voglio il multithreading, speravo che in qualche modo si potesse fare con i servizi. Personalmente non ho ancora bisogno dei datafeed.

 

Buona giornata a tutti voi.

No, questo post non è una stronzata come ha scritto qualcun altro.

Sono in pieno serge.

Capisco quello che i programmatori scrivono e dicono che funziona, ma mi dispiace.

Se lavoriamo tutti con dati errati sul broker, mi faccio subito un'idea, i miei risultati non sono errati.

Il fatto è che potrei aver ironicamente studiato all'università per essere un ingegnere statistico.

Quindi per me i dati errati sono in generale dati falsi di conseguenza per dire il 99% che quello che vedo funziona io come un uomo di statistica dire che non so lo stesso dire voi e tutti coloro che questo post letto.

La soluzione è quella che ho scritto sopra.

Raccogliere zecche che tutti possono fare con un semplice robot/algoritmo.

Il fatto è che né in 5 né in 4 MQL abbiamo i dati di mercato, che dovrebbero essere usati per testare la strategia.

Per le strategie a lungo termine, non credo che un robot sia necessario.

Per me è tick per tick e ho idee interessanti per studiare asc e bid per tick.

Scusa per la lunga risposta e il tempo, sono stato molto occupato.

Cordialmente Ivan S.

 
Alexey Volchanskiy:

Ho scritto una volta, lo troverò.

Per cinquehttps://www.mql5.com/ru/code/18046

Per quattrohttps://www.mql5.com/ru/code/18047

Per un sei,https://www.mql5.com/ru/code/.


Sarai sorpreso, ma è lo stesso per il 5 e il 4.

Posso parlare per 4 e 5 allo stesso tempo!


Non ho letto il codice completo del tuo algoritmo, ma fondamentalmente questa parte del codice è per il salvataggio, ma ora ho bisogno di riprodurre questo Ask e avere l'output di Strategy Tester.

Se c'è qualche programmatore che può farlo, lo ascolto molto attentamente!

 
Renat Fatkhullin:
Se non mi sbaglio, in mt5 il tester è su tick reali dove bid/ask è reale?

Renat ha verificato che mql5 funziona come in 4 mql.

 
Ivan Stepanenko:

Renat ha verificato che mql5 funziona allo stesso modo che con 4 mql.


il problema è stato risolto molto tempo fa.

1. La questione è già stata risolta. Per MQL5 i test su zecche reali sono disponibili da circa un anno. Se solo avessi studiato il terminale...

2. Per MQL4, potete usare i vostri file .fxt di tick. Il modo più semplice è usare TickStory Lite, che scarica zecche reali da Ducas

 
Ivan Stepanenko:

renat ha controllato che mql5 funziona allo stesso modo che imposta uno spread fisso. come in 4 mql.


una bugia

Prendiamo il mio Expert Advisor per i tick che salva SaveTicks, il link a CodeBase che ho dato sopra, e lo facciamo girare nel tester in modalità"Ogni tick basato su tick reali". Vediamo cosa c'è nel file di output, nel mio caso \Tester\Agent-127.0.0.1-3000\MQL5\Files\EURUSD_SaveTicks.csv

2017.11.28 09:11:16,1.1895,1.18952

2017.11.28 09:11:16,1.1895,1.18952

diffusione 2

2017.11.28 09:11:26,1.18947,1.18951

2017.11.28 09:11:26,1.18947,1.18951

diffusione 4
 

Guarda il browser dei caratteri, e ci sono dei segni di spunta per tutti i caratteri.

Queste sono le zecche reali usate nel tester.

 
Ivan Stepanenko:

Buona giornata a tutti voi.

No, questo post non è una stronzata come ha scritto qualcun altro.

Sono in pieno serge.

Capisco quello che i programmatori scrivono e dicono che funziona, ma mi dispiace.

Se lavoriamo tutti con dati errati sul broker, mi faccio subito un'idea, i miei risultati non sono errati.

Il fatto è che potrei aver ironicamente studiato all'università per essere un ingegnere statistico.

Quindi per me i dati errati sono in generale dati falsi di conseguenza per dire il 99% che quello che vedo funziona io come un uomo di statistica dire che non so lo stesso dire voi e tutti coloro che questo post letto.

La soluzione è quella che ho scritto sopra.

Raccogliere zecche che tutti possono fare con un semplice robot/algoritmo.

Il fatto è che né in 5 né in 4 MQL abbiamo i dati di mercato, che dovrebbero essere usati per testare la strategia.

Per le strategie a lungo termine, non credo che un robot sia necessario.

Per me è tick per tick e ho idee interessanti per studiare asc e bid per tick.

Scusa per la lunga risposta e il tempo, sono stato molto occupato.

Cordialmente Ivan S.

E la tua grammatica? //Solo per dire...

Se tutto è così serio, la soluzione alla tua domanda è la seguente:

Raccogliere statistiche, citare la storia e il lavoro, Alexey Volchansky ha già trovato tutto per voi e ha dato i link qui sopra.

Sull'Ask - puoi scaricare la storia con Ask e Bids da DucasCopy (cercalo su Google).

Buona fortuna!
 

Ecco alcuni articoli interessanti:


Inoltre, nella beta di ieri di MetaTrader 5, a cui è possibile aggiornare da MetaQuotes-Demo, c'è un sistema completo di creazione di simboli personalizzati.

Ora puoi creare strumenti finanziari sintetici - strumenti basati su uno o più strumenti esistenti. Basta specificare la formula per il calcolo delle quotazioni, e la piattaforma genererà i tick dello strumento sintetico in tempo reale e creerà la sua cronologia dei minuti.

Come funziona

  • Si crea un simbolo sintetico e si imposta una formula per esso.
  • La piattaforma calcolerà i suoi tick al ritmo di 10 volte al secondo (e solo se il prezzo di almeno uno strumento incluso nella formula è cambiato).
  • La piattaforma calcolerà la storia delle barre dei minuti (per gli ultimi due mesi) basandosi sulle barre dei minuti degli strumenti inclusi nella sua formula. Tutte le nuove barre (attuali e successive) saranno costruite in tempo reale sulla base dei tick generati dallo strumento sintetico.
Per esempio, è possibile creare uno strumento che mostrerà l'indice del dollaro (USDX). La sua formula sarà la seguente:
50.14348112 * pow(ask(EURUSD),-0.576) * pow(USDJPY,0.136) * pow(ask(GBPUSD),-0.119) * pow(USDCAD,0.091) * pow(USDSEK,0.042) * pow(USDCHF,0.036)
Nota: la formula originale dell'indice del dollaro utilizza le coppie USDEUR e USDGBP. Dato che la piattaforma ha solo coppie di valute inverse, la formula dello strumento sintetico usa un grado negativo per loro e il prezzo Ask invece di Bid.

In tempo reale, la piattaforma calcolerà il prezzo del nuovo strumento in base alle quotazioni degli altri sei strumenti forniti dal tuo broker. Nel Market Watch e nel grafico, vedrai come sta cambiando il suo prezzo:



Crea un nuovo strumento personalizzato, apri la sua specifica e specifica la formula:




Per comodità, l'editor di formule mostra una lista di opzioni possibili mentre inserite i nomi di strumenti e funzioni.

Il calcolo dei tick e delle barre dei minuti dello strumento sintetico inizia quando viene aggiunto a "Market Watch". Tutti i simboli necessari per il suo calcolo saranno aggiunti automaticamente al "Market Watch" immediatamente. Una registrazione dell'inizio del calcolo sarà aggiunta al registro della piattaforma: Simbolo sintetico USDX: elaborazione avviata.
  • Il calcolo dello strumento sintetico si ferma quando viene nascosto da Market Watch.
  • I simboli che sono attualmente utilizzati per calcolare gli strumenti sintetici non possono essere nascosti dal Market Watch.

Calcolo delle quotazioni in tempo reale
Ogni 100 ms (dieci volte al secondo) controlliamo se il prezzo di almeno uno strumento coinvolto nella formula è cambiato. Se è così, viene calcolato il prezzo dello strumento sintetico e viene generato un tick. Il calcolo viene eseguito in parallelo in tre flussi per i prezzi Bid, Ask e Last. Per esempio, se EURUSD*GBPUSD è specificato nella formula, il calcolo del prezzo dello strumento sintetico sarà il seguente:

  • Bid - bid(EURUSD)*bid(GBPUSD)
  • Ask - ask(EURUSD)*ask(GBPUSD)
  • Ultimo - ultimo(EURUSD)*ultimo(GBPUSD)

La presenza di cambiamenti è controllata per ogni prezzo separatamente. Per esempio, se nel calcolo successivo solo il prezzo Bid dello strumento iniziale è cambiato, allora solo il prezzo, dove ci sono stati cambiamenti, sarà calcolato per il tick dello strumento sintetico.

Costruire la storia dei minuti bar
Oltre a raccogliere i tick in tempo reale, la piattaforma crea anche una storia minuta di uno strumento sintetico. Così, un trader può visualizzare i suoi grafici come se fossero strumenti regolari ed eseguire analisi tecniche su di essi utilizzando oggetti e indicatori.

Non appena il trader aggiunge uno strumento sintetico al Market Watch, la piattaforma controlla se esiste una cronologia dei minuti calcolata per esso. In caso contrario, sarà creato per gli ultimi 60 giorni, che sono circa 50.000 battute. Se le barre massime nella finestra nelle impostazioni della piattaforma hanno un valore più basso, questo è il limite che verrà utilizzato.

Se alcune delle barre in questo periodo sono già costruite, la piattaforma ne creerà di nuove. Una storia più profonda viene creata solo quando si cerca di visualizzare il timeframe corrispondente sul grafico (se si scorre indietro o si richiede la storia dal programma MQL5).

La storia delle barre dei minuti di uno strumento sintetico è calcolata sulla base delle barre dei minuti (non dei tick) degli strumenti inclusi nella sua formula. Per esempio, per calcolare il prezzo della barra Open minute di uno strumento sintetico, la piattaforma prende i prezzi degli strumenti Open inclusi nella sua formula. I prezzi di High, Low e Close sono calcolati allo stesso modo.

Se non hai una barra dei minuti nella formula di un simbolo, la piattaforma userà il prezzo di chiusura della barra precedente. Per esempio, puoi usare tre simboli: EURUSD, USDJPY e GBPUSD. Se USDJPY non ha una barra dei minuti corrispondente alle 12:00, i seguenti prezzi saranno utilizzati per il calcolo:

  • Per l'apertura - EURUSD Apertura 12:00, USDJPY Chiusura 11:59, GBPUSD Apertura 12:00
  • Per gli alti - EURUSD High 12:00, USDJPY Close 11:59, GBPUSD High 12:00
  • Per il basso - EURUSD Basso 12:00, USDJPY Chiusura 11:59, GBPUSD Basso 12:00
  • Per la chiusura - EURUSD Chiusura 12:00, USDJPY Chiusura 11:59, GBPUSD Chiusura 12:00

Se tutti i simboli nella formula non hanno una barra dei minuti, la corrispondente barra dei minuti sintetica non sarà calcolata.

Costruzione di nuovi mini bar
Tutte le nuove barre (attuali e successive) nello strumento sintetico sono create in base ai tick generati. Il prezzo al quale le barre sono costruite dipende dal parametro "Chart construction" nella specifica:





Quali operazioni possono essere utilizzate nella formula dello strumento
Puoi usare i dati dei prezzi e alcune proprietà dei simboli disponibili (forniti dal tuo broker) nella tua formula. Per fare questo, specificare:

  • Nome del simbolo - a seconda di un prezzo sintetico del simbolo, la formula userà il prezzo Bid, Ask o Last del simbolo specificato. Per esempio, se si specifica EURUSD*GBPUSD, allora il prezzo Bid sarà calcolato come Bid(EURUSD)*bid(GBPUSD), e il prezzo Ask - come Ask(EURUSD)*ask(GBPUSD).
  • Bid(nome simbolo) - per calcolare il prezzo Bid di un simbolo sintetico, il prezzo Bid del simbolo specificato sarà forzatamente usato. In realtà, questa variante corrisponde alla precedente (senza specificare un tipo di prezzo).
  • Ask(nome del simbolo) - il prezzo Ask del simbolo specificato sarà forzatamente utilizzato per il calcolo del prezzo Bid dello strumento sintetico. Per calcolare il prezzo di Ask, al contrario, verrà utilizzato il prezzo di Bid del simbolo specificato. Per calcolare l'Ultimo prezzo, verrà utilizzato l'Ultimo prezzo del simbolo specificato. Per esempio, se specificate Ask(EURUSD)*GBPUSD, il calcolo sarà il seguente:
    • Bid = ask(EURUSD)*bid(GBPUSD)
    • Ask = bid(EURUSD)*ask(GBPUSD)
    • Ultimo = ultimo(EURUSD)*ultimo(GBPUSD)
  • last(symbol name) - l'ultimo prezzo del simbolo specificato sarà usato per calcolare tutti i prezzi sintetici del simbolo (Bid, Ask e Last). Per esempio, se si specifica last(EURUSD)*GBPUSD, il calcolo sarà il seguente:
    • Bid = last(EURUSD)*bid(GBPUSD)
    • Ask = last(EURUSD)*ask(GBPUSD)
    • Ultimo = ultimo(EURUSD)*ultimo(GBPUSD)
  • volume(Nome del simbolo) - la formula userà il volume del tick per il simbolo specificato. Assicurati che le informazioni sul volume siano tradotte per lo strumento specificato.
  • point(symbol name) - la dimensione della variazione minima del prezzo di uno strumento specificato sarà usata nella formula.
  • digits(symbol name) - il numero di cifre decimali nel prezzo del simbolo specificato sarà sostituito nella formula.

Se un simbolo ha un nome complesso (contiene trattini, punti, ecc.) deve essere racchiuso tra virgolette. Per esempio, "RTS-6.17".
Le operazioni aritmetiche possono essere utilizzate nella formula: addizione (+), sottrazione (-), moltiplicazione (*), divisione (/) e resto della divisione (%). Per esempio, EURUSD+GBPUSD significa che il prezzo è calcolato come somma di EURUSD e GBPUSD. Potete anche usare un meno unario nella formula per cambiare il segno, per esempio: -10*EURUSD.

C'è una priorità per le operazioni aritmetiche:

  • Vengono eseguite prima le operazioni di moltiplicazione, divisione e resto, poi le operazioni di addizione e sottrazione.
  • Le operazioni vengono eseguite da sinistra a destra. Se in una formula si usano diverse operazioni che hanno la stessa priorità (per esempio, moltiplicazione e divisione), l'operazione a sinistra sarà eseguita per prima.
  • Le parentesi ( e ) possono essere usate per cambiare la priorità delle operazioni. Le espressioni tra parentesi hanno la massima priorità nel calcolo. Il principio di sinistra a destra si applica anche a loro: le espressioni tra parentesi a sinistra in una formula sono calcolate per prime.

Le costanti possono anche essere usate nella formula:

  • Numerico (intero e reale con un punto). Per esempio, EURUSD*2+GBPUSD*0.7.
  • Le proprietà dei simboli _Digits e _Point. Sostituiscono le proprietà dei simboli personalizzati dalla specifica nella formula. _Digits - numero di posti decimali nel prezzo del simbolo, _Point - dimensione del cambiamento minimo del prezzo del simbolo.

Anche tutte le funzioni matematiche supportate in MQL5 possono essere utilizzate nella formula, tranne MathSrand, MathRand e MathIsValidNuber. Si usano solo nomi brevi per tutte le funzioni: fabs(), acos(), asin(), ecc.