Comunidade de Especialistas - página 3

 
komposter<br / translate="no">
Deu uma olhada rápida (ainda não fiz nenhuma escavação), encontrou a referência de ponto que você está calculando.
Tente "jogá-lo fora" e colocar um ponto estúpido. Talvez seja esse o problema (apontar através do MarketInfo pode nem sempre sair do jeito que você quer?).

É sempre suposto que...
embora você possa tentar normalizá-lo também =)

e nem sempre é aceitável - especialista pode negociar em vários pares, e o ponto pode ser diferente...
 
O problema é tão antigo quanto o primeiro chip de computador -
é triste, é claro... mas tem que haver uma forma de contornar isso, certo? Espero que Renat diga algo...
 
if ( orderstoploss == 0.0 || (  orderstoploss < ( bid - TrailingStop * point ) ) )


Suponha que os pedidos de perda = 1,29211 (5 dígitos após o ponto decimal)
bid=1,29716 (também 5 dígitos )
TrailingStop = 50
point =0,001
então (bid - TrailingStop * point)=1,29216>1,29211
True, isto requer que os dígitos se tornem subitamente 5
e também

if ( orderstoploss == 0.0 || (  orderstoploss < ( bid - TrailingStop * point ) ) )


pode ser substituído sem dor por

if ( orderstoploss < ( bid - TrailingStop * point )) )


Acho que não é necessário verificar a ausência de nível de parada de perda quando se está em trilha.
Na verdade é, estou me corrigindo. Se estabelecermos um stop loss somente quando houver lucro, e se não estivermos dispostos a esperar por uma chamada de margem.
Eu não encontrei mais nada. Em qual par sua parada de trilha funcionou incorretamente e houve algum movimento forte?

 
Hi.
Estou convertendo tudo em valores inteiros para fins de comparação. Eu armazeno e uso os valores dados onde quer que eu possa (na matriz).
utilizar os valores dados (em arrays, variáveis, etc.)
Isto é, variáveis do tipo int podem tomar valores de -2147483648 a 2147483647.
Esta dimensionalidade é bastante adequada para cruzes.
Correspondentemente, 1,2999 e 1,3000 podem ser fundidos a 12999 e 13000, e então podem ser comparados com segurança,
sem receio de qualquer erro periódico.

Eu esbocei um exemplo aqui :)
int Normalize(double double_value, int digits) - приводит double в int  (1.2999 в 12999)
double Restore(int int_value, int digits) - приводит полученный ранее int в double (12999 в 1.2999)


aqui

//+------------------------------------------------------------------+
//|                                                   ShiftPoint.mq4 |
//|                                                            Begun |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
   return(0);
}
//+------------------------------------------------------------------+
int Normalize(double double_value, int digits)
{
	return (NormalizeDouble(double_value,digits)*MathPow(10,digits));
}
double Restore(int int_value, int digits)
{
	return (NormalizeDouble((int_value/MathPow(10,digits)),digits));
}
//+------------------------------------------------------------------+
int start()
{
	double	Test_Value =  1.29999999;
	int	Test_int;
	double	Test_double;

	Test_int         = Normalize(Test_Value,Digits);
	Test_double   = Restore(Test_int,Digits);
	Print("-----------------------------");
	Print("Restored value    = ",DoubleToStr(Test_double,Digits));
	Print("Shift Point Value = ",Test_int);
	Print("Real Double Value = ",DoubleToStr(Test_Value,8));
}
//+------------------------------------------------------------------+



saída:
ponto de deslocamento EURUSD,H1: Valor Real Duplo = 1,2999999999
ponto de deslocamento EURUSD,H1: Valor do ponto de deslocamento = 13000
ponto de deslocamento EURUSD,H1: Valor restaurado = 1.3000

 
Em geral, substitua isto por
if ( orderstoploss < ( bid - TrailingStop * point )) )


em

if ( TrailingStop < ( bid -orderstoploss)/ point  )


Alternativamente.

 
Obrigado a todos por sua participação!
Rosh 17.04.05 22:29 <br / translate="no"> parece-me que a verificação da ausência do nível de stop loss não é necessária para o rastreamento
Eu discordo, a trilha deve ser inequívoca - se estiver, significa que o SL está exposto.

Em qual par seu rastro não funcionou corretamente e não houve um movimento forte?
agora o especialista está correndo na ue - erros ocasionais... ao longo do dia... Não acho que seja esse o caso...

Em geral, substitua-o.
agora vou tentar, talvez ajude ;) amanhã lhe direi...

Início 17.04.05 22:46
Hi.
Eu levo tudo a números inteiros para comparação
Oi =) certamente é uma opção... mas não pensei que teria que passar por todo esse trabalho... Quem me dera ter ouvido dos desenvolvedores, eles sabem melhor do que eu...
 
Desculpas, não estava envolvido na discussão.

2dev:
O problema é tão antigo quanto o primeiro chip de computador:

Você está certo - este é um problema fundamental, é perigoso comparar números de ponto flutuante.
Em lugares importantes, sempre trazer números com uma certa precisão através da Normalize().

que implementação de aritmética você usa?

Padronizar no tipo duplo (8 bytes).

A propósito, forçamos a normalização de todos os preços passados nas consultas comerciais para evitar erros.
Você pode enviar um pedido de stop loss como 1.2932461, mas ele será definido como 1.2932.
Por favor, verifique se este é o erro ao tentar redefinir a parada pelo mesmo preço?
 
Por favor, verifique se este é o erro de tentar redefinir a parada pelo mesmo preço?

3 pessoas estavam observando =))) Renat veio e apenas apontou o dedo para o erro =)))
Vou verificar agora, é claro, mas o mais provável é que seja este o caso... Eu não normalizei o "bid - TrailingStop * point", e esta mesma construção está envolvida na modificação da ordem...
não estamos atentos, cavalheiros ;)
 
Em lugares importantes, sempre levar os números a uma certa precisão através da Normalize().

você quer dizer a Normalize() que Begun sugeriu?
 
В важных местах постоянно приводите числа к определенной точности через Normalize().

você quer dizer a Normalize() que Begun sugeriu?

Desculpe, eu quis dizer o padrão NormalizeDouble.