Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 528

 
Alexey Viktorov:

Sem mais delongas.

Obrigado, exatamente o que eu preciso!

 

Boa tarde!

Você poderia, por favor, aconselhar sobre este assunto?

Faço um pedido pendente:

bool send1=OrderSend(Symbol(),OP_BUYSTOP,Lots,Price,3,SL,TP,NULL,MagicNumber,0,clrGreen);

E então eu tento fazer uma parada após a sua abertura:

 {
 for(int i=0; i<OrdersTotal(); i++) 
  {
  if(OrderSelect(i,SELECT_BY_POS))
  if(OrderSymbol()==Symbol()||OrderMagicNumber()==MagicNumber)
  if(OrderType()==OP_BUY)
   {
  if(TrailingStop>0)  
    {                 
  if(Bid-OrderOpenPrice()>TrailingStop)
     {
  if(OrderStopLoss()<Bid-TrailingStop)
      {
     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop,OrderTakeProfit(),0,clrRed);
      }
     }
    }
   }
  }
 }

Após sua abertura, o pedido torna-se OP_BUY? Qual é o truque, por que o rastreamento não funciona neste caso?

 
YanSay:

Boa tarde!

Você poderia, por favor, aconselhar sobre este assunto?

Faço um pedido pendente:

E então eu tento fazer uma parada após a sua abertura:

Após sua abertura, o pedido torna-se OP_BUY? Qual é o truque, por que o rastreamento não funciona neste caso?

100500 razões. O primeiro óbvio é que o Bid-TrailngStop não está normalizado. Pode ser ainda mais próximo do nível de parada e depois também opaco.
 
YanSay:

Boa tarde!

Você poderia, por favor, aconselhar sobre este assunto?

Faço um pedido pendente:

E então eu tento fazer uma parada após a sua abertura:

Após sua abertura, o pedido torna-se OP_BUY? Qual é o truque, por que o rastreamento não funciona neste caso?

TrailingStop em pips? Multiplicar por ponto então.
 

Eu fiz a pergunta errada, desculpe. Fora do contexto.

Especialmente para testar o código de trilha, as negociações estão abertas, mas a trilha não funciona, não importa como eu a virei, empate(

//Вводные
#define  MagicNumber 150
double SL=0;                        //Stop Loss
input int Trailing=100;             //Трэйлинг

//Код

void OnTick()
{
 if (OrdersTotal()==0)
 {
   if(TimeCurrent()>StrToTime("17:59")&&TimeCurrent()<StrToTime("18:01"))
  {
SL = Low[1]-Point; //Стоп лосс
bool send1=OrderSend (Symbol(), OP_BUY,1,Bid,30,SL,0,NULL,MagicNumber,0,clrNONE);
  }
 }
 if (OrdersTotal()>0)
   {
      for (int i=0; i<OrdersTotal (); i++)
    {
   bool select1=OrderSelect (i, SELECT_BY_POS);
   if (OrderMagicNumber() == MagicNumber && OrderSymbol () == Symbol())
     {
   if (OrderType()==OP_BUY)
      {
     if (NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(Trailing,Digits))
     bool modify1=OrderModify (OrderTicket(),0,Ask-Trailing,OrderTakeProfit(),0,CLR_NONE);
      }
     }
    }
   }
}
 
YanSay:

Eu fiz a pergunta errada, desculpe. Fora do contexto.

Especialmente para testar o código de trilha, as negociações estão abertas, mas a trilha não funciona, não importa como eu a virei, empate(

Respondeu sua pergunta acima.
 
Vladislav Andruschenko:
Respondeu sua pergunta acima.
Muito obrigado, isso ajudou!
 
YanSay:
Muito obrigado, isso ajudou!

Você ainda tem problemas lá.

O laço é para a frente, deve ser invertido - a frente saltará posições depois que uma delas se fecha na rede de arrasto

Não há verificação da distância mínima de parada (StopLevel) - haverá erros de modificação se a parada estiver mais próxima do preço do que a distância mínima permitida (não se esqueça do spread flutuante)

Talvez algo mais - parecia diagonalmente - de passagem, já que você já foi avisado.

ZS. Olhou novamente:

if (NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(Trailing,Digits))

este é o tipo de verificação que carece do próprio ponto de verificação com a normalização, já que você normalizou ambos os valores e quando você verifica, o resultado não é normalizado novamente.

Você precisa verificar a diferença normalizada dos dois valores duplos. Você está comparando dois valores normalizados.

 
Artyom Trishkin:

Você ainda tem problemas lá.

O laço é para frente; deve ser invertido - com uma posição de laço para frente será pulado após um deles fechar na rede de arrasto

Não há verificação da distância mínima de parada (StopLevel) - haverá erros de modificação se a parada estiver mais próxima do preço do que a distância mínima permitida (não se esqueça do spread flutuante)

Talvez algo mais - parecia diagonalmente - de passagem, já que você já foi avisado.

ZS. Olhou novamente:

este é o tipo de verificação que carece do próprio ponto de verificação com a normalização, já que você normalizou ambos os valores e quando você verifica, o resultado não é normalizado novamente.

Você deve verificar a diferença normalizada de dois valores duplos. Você está comparando dois valores normalizados.

Assim?

for (int i = OrdersTotal() - 1; i >= 0; --i)
if (NormalizeDouble((Ask-OrderStopLoss()>Trailing*Point),Digits))
 
the size of local variables is too large (more than 512 kb)
O que significa o erro?


Eu tenho uma função com dois objetos:

bool              CheckCandleOneRules(CCandlePropertiesBase *candle,
                                      CCandleRule *rule,
                                      int dir);

Uma das classes tem uma estrutura com mais de 4000 campos (em sua maioria enumeros).

O que fazer com este erro?

Razão: