Calculo do 61.8 da fibo

 

Estou tentando encontrar o valor de 61.8 entre um intervalo de preço. 

Exemplo:


Abertura: 116950

Fibo 61.8: 116898

Fechamento: 116815


Alguem sabe uma formula matematica pra calcular essa região de fibo que possa ser aplicado no MQL?




 
HENRIQUE ARAUJO DOS SANTOS:

Estou tentando encontrar o valor de 61.8 entre um intervalo de preço. 

Exemplo:


Abertura: 116950

Fibo 61.8: 116898

Fechamento: 116815


Alguem sabe uma formula matematica pra calcular essa região de fibo que possa ser aplicado no MQL?



Algo do tipo:

A + (F-A)*0,618 

?

 
Flavio Jarabeck:

Algo do tipo:

?

Sim! Mas eu fiz usando essa formula e deu Invalid Price. Acho que estou fazendo algo errado. Veja:

double entrada = rates[3].open + (rates[1].close-rates[3].open)*0.618;
trade.SellStop(1,entrada,_Symbol,0,0,0,0,NULL);
}


 

Tem que normalizar o preço para vender conforme o índice arredondando para 5 ou 10.


 entrada = NormalizeDouble(MathRound(entrada/tick_size)*tick_size,val_digits);

 
Ivan Ronchi:

Tem que normalizar o preço para vender conforme o índice arredondando para 5 ou 10.


 entrada = NormalizeDouble(MathRound(entrada/tick_size)*tick_size,val_digits);

Veja se estou fazendo algo errado: 

double entrada = rates[3].open + (rates[1].close-rates[3].open)*0.618;
entrada = NormalizeDouble(MathRound(entrada/5)*5,_Digits);
trade.SellStop(1,entrada,_Symbol,0,0,0,0,NULL);


Ainda esta dando Invalid Price

 
HENRIQUE ARAUJO DOS SANTOS:

Veja se estou fazendo algo errado: 


Ainda esta dando Invalid Price

poste as telas de log...
 
lavio Jarabeck:
poste as telas de log...


Veja a logica de abertura de ordem:

   if(rates[4].close > rates[4].open && rates[3].close < rates[3].open-20*_Point && rates[2].close < rates[2].open-20*_Point && rates[1].close < 
rates[1].open-20*_Point && PositionsTotal()==0){
   double entrada = rates[3].open + (rates[1].close-rates[3].open)*0.618;
   entrada = NormalizeDouble(MathRound(entrada/5)*5,_Digits);
   trade.SellStop(1,entrada,_Symbol,0,0,0,0,NULL);
   }


A ideia é basicamente essa, inserir uma ordem limitada na zona de 61.8:



 
HENRIQUE ARAUJO DOS SANTOS:


Veja a logica de abertura de ordem:


A ideia é basicamente essa, inserir uma ordem limitada na zona de 61.8:



Não entendi o porque do erro... 155 é um preço válido. A outra possibilidade é que esse preço de 155 esteja sendo colocado dentro do range do BID e ASK, OU, dentro da área definida pela corretora, que recusa ordem nesses ranges. Veja a documentação do SymbolInfo, se me recordo bem é STOPS_LEVEL ou algo assim...

Ponha mais Prints no momento do envio da ordem assim vc entende melhor o que está acontecendo, colocando BID, ASK, LAST_PRICE, etc... E, cheque pelo erro em SellStop(), assim vc não envia repetidas vezes a ordem...

;)

 
Flavio Jarabeck:

Não entendi o porque do erro... 155 é um preço válido. A outra possibilidade é que esse preço de 155 esteja sendo colocado dentro do range do BID e ASK, OU, dentro da área definida pela corretora, que recusa ordem nesses ranges. Veja a documentação do SymbolInfo, se me recordo bem é STOPS_LEVEL ou algo assim...

Ponha mais Prints no momento do envio da ordem assim vc entende melhor o que está acontecendo, colocando BID, ASK, LAST_PRICE, etc... E, cheque pelo erro em SellStop(), assim vc não envia repetidas vezes a ordem...

;)

Consegui resolver o problema! Conforme nosso amigo Ivan Rochi me atentou, a ordem deve ser sell limit e não sell stop. Porém, acredito que ainda tenha algo de errado com o calculo da fibo, pois a ordem está sendo colocada na fibo de 38.2 e não na fibo de 61.8. Veja:


Calculo: 

double entrada = rates[3].open + (rates[1].close-rates[3].open)*0.618;
entrada = NormalizeDouble(MathRound(entrada/5)*5,_Digits);
 
HENRIQUE ARAUJO DOS SANTOS:

Consegui resolver o problema! Conforme nosso amigo Ivan Rochi me atentou, a ordem deve ser sell limit e não sell stop. Porém, acredito que ainda tenha algo de errado com o calculo da fibo, pois a ordem está sendo colocada na fibo de 38.2 e não na fibo de 61.8. Veja:


Calculo: 

Temte alterar o multiplicador para 0.382 ao invés de 0.618

 
HENRIQUE ARAUJO DOS SANTOS:

Consegui resolver o problema! Conforme nosso amigo Ivan Rochi me atentou, a ordem deve ser sell limit e não sell stop. Porém, acredito que ainda tenha algo de errado com o calculo da fibo, pois a ordem está sendo colocada na fibo de 38.2 e não na fibo de 61.8. Veja:


Calculo: 

apenas faça a retração a partir do fechamento, pois se close>open o acréscimo é negativo, senão é positivo.

somando ao preço de abertura na verdade está fazendo 

close + (open-close)*(1-0,618)


o correto seria

double entrada = rates[3].close + (rates[3].open-rates[1].close)*0.618;
Razão: