[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 484

 

Parâmetros incorretos foram enviados à função comercial, por exemplo, símbolo incorreto, comércio não identificado, tolerância de preço negativo, número de bilhete inexistente, etc. Você precisa mudar a lógica do programa.


Tente o segundo parâmetro para colocar OrderOpenPrice() em vez de zero

 
sergeev:

ter o hábito de imprimir quaisquer parâmetros que possam ser relevantes para o erro.

se (!OrderModify(...)) { Print(GetlastError()+.... OrderModify parameter list ); }



Sim, é um bom hábito. Obrigado.))

FOReignEXchange 03.07.2011 18:35

Tente o segundo parâmetro ao invés de zero para colocar OrderOpenPrice()

Sim, é isso mesmo. )) E por alguma razão eu estava convencido de que você não pode definir parâmetros que não precisa modificar, pois isso levará a outro erro. Existe algo semelhante ao que estou falando?

Algo como isto está fixo em minha mente:

A função tenta alterar o parâmetro para o mesmo valor.

 
tol64:


E por alguma razão eu estava convencido de que você não pode definir parâmetros que não quer modificar, pois isso levaria a outro erro. Existe algo semelhante ao que estou falando?

Algo como isto é fixado na cabeça:

A função tenta alterar o parâmetro para o mesmo valor.


Você poderia alterar apenas um parâmetro e deixar o resto inalterado e escrever OrderOpenPrice(), OrdsrStopLoss() etc. em todos os lugares.
 
Olá! alguém tem um exemplo de uma rede de arrasto a partir de um certo nível de preço com um certo passo? Obrigado!
 

Aqui está outra pergunta que eu tenho. Sobre o exemplo de código que dei acima (tol64 03.07.2011 18:20).

O programa nem sempre sincroniza o stop loss de diferentes posições. Ou seja, a posição é selecionada, a condição é cumprida, ela também é registrada no diário, mas o stop loss não é modificado.

Na figura acima, parar a perda por posição com bilhete 4 deve ser modificado e ajustado para o mesmo valor que para a posição com bilhete 1. O programa chega a este ponto com a impressão, mas a continuação da execução parece estar bloqueada.

   for(count = 0; count < OrdersTotal(); count++)
      {  
         if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) 
            Print("Ticket: ",OrderTicket(),", Type: ",OrderType(),", Magic: ",OrderMagicNumber(),", StopLoss: ",OrderStopLoss());

         double Op_Price = NormalizeDouble(OrderOpenPrice(),Digits);
         double Stp_Loss = NormalizeDouble(OrderStopLoss(),Digits);
         
         if(OrderMagicNumber() == Magic_SP01)
            {  if(OrderType() == OP_SELLSTOP)
                  {  if(Low_1 < SP_Level_01 && new_val > Op_Price && new_val < Open_0)  
                        {  OrderModify(OrderTicket(),new_val,OrderStopLoss(),0,0,DeepPink);  }

                     if(!(global_trailing_SP < Stp_Loss && global_trailing_SP > High_1)) Print("Условие не выполняется!");  else
                        {  OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP,0,0,DeepPink);
                           Print("Условие ModifyOrder исполнилось: global_trailing_SP: ",global_trailing_SP,", Stop Loss: ",OrderStopLoss());  }
                  }
               if(OrderType() == OP_SELL)
                  {  if(global_trailing_SP < Stp_Loss && global_trailing_SP > High_1)  
                       {  OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP,0,0,DeepPink);  }
                  }
            }

         ...

Porque a variante, na qual a condição não é cumprida, também não é registrada. Tentei tantas combinações diferentes, mas nenhuma delas funcionou. Por favor, ajude.

 

E aqui.

 if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) 

Não é essa a maneira de fazer isso?

 if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)=true) 
 
FOReignEXchange:

E aqui.

Não é essa a maneira de fazer isso?


Não, não devolve um bool de qualquer forma.
 
tol64:

Aqui está outra pergunta que eu tenho. Sobre o exemplo de código que dei acima (tol64 03.07.2011 18:20).

O programa nem sempre sincroniza o stop loss de diferentes posições. Ou seja, a posição é selecionada, a condição é cumprida, ela também é registrada no diário, mas o stop loss não é modificado.

Na figura acima, parar a perda por posição com bilhete 4 deve ser modificado e ajustado para o mesmo valor que para a posição com bilhete 1. O programa chega a este ponto com a impressão, mas a continuação da execução parece estar bloqueada.

Porque a variante, na qual a condição não é cumprida, também não é registrada. Tentei tantas combinações diferentes, mas nenhuma delas funcionou. Eu gostaria de sua ajuda.


Print( ) para emitir o valor da variável global_trailing_SP diretamente na função que você forneceu.

Onde você lê o valor desta variável?

E substituir zero (destacado) no código

OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP,0,0,DeepPink)

Para OrderTakeProfit()

 
FOReignEXchange:

Para que serve então esta condição, se não há nenhuma condição? E os dados do pedido não são então utilizados.


Então me diga qual código é melhor

if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) 

escreva-o como:

if(!OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) continue;
 
abolk:


então e me diga qual é o melhor código

escreva-o como:


Eu não entendo? Estou apenas procurando na ajuda, lá OrderSelect() usa uma condição. Eu não vi nenhum lugar sem verdade.

Se for um operador em condições. E deve haver uma condição entre parênteses. Parece-me mais lógico desta forma. Embora possa não haver diferença.

Razão: