Fractal Break Out-Stuck

 

Ciao ragazzi,


Sto cercando di fare un EA di breakout frattale, che è filtrato con l'ora del giorno e una media mobile.


Qualcuno può indicarmi la giusta direzione/vedere eventuali difetti nel codice?


1: Prende gli acquisti solo dopo che ho inserito iFractal()

2: Non inserisce dove sono i frattali

//+------------------------------------------------------------------+
//|                                                    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);
}
}
 
frattale

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

conta i tuoi trade prima di aprirne uno nuovo....

e altri errori ma provate prima questo


 
deVries:
frattale

Break Out ??

conta i tuoi trade prima di aprirne uno nuovo....

e altri errori, ma prima prova questo



Ciao deVries,


Ho difficoltà a capire questa affermazione. Le mie due conclusioni sono state:


1) Vuoi che scelga la prima barra?

2) Rifare il mio OrdersAccounting


Grazie ancora per il vostro supporto.

 
ZacharyRC:

Ciao deVries,


Ho difficoltà a capire questa affermazione. Le mie due conclusioni sono state:


1) Vuoi che scelga la prima barra?

2) Rifare il mio OrdersAccounting


Grazie ancora per il tuo supporto.


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

ritorna vedi il mio prossimo post .....

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

ritorna vedi il mio prossimo post......

il tuo ordercounting come

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

darà situazioni in cui nessun ordine viene aperto se hai un altro trade non di questo EA aperto o in sospeso

con il backtesting non lo vedrai, ma eseguendo l'EA su un conto lo noterai

 

Ho fatto un piccolo test sul tuo codice frtale

come questo

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

Fai lo stesso e vedrai quale barra devi scegliere per ottenere la giusta fractalbar

 
deVries:

Ho fatto un piccolo test sul tuo codice frtale

come questo

Fai lo stesso e vedrai quale barra devi scegliere per ottenere la giusta fractalbar


Ciao deVries!



Sei sicuramente un tipo disponibile!

 
deVries:

Ho fatto un piccolo test sul tuo codice frtale

come questo

Fai lo stesso e vedrai quale barra devi scegliere per ottenere la giusta fractalbar


Hmmm...


deVries, il controllo ha funzionato perfettamente e ha avvisato il prezzo corretto per ogni frattale "giù" e "su".


Sto ancora esaminando il codice per gli errori, perché sta "ignorando" i frattali quando elabora l'ordine.


Hai ragione, ho bisogno di cambiare le sezioni OrdersAccounting, perché non appena metto l'EA sul grafico, prende un trade.

 
deVries:

Ho fatto un piccolo test sul tuo codice frtale

come questo

Fai lo stesso e vedrai quale barra devi scegliere per ottenere la giusta fractalbar


SILLY ME!


Dopo aver ricercato il codice, stavo usando => invece di ==, il che causava problemi al buffer.


Grazie deVries!!!!

 
ZacharyRC:

SILLY ME!


Dopo aver ricercato il codice, stavo usando => invece di ==, il che causava problemi al buffer.


Grazie deVries!!!!

Vuoi direan......
if((BarCloseB>EMA) && (BarCloseB>=fractalU))
cambiato in
if((BarCloseB>EMA) && (BarCloseB==fractalU))

in questo modo ora ???? che non sarà anche corretto

.

Qualcosa come questo

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

potrebbe funzionare per te e ottenere fractalU nel modo in cui lo vedi fatto nel test...

 
deVries:
Vuoi direan......
cambiato in

in questo modo ora ???? che sarà anche non corretto

.

Qualcosa come questo

potrebbe funzionare per voi e ottenere fractalU nel modo in cui lo vedete fatto nel test...


Non ho implementato il tuo input perché sta negoziando correttamente in questo momento. Lo proverò più tardi stasera con il tuo input.



Grazie deVries!

 

Ciao deVries:


Mi sto imbattendo in problemi nel mio codice finale, con il tentativo di mettere uno stop loss modificato a pareggio dopo così tanti pips.


Vedi qualche errore evidente?

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