Erros, bugs, perguntas - página 310

 

Qual é a diferença?

CHART_WIDTH_IN_BARS Ширина графика в барах
от
CHART_VISIBLE_BARS Количество баров на графике, доступных для отображения
 
Urain:

Qual é a diferença?

Pode haver um campo vazio à direita, se for estabelecida uma indentação. Neste caso CHART_VISIBLE_BARS mostrará um valor menor do que CHART_WIDTH_IN_BARS
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков - Документация по MQL5
 
Urain:

Qual é a diferença?

Literalmente diferente.


 
Rosh:
Qual é a questão?

1. levar o guião torcido para o posto e executar no gráfico. O guião deve copiar um certo número de barras e executar o desenrolar das 20 mais antigas.

Esta forma é utilizada (entendo que não há verificações e todo o tipo de armadilhas para erros, mas mesmo assim)

int  CopyRates(
   string           symbol_name,       // имя символа
   ENUM_TIMEFRAMES  timeframe,         // период
   int              start_pos,         // откуда начнем 
   int              count,             // сколько копируем
   MqlRates         rates_array[]      // массив, куда будут скопированы данные
   ); 

Assim, com os parâmetros que especifiquei (número de barras e M1) o guião corre mas por vezes recusa-se a trabalhar NORMALMENTE. Acontece num certo número de bares (recebi mais de 368700).

Ao 368800 devolve muito menos barras (mas sempre um número diferente - 368732 / 368735 / 368736 ou algo nesta vizinhança).

Mas nem sempre funciona correctamente mesmo com 360000, houve casos em que apenas copiou 10000 barras.

2. A variante onde duas datas são especificadas chocou-me realmente. Não só não aceitaria 0 como a primeira data (o que faz sentido na minha opinião), como também copia até 10000.

Embora com 0 como tempo_de_início seja compreensível (tenho experiência), trata-se de sobrecarga de funções e compilador "não compreendendo" certas coisas. Mas é por isso que 10000 barras é uma questão à parte que se chama "em um milhão".

As barras de 10.000 minutos, como entendemos, não irão além de 2011, se bem entendi, não irão além de Fevereiro (e como se torna claro de todos os anteriores, pelo menos 360000 é carregado com certeza).

int  CopyRates(
   string           symbol_name,       // имя символа
   ENUM_TIMEFRAMES  timeframe,         // период
   datetime         start_time,        // с какой даты
   datetime         stop_time,         // по какую дату
   MqlRates         rates_array[]      // массив, куда будут скопированы данные
   ); 

PS

Ao mesmo tempo, a velocidade do normal e do "buggy" (quando o guião copia apenas 10000 barras) difere muitas vezes ao longo do tempo.

PPS

Por favor, certifique-se de levar certas secções de ajuda (ou melhor, os seus exemplos) à sua conclusão lógica, para evitar ambiguidade e outras situações "parvas".

Os cheques devem ser colocados adicionalmente, etc. Também, neste caso não há referências cruzadas nas descrições dos parâmetros (pelo menos no tempo) e não é claro que tipo de start_time e start_pos têm.Acho que essa data/hora (caso contrário, porque é que o compilador juraria por 0 como hora_de_início).

//Код по третьему варианту, может я что-то упустил?
//Так ругается - 'CopyRates' - ambiguous call to overloaded function
Copied = CopyRates(Symbol(),PERIOD_M1,0,TimeCurrent(),Rates);
//Так нет, но копирует только 10000 баров
Copied = CopyRates(Symbol(),PERIOD_M1,(datetime)0,TimeCurrent(),Rates);
 

Isto é um insecto ou a minha falta de habilidade?

void OnStart()
  {
//---
   long chart_id=ChartID();
   ChartSetInteger(chart_id,CHART_AUTOSCROLL,false);   // отключаем автоскролл
   while(!IsStopped())
     {
      //------------------      
      ChartNavigate(chart_id,CHART_END,-2410); // делаем навигацию, поставим константу
      //------------------
      Sleep(500);
      ChartSetString(chart_id,CHART_COMMENT,ChartGetInteger(chart_id,CHART_FIRST_VISIBLE_BAR));
      ChartRedraw(chart_id);// отображаем первый бар чарта после навигации
      Sleep(500);
     }        
  }


A carta sacode quando se navega a partir da barra zero. Introduzi propositadamente deslizes entre a navegação e a actualização para destacar o problema. Mas o insecto existe mesmo sem escorregões. Acontece que ChartNavigate() primeiro move o gráfico para zero e depois volta a movê-lo para trás. Além disso, não o faz sempre.

Pelo menos, o facto de o bug não existir sempre que se chama ChartNavigate(), aparece quando o corre sem escorregões.

Документация по MQL5: Операции с графиками / ChartNavigate
Документация по MQL5: Операции с графиками / ChartNavigate
  • www.mql5.com
Операции с графиками / ChartNavigate - Документация по MQL5
 
Urain:

Isto é um insecto ou a minha falta de habilidade?


A carta sacode quando se navega a partir da barra zero. Introduzi propositadamente deslizes entre a navegação e a actualização para destacar o problema. Mas o insecto existe mesmo sem escorregões. Acontece que ChartNavigate() primeiro move o gráfico para zero e depois volta a movê-lo para trás. Além disso, não o faz sempre.

Pelo menos, o facto de o bug não existir sempre que se chama ChartNavigate(), aparece quando o corre sem escorregões.


Experimente o exemplo de A função ChartNavigate não funciona, Por favor, ajude
 

Então, o que há neste exemplo que é tão fundamentalmente diferente do meu código?

É que no seu código de navegação é chamado uma vez, enquanto que eu preciso de manter a carta na barra desejada o tempo todo (independentemente das acções do utilizador).

Tentei o vosso exemplo e corri o meu código sem actualização gráfica (embora seja importante para mim porque o programa usa muitas transformações gráficas), mas também não funcionou. O idiota permanece. Continuo a navegar até ao mesmo ponto, e depois navego até à barra zero.

Também considero inaceitável a utilização da navegação a partir da barra actual, porque o utilizador pode mover inadvertidamente a carta enquanto o programa está em execução.

 
Se não for imediatamente claro, deixe-me explicar: o código acima é uma tentativa de emular um autoscroll numa determinada barra.
 
Interesting:
A história está toda escondida?
é claro que há uma história, mas nem todos os vermes têm uma história de propagação!
 
Urain:

Então, o que há neste exemplo que é tão fundamentalmente diferente do meu código?

É que no seu código de navegação é chamado uma vez, enquanto eu preciso de manter a carta na barra desejada o tempo todo (independentemente das acções do utilizador).

Depois de rever o seu exemplo, corri o meu código sem actualização do gráfico (embora seja importante para mim uma vez que o programa também usa um monte de conversões gráficas), mas também não ajudou. O idiota permanece. Continuo a navegar até ao mesmo ponto, e depois navego até à barra zero.

Também considero inaceitável a utilização da navegação a partir da barra actual, porque o utilizador pode mover inadvertidamente a carta enquanto o programa está em execução.

Tenho o mesmo problema com o meu indicador, só que é redesenhado assim que o carrapato chega e não é clara a forma de o corrigir?