Fracctal Break Out-Stuck - página 4

 
for(int i=OrdersTotal()-1; i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)  break;


if(OrderMagicNumber()!=MagicNumber || OrderSymbol() !=Symbol()) continue;

double SL=OrderStopLoss();
bool result;
int  error;
//-----The Differnt Order types---//

if(OrderType()==OP_BUY)
{
 if(BreakEven>0)
    {
     if(Bid-OrderOpenPrice() >= Point*BreakEven*mypoint)
      {
       if(OrderStopLoss() <OrderOpenPrice())
         {
          SL=OrderOpenPrice()*Point*mypoint;
          }}}}}

if(SL!=OrderStopLoss()) result=OrderModify(OrderTicket(),OrderOpenPrice(), SL,OrderTakeProfit(),0,CLR_NONE);
if(result!=true){error=GetLastError(); Print("ModifyError=",OrderTicket()," ",error);}

//--------CHECKING FOR ERRORS-------------------//

return(0);
}
}



Também criei o lado de venda, mas depois o apaguei porque eu estava recebendo erros, então coloquei de volta no que os deVries me mostraram, ainda recebendo os mesmos códigos de erro.


4051

4108


Além disso, por que adicionamos Ponto ao OrderOpenPrice()=SL ?? Isso apenas adiciona os dígitos corretos ao stop loss.

 
ZacharyRC:

Também criei o lado de venda, mas depois o apaguei porque eu estava recebendo erros, então coloquei de volta no que os deVries me mostraram, ainda recebendo os mesmos códigos de erro.

for(int i=OrdersTotal()-1; i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)  break;


if(OrderMagicNumber()!=MagicNumber || OrderSymbol() !=Symbol()) continue;

double SL=OrderStopLoss();
bool result;
int  error;
//-----The Differnt Order types---//

if(OrderType()==OP_BUY)
{
 if(BreakEven>0)
    {
     if(Bid-OrderOpenPrice() >= Point*BreakEven*mypoint)
      {
       if(OrderStopLoss() <OrderOpenPrice())
         {
          SL=OrderOpenPrice()*Point*mypoint;       // WRONG HERE
          }}}}}

if(SL!=OrderStopLoss()) result=OrderModify(OrderTicket(),OrderOpenPrice(), SL,OrderTakeProfit(),0,CLR_NONE);
if(result!=true){error=GetLastError(); Print("ModifyError=",OrderTicket()," ",error);}
     //Where is the  }  ??
//--------CHECKING FOR ERRORS-------------------//

return(0);
}
}

4051

4108


Além disso, por que adicionamos Ponto ao OrderOpenPrice()=SL ?? Isso apenas adiciona os dígitos corretos ao stop loss.

Olhe novamente para o meu código e mude essa linha vermelha

é diferente do que eu dei !!!!

Podemos ver o código como ele é agora

e a mensagem que você lê dando esses erros

adicionar um ponto ao preço de pedido aberto é evitar tentar modificar o comércio novamente no breakevena cada tick

 
deVries:

Olhe novamente para o meu código e mude essa linha vermelha

é diferente do que eu dei !!!!

Podemos ver o código como ele é agora

e a mensagem que você lê dando esses erros

adicionar um ponto ao preço de pedido aberto é evitar tentar modificar o comércio novamente no breakeven a cada tick


Sim, eu percebi esse erro, eu estava apenas mudando algumas coisas e esqueci de apagar isso antes de postar o código. Desculpas.


//-----------------EXITING ORDERS---------------//

for(int i=OrdersTotal()-1; i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)  break;


if(OrderMagicNumber()!=MagicNumber || OrderSymbol() !=Symbol()) continue;

double SL=OrderStopLoss();
bool result;
int  error;
//-----The Differnt Order types---//

if(OrderType()==OP_BUY)
{
 if(BreakEven>0)
    {
     if(Bid-OrderOpenPrice() >= Point*BreakEven*mypoint)
      {
       if(OrderStopLoss() <OrderOpenPrice())
         {
          SL=OrderOpenPrice()+Point;
          }}}}}
          

if(OrderType()==OP_SELL)
{
 if(OrderOpenPrice()-Ask >= Point*BreakEven*mypoint)
 {
  if(OrderStopLoss()>OrderOpenPrice())
   {
    SL=OrderOpenPrice() + Point;
    
}}}


if(SL != OrderStopLoss()) result=OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,CLR_NONE);
         if(result!=TRUE) { error=GetLastError(); Print("ModifyError = ",OrderTicket(),"   ",error);}     
//--------CHECKING FOR ERRORS-------------------//
Print(GetLastError());
return(0);
}
}
 
2013.03.18 17:55:51 2013.03.11 23:59 Testador: o pedido nº 6 está fechado
2013.03.18 17:55:51 2013.03.11 15:48 BreakOutEA EURUSD,M1: 0
2013.03.18 17:55:51 2013.03.11 15:48 BreakOutEA EURUSD,M1: ModifyError = 6 0
2013.03.18 17:55:51 2013.03.11 15:48 BreakOutEA EURUSD,M1: modificar #6 comprar 0.03 EURUSD a 1.30390 sl: 1.30055 tp: 1.30855 ok
2013.03.18 17:55:51 2013.03.11 15:48 BreakOutEA EURUSD,M1: abrir #6 comprar 0,03 EURUSD a 1.30390 ok
2013.03.18 17:55:51 2013.03.11 15:47 BreakOutEA EURUSD,M1: aberto em 0
2013.03.18 17:55:51 2013.03.11 15:47 BreakOutEA EURUSD,M1: ModifyError = 5 4108
2013.03.18 17:55:51 2013.03.11 15:47 BreakOutEA EURUSD,M1: OrderModify error 4108
2013.03.18 17:55:51 2013.03.11 15:47 BreakOutEA EURUSD,M1: bilhete desconhecido 5 para a função OrderModify
2013.03.18 17:55:51 2013.03.11 15:47 BreakOutEA EURUSD,M1: 0
 
Ok! Então, para uma venda, eu também devo menos 1 ponto.
 
//-----------------EXITING ORDERS---------------//

for(int i=OrdersTotal()-1; i>=0;i--)
   {
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)  break;
   if(OrderMagicNumber()!=MagicNumber || OrderSymbol() !=Symbol()) continue;
   double SL=OrderStopLoss();
   bool result;
   int  error;
   //-----The Differnt Order types---//
   if(OrderType()==OP_BUY)
      {
      if(BreakEven>0)
         {
         if(Bid-OrderOpenPrice() >= Point*BreakEven*mypoint)
            {
            if(OrderStopLoss() <OrderOpenPrice())
               {
               SL=OrderOpenPrice()+Point;
               }}}}   }     //PLACE THE BRACKETS IN LINE OPEN/CLOSE BRACKET AND YOU WILL SEE THE ERROR HERE
          

   if(OrderType()==OP_SELL)
      {
      if(OrderOpenPrice()-Ask >= Point*BreakEven*mypoint)
         {
         if(OrderStopLoss()>OrderOpenPrice())
            {
            SL=OrderOpenPrice() + Point;    //OrderStopLoss has to become point lower then orderopenprice
            }}}


   if(SL != OrderStopLoss()) result=OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,CLR_NONE);
         if(result!=TRUE) { error=GetLastError(); Print("ModifyError = ",OrderTicket(),"   ",error);} 
   }    
//--------CHECKING FOR ERRORS-------------------//
Print(GetLastError(
return(0);
}
}

Dentro do laço verificamos cada modificação em busca de erro não fora do laço, não sabemos qual é o último erro de pedido nesse caso.

impressão da última linha( getlasterror()) b não é necessário

Eu gosto de ver mais parênteses em uma linha

RaptorUK e eu não colocamos parênteses de fechamento desta forma }}}}}}

você cometeu agora erros por causa disso

 
for(int i=OrdersTotal()-1; i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)  break;


if(OrderMagicNumber()!=MagicNumber || OrderSymbol() !=Symbol()) continue;

double SL=OrderStopLoss();
bool result;
int  error;
//-----The Differnt Order types---//

if(OrderType()==OP_BUY)
{
 if(BreakEven>0)
   {
     if(Bid-OrderOpenPrice() >= Point*BreakEven*mypoint)
      {
       if(OrderStopLoss() <OrderOpenPrice())
         {
          SL=OrderOpenPrice()+Point;
}
   }
      }
         }
                  
          

if(OrderType()==OP_SELL)
{
 if(OrderOpenPrice()-Ask >= Point*BreakEven*mypoint)
 {
  if(OrderStopLoss()>OrderOpenPrice())
   {
    SL=OrderOpenPrice() - Point;
    
}
 }
   }


if(SL != OrderStopLoss()) result=OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,CLR_NONE);
         if(result!=TRUE) { error=GetLastError(); Print("ModifyError = ",OrderTicket(),"   ",error);}     
}
return(0);
}
}




É essa a ordem que você está solicitando para {{{{}} abrir e fechar parênteses?

Isso tem sido um problema para mim, eu me sinto muito desorganizado dentro do código.

 

Sem erros agora, mas no backtest visual, o SL não está sendo movido. Eu tinha confiança nisto, mas agora, magoado, peço desculpas por depender tanto do quadro de mensagens.

Os parênteses foram o erro, mas ainda não estão funcionando corretamente.



Eu também tenho relido o livro.

 
if(OrderType()==OP_BUY){

 if(BreakEven>0){
   
     if(Bid-OrderOpenPrice() >=BreakEven*mypoint*Point){
      
       if(OrderStopLoss() <OrderOpenPrice()){
         
          SL=OrderOpenPrice()+Point;
}
  }
     }
       }
                  

Acho que isto também me ajudará, colocando os parênteses diretamente abaixo do operador.
 
ZacharyRC:
Penso que isto também me ajudará, colocando os parênteses diretamente abaixo do operador.

Parece-me horrível, mas se faz sentido para você, então ótimo. Faço-o assim para que a indentação mostre onde está um bloco ...

if(OrderType()==OP_BUY)
   {
   if(BreakEven>0)
      {
      if(Bid-OrderOpenPrice() >=BreakEven*mypoint*Point)
         {
         if(OrderStopLoss() <OrderOpenPrice())
            {
            SL=OrderOpenPrice()+Point;
            }
         }
      }
   }

ou fazer assim . . .

if(OrderType() == OP_BUY && BreakEven > 0 && 
   Bid - OrderOpenPrice() >= BreakEven * mypoint * Point &&
   OrderStopLoss() < OrderOpenPrice() )
   {
   SL = OrderOpenPrice() + Point;
   }