Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 794

 
Igor Makanu:

Este é um exemplo de como fazer isso em um indicador. A pergunta era sobre o Expert Advisor.

Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

Qualquer pergunta de novatos sobre MQL4, ajuda e discussão sobre algoritmos e códigos

Noroeste, 2019.03.28 03:54

Bom dia a todos!

Perdeu duas horas, mas não encontrou nada.

Você pode me dizer como em mq4, na EA, para corretamente

Gostaria de usar funções incorporadas para construir um indicador sobre outro.

e deve ser exibido em testes na subjanela, como deve ser,

por exemplo, MA sobre dados RSI?


Mas, em geral, é quase certo. É mais fácil escrever um indicador e tirar valores dele do que preencher uma matriz para o iMAOnArray. Mas por que duas voltas?

 
Alexey Viktorov:

Mas por que dois ciclos?

não verificar a primeira execução do indicador ou o carregamento de dados históricos

às vezes é mais compacto e eficiente usar a verificação da condição enquanto/para em vez de fazer uma verificação adicional se e depois usar os operadores do laço após a condição ser atendida

se você "colar" o código de cálculo iMAOnArray() em um laço preenchendo a matriz com dados RSI, isso causará cálculos incorretos de elementos ainda não preenchidos da matriz rsiBuffer[].

nota, usei no exemplo de cálculo iMAOnArray() para todos os elementos da matriz (total = 0). Estudei esta questão alguns meses atrás, mas infelizmente, não há informações específicas sobre como usar corretamente o iMAOnArray() e o parâmetrohttps://docs.mql4.com/ru/indicators/imaonarray nele

int total, // número de elementos


iMAOnArray() tema https://www.mql5.com/ru/forum/303372/page2#comment_10617854




Alexey Viktorov:

Este é um exemplo de como fazer isso em um indicador. A pergunta era sobre o Conselheiro Especialista.

Você tem certeza de que esta era a pergunta?

Noroeste:

Você pode vê-lo na subjanela durante os testes,

)))))

iMAOnArray - Технические индикаторы - Справочник MQL4
iMAOnArray - Технические индикаторы - Справочник MQL4
  • docs.mql4.com
В отличие от iMA(...), функция iMAOnArray не выбирает данные на основе названия инструмента, таймфрейма и используемой цены - ценовые данные должны быть подготовлены заранее...
 
Igor Makanu:

não verificar a primeira execução do indicador ou o carregamento de dados históricos

Às vezes é mais compacto e eficiente usar a verificação da condição enquanto/ por código do que fazer um adicional se e depois usar operadores de laço após a condição ser atendida


Você tem certeza de que era isto que queria perguntar?

)))))

)))) Não é a primeira vez que sou pego um pouco desatento. Eu nem cheguei ao final do indicador.

Mas sobre o adicional se

if(prev_calculated==0) limit=rates_total-1; else limit=rates_total-prev_calculated+1;

pode ser escrito como

limit = prev_calculated == 0 ? rates_total-1 : rates_total-prev_calculated+1;
Não usar registros como este?
 

Igor Makanu:

...estudei esta questão há alguns meses, mas infelizmente não há informações específicas sobre como usar o iMAOnArray() corretamente e seu parâmetrohttps://docs.mql4.com/ru/indicators/imaonarray

int total, // número de elementos

O número de elementos é importante quando não se precisa de uma simples média. Não consigo me lembrar que tipos de MA usam seu valor anterior em seus cálculos com um olhar. Neste caso, o número de elementos afetará o resultado. Em geral, é resolvido em mql5 em meio carrapato e eu não estou mais interessado nele.

 
Alexey Viktorov:
Você não usa tais entradas?

Eu o uso, mas geralmente escrevo meus códigos "em dois passes" - ao escrever do zero, uso construções que são claras para "análise fonética" (ou seja, essencialmente para leitura em voz alta), com condições de if() é mais fácil dizer tudo))))

então, sim, posso "arrumar um pouco o código" e fazer constituições similares, mas geralmente o uso na minha biblioteca de exemplos prontos (códigos)

SZS: Eu vi em algum lugar informações sobre o aumento da produtividade dos programas C#. Eu sei com certeza que foi recomendado tentar evitar o uso de foreach() e este operador ? como se() o operador fosse mais produtivo, mas eu acho que não é crítico - eu o uso como eu quiser


Alexey Viktorov:

O número de elementos é importante quando não se precisa de uma simples média. Não consigo me lembrar quais são os IA que usam seu valor anterior em seus cálculos, num relance. Neste caso, o número de elementos afetará o resultado. Em geral, é resolvido em mql5 em meio carrapato e eu não estou interessado.

É um problema mais profundo, pesquisei tanto neste fórum como no fórum inglês, houve uma discussão e exemplos de uso, o total = 0 ou total !=0 pode fazer diferença nos cálculos iMAOnArray() - em uma discussão com Igor (link acima), decidi usar iMAOnArray() apenas com o parâmetro total = 0 - em discussões antigas era a mesma solução

 
Igor Makanu:

Há um problema mais profundo, pesquisei tanto neste fórum como no fórum inglês, houve uma discussão e exemplos de uso, do parâmetro total = 0 ou total !=0 o cálculo do iMAOnArray() pode ser diferente - na discussão com Igor (link acima), decidi usar iMAOnArray() apenas com o parâmetro total = 0 - em discussões antigas a mesma solução foi usada

É isso mesmo. Se você não pegar todos os elementos da matriz e tentar chegar ao EMA sem erros, será difícil.

Média móvel exponencial (EMA)

A média móvel exponencialmente suavizada é determinada pela adição ao valor médio móvel anterior de uma certa parte do preço de fechamento atual. Com médias móveis exponencialmente suavizadas, é dado mais peso ao último preço de fechamento. Uma média móvel exponencial de P percentual será da seguinte forma:

EMA = (FECHADO (i) * P) + (EMA (i - 1) * (100 - P))

Onde:

FECHAR (i) - preço de fechamento do período atual;
EMA (i - 1) - valor da média móvel do período anterior;
P - participação do valor de uso do preço.

Conseqüentemente, se você ler EMA do período 30 a partir de um conjunto de 30 elementos, você receberá MA simples ao invés de EMA.

 
Alexey Viktorov:

Certo. Se você não pegar todos os elementos de uma matriz e tentar chegar ao EMA sem erros, será difícil.

Portanto, se você ler EMA do período 30 a partir de um conjunto de 30 elementos, você receberá MA simples ao invés de EMA.

Eu verifiqueiiMAOnArray() - os resultados são imprevisíveis, às vezes 2 * período MA pode ser usado, às vezes mais é necessário. Se total = 0, você pode usá-lo uma vez para o cálculo, mas se você usá-lo com muita freqüência, o terminal fica pendurado

Eu raramente uso iMAOnArray()

 
Maxim Kuznetsov:

if (response == 0) {

   Print("Что-то пошло не так");

  // потом уже добавите диагностику из WinAPI

   return false;

}

e antes do retorno normal, imprima também o resultado

Print(" всё хорошо, результат:" toStr);

return toStr;

e executar todo o código em um temporizador, por exemplo, uma vez por minuto. Pratique em um recurso que com certeza não será banido e dará tempos diferentes, mas previsíveis, para que você possa verificar.

----
telepaticamente - se realmente houver um problema,
ou a inicialização está errada (não me lembro se WinSOCK deve ser inicializado para InternetOpenW ou não)
Ou algum recurso não está sendo liberado.

tudo adicionado! Nada aparece no Print!!!

 

Como faço a saída da variável para a janela de dados sem exibi-la no gráfico?

Não consigo encontrá-lo na documentação por algum motivo.

 
psyman:

Como faço a saída da variável para a janela de dados sem exibi-la no gráfico?

Não consigo encontrá-lo na documentação por algum motivo.

Ajuste a cor do display para clrNONE.