//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//--- Проверка количества доступных баров (1 - минимально, 4 - оптимально для большинства расчётов. Но всё "по месту"...)if(rates_total<4) return0;
//--- Проверка и расчёт количества просчитываемых баровint limit=rates_total-prev_calculated; // 0 - пришел новый тик, новый бар формироваться не начал. 1 - пришел новый тик и начал формироваться новый бар.if(limit>1)
// если вписать "limit>0", то на нулевом баре будет расчёт только нулевого бара, на каждом новом баре будет полный перерасчёт всей истории// если вписать "limit>1", то на нулевом баре будет расчёт только нулевого бара, на открытии нового бара - пересчёт первого и нулевого,// при подгрузке истории и на первом запуске - перерасчёт всей истории
{
limit=rates_total-1;
// здесь должна быть инициализация всех используемых буферов индикатора необходимыми значениями (обычно EMPTY_VALUE и 0)
}
//--- Расчёт индикатораfor(int i=limit; i>=0 && !IsStopped(); i--)
{
// необходимые действия по расчёту индикатора
}
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+
Em alguns casos, por alguma razão, o preço excede a dimensão de dois dígitos significativos após o ponto em qualquer direção.
E isto acontece sem nenhum erro nos cálculos, é apenas a saída do valor do preço da base gráfica tmp1[i]=close[i];
Existe alguma maneira de consertá-la ou simplesmente ignorá-la?
Está tudo bem. Para imprimir números fracionários, basta usar DoubleToString() com a precisão necessária. Neste caso, a precisão necessária deve ser Dígitos()
Em alguns casos, por alguma razão, o preço excede a dimensão de dois dígitos significativos após o ponto em qualquer direção.
E isto acontece sem erros nos cálculos, é apenas a saída do valor do preço da base do gráfico tmp1[i]=close[i];
Isto pode ser derrotado de alguma forma ou simplesmente ignorá-lo?
Estes são valores normais para um número real. Você pode aprender a escrever programas, todos começam lá, você só precisa ler muito e tentar escrever e escrever seus próprios códigos.
A precisão do número real, mantissa, e como tudo é armazenado na memória, você pode pesquisar no Google na web, os princípios de armazenamento são os mesmos em todos os lugares.
estes são valores normais para um número real, você pode aprender a escrever programas, todos começam lá - você só precisa ler muito e tentar escrever e escrever seus próprios códigos
A precisão do número real, mantissa, e como tudo é armazenado na memória, você pode pesquisar no Google na web, os princípios de armazenamento são os mesmos em todos os lugares.
se você quer uma bela produção, use DoubleToStr()
Onde for possível utilizar funções compatíveis, é melhor oferecê-las para uso. Caso contrário, este épico recomeçará tudo de novo. Neste caso: DoubleToString()
Como você poderia evitar que a EA funcionasse com os mesmos instrumentos?
Por exemplo, o EA funciona na janela eur/usd, mas quando executado em outras janelas no eur/usd, alguma mensagem de alerta é exibida. Serei muito grato pela ajuda.
Como você poderia evitar que a EA funcionasse com os mesmos instrumentos?
Por exemplo, o EA funciona na janela eur/usd, mas quando executado em outras janelas no eur/usd, alguma mensagem de alerta é exibida. Serei muito grato pela ajuda.
Você precisa transferir dados de um EA para outro, procure no fórum
ou usar as variáveis globais do terminal (esta é a maneira mais fácil) - aí você pode escrever o valor da primeira EA, e as cópias subseqüentes da EA lerão este valor e não correrãohttps://www.mql5.com/ru/docs/globals
Глобальные переменные существуют в клиентском терминале 4 недели с момента последнего обращения, после этого автоматически уничтожаются. Обращением к глобальной переменной считается не только установка нового значения, но и чтение значения глобальной переменной.
você precisa transferir dados de um EA para outro, procure no fórum
ou usar as variáveis globais do terminal (esta é a maneira mais fácil) - aí você pode escrever o valor da primeira EA, e as cópias subsequentes da EA lerão este valor e não correrãohttps://www.mql5.com/ru/docs/globals
a EA é a mesma, você precisa proibi-la de funcionar com os mesmos instrumentos
gans71: a EA é a mesma, você não deve permitir que ela funcione com os mesmos símbolos
e? você não poderia ter estudado a ajuda em 2 minutos
Se você está falando especificamente sobre como passar uma string para uma variável global, a única maneira é criar um nome para a variável global, ou seja, no seu caso você executa uma EA no EURUSD, faça uma verificação
if(GlobalVariableCheck(_Symbol)) .....
Se não houver uma variável desse tipo, então crie uma de tamanho excessivo, como esta
if(GlobalVariableSet(_Symbol,Magic)==0) Print("Error writing to global variable # ",GetLastError());
então, na saída do Expert Advisor, apagar a variável global
como está, o terminal não é útil, e eu meio que apontei a direção da busca
Após as últimas respostas, a imagem começou a ficar mais clara e a mais óbvia é que não estou destinado a me tornar um programador :-)
Até agora, comecei com a listagem mais simples e isto foi o que acabou sendo:
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[4] = 86.099999999999999999 2018.10.15 00:00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[3] = 85.98999999999999999999 2018.10.16 00:00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[2] = 86.76000000000001 2018.10.17 00:00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[1] = 86.5 2018.10.18 00:00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[0] = 85.72 2018.10.19 00:00:00
Em alguns casos, por alguma razão, o preço excede a dimensão de dois dígitos significativos após o ponto em qualquer direção.
E isto acontece sem erros nos cálculos, é apenas a saída do valor do preço da base do gráfico tmp1[i]=close[i];
Existe alguma maneira de consertá-la ou simplesmente ignorá-la?
Você pode remover tudo o que for relevante para cinco, e obter um modelo para quatro.
Isto pode ser escrito por alguém que sabe a diferença entre um cinco e um quatro, e definitivamente não sou eu :-)
De onde veio o número 4, qual é o seu significado sagrado?
Isto pode ser escrito por alguém que sabe a diferença entre um cinco e um quatro, e definitivamente não sou eu :-)
De onde veio o número 4, que significado sagrado ele tem?
Você certamente não ouve ou lê... Eu estava:
Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos
Qualquer pergunta, assistência e discussão sobre algoritmos e códigos para iniciantes da MQL4
Artyom Trishkin, 2018.10.18 09:26
Após as últimas respostas, o quadro ficou mais claro e o mais óbvio é que não estou destinado a me tornar um programador :-)
Até agora, comecei com a listagem mais simples e isto foi o que acabou sendo:
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[4] = 86.099999999999999999 2018.10.15 00:00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[3] = 85.98999999999999999999 2018.10.16 00:00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[2] = 86.76000000000001 2018.10.17 00:00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[1] = 86.5 2018.10.18 00:00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[0] = 85.72 2018.10.19 00:00:00
Em alguns casos, por alguma razão, o preço excede a dimensão de dois dígitos significativos após o ponto em qualquer direção.
E isto acontece sem nenhum erro nos cálculos, é apenas a saída do valor do preço da base gráfica tmp1[i]=close[i];
Existe alguma maneira de consertá-la ou simplesmente ignorá-la?
Está tudo bem. Para imprimir números fracionários, basta usar DoubleToString() com a precisão necessária. Neste caso, a precisão necessária deve ser Dígitos()
Após as últimas respostas, o quadro ficou mais claro e o mais óbvio é que não estou destinado a me tornar um programador :-)
Até agora, comecei com a listagem mais simples e isto foi o que acabou sendo:
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[4] = 86.099999999999999999 2018.10.15 00:00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[3] = 85.98999999999999999999 2018.10.16 00:00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[2] = 86.76000000000001 2018.10.17 00:00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[1] = 86.5 2018.10.18 00:00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[0] = 85.72 2018.10.19 00:00:00
Em alguns casos, por alguma razão, o preço excede a dimensão de dois dígitos significativos após o ponto em qualquer direção.
E isto acontece sem erros nos cálculos, é apenas a saída do valor do preço da base do gráfico tmp1[i]=close[i];
Isto pode ser derrotado de alguma forma ou simplesmente ignorá-lo?
Estes são valores normais para um número real. Você pode aprender a escrever programas, todos começam lá, você só precisa ler muito e tentar escrever e escrever seus próprios códigos.
A precisão do número real, mantissa, e como tudo é armazenado na memória, você pode pesquisar no Google na web, os princípios de armazenamento são os mesmos em todos os lugares.
se você quer uma bela produção use DoubleToStr()
estes são valores normais para um número real, você pode aprender a escrever programas, todos começam lá - você só precisa ler muito e tentar escrever e escrever seus próprios códigos
A precisão do número real, mantissa, e como tudo é armazenado na memória, você pode pesquisar no Google na web, os princípios de armazenamento são os mesmos em todos os lugares.
se você quer uma bela produção, use DoubleToStr()
Onde for possível utilizar funções compatíveis, é melhor oferecê-las para uso. Caso contrário, este épico recomeçará tudo de novo. Neste caso: DoubleToString()
Como você poderia evitar que a EA funcionasse com os mesmos instrumentos?
Por exemplo, o EA funciona na janela eur/usd, mas quando executado em outras janelas no eur/usd, alguma mensagem de alerta é exibida. Serei muito grato pela ajuda.
Como você poderia evitar que a EA funcionasse com os mesmos instrumentos?
Por exemplo, o EA funciona na janela eur/usd, mas quando executado em outras janelas no eur/usd, alguma mensagem de alerta é exibida. Serei muito grato pela ajuda.
Você precisa transferir dados de um EA para outro, procure no fórum
ou usar as variáveis globais do terminal (esta é a maneira mais fácil) - aí você pode escrever o valor da primeira EA, e as cópias subseqüentes da EA lerão este valor e não correrãohttps://www.mql5.com/ru/docs/globals
você precisa transferir dados de um EA para outro, procure no fórum
ou usar as variáveis globais do terminal (esta é a maneira mais fácil) - aí você pode escrever o valor da primeira EA, e as cópias subsequentes da EA lerão este valor e não correrãohttps://www.mql5.com/ru/docs/globals
a EA é a mesma, você não deve permitir que ela funcione com os mesmos símbolos
e? você não poderia ter estudado a ajuda em 2 minutos
Se você está falando especificamente sobre como passar uma string para uma variável global, a única maneira é criar um nome para a variável global, ou seja, no seu caso você executa uma EA no EURUSD, faça uma verificação
if(GlobalVariableCheck(_Symbol)) .....
Se não houver uma variável desse tipo, então crie uma de tamanho excessivo, como esta
if(GlobalVariableSet(_Symbol,Magic)==0) Print("Error writing to global variable # ",GetLastError());
então, na saída do Expert Advisor, apagar a variável global
como está, o terminal não é útil, e eu meio que apontei a direção da busca