Fractal Break Out-Stuck

 

Hola chicos,


Estoy tratando de hacer un fractal breakout EA, que se filtra con la hora del día y una media móvil.


¿Alguien puede indicarme la dirección correcta/ver cualquier defecto en el código?


1: Sólo está tomando las compras después de introducir el iFractal()

2: No entra donde están los 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

Romper con el mercado ?

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

cuente sus operaciones antes de abrir una nueva....

y más errores pero pruebe esto primero


 
deVries:
fractal

Romper con el mercado ?

cuente sus operaciones antes de abrir una nueva....

y más errores pero pruebe esto primero



Hola deVries,


Estoy teniendo un tiempo difícil de entender esa declaración. Mis dos conclusiones fueron:


1)¿Quieres que elija la primera barra?

2)Volver a hacer mi OrdersAccounting


Gracias de nuevo por su apoyo.

 
ZacharyRC:

Hola deVries,


Me cuesta entender esa afirmación. Mis dos conclusiones fueron:


1)¿Quieres que elija la primera barra?

2) Volver a hacer mi OrdersAccounting


Gracias de nuevo por su apoyo.


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

devoluciones ver mi próximo post .....

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

devoluciones ver mi próximo post......

su ordercounting como

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

dará situaciones de que no se abre ninguna orden si tienes otra operación no de este EA abierta o pendiente

con el backtesting no verás eso pero ejecutando el EA en una cuenta te darás cuenta

 

Hice una pequeña prueba en su código frctal

así

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

Haz lo mismo y verás qué barra tienes que elegir para obtener la barra fractal correcta

 
deVries:

Hice una pequeña prueba en su código frctal

así

Haz lo mismo y verás qué barra tienes que elegir para obtener la barra fractal correcta


¡Hola deVries!



¡Seguro que eres un tipo útil!

 
deVries:

Hice una pequeña prueba en su código frctal

así

Haz lo mismo y verás qué barra tienes que elegir para obtener el fractalbar correcto


Hmmm...


deVries, la comprobación funcionó perfectamente y alertó del precio correcto para cada fractal "abajo" y "arriba".


Todavía estoy investigando el código en busca de errores, porque está "ignorando" los fractales al procesar la orden.


Tienes razón, tengo que cambiar las secciones OrdersAccounting, porque en cuanto pongo el EA en el gráfico, toma una operación.

 
deVries:

Hice una pequeña prueba en su código frctal

así

Haz lo mismo y verás qué barra tienes que elegir para obtener la barra fractal correcta


¡TONTO DE MI!


Después de investigar el código, estaba usando => en vez de ==, lo que estaba causando problemas en el buffer.


¡¡¡¡Gracias deVries!!!!

 
ZacharyRC:

¡TONTO DE MÍ!


Después de investigar el código, estaba usando => en lugar de ==, lo que estaba causando problemas en el buffer.


¡¡¡¡Gracias deVries!!!!

Te refieres a......
if((BarCloseB>EMA) && (BarCloseB>=fractalU))
cambiado por
if((BarCloseB>EMA) && (BarCloseB==fractalU))

así ahora ???? que tampoco será correcto

.

Algo como esto

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

podría funcionar para ti y conseguir fractalU de la manera que ves que se hace en la prueba...

 
deVries:
Te refieres a ......
cambiado a

de esta manera ahora ???? que tampoco será correcta

.

Algo como esto

podría funcionar para ti y conseguir fractalU de la manera que ves que se hace en la prueba...


No he implementado tu entrada porque está operando correctamente en este momento. Lo probaré más tarde esta noche con tu aportación.



¡Gracias deVries!

 

Hola deVries:


Me estoy encontrando con problemas en mi código final, con el intento de poner un stop loss modificado para alcanzar el punto de equilibrio después de tantos pips.


¿Ves algún error 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);
}
}