Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 157

 
Andrey Khatimlianskii:

Ciao!

L'analogo dei grafici off-line di MT4 è il castum instruments. Si può riempire qualsiasi storia, incluso fare 1 barra = 1 tick.

Ma, come in MT4, ogni barra deve essere almeno un minuto diversa nel tempo da quella precedente, quindi non ci sarà una scala temporale normale.

ps: c'è un indicatore pronto qui - https://www.mql5.com/en/blogs/post/719145

In MT4 il tempo di una barra deve solo essere più lungo della barra precedente, e poi MT4 visualizzerà la barra, cioè in MT4 è possibile disegnare barre su grafici offline con una precisione di secondi, ho postato un grafico di secondi in QB

Ma con MT5 questo "non funzionerà", se si tenta di inviare al simbolo personalizzato 2 barre con lo stesso tempo di apertura, senza tenere conto dei secondi, allora solo una barra sarà visualizzata, cioè, la precisione di meno di M1 sui grafici personalizzati di MT5 non funzionerà

 
fxsaber:

Qui c'è un diagramma. Funziona.

Senza spostare il TA? Funziona ogni volta? Non più della fortuna.


fxsaber:

Dov'è il confine della perfezione che può/deve essere tollerato? Che cosa hanno a che fare le regressioni e le requote che si verificano occasionalmente con il tester?

I rifiuti non c'entrano niente.

Un ordine Limit non ha bisogno di essere eseguito all'ultimo prezzo conosciuto né nel tester né in tempo reale. Il prezzo può andare ovunque durante il suo invio.

Un'altra questione è che nel modo di 0-delay (esecuzione ideale), il tester può fingere che l'ordine sia stato inviato al broker ed eseguito immediatamente, ma non vedo alcun profitto in questo, perché, ancora una volta, non ha senso nel test ideale se il contrario accadrà comunque nella situazione reale.

 
Igor Makanu:

In MT4 il tempo della barra deve semplicemente essere più lungo della barra precedente e poi MT4 visualizzerà la barra, cioè in MT4 è possibile disegnare barre su grafici offline al secondo più vicino, ho postato un grafico a secondi in KB

Grazie per la modifica, l'avevo già dimenticato. Una volta c'erano sicuramente degli errori se il tempo non era un multiplo di minuti, poi sembrava funzionare anche così.

Sicuramente non si può fare così in 5.

 
Andrey Khatimlianskii:

Ciao!

L'analogo dei grafici off-line di MT4 è il castum instruments. Si può riempire qualsiasi storia, incluso fare 1 barra = 1 tick.

Ma, come in MT4, ogni barra deve essere almeno un minuto diversa nel tempo da quella precedente, quindi non ci sarà una linea temporale normale.

ps: c'è un indicatore pronto qui - https://www.mql5.com/en/blogs/post/719145

Oh, i simboli personalizzati sono proprio la cosa giusta! E il tempo delle zecche non ha importanza per me. Grazie, è un impulso nella giusta direzione. )))

 
Andrey Khatimlianskii:

Senza spostare il TA? Funziona bene ogni volta? Non più della fortuna.

No, certo che no. Ecco perché il ciclo.

Forum sul trading, sistemi di trading automatico e test di strategia

Caratteristiche del linguaggio mql4, complessità e trucchi

fxsaber, 2019.12.13 00:27

Schematicamente la chiusura urgente di una posizione avviene come segue
const double ClosePrice = OrderType() ? MathMin(OrderClosePrice(), Bid + MaxSpread * _Point) 
                                      : MathMax(OrderClosePrice(), Ask - MaxSpread * _Point);
    
OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), ClosePrice, 0); // StopLoss оставлен для истории
Nel ciclo, ovviamente. Avete altre opzioni?

I regolamenti non c'entrano niente.

Il limitatore non deve essere attivato all'ultimo prezzo conosciuto né nel tester né nella vita reale. Il prezzo può andare ovunque durante il tempo in cui viene inviato.

Un altro punto è che nella modalità di 0-delay (esecuzione ideale), il tester può fingere che l'ordine sia stato inviato al broker ed eseguito istantaneamente, ma non vedo alcun profitto in questo, perché, di nuovo, non ha senso nel test ideale se il contrario accadrà comunque nel mondo reale.

In realtà, sarà un'esecuzione completa (o parziale) al prezzo corrente (o migliore), o una ribattuta. Cioè l'esecuzione può essere perfetta o meno.

Così, il Tester funziona sempre perfettamente per un mercato, mentre fallisce sempre per un ordine limite.

 
fxsaber:

Questo significa che il tester funziona sempre perfettamente per un mercato, ma non per un limitatore.

Preferirei fare il prossimo tick per un mercato. Sarebbe meglio che il tester mostrasse una perdita piuttosto che una reale. Ed è improbabile che il Graal venga perso da questo.

 
Andrey Khatimlianskii:

Qui preferirei fare l'esecuzione del prossimo tick per i mercati. Meglio che un tester mostri un crollo che uno reale. Ed è improbabile che il Graal venga perso da questo.

Il prossimo tick non è corretto, il vostro mercato dovrebbe generare un tick, ed essere eseguito al più vicino bid o ask, tenendo conto del volume dello scambio.
Il limite dovrebbe anche essere riempito ad un prezzo garantito in base al volume.
Tutti gli altri algoritmi che sono fatti ora, solo fuorviante, ottenendo risultati reali.
Per questo motivo non uso affatto il tester. Non ha senso, quando sulle basi stesse, c'è una sostituzione di esecuzione.

 
Roman:

Il prossimo tick non è corretto, il vostro mercato dovrebbe dare origine a un tick, e sarà eseguito al più vicino bid o ask, tenendo conto del volume dello scambio.
L'ordine limite dovrebbe anche essere riempito a un prezzo garantito in base al volume.
Tutti gli altri algoritmi che sono fatti ora, solo fuorviante, ottenendo risultati reali.
Per questo motivo non uso affatto il tester. Non ha senso, quando sulle basi stesse, c'è una sostituzione di esecuzione.

Beh, per questo hai bisogno della storia della tazza o almeno dei volumi dell'estremo bid/ask. E non ce ne sono.

E un mercato non dovrebbe generare un tick nel tester, altrimenti la storia dipenderebbe dalla strategia da testare.

 
Andrey Khatimlianskii:

Beh, per questo hai bisogno della storia della tazza o almeno dei volumi dell'estremo bid/ask. E non ce ne sono.

E il mercato non dovrebbe generare un tick nel tester, altrimenti la storia dipenderebbe dalla strategia da testare.

Come uno dei moderatori ha dichiarato che mt5 è stato sviluppato per i mercati azionari,
ma guardando l'implementazione del tester, il suo sviluppo è stato ridotto allo stesso principio dell'esecuzione dell'affare, anche su tick reali.

Come si fa a fare i test, allora? Su quali dati storici?
E poi vi fidate dei test su tali citazioni storiche?
:))

Naturalmente è necessaria un'anamnesi delle zecche e un test su zecche vere.
Dove ottenere la cronologia delle zecche è un problema dell'utente, raccoglierla da solo, comprarla, prenderla da qualcuno che ce l'ha, ecc.

Sì, sono d'accordo che i volumi per il bid asc non vengono salvati ora, ma cosa impedisce agli sviluppatori di aggiungere tre colonne!

  1. Colonna del volume Chiedi
  2. Colonna del volume Offerta
  3. Colonna Ultima direzione di scambio, comprare o vendere


Allora tutti i problemi relativi alla correttezza dei test su zecche reali scompariranno automaticamente.
L'esecuzione degli ordini di scambio nel tester sarà come dovrebbe essere.

Sì, il tick generatore, non così volevo dire che il mercato nel tester dovrebbe essere eseguito al più vicino Bid Asks, raccogliendo liquidità a livelli di prezzo.
Cioè, se inviamo un BuyMarket con un volume di 25, il prezzo di esecuzione raccoglierà due livelli, 10 e 15, e farà automaticamente la media del prezzo netto della posizione.

182.13 Ask1 15
182.12 Ask0 10
--------------------
182.11 Bid0 5
182.10 Offerta1 8

Per gli ordini limite, il volume di Last trade dovrebbe riempire il volume del vostro ordine limite al prezzo garantito al quale l'ordine limite è stato piazzato.
Cioè, il vostro ordine limite dovrebbe essere parzialmente riempito. Se il vostro ordine limite è piazzato con un volume di 25, allora l'ultimo trade con un volume di 5 prenderà 5 dal vostro ordine limite.
Il tuo ordine limite ora ha un volume di 20, il prossimo Last trade è passato con un volume di 10, il tuo ordine limite ora ha un volume di 10,
un altro Last trade passato con volume 10, il tuo ordine limite è riempito completamente.
Se il prezzo si è girato e non ha eseguito l'intero volume del tuo ordine limite, questa è la situazione reale, l'esecuzione reale.
E il vostro restante volume di ordine limite continua ad aspettare fino a quando Last non lo raggiunge di nuovo, o voi stessi ritirate quell'ordine.

Pertanto, il modo in cui l'algoritmo è implementato nel tester, non ha nulla a che fare con la realtà.
È come un giocattolo per lavare gli occhi.


 

Non sto armeggiando con le mie strutture POD per aprire un formato. Ci sono molti campi nelle strutture. Alcune strutture sono ereditate, altre hanno campi privati.


Comunque, è sorto il compito di azzerare queste strutture per modificare il formato in studio. E non viene fuori niente. Come risultato ho deciso di usare questa variante.

#include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280

// Обнуление переменной.
template <typename T>
void ToNull( T &Value )
{
  uchar Bytes[sizeof(T)];
  ArrayInitialize(Bytes, 0);
  
  _W(Value) = Bytes;
}


Applicazione.

struct A
{
private:
  int i;
  
public:
  int j;  
};

void OnStart()
{
//  A a = {0};     // 'a' - cannot be initialized with initializer list
//  ZeroMemory(a); // 'a' - not allowed for objects with protected members or inheritance
  
  ToNull(a);
}


Un'alternativa è benvenuta.

Motivazione: