fxsaber: Se precisar de uma única fita (COPY_TICKS_TRADE - tempo_msc, último, volume e bandeiras), esta solução é completamente adequada - não são detectados bugs.
Todos os freios parecem estar ligados quando a entrada do CopyTicks não é zero.
Parece ser uma implementação muito tortuosa do CopyTicks neste modo, mesmo que os carrapatos desde a última chamada sejam solicitados. Parece que deveria voar, mas não voa.
Foi capaz de localizar um dos insetos causando divergências no indicador. Trata-se novamente do CopyTicks.
Acontece que, se coletarmos a história em partes, ela pode não coincidir com a história real. O Consultor Especialista o 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");
}
}
O resultado
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
Este EA também mostra um bug fraco. Descobri que o histórico coletado em partes pode estar faltando algumas partes que duram vários minutos. Apenas uma reprodução concisa e clara sob a forma de um código não foi inventada. E não adianta colocar complexos, porque ninguém vai nem olhar.
Em geral, não há como derrotar os bugs no CopyTicks. E note que o Expert Advisor trabalha em modo fita adesiva (COPY_TICKS_TRADE). Portanto, não pode sequer funcionar com fitas.
Hoje eles prometem uma nova construção para demonstração. É por isso que eu tenho que esperar.
Espero que, CopyTicks() seja corrigido.
A propósito, desde que o CopyTicks() apareceu eu pedi aos desenvolvedores que adicionassem a função de sobrecarga como em outras funções Copy...(). Eles me disseram que sim. И... silêncio...
A propósito, desde que o CopyTicks() apareceu, pedi aos desenvolvedores que adicionassem função de sobrecarga, como para outras funções Copy...(). Eles me disseram que sim. И... silêncio...
Se precisar de uma única fita (COPY_TICKS_TRADE - tempo_msc, último, volume e bandeiras), esta solução é completamente adequada - não são detectados bugs.
Fórum sobre comércio, sistemas comerciais automatizados e estratégias comerciais de teste
Indicador de estoque misterioso
fxsaber, 2016.09.27 18:32
Todos os freios parecem estar ligados quando a entrada do CopyTicks não é zero.
Parece ser uma implementação muito tortuosa do CopyTicks neste modo, mesmo que os carrapatos desde a última chamada sejam solicitados. Parece que deveria voar, mas não voa.
Aguarde o beta desta semana, onde fizemos uma série de melhorias nas atualizações de carrapatos e tumblr.
1432 - Muitos bugs resolvidos. Obrigado!
Mas não todos.
Se o histórico adicionado for comparado ao histórico real, há discrepâncias no modo COPY_TICKS_ALL (TRADE e INFO - sem problemas). EA
Resultado
Mas não todos.
Se o histórico adicionado for comparado ao histórico real, há discrepâncias no modo COPY_TICKS_ALL (TRADE e INFO - sem problemas). EA
Resultado
Eu registrei o código acima e descobri as razões. Se CopyTicks (de > 0) receber carrapatos até o mais recente, pode perder alguns.
Exemplo.
Carrapatos solicitados a partir de = 2016.09.29 11:05:55.564. Recebi três carrapatos em resposta
Algum tempo depois eu pedi o histórico do tick de longe e recebi um tick, que o CopyTicks perdeu antes.
Que insecto!
Parece ser algum tipo de conflito entre a escrita e a leitura do banco de dados de carrapatos em paralelo.
Fórum sobre comércio, sistemas comerciais automatizados e estratégias comerciais de teste
Indicador de estoque misterioso
fxsaber, 2016.09.30 15:09
Foi capaz de localizar um dos insetos causando divergências no indicador. Trata-se novamente do CopyTicks.
Acontece que, se coletarmos a história em partes, ela pode não coincidir com a história real. O Consultor Especialista o mostra
O resultado
Este EA também mostra um bug fraco. Descobri que o histórico coletado em partes pode estar faltando algumas partes que duram vários minutos. Apenas uma reprodução concisa e clara sob a forma de um código não foi inventada. E não adianta colocar complexos, porque ninguém vai nem olhar.
Em geral, não há como derrotar os bugs no CopyTicks. E note que o Expert Advisor trabalha em modo fita adesiva (COPY_TICKS_TRADE). Portanto, não pode sequer funcionar com fitas.
Outro bug, agora em todos os modos COPY_TICKS_*
Você já tentou obter carrapatos tanto a partir de um certo ponto como de um certo número, por exemplo, fixo?
A partir do código, parece um certo número (100000) desde o último momento. E se você receber apenas carrapatos N. Haverá pulos também?
Deixe-me dizer-lhe desde já, eu mesmo ainda não experimentei muito carrapatos...
Você já tentou obter carrapatos tanto a partir de um certo ponto como de um certo número, por exemplo, fixo?
A partir do código, parece um certo número (100000) desde o último momento. E se você receber apenas carrapatos N. Haverá pulos também?
Deixe-me dizer-lhe desde já, eu mesmo ainda não experimentei muito carrapatos...
Experimentei-o.
Hoje eles estão prometendo uma nova construção para a demonstração. Portanto, temos que esperar.
Experimentei-o.
Hoje eles prometem uma nova construção para demonstração. É por isso que eu tenho que esperar.
Espero que, CopyTicks() seja corrigido.
A propósito, desde que o CopyTicks() apareceu eu pedi aos desenvolvedores que adicionassem a função de sobrecarga como em outras funções Copy...(). Eles me disseram que sim. И... silêncio...
A propósito, desde que o CopyTicks() apareceu, pedi aos desenvolvedores que adicionassem função de sobrecarga, como para outras funções Copy...(). Eles me disseram que sim. И... silêncio...