FORTES Por favor, ajude - página 5

 

Alguém está mentindo, ou Michael não está aceitando as objeções do suporte técnico, ou o suporte técnico não quer reconhecer o problema.

Mikalas 2015.03.26 00:44  RU

Novamente o servicedexk não consegue reproduzir o erro!


alexvd2015.03.26 15:16

O código errado no primeiro post também.

 
MigVRN:

Vamos ser amigos :)

Mas não imediatamente - mas quando a carga é bem sucedida.

Seu código mostra que a função OnInit é inútil, ou que os desenvolvedores fizeram asneira.

 
Mikalas:

Sim, bem, e se realmente não houver dados?

O que então? Um ciclo? Com quantas iterações?

Não há receitas específicas aqui...

Não gosto nada de indicadores... Essa é a única razão:

Na mesma linha com indicadores, as outras operações são executadas sequencialmente para aquele símbolo - o processamento de carrapatos e a sincronização do histórico. Isso significa que se uma ação sem fim for executada em um indicador, todos os outros eventos para esse símbolo nunca serão executados.

Eles podem fazer o bate-papo, e tudo mais, diminuir a velocidade. Portanto, os uso sem pedidos de citações de chats vizinhos e como fornecedor de eventos personalizados. Em geral, trabalhar somente com o que veio em OnCalculate().

Serj_Che:

Em seu código, você vê que a função OnInit é inútil, ou que os desenvolvedores estão ferrados.

Este é o seu código - eu só colei nele o quealexvd disse. Eu não entendi porque isso significa quea função OnInit é inútil.

 
alexvd:
Em seu código, basta limpar o erro na variável global is_failed logo após ResetLastError(). Caso contrário, uma vez que você tenha detectado um erro, você receberá uma mensagem sobre isso

Bingo! Você está quase lá). Eles dizem confiança, mas verificam por uma razão. O texto final está abaixo.

#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//
bool is_failed = false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
  SymbolSelect( "MIX-6.15", true );
  SymbolSelect( "RTS-6.15", true );
  SymbolSelect( "Si-6.15", true );
//---  
  ResetLastError();
//---  
  int total_bars = Bars( "MIX-6.15", PERIOD_M1 );
  if ( total_bars > 0 )
  {
    total_bars = Bars( "RTS-6.15", PERIOD_M1 );
    if ( total_bars > 0 )
    {
      total_bars = Bars( "Si-6.15", PERIOD_M1 );
      {
        if ( total_bars > 0 )
        {
           is_failed = false;
           Print( "Init OK." );
        }
        else
        {
          is_failed = true;
          Print( "Get Bars failed Si-6.15 Last error = ", string(GetLastError() ) );
        }
      }
    }
    else
    {
      is_failed = true;
      Print( "Get Bars failed RTS-6.15 Last error = ", string(GetLastError() ) );
    }
  }
  else
  {
    is_failed = true;
    Print( "Get Bars failed MIX-6.15 Last error = ", string(GetLastError() ) );
  } 
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
  ResetLastError();
//---  
 int total_bars = Bars( "MIX-6.15", PERIOD_M1 );
  if ( total_bars > 0 )
  {
    total_bars = Bars( "RTS-6.15", PERIOD_M1 );
    if ( total_bars > 0 )
    {
      total_bars = Bars( "Si-6.15", PERIOD_M1 );
      {
        if ( total_bars > 0 )
        {
          Print( "Init OK." );
          is_failed = false;
        }
        else
        {
          is_failed = true;
          Print( "Get Bars failed Si-6.15 Last error = ", string(GetLastError() ) );
        }
      }
    }
    else
    {
      is_failed = true;
      Print( "Get Bars failed RTS-6.15 Last error = ", string(GetLastError() ) );
    }
  }
  else
  {
    is_failed = true;
    Print( "Get Bars failed MIX-6.15 Last error = ", string(GetLastError() ) );
  } 
//---
   if ( is_failed )
   {
     Print( "Sorry! Get Bars failed." );
   }
   else Print( "Bingo! We done.");
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
MigVRN:

Não há receitas específicas aqui...

Não gosto nada de indicadores... Essa é a única razão:

Na mesma linha com indicadores outras ações referentes ao símbolo são realizadas seqüencialmente - o processamento de carrapatos e a sincronização do histórico. Isso significa que se uma ação infinita for executada no indicador, todos os outros eventos para este símbolo nunca serão executados.

Eles podem fazer o bate-papo, e tudo mais, diminuir a velocidade. Portanto, os utilizo sem pedidos de citações de chats vizinhos e como fornecedor de eventos personalizados. Em geral, trabalhar somente com o que veio em OnCalculate().

Este é o seu código - eu só coloquei o queo alexvd mencionou. Não entendo por quea função OnInit é inútil.

Que código é esse meu? Eu não afixei nenhum código aqui.

Os indicadores não irão desacelerar tudo o resto. A questão é que tudo está fora de sincronia no MT5, os indicadores trabalham em seus fios e os EAs em seus. O vidro está por conta própria.

Eu também não gosto de indicadores, mas tenho que usá-los de tempos em tempos.

 
Dima_S:

Bingo! Você está quase lá). Eles dizem confiança, mas verificam por uma razão. O texto final está abaixo.

Por que você repete no OnCalculate o que estava no OnInit? É um feitiço assim?)
 
Serj_Che:

Qual é o meu código? Eu não afixei nenhum código aqui.

OH... Desculpe, me confundi com Dima_S.

Serj_Che:

Não vou desacelerar tudo o resto por causa dos indicadores. O problema é que tudo está fora de sincronia no MT5, os indicadores trabalham em seu fio e os EAs em seu fio. O vidro está por conta própria.

Eu também não gosto de indicadores, mas tenho que usá-los de tempos em tempos.

Os indicadores funcionam em seus fios... Mas o bate-papo funciona neste fluxo. Se algo der errado em um indicador (um loop eterno emOnCalculate()) o Expert Advisor que corre em seu "próprio" fio não verá nada do bate-papo...

 
MigVRN:

OOO... Desculpe. confundido com Dima_S.

Os indicadores estão correndo no fio... Somente o bate-papo funciona na mesma linha. E se algo der errado em um indicador (um loop eterno emOnCalculate()) o Expert Advisor que corre na "sua" linha não verá nada dessa conversa.

Duvido, estou ainda mais inclinado a pensar que não seja assim, o Consultor Especialista deveria trabalhar por si só. Eu não tive tais problemas, mas se você quiser, você pode verificar este extremo.

 
Serj_Che:

Duvido, estou ainda mais inclinado a pensar que não é, a EA deveria trabalhar por conta própria. Não tem havido tais violinos especificamente, mas você pode verificar um tal extremo se quiser.

Vou esboçar o código de verificação. Vou verificar dentro de 2-3 horas. Mas o fato de que se o 1 indicador no chat "desacelera", então outros desaceleram com ele - é um fato com o qual eu tenho vivenciado repetidamente.
 
MigVRN:
Vou esboçar um código de teste. Em cerca de 2-3 horas. Mas o fato de que se 1 indicador no chat "abranda", então outros abranda com ele é um fato que eu já enfrentei mais de uma vez.

OK, interessante!

Os indicadores trabalham em seu próprio fio, as EAs em seu próprio fio. A menos, é claro, que se trate de uma única pedra fundamental.