[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 502

 
editar | apagar Ajuda para encontrar uma função para colocar pedidos que leve em conta o escorregamento e sem erros 130-134.
 
nuan:
editar | apagar Ajuda para encontrar uma função para colocar pedidos que leve em conta o escorregamento e sem erros 130-134.

Mostre-me sua variante.
 
NumderOrder=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-SL*Point,Ask+TP*Point, "BUY",0,0,Red);

Print(GetLastError());

Com quaisquer valores de SL e TP, ele dá 134, muitas vezes não faz nenhum pedido.

abre com a condição se(NumberOfOrders(NULL)==0)


No testador, em vez de uma ordem, sempre coloca um monte, ou seja, não consigo entender porque deveria fazer uma ordem se não há outras ordens em aberto neste par

 
desculpe, por que há mais de um pedido
 
nuan:
NumderOrder=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-SL*Point,Ask+TP*Point, "BUY",0,0,Red);

Print(GetLastError());

Com quaisquer valores de SL e TP, ele dá 134, muitas vezes não faz nenhum pedido.

abre com a condição se(NumberOfOrders(NULL)==0)


No testador, em vez de uma ordem, sempre coloca um monte, ou seja, não consigo entender porque deveria fazer uma ordem se não há outras ordens em aberto neste par


ERR_NOT_ENOUGH_MONEY 134 Não há dinheiro suficiente para completar a transação
 

Bom dia. Estou fazendo um EA, ele abre 2 pedidos em uma determinada condição (figurativamente falando: quando o preço sobe e desce). Quando o preço sobe, abre 2, quando o preço desce, fecha esses 2 e abre um novo 2. Uma ordem vai sem lucro, a segunda ordem com lucro. Há um problema com o segundo. No momento de sua morte, não é selecionado, aqui está o código para remover ordens:

for (int a = 0; a < OrdersTotal()-1; a++)
    if (OrderSelect(a, SELECT_BY_POS, MODE_TRADES))
        if (OrderComment() == "MyOrd" && OrderType() == OP_SELL)
            OrderClose(OrderTicket(), NormalizeDouble(OrderLots(), Digits), NormalizeDouble(Ask, Digits), 0);

O mesmo para OP_BUY. Estou comparando comentários para ter certeza de que é uma ordem aberta por minha EA e não manualmente ou por outra EA. Aqui está o problema com o OrderSelect, ele simplesmente não quer selecionar um pedido com lucro. Quando chega a seu número, OrderSelect retorna falso. Não há erro no registro do testador, GetLastError também diz que tudo está bem (devolve 0). Por que ele não está sendo selecionado? Por que nenhum erro se ele não pôde selecioná-lo? Obrigado a todos vocês.

 
Pergunta de acompanhamento. Por que no testador, quando eu defino o período para mês+, então cinco dígitos aparecem nos resultados? Onde quer que os preços sejam estabelecidos, eu coloco NormalizeDouble(SomeValue, Digits). E somente nos resultados, o tronco não jura, embora quando eu não sabia sobre a função de arredondamento, então ele jurou.
 

a condição

a < OrdersTotal()-1

é verificado a cada iteração.

Pense no que um igual e o que OrdensTotal() -1 é igual após a primeira iteração

 
Solree:

OrderClose(OrderTicket(), NormalizeDouble(OrderLots(), Digitos), NormalizeDouble(Ask, Digitos), 0);

O lote e o preço têm dígitos diferentes.
 

Solree:

NormalizeDouble(OrderLots(), Dígitos)


Além disso - não é tão fácil normalizar o lote.
Você precisa levar em conta o passo permitido de mudança de lote.
Por exemplo, se a etapa for 0,01, então normalize em 2
e se a etapa for 0,1, então a normalização deve ser 1