Удобство имеет большое значение в работе, а тем более в работе трейдера, где скорость и точность решают многое. При подготовке терминала к работе каждый настраивает своё рабочее место максимально комфортно для себя, чтобы в максимально короткий срок можно было совершить анализ и войти в рынок. Но реальность такова, что разработчики не могут...
Escrevi simplesmente como estabeleço as ordens pendentes no visualizador.
Estou a tentar agora. Eu não queria perder tempo, não preciso do painel no funcionamento do robô, só preciso dele para um teste. Por conseguinte, não estava a planear estudar o assunto em pormenor.
При тестировании в эксперте можно обрабатывать пользовательские события с помощью функции OnChartEvent(), но в индикаторах эта функция в тестере не вызывается.
Pode dizer-me porquê quando mudo o código abaixo de close[i-1] para close[i-2] o Array of Range ocorre? O código foi escrito seguindo estritamente o livro MQL5, mas não explica porque é que o tampão é ultrapassado quando o preço é deslocado por mais de 2 células.
{
int values_to_copy;
int start;
int calculated=BarsCalculated (iBands1_handle);
if (calculated <=0)
{
return (0);
}
if (prev_calculated==0 || calculated!=bars_calculated)
{
start=1;
if (calculated> rates_total) values_to_copy=rates_total;
else values_to_copy=calculated;
}
else
{
start=rates_total-1;
values_to_copy=1;
}
if(!FillArrayFrom_iBands1_handleBuffer(Base,Upper,Lower,iBands1_handle,values_to_copy)) return(0);
for (int i=start; i <rates_total &&!IsStopped ();i++)
{
Print("C ", close[i-2]);
}
Pode dizer-me porquê quando mudo o código abaixo de close[i-1] para close[i-2] o Array of Range ocorre? O código foi escrito seguindo estritamente o livro MQL5, mas não descreve porque é que a retirada do tampão ocorre quando o preço é deslocado por mais de 2 células.
Tanto quanto sei, estamos a falar de um indicador. Assim, considere dois casos de acesso a uma array-timeseries"fechadas": (1) o que acontece quando"start" é igual a "1" e (2) o que acontece quando"start" é igual a "rates_total-1".
Basta calcular na sua mente o índice"fechar" resultante se tentar fazer "fechar[i-2]" para o caso (1) e para o caso (2).
Compreendo que estamos a falar de um indicador. Assim, considere dois casos de acesso à série temporal"fechada": (1) o que acontece quando"start" é igual a "1" e (2) o que acontece quando"start" é igual a "rates_total-1".
Basta calcular na sua mente o índice"fechar" resultante se tentar fazer "fechar[i-2]" para o caso (1) e para o caso (2).
Obrigado, verifiquei, havia necessidade de colocar um número superior a 1 no início = 1 valor, a depuração mostrou que o erro ocorre quando a matriz fechada tenta tirar um valor de uma célula que ainda não apareceu no início do recálculo.
Gostaria de criar uma matriz bidimensional com tempos de abertura e fecho e comprimentos de castiçal, e seria muito interessante. Quero criar uma EA com base neste exemplo usando uma matemática mais elevada, nomeadamente o triplo integral. vamos assumir x e y saber o preço e o tempo, encontrar z - neste caso, eu faço.
Outra questão - se este código estabelece a condição de que o preço de fecho será superior à linha (vamos supor que esta condição é realmente antes do início do programa), o código funciona como deve ser, mas se adicionarmos uma condição inversa, ou seja, diferentes condições actuais antes do início do código, os dados não serão correctos após a depuração. Por favor, informe porque é que isso acontece? Afinal de contas, isto é apenas uma comparação numa declaração de condição, porque é que isto deveria ter qualquer efeito prejudicial no desempenho do código?
for (int i = start; i < rates_total &&!IsStopped ();i++)
{
if(close[i] > Upper[i])
Print("C ", close[i]);
Exemplo: se
if(close[i] < Upper[i])
O resultado da depuração é o seguinte:
Os dados correm correctamente, actualizando ao mesmo ritmo que os preços actualizam
Mas se inicialmente estabelecermos uma tal condição:
if(close[i] > Upper[i])
O resultado será então incorrecto:
Ou seja, os valores dos preços de fecho não coincidem com o preço actual
Não consigo compreender porque é que isso acontece.
Infelizmente, ainda não me deparei com o artigo, talvez outra pessoa o possa sugerir.
Não poderá definir ordens porque não poderá introduzir o preço de definição correcto. O mesmo se aplica aos lotes.
Eu ponho com o rato.
Estou a apostar com o rato.
O painel de controlo deste artigo https://www.mql5.com/ru/articles/62 irá funcionar no testador (apenas botões)?
O painel de controlo deste artigo https://www.mql5.com/ru/articles/62 irá funcionar no testador (apenas botões)?
Então experimente - o que o impede?
Eu próprio acabei de escrever como coloquei as ordens pendentes no visualizador.
Então experimente - o que o impede?
Escrevi simplesmente como estabeleço as ordens pendentes no visualizador.
Estou a tentar agora. Eu não queria perder tempo, não preciso do painel no funcionamento do robô, só preciso dele para um teste. Por conseguinte, não estava a planear estudar o assunto em pormenor.
Pode dizer-me porquê quando mudo o código abaixo de close[i-1] para close[i-2] o Array of Range ocorre? O código foi escrito seguindo estritamente o livro MQL5, mas não explica porque é que o tampão é ultrapassado quando o preço é deslocado por mais de 2 células.
{ int values_to_copy; int start; int calculated=BarsCalculated (iBands1_handle); if (calculated <=0) { return (0); } if (prev_calculated==0 || calculated!=bars_calculated) { start=1; if (calculated> rates_total) values_to_copy=rates_total; else values_to_copy=calculated; } else { start=rates_total-1; values_to_copy=1; } if(!FillArrayFrom_iBands1_handleBuffer(Base,Upper,Lower,iBands1_handle,values_to_copy)) return(0); for (int i=start; i <rates_total &&!IsStopped ();i++) { Print("C ", close[i-2]); }Pode dizer-me porquê quando mudo o código abaixo de close[i-1] para close[i-2] o Array of Range ocorre? O código foi escrito seguindo estritamente o livro MQL5, mas não descreve porque é que a retirada do tampão ocorre quando o preço é deslocado por mais de 2 células.
Tanto quanto sei, estamos a falar de um indicador. Assim, considere dois casos de acesso a uma array-timeseries"fechadas": (1) o que acontece quando"start" é igual a "1" e (2) o que acontece quando"start" é igual a "rates_total-1".
Basta calcular na sua mente o índice"fechar" resultante se tentar fazer "fechar[i-2]" para o caso (1) e para o caso (2).
Compreendo que estamos a falar de um indicador. Assim, considere dois casos de acesso à série temporal"fechada": (1) o que acontece quando"start" é igual a "1" e (2) o que acontece quando"start" é igual a "rates_total-1".
Basta calcular na sua mente o índice"fechar" resultante se tentar fazer "fechar[i-2]" para o caso (1) e para o caso (2).
Obrigado, verifiquei, havia necessidade de colocar um número superior a 1 no início = 1 valor, a depuração mostrou que o erro ocorre quando a matriz fechada tenta tirar um valor de uma célula que ainda não apareceu no início do recálculo.
if(close[i] < Upper[i])O resultado da depuração é o seguinte:
Os dados correm correctamente, actualizando ao mesmo ritmo que os preços actualizam
Mas se inicialmente estabelecermos uma tal condição:
if(close[i] > Upper[i])O resultado será então incorrecto:
Ou seja, os valores dos preços de fecho não coincidem com o preço actual
Não consigo compreender porque é que isso acontece.
Bloco de código básico no poste#8792