Símbolos personalizados. Erros, bugs, perguntas, sugestões. - página 33

 
RusPro #:

Eu experimentei seu teste, é exatamente o mesmo - atrasa um par de segundos. não em custom, mas em futuros de prata

Instrumento Silv-12.21. MICEX, corretor BCS. Mas eu acho que isso não importa.

Mas em seu caso é possível que o gráfico não seja construído sobre lances, ou que o corretor tenha cotação e fluxos comerciais diferentes (embora, na troca - improvável).

O tópico aqui é sobre instrumentos personalizados.

 
Andrey Khatimlianskii #:

Não falávamos de ferramentas comuns, falávamos de gesso. Por definição, todas as informações sobre eles estão disponíveis no terminal, nada deve ir para o servidor.

Talvez haja lá algum absurdo - como solicitação de tempo de servidor ou algo assim. Em geral, é um engano. E se você iniciar um teste se não houver conexão física, o que acontecerá? Estou curioso, mas não tenho nada para testá-lo.

 

Olá a todos!
Por alguma razão, a história não está sendo copiada para o símbolo personalizado. O código é o mais simples. Não recebo nenhum erro, mas não há citações no símbolo personalizado.

Quero apenas transferir as citações reais com 1 hora de offset para o símbolo personalizado.

Você pode me dizer por que o resultado está vazio?
Obrigado.


int OnInit()
  {
   
   string Sym1 = "EURUSD"; /// источник
   string Sym2 = "EURUSD2";   /// приемник
   int HBack = 1;   /// количество часов сдвига
   datetime tc = StringToTime(TimeCurrent());   /// конец участка
   datetime sht = tc - HBack * 60 * 60;
   datetime sht2 = tc - 2 * HBack * 60 * 60;
   
   MqlRates mrates[];
   
   if( CopyRates(Sym1, PERIOD_M1, sht, tc, mrates) < 0 ){
        
        Alert("Ошибка копирования исторических данных - ошибка:", GetLastError() );
        return(INIT_FAILED);
        
        }
        
   if( CustomRatesReplace(Sym2, sht2, sht, mrates, WHOLE_ARRAY) < 0 ){
      
      Alert("Ошибка вставки исторических данных - ошибка:", GetLastError() );
        return(INIT_FAILED);
        
        }
      
   
   return(INIT_SUCCEEDED);
  }
 

SymbolInfoXXX é implacável em comparação com o iClose:

símbolos personalizados (tanto carrapatos quanto barras).

Descobri queSymbolInfoDouble e SymbolInfoTick, que são chamados na EA, trabalhando neste gráfico, em algum momento"penduram": na visão geral do mercado as cotações mudam, o gráfico é atualizado, iClose e CopyTicksRange obtêm dados reais, mas SymbolInfoXXX fornece informações desatualizadas.

No processo de análise chegou ao código mais simples, que se destinava a detectar essas "pendências", mas muito antes demonstrou o problema pelo outro lado:SymbolInfoXXX está simplesmente atrasado implacavelmente em comparação com iClose! Você pode vê-lo a olho nu:


Execute tal EA em sua carta de castum, por favor:

int OnInit(void)
{
        EventSetMillisecondTimer(10);
        return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
        EventKillTimer();
        Comment("");
}

void OnTimer(void)
{
        MqlTick tick;
        SymbolInfoTick( _Symbol, tick );

        Comment( "SymbolInfoInteger( _Symbol, SYMBOL_TIME ) = ", TimeToString( SymbolInfoInteger( _Symbol, SYMBOL_TIME ), TIME_SECONDS ),
                                        "\nSymbolInfoDouble( _Symbol, SYMBOL_BID ) = ", SymbolInfoDouble( _Symbol, SYMBOL_BID ),
                                        "\ntick.time = ", TimeToString( tick.time, TIME_SECONDS ),
                                        "\ntick.bid = ", tick.bid,
                                        "\niClose[0] = ", iClose( _Symbol, PERIOD_CURRENT, 0 ) );
}

(OnTimer pode ser alterado para OnTick, ele não muda a essência)

Você tem um atraso semelhante?


 
Andrey Khatimlianskii #:

Execute um EA como este em seu mapa de náufragos, por favor:

Você tem freios similares?

Em um símbolo personalizado que não atualiza e não tem um tique no Market Watch, não se sentem os freios.

 
MOZART09 símbolo personalizado. O código é o mais simples.

Você não pode criar um símbolo personalizado com o código mais simples. Há muito tumulto envolvido. Confira isto.

Пользовательские символы: основы применения на практике
Пользовательские символы: основы применения на практике
  • www.mql5.com
Статья посвящена программной генерации пользовательских символов, с помощью которых демонстрируется несколько популярных способов отображения котировок. Предложен вариант малоинвазивной адаптации советников для торговли реальным символом с графика производного пользовательского символа. Исходные коды MQL прилагаются.
 
fxsaber #:

Em um símbolo personalizado que não atualiza e não tem um tique no Market Watch, eu não sinto os freios.

Provavelmente porque os freios estão precisamente na atualização (ou melhor, no recebimento de informações atualizadas pela EA rodando em um gráfico desse tipo)?

 
Andrey Khatimlianskii #:

Provavelmente porque é a atualização (ou melhor, obter informações atualizadas de um EA rodando em tal gráfico) que está atrasando as coisas?

Eu não uso símbolos personalizados atualizáveis, por isso não tenho conhecimento disso.

 

Construa o 3091, capturado com aspas suspensas (clique):


O último tick devolvido por SymbolInfoDouble e SymbolInfoTick é 04:52:07 (lance 61083.19)

Ao mesmo tempo em que novos carrapatos estão no histórico do instrumento, gráfico e relógio de mercado são atualizados, iClose retorna o valor correto.

Há um código para reproduzi-lo. O que mais eu preciso consertar?

 

Encontrei uma dependência - apenas os instrumentos sobre os quais os gráficos estavam abertos (e a EA estava correndo para rastreá-los, respectivamente) congelaram.

Se eu mudar o instrumento gráfico para outro (também de castrum, mas não ativo até agora), tudo está bem aí. Se voltarmos a um instrumento "congelado", ou abrirmos um novo gráfico para ele, lá SymbolInfoDouble e SymbolInfoTick ainda estão no mesmo estado de congelamento.