Fractal Break Out-Stuck

 

Bonjour à tous,


J'essaie de faire un EA fractal breakout, qui est filtré avec l'heure du jour et une moyenne mobile.


Quelqu'un peut-il m'indiquer la bonne direction ou me signaler des défauts dans le code ?


1 : Il ne prend les achats qu'après avoir entré le iFractal().

2 : Il ne saisit pas où se trouvent les fractales.

//+------------------------------------------------------------------+
//|                                                    Simple EA.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//Literally copying Ferrus Format to a tee

extern string Label1="===General Trade Settings===";
extern int   TakeProfit=25;
extern int    StopLoss=10;
extern int    TrailingStop=0;
extern int    Slippage=2;
extern double  Lots=0.1;
//---------Time Filter--------//

//-----------Money Managerment---------//
extern bool Money.Management=true ;
extern double Risk=1;


//----------------------Moving Average-----//
extern string Label5="===Moving Average Settings===";
extern int    MA_Period=200;
extern int    MA_Shift=0;
extern int    MA_Type=1;
extern int    MA_Price=0;
//----------


//-------Initialize EA Orders Accounting-----//


int start()
{

int mypoint;

if (Digits==3||Digits==5){ mypoint=10;}
else {mypoint=1;}


//------------Orders Accounting---------//

 int total = OrdersTotal();
if(total<1)
{
//------------Money Management----------//

//Money Management sequence
 if (Money.Management)
   {
      if (Risk<1 || Risk>1000)
      {
         Comment("Invalid Risk Value.");
         return(0);
      }
      else
      {
         Lots=MathFloor((AccountFreeMargin()*AccountLeverage()*Risk*Point*mypoint*100)/(Ask*MarketInfo(Symbol(),MODE_LOTSIZE)*MarketInfo(Symbol(),MODE_MINLOT)))*MarketInfo(Symbol(),MODE_MINLOT);
      }
   }

//-------------EMA SETTINGS-----------------//
//
//------------------------------------------//
double EMA=iMA(NULL,0,MA_Period,MA_Shift,MA_Type,MA_Price,0);
double BarCloseB;
double BarCloseS;
BarCloseB=Bid;
BarCloseS=Ask;
//----Processing a buy---------//
//


double fractalU=iFractals(NULL,0,1,0);
double fractalD=iFractals(NULL,0,2,0);



//-----------------------------//
if((BarCloseB>EMA) && (BarCloseB>=fractalU))
{
double SLB=Bid-StopLoss*Point*mypoint;
double TPB=Bid+TakeProfit*Point*mypoint;
int buy= OrderSend(Symbol(),0,Lots,Ask,Slippage,0,0);
}

if(buy>0) 
{
OrderSelect(buy,SELECT_BY_TICKET,MODE_TRADES);
OrderModify(buy,OrderOpenPrice(),SLB,TPB,0,Green);
}
//---------Processing a sell---------//
//
//-----------------------------------//
if((BarCloseS<EMA)&&(BarCloseS<=fractalD))
{
double SLS=Ask+StopLoss*Point*mypoint;
double TPS=Ask-TakeProfit*Point*mypoint;

int sell= OrderSend(Symbol(),1,Lots,Bid,Slippage,0,0);
}

if (sell>0)
{
OrderSelect(sell,SELECT_BY_TICKET,MODE_TRADES);
OrderModify(sell,OrderOpenPrice(),SLS,TPB,0,Green);
}

Print(GetLastError());
return(0);
}
}
 
fractal

Break Out ? ?

double fractalU=iFractals(NULL,0,1,0);     //What if you had chosen for bar 1  ??
double fractalD=iFractals(NULL,0,2,0);             //then i think you will get sell trades also

comptez vos transactions avant d'en ouvrir une nouvelle....

et d'autres erreurs mais essayez d'abord ceci


 
deVries:
fractale

Break Out ? ?

comptez vos transactions avant d'en ouvrir une nouvelle....

et d'autres erreurs, mais essayez d'abord ceci



Hey deVries,


J'ai du mal à comprendre cette déclaration. Je retiens deux choses :


1)Vous voulez que je choisisse la première barre ?

2) Refaites mon OrdersAccounting.


Merci encore pour votre soutien.

 
ZacharyRC:

Hey deVries,


J'ai du mal à comprendre cette déclaration. Mes deux conclusions sont les suivantes :


1)Vous voulez que je choisisse la première barre ?

2) Refaire ma comptabilité des commandes.


Merci encore pour votre soutien.


double fractalU=iFractals(NULL,0,1,0);

retours voir mon prochain post .....

double fractalU=iFractals(NULL,0,1,1);

retours voir mon prochain post......

votre comptabilité des ordres comme

 int total = OrdersTotal();
if(total<1)
{
 

vous obtiendrez des situations où aucun ordre n'est ouvert si vous avez une autre transaction non issue de cet EA ouverte ou en attente.

avec le backtesting vous ne verrez pas cela mais en utilisant l'EA sur un compte vous le remarquerez.

 

J'ai fait un petit test sur votre code frctal

comme ceci

   double fractalU;
   for(int y=0;fractalU < Point;y++)
     {
      fractalU=iFractals(NULL,0,1,y);
      Alert("fractalUp  y =  "+y+ " "+fractalU);
     }

Faites la même chose et vous verrez quelle barre vous devez choisir pour obtenir la bonne barre fractale

 
deVries:

J'ai fait un petit test sur votre code frctal

comme ceci

Faites la même chose et vous verrez quelle barre vous devez choisir pour obtenir la bonne barre fractale.


Bonjour deVries !



Vous êtes vraiment un gars utile !

 
deVries:

J'ai fait un petit test sur votre code frctal

comme ceci

Faites de même et vous verrez quelle barre vous devez choisir pour obtenir la bonne barre fractale.


Hmmm...


deVries, le contrôle a parfaitement fonctionné et a alerté le bon prix pour chaque fractale "down" et "up".


Je suis toujours en train de rechercher des erreurs dans le code, car il "ignore" les fractales lors du traitement de l'ordre.


Vous avez raison, je dois modifier les sections OrdersAccounting, car dès que je place l'EA sur le graphique, il prend une transaction.

 
deVries:

J'ai fait un petit test sur votre code frctal

comme ceci

Faites la même chose et vous verrez quelle barre vous devez choisir pour obtenir la bonne barre fractale.


JE SUIS STUPIDE !


Après avoir fait des recherches sur le code, j'utilisais => au lieu de ==, ce qui causait des problèmes avec le tampon.


Merci deVries !!!!

 
ZacharyRC:

JE SUIS STUPIDE !


Après avoir recherché le code, j'utilisais => au lieu de ==, ce qui causait des problèmes au niveau du tampon.


Merci deVries !!!!

Vous voulez dire......
if((BarCloseB>EMA) && (BarCloseB>=fractalU))
changé en
if((BarCloseB>EMA) && (BarCloseB==fractalU))

de cette façon maintenant ? ??? qui sera également pas correct

.

Quelque chose comme ceci

if((BarCloseB>EMA) && (BarCloseB>fractalU)&& fractalU>Point)

pourrait fonctionner pour vous et obtenir fractalU comme vous le voyez dans le test...

 
deVries:
Vous voulez dire......
changé en

de cette façon maintenant ? ??? qui sera également pas correct

.

Quelque chose comme ceci

pourrait fonctionner pour vous et obtenir fractalU comme vous le voyez dans le test...


Je n'ai pas mis en œuvre votre entrée parce qu'il est le commerce correctement à ce moment. Je l'essaierai plus tard ce soir avec votre contribution.



Merci deVries !

 

Bonjour deVries :


Je rencontre des problèmes dans mon code final, en essayant de mettre un stop loss modifié pour atteindre le breakeven après tant de pips.


Est-ce que tu vois une erreur flagrante ?

extern int    StopLoss=10;

//-------------------------------------------------//
extern bool Move.BE=true;
extern int  MoveStopTo=1;



//----------------------------------------------//
//-----------------EXITING ORDERS---------------//
if(OrdersTotal()>1)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==(OP_BUY)&&(Move.BE))
{
if(Bid - OrderOpenPrice() >= Point * StopLoss)
 {
    if(OrderStopLoss() < OrderOpenPrice() + Point * MoveStopTo)
     {
     OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() + Point * MoveStopTo, OrderTakeProfit(), 0, Red);
}
}
}
}

if(OrdersTotal()>1)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
{
 if(OrderType()==(OP_SELL)&&(Move.BE))
 {     
          
if(OrderOpenPrice() - Ask >= Point * StopLoss) 
 {
    if(OrderStopLoss() > OrderOpenPrice() - Point * MoveStopTo) 
     {
      OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() - Point * MoveStopTo, OrderTakeProfit(), 0, Red);
}
}
}
}
//--------CHECKING FOR ERRORS-------------------//
Print(GetLastError());
return(0);
}
}