fxsaber: Se uno ha bisogno SOLO del nastro (COPY_TICKS_TRADE - time_msc, last, volume e flags), questa soluzione è completamente adatta - nessun bug rilevato.
Tutti i freni sembrano essere attivi quando l'input da CopyTicks non è zero.
Sembra essere un'implementazione molto storta di CopyTicks in questa modalità, anche se vengono richiesti i tick dall'ultima chiamata. Sembra che dovrebbe volare, ma non è così.
È stato in grado di localizzare uno dei bug che causa la divergenza nell'indicatore. Si tratta di nuovo di CopyTicks.
Si scopre che se raccogliamo la storia delle zecche in parti, può non coincidere con la storia reale. L'Expert Advisor lo mostra
#include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280long LastTime = 0; // time_msc-время последнего тика (самого свежего), полученного из историиint Count = 0; // Количество тиков в последенем запросе, у которых time_msc == LastTime// Возвращает следующие тики (после предыдущего вызова)int GetFreshTicks( MqlTick &Ticks[], constuint flags = COPY_TICKS_TRADE, constuint count = 100000 )
{
int Res = 0;
MqlTick NewTicks[];
constint NewAmount = CopyTicks(Symbol(), NewTicks, flags, LastTime, count);
if ((NewAmount > 0) && (Count < NewAmount))
{
Res = ArrayCopy(Ticks, NewTicks, 0, Count);
// Взяли крайнее время из текущей истории
LastTime = Ticks[Res - 1].time_msc;
Count = 1;
// Находим (Count) в текущей истории количество тиков со временем LastTimefor (int i = Res - 2; i >= 0; i--)
{
if (Ticks[i].time_msc < LastTime)
break;
Count++;
}
}
return(ArrayResize(Ticks, Res));
}
// Сравнение двух массивовtemplate <typename T>
bool ArrayEqual( const T &Array1[], const T &Array2[] )
{
constint Amount = MathMin(ArraySize(Array1), ArraySize(Array2));
bool Res = (Amount > 0);
if (Res)
for (int i = 0; i < Amount; i++)
if (_R(Array1[i]) != Array2[i]) // https://www.mql5.com/ru/code/16280
{
Res = false;
ExpertRemove();
break;
}
return(Res);
}
voidOnTick()
{
// возьмем тики с начала утренней сессии
Count = 0;
LastTime = (TimeCurrent() - (TimeCurrent() % (24 * 3600))) * 1000;
MqlTick Ticks[]; // История, собранная по частямMqlTick NewTicks[]; // массив для следующей части тиков// Собираем историю по частям while (GetFreshTicks(NewTicks, COPY_TICKS_TRADE, 100000) > 0)
ArrayCopy(Ticks, NewTicks, ArraySize(Ticks));
if (ArraySize(Ticks) > 0)
{
// Взяли ВСЮ историю тиковPrint(CopyTicks(_Symbol, NewTicks, COPY_TICKS_TRADE, Ticks[0].time_msc, 10000000)); // 10000000 - большое число, чтобы все выкачать.// Проверка на совпадение собранной по частям истории с самой историейPrint(ArrayEqual(NewTicks, Ticks) ? "Equal" : "Not Equal");
}
}
Il risultato
2016.09.3016:02:54.661 Test (Si-12.16,M1) Not Equal
2016.09.3016:02:54.661 Test (Si-12.16,M1) ExpertRemove() function called2016.09.3016:02:54.621 Test (Si-12.16,M1) 3337402016.09.3016:02:54.121 Test (Si-12.16,M1) Equal
2016.09.3016:02:54.071 Test (Si-12.16,M1) 3337362016.09.3016:02:53.791 Test (Si-12.16,M1) Equal
2016.09.3016:02:53.741 Test (Si-12.16,M1) 333723
Questo EA mostra anche un bug debole. Ho scoperto che la storia raccolta in parti può mancare di alcune parti che durano diversi minuti. Solo una riproduzione concisa e chiara sotto forma di codice non è stata inventata. E non c'è motivo di pubblicarne di complessi, perché nessuno li guarderà mai.
In generale, non c'è modo di sconfiggere i bug in CopyTicks. E notate che l'Expert Advisor lavora in modalità nastro (COPY_TICKS_TRADE). Quindi, non può nemmeno funzionare con il nastro.
Oggi promettono una nuova build per la demo. Ecco perché devo aspettare.
Spero che CopyTicks() venga corretto.
A proposito, da quando è apparsa CopyTicks() ho chiesto agli sviluppatori di aggiungere la funzione di overloading come nelle altre funzioni Copy...(). Mi hanno detto che lo faranno. И... silenzio...
A proposito, da quando è apparsa CopyTicks(), ho chiesto agli sviluppatori di aggiungere una funzione di sovraccarico, come per le altre funzioni Copy...(). Mi hanno detto che lo faranno. И... silenzio...
Se uno ha bisogno SOLO del nastro (COPY_TICKS_TRADE - time_msc, last, volume e flags), questa soluzione è completamente adatta - nessun bug rilevato.
Forum sul trading, sistemi di trading automatico e test di strategie di trading
Misterioso indicatore di azioni
fxsaber, 2016.09.27 18:32
Tutti i freni sembrano essere attivi quando l'input da CopyTicks non è zero.
Sembra essere un'implementazione molto storta di CopyTicks in questa modalità, anche se vengono richiesti i tick dall'ultima chiamata. Sembra che dovrebbe volare, ma non è così.
Aspetta la beta di questa settimana, dove abbiamo apportato una serie di miglioramenti agli aggiornamenti di tick e tumblr.
1432 - Molti bug risolti. Grazie!
Ma non tutti.
Se la storia aggiunta viene confrontata con la storia reale, ci sono discrepanze in modalità COPY_TICKS_ALL (TRADE e INFO - nessun problema). EA
Risultato
Ma non tutti.
Se la storia aggiunta viene confrontata con la storia reale, ci sono discrepanze in modalità COPY_TICKS_ALL (TRADE e INFO - nessun problema). EA
Risultato
Ho registrato il codice qui sopra e ho scoperto le ragioni. Se CopyTicks (da > 0) riceve i tick fino a quello più recente, potrebbe mancarne qualcuno.
Esempio.
Tick richiesti con da = 2016.09.29 11:05:55.564. Ho ricevuto tre tick in risposta
Qualche tempo dopo ho richiesto la cronologia dei tick da lontano e ho ottenuto un tick, che CopyTicks ha mancato prima
Un tale insetto!
Sembra che ci sia una sorta di conflitto tra la scrittura e la lettura del database delle zecche in parallelo.
Forum sul trading, sistemi di trading automatico e test di strategie di trading
Misterioso indicatore di azioni
fxsaber, 2016.09.30 15:09
È stato in grado di localizzare uno dei bug che causa la divergenza nell'indicatore. Si tratta di nuovo di CopyTicks.
Si scopre che se raccogliamo la storia delle zecche in parti, può non coincidere con la storia reale. L'Expert Advisor lo mostra
Il risultato
Questo EA mostra anche un bug debole. Ho scoperto che la storia raccolta in parti può mancare di alcune parti che durano diversi minuti. Solo una riproduzione concisa e chiara sotto forma di codice non è stata inventata. E non c'è motivo di pubblicarne di complessi, perché nessuno li guarderà mai.
In generale, non c'è modo di sconfiggere i bug in CopyTicks. E notate che l'Expert Advisor lavora in modalità nastro (COPY_TICKS_TRADE). Quindi, non può nemmeno funzionare con il nastro.
Un altro bug, ora in tutte le modalità COPY_TICKS_*
Avete provato a ottenere ticchettii sia partendo da un certo punto che da un certo numero, per esempio fisso?
Dal codice, sembra un certo numero (100000) dell'ultimo momento. E cosa succede se si ottengono solo N zecche. Ci saranno anche i salti?
Lasciatemi dire subito che io stesso non ho ancora sperimentato molto con le zecche...
Avete provato a ottenere ticchettii sia partendo da un certo punto che da un certo numero, per esempio fisso?
Dal codice, sembra un certo numero (100000) dell'ultimo momento. E cosa succede se si ottengono solo N zecche. Ci saranno anche i salti?
Lasciatemi dire subito che io stesso non ho ancora sperimentato molto con le zecche...
Provato.
Oggi promettono una nuova build per la demo. Quindi dobbiamo aspettare.
Provato.
Oggi promettono una nuova build per la demo. Ecco perché devo aspettare.
Spero che CopyTicks() venga corretto.
A proposito, da quando è apparsa CopyTicks() ho chiesto agli sviluppatori di aggiungere la funzione di overloading come nelle altre funzioni Copy...(). Mi hanno detto che lo faranno. И... silenzio...
A proposito, da quando è apparsa CopyTicks(), ho chiesto agli sviluppatori di aggiungere una funzione di sovraccarico, come per le altre funzioni Copy...(). Mi hanno detto che lo faranno. И... silenzio...