Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 102

 
STARIJ:

Preço no gráfico no eixo vertical de baixo para cima, e numeração de tempo e barra no eixo horizontal à direita

Barra zero é a última barra atualmente disponível. As seguintes barras existem na história, mas não estão disponíveis para o testador. Mais tarde, quando esta barra for calculada, o testador irá para a próxima barra, que se tornará zero para ele.


Portanto, entendo corretamente, assim que o preço Aberto da próxima barra aparece no provador, ele se torna nulo[0]. E se o indicador for feito da forma como é calculado 500 barras antes da barra atual [0], significa que o testador calculará o indicador durante ~ 2 anos (500 D1 barras) antes da barra atual [0]...

Isto levanta a seguinte questão:

Agora o indicador é baseado no processamento de eventos Start() - versão antiga. Sinto que durante os testes em cada chamada de iCustom() o indicador é calculado sobre as 500 barras anteriores, 1600 testes foram calculados para uma hora e meia.
Podemos construir o indicador no processamento de eventos OnCalculate(), que permite calcular apenas as barras não calculadas antes do próximo OnCalculate() - mas é possível fazê-lo em um fluxo de dados real em um tempo atual - como entendi da Referência MQL4.
No testador, ele irá reduzir o número de barras calculadas a cada chamada de iCustom() ?

 
MikeZv:

Assim, entendi corretamente, assim que o preço da barra seguinte apareceu no testador - ele se torna nulo[0]. E se o indicador for feito de tal forma, que comece a ser calculado 500 antes da barra atual [0], significa, que o testador calculará o indicador por ~ 2 anos (500 barras D1) antes da barra atual [0]...

Isto levanta a seguinte questão:

Agora o indicador é baseado no processamento de eventos Start() - versão antiga. Como você sente, durante os testes em cada chamada de iCustom(), o indicador é calculado sobre as 500 barras anteriores, 1600 testes foram calculados para uma hora e meia.
Podemos construir o indicador no processamento de eventos OnCalculate(), que permite calcular apenas as barras não calculadas antes do próximo OnCalculate() - mas é possível fazê-lo em um fluxo de dados real em um tempo atual - como entendi da Referência MQL4.
No testador, ele irá reduzir o número de barras calculadas a cada chamada de iCustom() ?


O indicador é apenas escrito torto, então é lento, preciso de uma reescrita profissional, então ele vai ler toda a história e muito rápido... isso é tudo...

 
Nikolay Ivanov:


O indicador só está escrito torto, então é lento, você precisa de uma reescrita profissional, então ele vai ler a história toda e muito rápido... isso é tudo...


Já reescrito ... :)

 

Escreveu novo indicador [onCalculate()] com base no antigo [on Start()], a questão acima foi levantada.
Executo um roteiro comparando-os entre si durante 5 anos (período D1) - um para um, todos os valores coincidem.
Eu copiei a mesma ICustom() para o Expert Advisor e a produzi em um arquivo quandotestei o Expert Advisor.
Os antigos valores indicadores são exibidos como no script, os novos valores indicadores são todos diferentes!!!
Por que iCustom() está em um Expert Advisor para um indicador em Start() emitindo os mesmos valores que no script,
mas para um indicador em OnCalculate() a saída no Expert Advisor é diferente da saída no script ?


 

Olá a todos.

Rapazes, vocês podem me aconselhar quem se deparou com isso?

Alguns corretores binários, por exemplo, Grand Capital, acumulam renda e debitam a conta não através do lucro em uma negociação, mas como renda de/para o(s) saldo(s) da conta.


Tenho várias opções alternativas de trabalho sobre como descobrir o resultado de uma negociação, mas a mais correta ainda é ler o valor da linha do balanço e a quantidade de ganhos/perdas.

Então a questão é - como isso pode ser feito "no momento", mas ao longo de todo o histórico da transação? Ou seja, estou interessado em alguma função (incluída na MQL4) que olharia através de todos os registros do tipo balanço e leria o comentário e o próprio valor. Esta é a primeira vez que enfrento uma tarefa deste tipo em vários anos de programação.

 
MikeZv:

Escrevi um novo indicador [em OnCalculate()] com base no antigo [em Start()], esta questão foi levantada acima.
Executo o roteiro comparando-os entre si durante 5 anos (período D1) - um para um, todos os valores coincidem.
Copiei o mesmo ICustom() para o Expert Advisor e o exibi em um arquivo aotestar o Expert Advisor.
Os antigos valores indicadores são exibidos como no script, os novos valores indicadores são todos diferentes!!!
Por que iCustom() está em um Expert Advisor para o indicador em Start() ele emite os mesmos valores que no script?
e para o indicador no OnCalculate() a saída no Expert Advisor é diferente da saída no script ?


Pode levar um longo tempo para adivinhar.

Eu verificaria o código para a conversão errada do tipo de dados, duplicação de nomes de variáveis (ou seja, no código antigo são usados os nomes que agora estão reservados) - como resultado, a variável não está obtendo os valores que deveria obter (antes de tudo, verifique os nomes de variáveis usados na OnCalculate - abrir, alto, baixo, fechar, etc. - Você pode encontrá-los com bastante freqüência em código antigo).
E quanto ao iCustom, é a variante mais simples, e os erros aqui muito provavelmente podem estar relacionados a parâmetros passados incorretamente (novamente, pelas razões dadas acima).

Imprimir todos os valores, ou executar em modo de depuração e verificar para onde a discrepância está indo.
 
Artyom Kuraev:

Pode levar um longo tempo para adivinhar.

Eu verificaria o código para verificar se há conversão incorreta do tipo de dados, nomes de variáveis duplicados (ou seja, o código antigo usa nomes que agora estão reservados) - como resultado, a variável está captando valores errados que deveria obter (primeiro de tudo, verificar nomes de variáveis usadas na OnCalculate - abrir, alto, baixo, fechar, etc. - Você pode encontrá-los com bastante freqüência em código antigo).
E quanto ao iCustom, é a variante mais simples, e os erros aqui muito provavelmente podem estar relacionados a parâmetros passados incorretamente (novamente, pelas razões mencionadas acima).

Imprimir todos os valores, ou executar em modo de depuração e verificar para onde a discrepância está indo.
A saída de ambos os indicadores no roteiro é a mesma.

Especialista tem linhas COOPERADAS com iCustom() do roteiro. Os mesmos parâmetros são passados.

 
MikeZv:

O especialista COPYs as linhas com iCustom() do roteiro. Os mesmos parâmetros são passados.

O fato de serem copiados pode causar erros. Eu apenas sugeria possíveis causas e o que eu verificaria primeiro.

O segundo ponto, e esta é provavelmente a resposta mais óbvia, é que o próprio indicador tem um preço exagerado e dará um valor quando aplicado à história e outro quando se trabalha em modo de teste de estratégia. Eu escrevi sobre isso uma vez, você pode ver em duas fotos.

Não insisto em absolutamente nada e minha resposta será baseada em minha experiência. Se você tem certeza de que nenhuma das opções que sugeri é adequada, basta esperar por outras respostas ou dar muito mais informações de fundo :)

 
Artyom Kuraev:

Olá a todos.

Rapazes, vocês podem me aconselhar quem se deparou com isso?

Alguns corretores binários, por exemplo, Grand Capital, cobram a renda e debitam a conta não através do lucro em uma negociação, mas como renda de/para o(s) saldo(s) da conta.


Tenho várias opções alternativas de trabalho sobre como descobrir o resultado de uma negociação, mas a mais correta ainda é ler o valor da linha do balanço e a quantidade de ganhos/perdas.

Então a questão é - como isso pode ser feito "no momento", mas ao longo de todo o histórico da transação? Ou seja, estou interessado em alguma função (incluída na MQL4) que olharia através de todos os registros do tipo balanço e leria o comentário e o próprio valor. Esta é a primeira vez que enfrento uma tarefa deste tipo em vários anos de programação.


#define  OP_BALANCE 6
#define  OP_CREDIT  7

Mais

OrdersHistoryTotal
StringFind(OrderComment(),txt,0)
 
Taras Slobodyanik:

mais

OBRIGADO!

Tudo deu certo!
Razão: