Fractal Break Out-Stuck - page 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);
}
}



J'ai aussi créé le côté vente, mais je l'ai supprimé parce que j'obtenais des erreurs, alors j'ai remis celui que deVries m'a montré, j'obtiens toujours les mêmes codes d'erreur.


4051

4108


De plus, pourquoi ajoutons-nous un point à OrderOpenPrice()=SL ? Cela ajoute simplement les chiffres corrects au stop loss.

 
ZacharyRC:

J'ai également créé le côté vente, mais je l'ai ensuite supprimé parce que j'obtenais des erreurs, alors j'ai remis celui que deVries m'a montré, j'obtiens toujours les mêmes codes d'erreur.

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


De plus, pourquoi ajoutons-nous un point à OrderOpenPrice()=SL ? Cela ajoute simplement les chiffres corrects au stop loss.

Regardez à nouveau mon code et changez cette ligne rouge

c'est différent de ce que j'ai donné à ! !!!

Pouvons-nous voir le code tel qu'il est maintenant

et le message que vous obtenez à lire donnant ces erreurs

ajoutez un point à orderopenprice pour éviter d'essayer de modifier le trade à breakeven àchaque tick.

 
deVries:

Regardez à nouveau mon code et changez cette ligne rouge.

c'est différent de ce que j'ai donné à ! !!!

Pouvons-nous voir le code tel qu'il est maintenant

et le message que vous obtenez à lire donnant ces erreurs

ajouter un point à l'ordreopenprice est d'éviter d'essayer de modifier le trade à nouveau à breakeven chaque tick


Oui, j'ai remarqué cette erreur, j'étais juste en train de modifier certaines choses et j'ai oublié de l'effacer avant de poster le code. Je m'excuse.


//-----------------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);
}
}
 
18.03.2013 17:55:51 11.03.2013 23:59 Testeur : l'ordre n°6 est fermé
18.03.2013 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 : modify #6 buy 0.03 EURUSD at 1.30390 sl : 1.30055 tp : 1.30855 ok
2013.03.18 17:55:51 2013.03.11 15:48 BreakOutEA EURUSD,M1 : open #6 buy 0.03 EURUSD at 1.30390 ok
2013.03.18 17:55:51 2013.03.11 15:47 BreakOutEA EURUSD,M1 : 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 : Erreur OrderModify 4108
2013.03.18 17:55:51 2013.03.11 15:47 BreakOutEA EURUSD,M1 : ticket 5 inconnu pour la fonction OrderModify
2013.03.18 17:55:51 2013.03.11 15:47 BreakOutEA EURUSD,M1 : 0
 
Ok ! Donc pour une vente, je devrais aussi perdre 1 point.
 
//-----------------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);
}
}

A l'intérieur de la boucle on vérifie chaque modification pour l'erreur mais pas à l'extérieur de la boucle on ne sait pas pour quel ordre le dernier ticket d'erreur est dans ce cas là

la dernière ligne print( getlasterror()) b n'est pas nécessaire

J'aime voir plus de parenthèses dans une ligne.

RaptorUK et moi n'avons pas mis de crochets fermants de cette façon }}}}}}

vous avez fait maintenant des erreurs à cause de cela

 
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);
}
}




Est-ce l'ordre que vous demandez pour les crochets ouvrants et fermants {{{ }}} ?

C'est un problème pour moi, je me sens très désorganisé dans le code.

 

Aucune erreur maintenant, mais dans le backtest visuel, le SL n'est pas déplacé. J'avais confiance en ce système, mais j'ai du mal maintenant, je m'excuse de dépendre autant du tableau d'affichage.

Les parenthèses étaient l'erreur mais ne fonctionnent toujours pas correctement.



J'ai également relu le livre.

 
if(OrderType()==OP_BUY){

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

Je pense que cela m'aidera aussi, en plaçant les crochets directement sous l'opérateur.
 
ZacharyRC:
Je pense que cela m'aidera aussi, en plaçant les crochets directement sous l'opérateur.

Cela me semble horrible, mais si cela a un sens pour vous, alors tant mieux. Je le fais comme ça, pour que l'indentation montre où se trouve un bloc...

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

ou faire comme ceci...

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