Caratteristiche del linguaggio mql4, sottigliezze e tecniche - pagina 19

 

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

Biblioteche: Esperto

fxsaber, 2019.06.04 16:40

// MT4-советник показывает, в каком режиме Long/Short был запущен.

#include <fxsaber\Expert.mqh> // https://www.mql5.com/ru/code/19003

int GetLongShortFlag( const int Chart_ID = 0 )
{
  MqlParam Params[];
  string Names[];
  
  const int Res = EXPERT::Parameters(Chart_ID, Params, Names);
  
  return(((Res & 3) << 1) + (Res & 1));
}

string LongShortToString( const int Chart_ID = 0 )
{
  const int Flag = GetLongShortFlag(Chart_ID);
  string Str = NULL;
  
  if ((bool)(Flag & SYMBOL_TRADE_MODE_LONGONLY) && (bool)(Flag & SYMBOL_TRADE_MODE_SHORTONLY))
    Str = "Long & Short";
  else if ((bool)(Flag & SYMBOL_TRADE_MODE_LONGONLY))
    Str = "Only Long";
  else if ((bool)(Flag & SYMBOL_TRADE_MODE_SHORTONLY))
    Str = "Only Short";
    
  return(Str);
}

int OnInit()
{
  Alert(LongShortToString());
  
  return(INIT_FAILED);
}


Alternativa

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

Qualsiasi domanda da principiante su MQL4 e MQL5, aiuto e discussione su algoritmi e codici

fxsaber, 2019.06.04 19:40

string LongShortToString2()
{
  string Str = "Long & Short";

  if (OrderSend(_Symbol, OP_BUY, 1, 0, 0, 0, 0) && (GetLastError() == ERR_LONGS_NOT_ALLOWED))
    Str = "Only Short";
  else if (OrderSend(_Symbol, OP_SELL, 1, 0, 0, 0, 0) && (GetLastError() == ERR_SHORTS_NOT_ALLOWED))
    Str = "Only Long";
    
  return(Str);
}


Non funzionerà sempre, ma il più delle volte è sufficiente.

 
I commenti non relativi a questo argomento sono stati spostati in "Tutte le domande dei neofiti su MQL4 e MQL5, aiuto e discussione su algoritmi e codici".
 

Il compito era quello di salvare tutti i tick (senza perdite) dal Market Watch con il minimo sforzo.

Ho scritto un Loader-script, che apre un grafico per ogni simbolo ed esegue l'indicatore-collettore su di esso.

L'intero trucco consiste nell'eseguire l'indicatore attraverso il caricamento di un tale file tpl (dato per intero)

<chart>
<window>
<indicator>
name=Custom Indicator
<expert>
name=HistoryTicks_OnlySave
</expert>
</indicator>
</window>
</chart>

È buono perché non ci sono bar. Perciò non vengono spese risorse per loro.

Alla fine della giornata ci sono 60 grafici. La stessa quantità di indicatori. Vengono scritti ~500Kb di tick al minuto.

RAM ~450Mb, CPU ~3-8% (8 HyperThreading).


Se vuoi fare qualcosa del genere, ti consiglio vivamente di eseguire Expert Advisor, che tiene traccia di quanto spesso i dati cambiano in Market Watch. Il mio EA non si aggiorna per più di tre secondi e poi è costretto a rifare il login. Il fatto è che MT4 (e anche MT5) in caso di problemi di rete può ri-loggarsi dopo 10-15 secondi, e a volte fino a un minuto. Solo allora il re-login stesso. Per non perdere tick in quei 10-15 secondi o anche un minuto, consiglio di prendere il compito di riconnessione. Lo stesso vale per i terminali con TC da combattimento.

 
fxsaber:

La sfida è salvare tutti i tick (senza perdite) dal Market Watch con il minimo sforzo.

È senza perdite? Questo mito è già stato sfatato.

 
Andrey Khatimlianskii:

Nessuna perdita, quindi? Credo che questo mito sia già stato sfatato.

Non ricordo esattamente come mi sono convinto di questo. So che ho confrontato la storia raccolta in MT4 con quella del broker. Ho ottenuto una corrispondenza del 100%.

Io uso la soluzione HistoryTicks di QB. Quando confronto il risultato del tester virtuale sui tick raccolti e il risultato del tester MT5 sui tick scaricati - corrisponde al 100%.

I problemi possono essere dovuti solo alla connettività. Gli Expert Advisors, ovviamente, mancano. Gli indicatori non lo fanno.

 
fxsaber:

Non ricordo esattamente come mi sono convinto di questo. So che ho confrontato la storia raccolta in MT4 con quella del broker. C'era una corrispondenza del 100%.

Io uso la soluzione HistoryTicks di QB. Quando confronto il risultato del tester virtuale sui tick raccolti e il risultato del tester MT5 sui tick scaricati - corrisponde al 100%.

I problemi possono essere dovuti solo alla connettività. Gli Expert Advisors, ovviamente, mancano. Gli indicatori non lo fanno.

Ahem... Stavo parlando della tua esposizione:

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

Errori, bug, domande

fxsaber, 2018.02.26 09:05

Se è arrivato un pacchetto di tre tick, l'evento Calculate sarà chiamato tre volte, ma SymbolInfoTick restituirà l'ultimo tick su ciascuna di queste tre chiamate. Cioè la cosiddetta raccolta di zecche senza passare per gli indicatori è discutibile, per usare un eufemismo.


È cambiato qualcosa?

 
Andrey Khatimlianskii:

Ahem... Stavo parlando della tua esposizione:

È cambiato qualcosa?

Quando c'era da smanettare con CopyTicks, c'era un confronto tra i risultati della raccolta di tick e CopyTicks.

Non ricordo esattamente, ma credo che ci sia stato un incontro.

Dobbiamo usare CustomTicksAdd per aggiungere un lotto di zecche e guardarlo. Ma è MT5.


Per MT4 può essere controllato in questo modo. Due zecche registrate vicine dovrebbero essere sempre diverse. E i volumi dei tick delle barre sul server dovrebbero coincidere con le barre dei tick raccolti.

Nel 2018 devo aver saputo qualcosa di intelligente. Ora non riesco a ricordare.

 
fxsaber:

Non ricordo esattamente come mi sono convinto di questo. So che ho confrontato la storia raccolta in MT4 con quella del broker. C'era una corrispondenza del 100%.

Io uso la soluzione HistoryTicks di QB. Quando confronto il risultato del tester virtuale sui tick raccolti e il risultato del tester MT5 sui tick scaricati - corrisponde al 100%.

I problemi possono essere dovuti solo alla connettività. Gli Expert Advisors, ovviamente, mancano. Gli indicatori non lo fanno.

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

Dare un consulente per raccogliere la storia delle zecche

zenz, 2018.03.07 11:10

Ho fatto il confronto a settembre. L'archivio Alpari ha un ritardo di pubblicazione di 1 settimana, quindi se faccio il confronto attuale, non lo otterrò prima della prossima settimana (e non vedo molto senso - l'ho già capito da solo).

Ecco quindi due screenshot del 22.09.2017. Il terminale era in esecuzione su un computer vuoto, con l'unico indicatore che scriveva il log. Sistema operativo XP SP3, versione del terminale MT4 build 1090. Conto Alpari Pro-ECN Real.



A sinistra c'è l'immagine dell'archivio Alpari, e a destra i tic registrati dall'indicatore.

Qui si può notare che i tick prima dei 17 secondi e dopo (16 e 18 secondi) coincidono completamente, cioè il caso, in questo caso, non è in desincronizzazione del tempo. Ripeto che non è solo in un secondo che i tic saltano - cioè non solo i tic veloci - ma anche quelli "lenti" vengono inghiottiti. Non ho trovato nessuna sistematicità in questo.

Spiegazione: a destra del punto dopo i secondi nell'archivio di Alpari non ci sono miglia o microsecondi, ma il numero di tick - è fatto così per qualche motivo.

Ecco un link a quel thread:https://www.mql5.com/ru/forum/229889/page4#comment_6741502 Non credo che qualcosa sia cambiato in MT4 da allora, anche se non ho più controllato, ma presumo che sia gli indicatori che gli EA in MT4 perdano i tick.

Дайте советник для сбора тиковой истории
Дайте советник для сбора тиковой истории
  • 2018.03.07
  • www.mql5.com
Дайте готовый советник для записи тиков в csv файл...
 
zenz:

Ecco il link a quel thread:https://www.mql5.com/ru/forum/229889/page4#comment_6741502. Non credo che qualcosa sia cambiato in MT4 da allora, anche se non ho più controllato, ma presumo che sia gli indicatori che gli EA in MT4 perdano i tick.

Non c'è alcuna certezza che dal lato del server commerciale questi tick "mancati" siano stati inviati.

 
fxsaber:

Non c'è alcuna certezza che dal lato del server commerciale questi tick "mancati" siano stati inviati.

Stavo riflettendo anche su questo, sono d'accordo. Stavo facendo delle ricerche in quel momento e ho scoperto che le discrepanze non erano isolate, ma ricorrenti - così ho lasciato perdere.

Motivazione: