[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 22

 
skyjet:

Olá! meu objetivo é transferir o indicador criando uma função para a EA.

O primeiro passo, que é a criação da função, é dado. Mas o próximo - teste - não funciona.

O indicador desenha canais. Tem 4 amortecedores e muitas variáveis. Coloquei tudo isso na função.

Mas ao criar um Expert Advisor de teste para garantir a precisão de seu funcionamento, comparando o indicador e minha função, não posso conseguir a compilação.

Erros constantes de variáveis externas, que não estavam presentes quando eu criei a função, apareceram no EA.

Por favor, me dê alguns conselhos ou um link para um exemplo. Usei os artigos de GODZILLA, mas os exemplos dele são diferentes dos meus.

O esquema é, grosso modo, o seguinte:

  • transferir tudo que estava no init() do indicador para uma função separada, por exemplo, fInit_Indicator() e escrevê-lo no init() do EA, lembrando ao mesmo tempo de remover do código tudo que diz respeito à inicialização dos buffers de indicador.
  • copiar todas as variáveis indicadoras globais e colocá-las em variáveis globais da EA. Não se esqueça de definir o tamanho dos amortecedores indicadores quando eles forem declarados na EA. Algo como gd_Buf1[100], gd_Buf2[100] etc. Creio que 100 valores serão suficientes para você.
  • renomear a função start() do indicador, por exemplo, fMyIndicator() e colocá-lo na função start() da EA antes da abertura do código de ordem (para tomar uma decisão).
  • Além disso, não esqueça que o buffer indicador é diferente do buffer "não-indicador". Há várias soluções para isso:
  • quando uma nova barra chega, todos os dados da matriz "não-indicador" são deslocados, liberando o índice 0, onde o novo valor calculado é colocado.
  • Novamente, quando uma nova barra chegar, recalcule toda a "matriz não indicadora".

Experimente - não é difícil.

 
999666:
Ajude-me a escrever uma condição que fará com que a EA multiplique o lote por duas vezes após abrir n ordens
if (MyOrders >= n) Lots *= 2;
 

Boa tarde!

Ainda estou descobrindo as coisas com arrays.

Preciso carregar os valores do número de pontos na matriz em cada novo tick.

Otamanho da matriz será diferente a cada vez. O que devo fazer neste caso, usar ArreyResize em cada iteração do laço?

 

Boa tarde, sobre o tema das matrizes.

há uma célula deste tipo

12345,p,fgh,2011-01-01,55,66

como posso obter 55 dele?

Obrigado.

 

Se a matriz for heterogênea, você provavelmente deve converter todos os elementos em tipo string e depois procurar o necessário usando

StringFinde(https://www.mql5.com/ru/forum/138609/page22#613148). Corrija-me se eu estiver errado.

 
TarasBY:

Não ajuda: Se não for difícil ter duas condições se (LotConst_ou_não) gd_200 = Lote;

else gd_200 = AccountBalance() * RiskPercent / 100.0 / 10000.0;

Substitui-la por um consultor especializado que calcula não o saldo, mas o número de pedidos em aberto.

A resposta seria muito apreciada.

 
TarasBY: Não ajuda: Se não for difícil ter duas condições se (LotConst_ou_não) gd_200 = Lote;

else gd_200 = AccountBalance() * RiskPercent / 100.0 / 10000.0;

Substitui-la por um consultor especializado que calcula não o saldo, mas o número de pedidos em aberto.

A resposta seria muito apreciada.


 
Snegovik:

Boa tarde, sobre o tema das matrizes.

há uma célula deste tipo

12345,p,fgh,2011-01-01,55,66

como posso obter 55 dele?

Obrigado.


https://book.mql4.com/ru/variables/arrays
 
999666:
Ajude-me a escrever uma condição que fará com que a EA multiplique o lote por duas vezes após n ordens serem abertas
Se você quiser abrir os próximos (4, etc.) pedidos com 3 já abertos com 2 x lotes, então:
int Opened_pos=0;
for (int i=OrdersTotal()-1; i>=0; i--)
{ if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
  { if (OrderSymbol()==Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL))
    { Opened_pos++;
} } }
if (Opened_pos>=4) double lot=lot*2;
 
Fox_RM:

Boa tarde!

Ainda estou descobrindo as coisas com arrays.

Preciso carregar os valores do número de pontos na matriz em cada novo tick.

O tamanho da matriz será diferente a cada vez. O que devo fazer neste caso, usar ArreyResize em cada iteração do laço?

1-Item: sua filosofia de mudar o tamanho da matriz é defeituosa desde o início, em 99 de cada 100 casos você pode usar apenas 10 células para manipular leituras indicadoras;

2-nd: recalcular essas leituras a cada tique é um capricho do cérebro mal informado.