[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 232

 
DhP:

Qual é a diferença entre tmp duplo e NormalizeDouble(iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0)?

Multiplicá-las será sempre maior que zero.

Eu acho que sim))

(-) * (-) = +

(+) * (+) = +


а.... você está absolutamente certo... NormalizeDouble(iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0) - aqui devemos colocar "i" ao invés de 0 - eu mudei, mas ele ainda não começou a fazer negócios....

o código agora é parecido com este:

 bool signal_MACD() 
  { 
    bool signal_MACD = false;
    double tmp = iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0); 
    for(int i=1;i<=5;i++) 
    { 
       if(NormalizeDouble(iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,i)*tmp,4)<0.0) 
       { 
          signal_MACD = true; 
          break; 
       }        
    } 
    return(signal_MACD);
  } 

mas ainda não funciona

 
CLAIN:


а.... você está absolutamente certo... NormalizeDouble(iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0) - Eu o mudei, mas ele nunca começou a fazer negócios....

O código agora é parecido com este:

mas ainda não funciona.

Esta mudança é verdadeira para falsa?

A função altera o valor de saída?

 
CLAIN:


а.... você está absolutamente certo... NormalizeDouble(iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0) - aqui devemos colocar "i" ao invés de 0 - eu mudei, mas ele ainda não começou a fazer negócios....

o código agora é parecido com este:

mas ainda não funciona


Use "Imprimir", leia os logs e compare "o que é" com "o que é esperado".
 

A função não altera os valores.... pelo menos é meu julgamento, porque os ofícios nunca começaram a se abrir.

como você usa a impressão?

 bool signal_MACD() 
  { 
    bool signal_MACD = false;
    double tmp = iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0); 
    for(int i=1;i<=5;i++) 
    { 
       if(NormalizeDouble(iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,i)*tmp,4)<0.0) 
       { 
          signal_MACD = true; 
          Print(NormalizeDouble(iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,i)*tmp);
          break; 
       }        
    } 
    return(signal_MACD);
  } 

eu só tenho esta versão, mas algo me diz que está errado também....

 
CLAIN:

A função não altera os valores.... pelo menos é meu julgamento, porque os ofícios nunca começaram a se abrir.

como você usa a impressão?

eu só tenho esta versão, mas algo me diz que está errado também....


Print("iMACD(",Symbol(),",",TF,",",fast_ema,",",slow_ema,",",signal_period,",",PRICE_CLOSE,",",MODE_MAIN,",",i,",",")*",tmp,"=",iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,i)*tmp);
 
MaxZ:

Se todas as variáveis forem declaradas, não vejo nenhum erro na sintaxe da MQL4.

Qual é o problema?

Obrigado.

Fazendo um cálculo de retrocesso para minha EA. Vi que os cálculos eram imprecisos, então passei pelos blocos que podem conter erros.

 


Hi.

Ajude-me a entender
Estou escrevendo um EA e não consigo entender as ordens.
Estou fazendo pedidos:
OrderSend(Symbol(),OP_SELLLIMIT,lot,cena_sell,3,sl _sell,tp_sell,",1,0,Red);
Alerta (GetLastError());

OrderSend(Symbol(),OP_SELLLIMIT,lot_1,cena_sell_d_ 1,3,sl_sell,tp_sell_d_1,",2,0,Red);
Alerta (GetLastError();

OrderSend(Symbol(),OP_SELLLIMIT,lot_2,cena_sell_d_ 2,3,sl_sell,tp_sell_d_2,",3,0,Red);
Alerta (GetLastError();

OrderSend(Symbol(),OP_SELLLIMIT,lot_3,cena_sell_d_3,3,sl_sell,tp_sell_d_3,",4,0,Red);
Alert (GetLastError());

Se o primeiro take de lucro for acionado, apague as outras ordens.
Se o primeiro não tiver disparado, e o segundo tiver disparado o lucro, troque os lotes_3 e o lote_4 para o terceiro e o quarto tomarem lucro.

 
sergey_r:


Hi.

Ajude-me aqui.
Estou escrevendo um EA e não consigo entender as ordens.
Estou fazendo pedidos:
OrderSend(Symbol(),OP_SELLLIMIT,lot,cena_sell,3,sl _sell,tp_sell,",1,0,Red);
Alerta (GetLastError());

OrderSend(Symbol(),OP_SELLLIMIT,lot_1,cena_sell_d_ 1,3,sl_sell,tp_sell_d_1,",2,0,Red);
Alerta (GetLastError());

OrderSend(Symbol(),OP_SELLLIMIT,lot_2,cena_sell_d_ 2,3,sl_sell,tp_sell_d_2,",3,0,Red);
Alerta (GetLastError());

OrderSend(Symbol(),OP_SELLLIMIT,lot_3,cena_sell_d_3,3,sl_sell,tp_sell_d_3,",4,0,Red);
Alerta (GetLastError());
Eu preciso:
Se o primeiro take de lucro for acionado, exclua as ordens restantes.
Se o primeiro não tiver disparado, e o segundo tiver disparado o lucro, troque os lotes_3 e o lote_4 para o terceiro e quarto.


O que veio primeiro - usar a função desta página do fórum - devolve a bandeira para fechar o pedido no take profit. Antes disso, dependendo de seus volumes de pedidos (diferentes) - você define cada um deles um número_mágico diferente, ou seja, lote - magia 1, lote1 - magia 2 etc. Então você verifica se a ordem com o mágico 1 foi fechada pela ordem de take usando esta função e se assim for, você "remove os outros". E então pelo código você também verifica a segunda ordem com o número mágico 2 - se estiver Ok, então você modifica a terceira e quarta ordens (muda seus volumes)... e ao definir ordens pendentes e modificá-las é melhor lembrar de verificar as tolerâncias mínimas e tudo mais... Assim...
 

Eu não entendo como usar as funções. Você poderia descrever como fazer isso?

Aqui eu fiz estes pedidos. Em seguida, inseri a função a partir dessa página. Ou como? Descreva um exemplo de como fazer isso. Por favor.

 
sergey_r:

Eu não entendo como usar as funções. Você poderia descrever como fazer isso?

Aqui eu fiz estes pedidos. Em seguida, inseri a função a partir dessa página. Ou como? Descreva um exemplo de como fazer isso. Por favor.



A ordem de trabalho com a f-mi - são coisas básicas, em torno das quais tudo gira... Desmonte-o, veja exemplos de corujas (em um código competente), elas podem ser encontradas na base de código - desmonte este exemplo de coruja e use-o como base para o seu próprio... É uma base, não se pode passar sem ela. Eu mesmo coloquei a coruja com base neste exemplo no codebase.

Tenha calma, leve o tempo que precisar - resolva.