Por favor, explique o que poderia estar errado com esta função. - página 5

 
Karputov Vladimir:
É melhor você nos dizer o que o departamento de serviços lhe aconselhou - você continuou a falar com eles lá, não foi?
Por alguma razão, não bato em uma porta fechada mais de três vezes. Nenhuma resposta aos meus três comentários... E por que gritar para o vazio?
 
Alexey Viktorov:
Por alguma razão, não bato em uma porta fechada mais de três vezes. Nem uma única resposta aos meus três comentários... E por que gritar para o vazio?

CopyRates() em cada tick, rodando em M15 suportará o cache de histórico por período não-nativo (tempo) (H1 e D1).

E também é possível, ao invés de copiar séries via CopyRates(), simplesmente solicitar

SÍMBOLO_TIME

Última cotação

data/hora

e usar este tempo para determinar se é um novo dia ou uma nova hora... Neste caso, em vez de copiar a série, basta fazer uma simples sondagem no terminal e uma simples análise de tempo. Você também pode usar umSymbolInfoTick mais informativo.

 
Karputov Vladimir:

CopyRates() em cada tick, rodando em M15 suportará o cache de histórico por período não-nativo (tempo) (H1 e D1).

E também é possível, ao invés de copiar séries via CopyRates(), simplesmente solicitar

SÍMBOLO_TIME

Última cotação

data/hora

e usar este tempo para determinar se é um novo dia ou uma nova hora... Neste caso, em vez de copiar a série, basta fazer uma simples sondagem no terminal e uma simples análise de tempo. Você também pode usar oSymbolInfoTick, mais informativo.

Vladimir, a pergunta sobre a sacudidela não foi acidental. Naquele EA em que tais problemas foram encontrados, CopyRates() é chamado em cada carrapato, daí que a teoria de sacudir a história equivale a sacudir o gato por seu lugar causal... Para não ser indelicado...

E mesmo agora, quando você já entendeu que o problema existe, a aplicação ignorada em SD teimosamente continua. Não estou realmente interessado, uma solução foi encontrada e você pode se acostumar a outros problemas e levar em conta a estupidez de algumas funções, mas meu desejo de informar a AC sobre qualquer problema está se aproximando rapidamente de zero.

Estou escrevendo agora de outro computador, sem código, mas você mesmo pode verificá-lo... Quantos bares diários você acha que existem entre 27.06.2016 00:00:00 e 27.06.2016 00:00:00:00?

Você pensa zero??? Você está errado, verifique com Bars() Estupidez, mas você pode levar isso em conta se necessário, e quando eles pensarem em consertá-lo... Bem, vamos corrigir nosso próprio código...

 
Alexey Viktorov:

Vladimir, a pergunta sobre a sacudidela não foi acidental. Naquele EA, no qual tais problemas foram encontrados, CopyRates() é chamado a cada tique-taque, daí a teoria de contorcer a história equivale a sacudir o gato pelo lugar causal... Não pense nisso como rude...

E mesmo agora, quando você percebe que há um problema, o ignorar da aplicação no SD teimosamente continua. Não estou realmente interessado, a solução é encontrada, você pode se acostumar a outros problemas e ter em mente a estupidez de certas funções, mas a vontade de relatar qualquer problema ao CA está se aproximando rapidamente de zero.

Estou escrevendo agora de outro computador, sem código, mas você mesmo pode verificá-lo... Quantos bares diários você acha que existem entre 27.06.2016 00:00:00 e 27.06.2016 00:00:00:00???

Você acha que zero??? errado, verifique com Bars() Estúpido, mas você pode simplesmente levar isso em conta se necessário, e quando você tiver a idéia de consertá-lo... Bem, vamos corrigir nosso próprio código...

Não há necessidade de inventar coisas - você forneceu uma EA SEMCÓPIOS().
 
Karputov Vladimir:
Não há necessidade de inventar coisas - você forneceu um EA SEM CÓPIOS().
Eu dei o código quando não se falava em solavancos. Repito, estou escrevendo de um computador onde não tenho código e instalei o MT5, portanto, por favor, faça as mudanças você mesmo, não na função de determinar uma nova barra, mas antes de sua chamada no código principal OnTick(). e repita a experiência.
 
Alexey Viktorov:
Eu dei o código quando não se falava em solavancos. Repito, estou escrevendo do meu PC onde não tenho nenhum código e o MT5 foi instalado, por isso peço que você mesmo faça mudanças não na função que define uma nova barra, mas antes de sua chamada no código principal OnTick() e tente novamente a experiência.

Se há um código, há um julgamento. Se não houver código, então tudo vai para o modo borra de café. Se você estiver no computador, invente um código com minhas recomendações

Fórum sobre comércio, sistemas automatizados de comércio e testador de estratégias

Tenho apenas uma configuração e tenho que abri-la manualmente.

Karputov Vladimir, 2016.06.27 13:36

***

Ou você pode usar CopyRates() em vez de copiar séries, você pode apenas solicitar

SÍMBOLO_TIME

Última cotação

data/hora

e usar este tempo para determinar se é um novo dia ou uma nova hora... Neste caso, em vez de copiar a série, basta fazer uma simples sondagem no terminal e uma simples análise de tempo. Você também pode usar umSymbolInfoTick mais informativo.


e verifique por conta própria.

 

É mais ou menos assim

datetime oldDay, oldHour;
MqlDateTime mqlDateTime;
MqlRates    mqlRates;
/*******************Expert initialization function*******************/
int OnInit()
{
   return(INIT_SUCCEEDED);
}/*******************************************************************/

/************************Expert tick function************************/
void OnTick()
{
  bool newDay, newHour;
   TimeToStruct(TimeCurrent(), mqlDateTime);
   CopyRates(_Symbol, PERIOD_H1, 0, 1 mqlRates);
    if((int)mqlDateTime.hour == 0)
     {
      newDay = IsNewBar(_Symbol, PERIOD_D1, oldDay);
   if(newDay)
    Print("***** newDay ", newDay, " mqlDateTime.hour ", mqlDateTime.hour); // Судя по распечатке newDay = true
       newHour = IsNewBar(_Symbol, PERIOD_H1, oldHour); // А это совсем другая переменная
    if(newHour)
     Print("***** newHour ", newHour); // Судя по распечатке newHour = true
        if(newDay && newHour) // A ЭТО УСЛОВИЕ НЕ ВЫПОЛНЕНО НЕСМОТРЯ НА ПРЕДЫДУЩИЕ РАСПЕЧАТКИ.
         {
          Print("Ордер должен откыться. ");
         }
     }
}/*******************************************************************/

/*****************Определение появления нового бара******************/
bool IsNewBar(string symbol, ENUM_TIMEFRAMES timeframe, datetime &m_tOld)
 {
  datetime tNew = (datetime)SeriesInfoInteger(symbol, timeframe, SERIES_LASTBAR_DATE);
   if(tNew > m_tOld)
    {
     m_tOld = tNew;
     return(true);
    }
   return(false);
 }
/********************************************************************/

/******************Expert deinitialization function******************/
void OnDeinit(const int reason)
{
 Comment("");
}/*******************************************************************/
 
Alexey Viktorov:

É mais ou menos assim

Onde estão as verificações de resposta do CopyRates()?
 
Karputov Vladimir:

Se há um código, há julgamento. Se não houver código, então tudo vai para o modo borra de café. Se você estiver no computador, invente um código com minhas recomendações


e confira por si mesmo.

Sim, bem... Presunção de inocência em ação...

Eu preciso disso? Há bugs no programa MQ. Eu mesmo posso trabalhar ao redor deles ou com seus conselhos, mas os erros e bobagens no software MQ ainda serão erros e bobagens.

Eu só estarei no computador na próxima sexta-feira. E a sacudidela do gato já foi testada. E não faz diferença se você o puxa com a mão direita ou com a esquerda. Erros são erros, estupidez é estupidez.

 
Karputov Vladimir:
Onde estão as verificações de resposta do CopyRates()?
Entendo que seu interesse em confirmar o erro é zero. É por isso que você não pode fazer nada sozinho... E eu não preciso, não vou provar isso para você. O que eu ganho com isso? Nada...