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

 
Vinin:

Esta fórmula é bastante fácil de ajustar às exigências. Você só tem que levar em conta o lote mínimo

Isto parece um pouco diferente

lot=Min_Lot+lotstep*MathRound((AccountBalance()-X)*0.001/lotstep);

Onde X - equilíbrio para abrir o lote mínimo,

Mas ainda precisamos verificar o lote mínimo.

Por que precisamos de todas essas complexidades, X que devem ser calculadas separadamente? Além disso, precisaremos de verificações adicionais...

Não seria mais fácil verificar direta e honestamente a validade e aceitabilidade de todos os valores da fórmula, e depois simplesmente calculá-la honestamente?

A propósito, MathRound() arredonda para o inteiro mais próximo, ou seja, pode facilmente superestimar erroneamente, o que pode causar conseqüências adicionais.

 

Pobre rapazinho.

 
simpleton:
Não você.
 
Olá. Algum conselho? Estou tentando calcular o StopLoss a partir da baixa e alta da 1ª barra, depois de fazer um pedido pendente, para comprar e vender, respectivamente. Mas não obtive resultado, apenas 130 erros, só isso. Obrigado de antemão.
if(ticket>0)
           {
            SL = NormalizeDouble(Low[1] - StopLoss*Point, Digits);
            {
               if(OrderModify(ticket, OrderOpenPrice(), SL, 0, 0))
...
//+-------------------------------------------------------------------------+
if(ticket>0)
           {
SL = NormalizeDouble(High[1] + StopLoss*Point, Digits);
            {
               if(OrderModify(ticket, OrderOpenPrice(), SL, 0, 0))
...                     																							
 
Você está normalizando a coisa errada.
 
Petiyashaket:
Se você puder explicar isso em uma linha de código e com comentários, como no meu código anterior, ficarei extremamente grato.

"Tenho dúvidas", e não posso deixar de sentir que tudo se resume ao mecanismo de cache do ambiente de mercado.

Para que o terminal não tenha que "correr para o servidor" para cada ocasião, como OrderTotal(), OrderSymbol() etc., o ambiente do mercado é copiado para algum cache, e parece ser diferente para cada script, mas o script lida apenas com este cache. O cache NÃO é atualizado automaticamente durante todo o tempo de execução da função principal do script, mesmo após a execução bem sucedida de funções como OrderSend() mudando o ambiente de mercado no servidor, razão pela qual uma ordem que aparece dentro do script "não é visível", ou seja, faz uma ilusão de sua ausência. Ela simplesmente não pode ser detectada no loop, razão pela qual OrderModify() não é chamada. Esta é uma hipótese que surgiu com base em dúvidas vagas e sentimentos incompreensíveis.

O cache descrito pode ser forçosamente atualizado usando a chamada RefreshRates(), por exemplo, imediatamente após a chamada OrderSend(). Verifique se a hipótese está correta.

Se, entre outras coisas, o RefreshRates() retornar verdadeiro, então esta é uma confirmação indireta adicional da hipótese.

 
Petiyashaket:
Se você me explicar isso em uma linha de código e com comentários, como no meu código anterior, ficarei extremamente grato.
Se você não entender, leia-o aqui. E aqui. Em seguida, fazer com que as variáveis não percam seu significado em cada tick e organizar o loop de forma adequada.
 
simpleton:

"Tenho dúvidas", e não posso deixar de sentir que se trata do mecanismo de cache do ambiente do mercado.

Para que o terminal não tenha que "correr para o servidor" para cada ocasião, como OrderTotal(), OrderSymbol() etc., o ambiente de mercado é copiado para algum cache, e parece ser diferente para cada script, mas o script lida apenas com este cache. O cache NÃO é atualizado automaticamente durante todo o tempo de execução da função principal do script mesmo após a execução bem sucedida de funções como OrderSend() mudando o ambiente de mercado no servidor, portanto, a ordem que aparece dentro do script "não é visível", ou seja, ela faz uma ilusão de sua ausência. Ela simplesmente não pode ser detectada no loop, razão pela qual OrderModify() não é chamada. Esta é a hipótese que surgiu com base em dúvidas vagas e sentimentos pouco convincentes.

O cache descrito pode ser atualizado forçosamente usando a chamada RefreshRates(), por exemplo, imediatamente após a chamada OrderSend(). Verifique se a hipótese está correta.

Se, entre outras coisas, RefreshRates() retorna verdadeiro, esta é uma confirmação indireta adicional da hipótese.

Você consome drogas?
 
noob1:
Olá. Por favor, informe, se eu souber, estou tentando calcular um StopLoss a partir de baixo e alto de 1ª barra, após uma ordem pendente de compra e venda, respectivamente. Mas eu não tenho nada, apenas 130 erros e nada mais. Agradecemos antecipadamente.

Verifique se o OrderOpenPrice() está muito próximo do SL, e se as paradas estão "do lado direito do preço". Você pode ler sobre isso aqui:

Os preços StopLoss e TakeProfit não podem estar muito próximos do mercado. A distância mínima de parada em pips pode ser obtida usando a função MarketInfo() com o parâmetro MODE_STOPLEVEL. O erro 130 (ERR_INVALID_STOPS) será gerado em caso de paradas erradas ou não-normalizadas.

Neste caso, ou seja, para uma ordem pendente, o "mercado" é seu "preço aberto pendente".

 
tara:
Você está normalizando a coisa errada.
A partir da documentação:
Razão: