Comunidade de Especialistas - página 2

 
Para paradas, seria melhor introduzir um "cooldown" (não sei como chamá-lo corretamente).

Se você rastrear uma parada com a precisão de uma tubulação, o corretor uivará e cortará os Expert Advisors :)

Acho que isto é melhor:
   if (MathAbs(CurrentStopLoss - NewStopLoss) > (Ask - Bid)*Koef) { // Modificar stop loss ................ }


Ou seja, modificamos a ordem se a nova parada difere da antiga por um determinado número de spreads (1 - 2).
Seu problema é automaticamente resolvido aqui.

 
Mak, obrigado pelo conselho. Será feito.
Somente aqui o problema é diferente - ele tenta definir _para_ o_ mesmo_valor... Isto é, tal verificação não salvará de erros, mas apenas reduzirá sua probabilidade =)
 
Somente aqui o problema é diferente - ele tenta definir _para_ o_ mesmo_valor... ou seja, tal verificação não salvará de erros, mas apenas reduzirá sua probabilidade =)

É muito provável que seja uma falha no texto da EA.
Eu tinha um semelhante, não me lembro como foi consertado.

Mas o exemplo acima garante que qualquer erro no roteiro
não haverá tentativas de fixar o mesmo valor.
 
Только тут проблема в другом - оно пытается установить _на_то_же_значение_... т.е. такая проверка не спасёт от ошибки, а просто уменьшит её вероятность =)

É muito provável que seja uma falha no texto do especialista. Eu tinha um semelhante, como era consertado, não me lembro. Mas o exemplo acima garante que qualquer erro no script não tentará definir o mesmo valor.





Mak, há 1 linha de texto ali =
)_TrailingStop( bilhete de pedido, 50 )
;



Escrevi a função precisamente para evitar tais erros, e a verificação é a mesma, com a diferença de que cada tubulação é trabalhada.
Se o valor for o mesmo (a distância do preço até a parada é igual a 50 neste caso) as paradas de arrasto não devem funcionar.
Além disso, na maioria dos casos, não funciona =)))), e às vezes ele desliza por alguma razão....

 
Talvez a NormalizeDouble funcione de maneira diferente às vezes?
Ele termina ou é descartado?

De modo geral, é melhor nunca comparar os tipos flutuantes para a igual
dade.

 A única exceção:
duplo A,B; ........... A = ; ....... B = A; ............. se (B === A) ...........



E sobre uma linha ...
Em _TrailingStop há muitas linhas,
e se há pelo menos 2, já há uma razão para erros :)

 
Faz o quê, descarta ou completa?
Também estou curioso ;)

Já corrigi parcialmente aqui: em vez disso
( ordertoploss == 0.0 ........ )


feito

se ( ordertoploss <= 0 ......... )

e o resto parecia estar bem:

.... ordertoploss < ( lance - TrailingStop * point ) 





Renat, geralmente estou depositando minhas esperanças em você =) provavelmente há algo tão simples quanto um ângulo aqui - e eu simplesmente não percebo...

 
Vou ver se posso ajudar no fim de semana.
 
Vou tentar dar uma olhada neste fim de semana e ver se posso ajudar
. Eu tenho que acertar...
 
É provavelmente algo tão simples quanto um ângulo - e eu simplesmente não percebo...

komposter, você está errado :) Como disse a menina que dobra a colher, "as coisas não são o que parecem".
Por exemplo, o seguinte laço imprime 5 números:
para (duplo d = 0,1; d <= 0,5; d += 0,1) Imprimir(d);


Quanto o próximo ciclo de impressão com os limites aumentará em 1,0?

para (duplo d = 1,1; d <= 1,5; d += 0,1) Imprimir(d);



Você esperaria imprimir 5 números também, mas só imprime 4 (quatro). Isso não é ótimo?
Se acrescentarmos outra linha após o laço:

Imprimir("d=" + d + "(d <= 1,5)=" + (d <= 1,5))


nós recebemos:

d=1.50000000 (d <= 1.5)=0



Quase como o seu com uma parada, mas mais fundamental :). O problema é tão antigo quanto o primeiro chip de computador:
Os computadores usam aritmética binária e os seres humanos usam aritmética decimal. Ao arredondar, os artefatos aparecem.

O "arredondamento para cima", que Mak sugeriu, ajuda se você tiver um problema fundamental com o arredondamento, não um bug trivial.

Muitas pessoas pensam que os cálculos financeiros DEVEM utilizar bibliotecas especiais de aritmética decimal, mas mesmo estas podem conter erros, às vezes
o que às vezes pode ter sérias conseqüências. A propósito, Renat, qual é a aplicação da aritmética que você usa?

 
komposter

Deu uma olhada rápida (ainda não fez nenhuma escavação), encontrou a referência de ponto que você está calculando.
Tente "descartá-la" e coloque Ponto. Provavelmente esse é o problema (o ponto no MarketInfo pode nem sempre sair do jeito que você quer?).