Fractal Break Out-Stuck

 

Hallo Leute,


Ich versuche, einen Fractal Breakout EA zu erstellen, der mit der Tageszeit und einem gleitenden Durchschnitt gefiltert wird.


Kann jemand mich in die richtige Richtung weisen/überblicken alle Mängel in den Code???


1: Es werden nur Käufe getätigt, nachdem ich das iFractal() eingegeben habe.

2: Es wird nicht eingegeben, wo die Fraktale sind

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

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

Zählen Sie Ihre Trades, bevor Sie einen neuen eröffnen....

und weitere Fehler, aber probieren Sie zuerst dies aus


 
deVries:
fraktal

Break Out ??

Zählen Sie Ihre Trades, bevor Sie einen neuen eröffnen....

und weitere Fehler, aber probieren Sie zuerst dies aus



Hallo deVries,


es fällt mir schwer, diese Aussage zu verstehen. Meine zwei Schlüsse waren:


1) Du willst, dass ich den ersten Balken wähle?

2) Überarbeite mein OrdersAccounting


Nochmals vielen Dank für Ihre Unterstützung.

 
ZacharyRC:

Hallo deVries,


es fällt mir schwer, diese Aussage zu verstehen. Meine zwei Schlüsse waren:


1) Du willst, dass ich den ersten Balken wähle?

2) Überarbeite meine Auftragsabrechnung


Nochmals vielen Dank für Ihre Unterstützung.


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

Rückgaben siehe meinen nächsten Beitrag .....

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

Rückgaben siehe meinen nächsten Beitrag......

Ihr Ordercounting wie

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

gibt es Situationen, in denen kein Auftrag geöffnet wird, wenn Sie einen anderen Handel, der nicht von diesem EA stammt, offen oder schwebend haben.

Beim Backtesting werden Sie das nicht sehen, aber wenn Sie den EA auf einem Konto laufen lassen, werden Sie es merken

 

Ich habe einen kleinen Test mit Ihrem Code gemacht

wie folgt

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

Machen Sie dasselbe und Sie werden sehen, welchen Balken Sie wählen müssen, um den richtigen Fraktalbalken zu erhalten

 
deVries:

Ich habe einen kleinen Test mit Ihrem Code gemacht

wie folgt

Machen Sie dasselbe und Sie werden sehen, welchen Balken Sie wählen müssen, um den richtigen Fraktalbalken zu erhalten


Hallo deVries!



Du bist wirklich ein hilfreicher Kerl!

 
deVries:

Ich habe einen kleinen Test mit Ihrem Code gemacht

wie folgt

Machen Sie das Gleiche und Sie werden sehen, welchen Balken Sie wählen müssen, um den richtigen Fraktalbalken zu erhalten


Hmmm...


deVries, die Prüfung hat perfekt funktioniert und den richtigen Preis für jedes "Down" -Fraktal und "Up"-Fraktal angezeigt.


Ich bin noch dabei, den Code auf Fehler zu untersuchen, weil er die Fraktale bei der Verarbeitung der Bestellung "ignoriert".


Sie haben recht, ich muss die OrdersAccounting-Abschnitte ändern, denn sobald ich den EA auf den Chart setze, nimmt er einen Handel auf.

 
deVries:

Ich habe einen kleinen Test mit Ihrem Code gemacht

wie folgt

Machen Sie dasselbe und Sie werden sehen, welchen Balken Sie wählen müssen, um den richtigen Fraktalbalken zu erhalten


ICH DUMMERCHEN!


Nach der Erforschung des Codes, war ich mit => statt ==, die den Puffer verursacht, um Probleme zu verursachen war.


Vielen Dank deVries!!!!

 
ZacharyRC:

ICH DUMMERCHEN!


Nachdem ich den Code untersucht habe, habe ich => statt == verwendet, was zu Problemen mit dem Puffer führte.


Vielen Dank deVries!!!!

Sie meinen......
if((BarCloseB>EMA) && (BarCloseB>=fractalU))
geändert in
if((BarCloseB>EMA) && (BarCloseB==fractalU))

auf diese Weise jetzt ???? das wird auch nicht korrekt sein

.

Etwas wie dies

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

könnte für Sie funktionieren und fractalU so machen, wie Sie es im Test sehen...

 
deVries:
Sie meinen......
geändert in

auf diese Weise jetzt ???? das wird auch nicht richtig sein

.

Etwas wie dies

könnte für Sie funktionieren und fractalU so hinbekommen, wie Sie es im Test sehen...


Ich habe Ihre Eingabe nicht implementiert, weil es zu diesem Zeitpunkt korrekt gehandelt wird. Ich werde es später am Abend mit Ihrer Eingabe versuchen.



Vielen Dank deVries!

 

Hallo deVries:


Ich stoße in meinem endgültigen Code auf Probleme, wenn ich versuche, einen modifizierten Stop-Loss zu setzen, um nach so vielen Pips den Break-Even zu erreichen.


Siehst du einen eklatanten Fehler???

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