Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
Geschrieben

//+------------------------------------------------------------------+

//|                                                      Zahn EA.mq4 |

//|                                      Copyright 2014, Zahnstocher |

//|                                          [url="http://www.tom-next.com"]http://www.tom-next.com[/url] |

//+------------------------------------------------------------------+

#property copyright "Copyright 2014, Zahnstocher"

#property link      "[url="http://www.tom-next.com"]http://www.tom-next.com[/url]"

#include 







//--- input parameters

extern double TakeProfit=450.0;

extern double Lots=0.01;

extern double TrailingStop=150.0;





//+------------------------------------------------------------------+

//| expert initialization function                                   |

//+------------------------------------------------------------------+

int init()

  {

//----



//----

   return(0);

  }

//+------------------------------------------------------------------+

//| expert deinitialization function                                 |

//+------------------------------------------------------------------+

int deinit()

  {

//----

   

//----

   return(0);

  }



int Crossed1 (double line1 , double line2)

   {

  static int last_direction = 0;

  static int current_direction = 0;  

 

  if(line1>line2)current_direction = 1; // also buy

  if(line1  

  if(current_direction != last_direction)

  //changed

  {

         last_direction = current_direction;

         return (last_direction);

      }

      else

      {

      return (0);

   }

 }

//+------------------------------------------------------------------+

//| expert start function                                            |

//+------------------------------------------------------------------+

int start()

  {

//----

   int cnt, ticket, total;

   double RSIOMA1, RSIOMA2;   

   

   if(Bars<300)

    {

      Print("bars less than 300");

      return(0);

     }

   if(TakeProfit<10)

    {

      Print("TakeProfit less than 10");

      return(0); // check Takeprofit)

   }

   

   RSIOMA1= iCustom(NULL,0,"RSIZAHNOMAII",14,0,0);

   RSIOMA2= iCustom(NULL,0,"RSIZAHNOMAII",72,0,0);

    

   int isCrossed = Crossed1 (RSIOMA1,RSIOMA2);

   

   total = OrdersTotal();

   if(total < 1)

     {

      if(isCrossed == 1)

         {

   

   ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"My EA", 12345,0,Green);

         if(ticket>0)

          {

          if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

            Print("BUY order opened : ",OrderOpenPrice());

          }

          else Print("Error opening BUY Order : ",GetLastError());

          return(0);

          }

          if(isCrossed == 2)

            {

               ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"My EA",12345,0,Red);

               if(ticket>0)

               {

              if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

          Print("Sell order opened : ",OrderOpenPrice());

          }

          else Print("Error opening Sell Order : ",GetLastError());

          return(0);

          }

          return(0);

      }

      for(cnt=0;cnt

 
Als Basis hab ich den Coders Guru EA mit den Moving Averages hergenommen.

 

 

 

Heute Abend hab ich meinen gestern bearbeiten Custom Indicator eingefügt und den Code angepasst damit der mit 2 RSIOMA Kurven Arbeitet, siehe hier:

 

 

 

int cnt, ticket, total;

   double RSIOMA1, RSIOMA2;   

   

   if(Bars<300)

    {

      Print("bars less than 300");

      return(0);

     }

   if(TakeProfit<10)

    {

      Print("TakeProfit less than 10");

      return(0); // check Takeprofit)

   }

   

   RSIOMA1= iCustom(NULL,0,"RSIZAHNOMAII",14,0,0);

   RSIOMA2= iCustom(NULL,0,"RSIZAHNOMAII",72,0,0);

    

   int isCrossed = Crossed1 (RSIOMA1,RSIOMA2);

 

Die Logic ist die gleiche wie bei Coders Guru und natürlich weit weg von Profitabel, es ist auch noch nicht die Logic die ich später verwenden will, aber irgendwie muss man ja anfangen :)

 

Als nächstes möchte ich einen Candle Range Filter hinzufügen damit der EA nicht in z.B. einer 20pip Range zu Traden beginnt.

 

Aber keine Angst es werden viele Fragen folgen...

 

Grüße Zahnstocher*trailingstop)

;cnt++)

)current_direction>

post-4614-0-01127700-1391460482_thumb.png

post-4614-0-48744100-1391460493_thumb.png

  • Antworten 70
  • Aufrufe 8,6Tsd
  • Erstellt
  • Letzte Antwort

Top-Benutzer in diesem Thema

Most Popular Posts

  • Die Funktionen init() und deinit() sind dafür uninteresannt.   Die Funktion init() wird nur 1x aufgerufen, wenn man den EA in das Chartfenster läd. Die Funktion deinit() wird nur 1x aufgerufen,

  • Hi,   ich schau mir gerade den EA an und schreib einfach mal was mir auffällt. Zuerst mal was "kosmetisches": Das ist zugegebenermaßen großteils Geschmackssache, aber manche Dinge erhöhen die Fehleran

  • hier ist noch der Backtest mit 1.2pip spread! long / short separat.   TF 15min aufgrund der verwendeten Stochastic von 15min und 60min für den Exit.   Viel Spass beim testen und so hoffe ich beim opti

Veröffentlichte Bilder

Featured Replies

Geschrieben
  • Autor

arrg,

ja danke, da hab ich den Wald vor Bäumen nicht gesehen *stirnpatsch*

 

Ändere ich heute noch.

 

würdest du bitte noch einen Blick auf die Entry / Exitlogic werfen?

ich hab den Eindruck der Robot gewichtet TS und SL höher als den eigentlich Exittrigger? (beim Traden im Visual Modus sieht man im Nachhinein

das Exits nicht punktgenau durchgeführt werden,

 

Oder kann es sein das die vielen Positionen den EA verwirren?

Dürfte eigentlich nicht sein?!?

 

Werde das heute Abend noch weiter testen und andere Exits versuchen.

Geschrieben

würdest du bitte noch einen Blick auf die Entry / Exitlogic werfen?

 

Mache ich gerne - mir fehlt dazu aber der "RSIZAHNOMAII" Indikator, um das mal im visuellen Modus anzuschauen.

Hast Du Skype?

Geschrieben
  • Autor

Mache ich gerne - mir fehlt dazu aber der "RSIZAHNOMAII" Indikator, um das mal im visuellen Modus anzuschauen.

Hast Du Skype?

Dank dir!

Der Indicator ist in Posting Nr.5 hochgeladen.

Geschrieben

Dank dir!

Der Indicator ist in Posting Nr.5 hochgeladen.

 

Okay, ziehe ich mir nachher dann. Aber sollten uns trotzdem mal per Skype / Telefon austauschen. Dein Quelltext ist doch etwas wirr.

Geschrieben
  • Autor

ich hab da noch einen alten Skype Zugang aber den muss ich erst noch aktivieren!

anke jedenfalls für das Angebot.

 

Wundert mich nicht das der Text wirr ist =)

Geschrieben
  • Autor

^^ hab EINIGE Ungereimtheiten entdeckt, werde in den nächsten 1-2Tagen nochmal den Code (hoffendlich) sauberer hochladen.

Bearbeitet von Zahnstocher

Geschrieben
  • Autor

[hide]//+------------------------------------------------------------------+
Code ist wieder fehlerhaft hier reinkopiert worden...
//+------------------------------------------------------------------+[/hide]

 

Anbei der Gesamte "aufgeräumte" Code. Er tradet nicht oft aber ""relativ"" exact.

 

Irgendwie scheint auf einmal der Trailingstop nicht mehr zu funktionieren Modify Order kommt nicht an.

Keine Fehlermeldung MT4 ist Build600, könnte es damit zusammenhängen?

Er wurde gegenüber dem Ursprungscode nicht verändert, kann es an der max. Orderzahl liegen?

 

Stoploss ist in dieser Version nicht inklundiert wenn man sich den Backtest ansieht aber aufgrund der Trefferrate auch nicht zwingend erforderlich.

 

Jetzt versuche ich den Candlerangefilter als Block zu basteln, sobald der so funktioniert wie ich mir das vorstelle

wird mal auf kleineren Zeitebenen getestet. :)

 

Auch ohne EA müsste ich den Filter über die Print Funktion testen können - das ist mal der Plan :)

 

Verbesserungsvorschläge werden jederzeit gern entgegengenommen.

 

Grüße Zahnstocher

CrosslogikStrategie.htm

RSITHCrosslogik.mq4

Bearbeitet von Zahnstocher

Geschrieben
  • Autor

Money Management ist jetzt auch implementiert oder besser gesagt copy/paste :)

 

double money2 = (AccountBalance() * AccountLeverage()) * risk;

 

ich starte demnächst mit dem Forwardtest mit ~400€

Durchschnittlicher Spread liegt bei 0,9pip.

 

was nicht heisst das hier nicht weitergeht :)

post-4614-0-03731000-1391919359_thumb.png

Geschrieben

Kannst Du mir mal die aktuelle Version bereit stellen? Bei mir sieht der Test über ein paar Jahre nämlich weitaus grausamer aus...

Dann reden wir auch noch über Deinen Quelltext wink.gif.

 

Das Problem, dass ich bei Dir sehe ist, dass Du keinen SL hast. Es wird der Tag kommen, wo die Trades Dein Konto platt machen. Du hast so schon einen (offenen) Drawdown von knapp 70%.

Geschrieben

Hi,

 

ich schau mir gerade den EA an und schreib einfach mal was mir auffällt.

Zuerst mal was "kosmetisches": Das ist zugegebenermaßen großteils Geschmackssache, aber manche Dinge erhöhen die Fehleranfälligkeit enorm vor allem bei Änderungen.

Ich würde dir empfehlen bei Blockanweisungen (if's etc.) zwischen dem If und der geschwungenen Klammer keine Leerzeilen einbauen, und die Blöcke klarer sichtbar unterscheiden (Einrückung , neue Zeile nach der Klammer etc.) Vor allem wenn man viele if's ineinander schachtelt wo manche Blöcke haben und manche nicht, führt es sonst schnell zur Verwirrung.

 

Ein kleines Bsp aus deinem EA:

 
if(isCrossed1 == 2)
if(isCrossed2 == 4)

  {ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"Zahn EA",12345,0,Red);
   if(ticket>0)
     {if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
        Print("Sell order opened : ",OrderOpenPrice());}
             else Print("Error opening Sell Order : ",GetLastError());
    return(0);}

return(0);
Hier "fehlt" zusätzlich die geschwungene Klammer um das 2. if. Es ist syntaktisch korrekt und tut (vermutlich) auch was du willst, aber hier muss man genau schaun um zu erkennen um was es geht. Und zb "in welchem if steht das letzte return(0)?" ist sehr schwer zu beantworten. Die Frage zu welchem if das else gehört, hätte ich zB beim ersten Hinschauen falsch beantwortet.

 

wenn du es zB so schreibst:

 
if(isCrossed1 == 2) {
  if(isCrossed2 == 4) {
    ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"Zahn EA",12345,0,Red);
    if(ticket>0) {
      if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
        Print("Sell order opened : ",OrderOpenPrice());
    } else {
      Print("Error opening Sell Order : ",GetLastError());
    }
    return(0);
  }
}
return(0);
ist der zusammenhang was in welchem Block ist klarer. Ich hab nur die Einrückung geändert und die "fehlenden" Klammern eingefügt.

 

Außerdem hilft es für die Lesbarkeit nicht soviele verschachtelte If's zu machen und stattdessen die Bedingungen in eine abfrage zu packen. Wieder zu dem Beispiel, das könnte zB auch so aussehen:

 
if(isCrossed1 == 2 && isCrossed2 == 4) {
  ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"Zahn EA",12345,0,Red);
  if(ticket>0) {
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
      Print("Sell order opened : ",OrderOpenPrice());
  } else {
    Print("Error opening Sell Order : ",GetLastError());
  }
  return(0);
}
return(0);
Ist in dem Fall nicht viel, aber vereinfacht es doch ein bissl. Stärker wirkt es sich bei der Exitlogik aus, wo du 3 verschachtelte ifs hast die du in eine Bedingung packen könntest.

 

Und als letzter Punkt würde ich für konstante Werte die eine "Bedeutung" haben, wie in deinem Fall die 2 und 4 hier Precompilerkonstanten verwenden.

 

Beispiel

bullet_go.png






#define CROSSED_UP 1
#define CROSSED_DOWN 2

// Crosslogic-------------------------------------------------

int Crossed1 (double line1 , double line2)
{
static int last_direction = 0;
static int current_direction = 0;

if(line1>line2)current_direction = CROSSED_UP; // buy
if(line1<line2)current_direction = CROSSED_DOWN; // sell

if(current_direction != last_direction){
last_direction = current_direction;
return (last_direction);
} else {
return (0);
}
}

int Crossed2 (double line1 , double line3)
{
static int last_direction = 0;
static int current_direction = 0;

if(line1>line3)current_direction = CROSSED_UP;
if(line1<line3)current_direction = CROSSED_DOWN;

if(current_direction != last_direction) {
last_direction = current_direction;
return (last_direction);
} else {
return (0);
}
}
damit sind die if Abfragen sofort klar, ohne das man nachschauen muss was die Zahlen bedeuten:






if(isCrossed1 == CROSSED_UP && isCrossed2 == CROSSED_UP) {
  ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"Zahn EA",12345,0,Green);
  if(ticket>0) {
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
      Print("BUY order opened : ",OrderOpenPrice());
  } else {
    Print("Error opening BUY Order : ",GetLastError());
  }
  return(0);
}

 

Aber wie gesagt, das sind nur Empfehlungen aus meiner Erfahrung. Es macht den Code für andere leichter lesbar und reduziert die Fehleranfälligkeit, ist aber in vielen Bereichen eher Geschmackssache.

 

Funktionell:

 

Dein EA hat derzeit 2 Modi:

- Noch nicht maximale Anzahl an Orders offen: versuche neue Order zu öffnen

- Maximale Anzahl Orders offen: Überprüfe auf Trailingstop und Cross-Bedingung für Close

 

weiters kann ein Cross genau eine Position schließen, die anderen bleiben offen.

 

Ich vermute das ist so nicht gewollt, aber durch die ganzen return(0) tritt der Effekt auf.

Die Crossed-Methode wie du sie verwendest zeigt den Cross nur exakt am nächsten Tick an (was an sich ja ok ist). Wenn du jetzt mit return(0) die bearbeitung dieses Ticks nach dem ersten Schließen einer Order beendest, merken die anderen Orders nichts mehr von dem Cross.

 

Wenn du das return(0) beim OrderClose wegtust wäre die for-schleife "falsch":

Du läufst die Orders von 0 bis total (Nehmen wir an total ist 5). Wenn du jetzt die Order an Position 3 schließt, rückt die vorige Nummer 4 auf Nummer 3 nach und die Gesamtanzahl reduziert sich auf 4. Die Schleife inkrementiert aber normal weiter und du betrachtest als nächstes Order Nummer 4 (die neue Nummer 4) und hast somit die alte Nummer 4 (die jetzt Nummer 3 ist) übersprungen. Und da du nicht jedesmal mit OrdersTotal() vergleichst sondern den gespeicherten Wert nimmst, würdest du am schluss versuchen auf Nummer 5 zuzugreifen, die es aber nicht mehr gibt.

Einfache Abhilfe für das Problem: Zähl von oben nach unten:

for(cnt= total-1;cnt >= 0;cnt--)
Wenn du jetzt Nummer 3 löscht, rückt die alte Nummer 4 (die du bereits bearbeitet hast) auf Nummer 3 nach, du dekrementierst und bearbeitest als nächstes Nummer 2.

 

Hmm wenn ich diese Änderungen einbaue stimmt was nicht. Ist es absicht das du bei Cross_up kaufst, und bei Cross_up auch die Order schließt?

 

 

Den Candlerangefilter finde ich jetzt auch nirgends, was genau soll der tun?

Geschrieben

Nochwas: in den CrossedX ist ein Fehler: Beim ersten Ausführen wird immer ein Cross angezeigt, weil er von 0 auf Richtung kreuzt.

 

Du solltest die Bedingung:

  if(current_direction != last_direction) 
auf
 if(current_direction != last_direction && last_direction != 0) 
ändern und im else trotzdem die last_direction setzen.

 

btw. ist es eigentlich absicht das du auf Tickebene arbeitest? damit kannst du ja innerhalb der Kerze einen Cross angezeigt bekommen der am ende der Kerze nicht mehr da ist...

Geschrieben
Nochmal ich. Hab jetzt mal die Änderungen, wo ich vermute das du es so gemeint hast, eingebaut. Macht die Performance leider deutlich schlechter... vielleicht hast es doch nicht so gemeint :D Also der Close bei Cross sorgt für einen ziemlichen Dämpfer, dafür ist die Anzahl der Positionen dann deutlich geringer und der offene Drawdown defakto nicht vorhanden.
Geschrieben

Aber wie gesagt, das sind nur Empfehlungen aus meiner Erfahrung. Es macht den Code für andere leichter lesbar und reduziert die Fehleranfälligkeit, ist aber in vielen Bereichen eher Geschmackssache.

 

Du nimmst mir (mal wieder) die Worte aus dem Mund :wink:. Deswegen wollte ich eigentlich mit Zahnstocher sprechen, damit er mir mal vor lauter if und else mal erklärt, was der EA eigentlich machen soll. Wie Du schon sagst: es ist Geschmackssache, aber zur Fehlersuche und zum logischen Nachvollziehen sind IMHO saubere Blöcke doch weitaus hilfreicher. Dann kann man ggf. auch eher raus finden, warum eine Exit-Bedingung evtl. nicht ausgeführt wird.

Geschrieben
  • Autor

Vielen Danke für die vielen Anregungen! craazy.gif

Ich speichere die EA mal so ab wie sie ist und werde versuchen eure Empfehlungen umzusetzen, gerade bei den

vielen if.. war ich mir nicht sicher ob sie auch so ausgeführt werden wie ich mir das vorstelle.

 

Der relative draw down ist in der Tat ein Problem. Ich werde noch ein anderes Jahr im Backtest machen.

 

Candlerangefilter hab ich aufgrund anderer Fehler wieder rausgenommen, werde da heute Nacht weiter

machen. lines.gif

 

Grüße Zahnstocher.

Geschrieben

stoploss ist in dieser Version nicht inklundiert wenn man sich den Backtest ansieht aber aufgrund der Trefferrate auch nicht zwingend erforderlich.

 

Zu deinem Drawdown und Trefferquote:

Wie Mythos bereits sinngemäß schrieb, traden ohne Initial Stop ist absolut sinnfrei.

 

Du kannst das beste System dieses Planeten haben, sagen wir TQ 99,9%, diese übriggebliebenen 0,1% zerlegen dir dein Konto langfristig in Stücke, da der Mensch nun mal zur Gier neigt und bei hohen angenommenen TQ dann gerne "All in" geht..

Oder aber zumindest das Konto weit ūberhebet, dann hast du bspw.von heute auf morgen einen Drawdown von 70%, verarbeite den dann mal mental positiv.

 

Also, wenn schon keinen Intial Stop, dann zumindest IMMER einen Katastrophen Stop der das absolute Worstcase in noch ertragbare Bahnen lenkt.

Sollte dieser Kata Stop nämlich irgendwann wirklich greifen (Flashcrash, Krieg, Börse setzt aus, whatever) hast du mit dem noch vorhandenen Kontostand mental schon genug zu tun, aber das Konto ist zumindest nicht zerlegt.

Am besten du glaubst das mit dem Kata Stop ungeprüft, die Erfahrung selbst zu machen ist mehr als schmerzhaft, allerdings glaubst du es dann....

Geschrieben

Wie Mythos bereits sinngemäß schrieb, traden ohne Initial Stop ist absolut sinnfrei.

 

Für Dich heiße ich auch gerne mal Mythos (aber nur weil Du in meiner Signatur verewigt bist).

Geschrieben

Für Dich heiße ich auch gerne mal Mythos

 

Ach Schatz, du musst aber auch immerr schlimme Dinge über dich ergehen lassen, deine grenzenlose Tolerenz macht dich dabei noch so viel mehr attraktiver.

Machst mich dadurch immer ganz wuschig in meine Köpfele.

I`am sorry :door:

Geschrieben
  • Autor

Herzlichen Danke für deinen ausführliche Post!

Wie du/ihr sicher bemerkt habt ist der ganze EA laienhaft aufgebaut, try and error, was funktioniert was nicht. Ich hab zwar immer die Onlinehilfe offen aber von null auf 100 ist

schwer für mich.

 

Ich hab in den letzten Tagen einige EA geöffnet und versucht dern Code zu verstehen bzw. wenn ein EA die von mir gewünschte Funktion beinhaltet hab ich dort nachgesehen und

versucht ihn in meine EA zu integrieren.

 

Deshalb auch das rumgewurste.

 

Der Tip mit dem operator && genau das wars was ich wollte und bin nicht draufgekommen, deshalb auch der umweg über if...

 

So kann ich die Entry und Exit Regeln noch genauer definieren :)



Funktionell:

Dein EA hat derzeit 2 Modi:
- Noch nicht maximale Anzahl an Orders offen: versuche neue Order zu öffnen
- Maximale Anzahl Orders offen: Überprüfe auf Trailingstop und Cross-Bedingung für Close

weiters kann ein Cross genau eine Position schließen, die anderen bleiben offen.

Ich vermute das ist so nicht gewollt, aber durch die ganzen return(0) tritt der Effekt auf.

Wenn du das return(0) beim OrderClose wegtust wäre die for-schleife "falsch":
Du läufst die Orders von 0 bis total (Nehmen wir an total ist 5). Wenn du jetzt die Order an Position 3 schließt, rückt die vorige Nummer 4 auf Nummer 3 nach und die Gesamtanzahl reduziert sich auf 4. Die Schleife inkrementiert aber normal weiter und du betrachtest als nächstes Order Nummer 4 (die neue Nummer 4) und hast somit die alte Nummer 4 (die jetzt Nummer 3 ist) übersprungen. Und da du nicht jedesmal mit OrdersTotal() vergleichst sondern den gespeicherten Wert nimmst, würdest du am schluss versuchen auf Nummer 5 zuzugreifen, die es aber nicht mehr gibt.
Einfache Abhilfe für das Problem: Zähl von oben nach unten:for(cnt= total-1;cnt >= 0;cnt--)Wenn du jetzt Nummer 3 löscht, rückt die alte Nummer 4 (die du bereits bearbeitet hast) auf Nummer 3 nach, du dekrementierst und bearbeitest als nächstes Nummer 2.

Hmm wenn ich diese Änderungen einbaue stimmt was nicht. Ist es absicht das du bei Cross_up kaufst, und bei Cross_up auch die Order schließt?

Genau ist nicht gewollt!

Am besten wäre es die maximale Order wieder auf 1 zu setzen solange bis das Problem behoben ist!

 

Auch die 2te Markierung ist nicht gewollt, war ein Fehler meinerseits, deshalb hab ich deinen Rat mit #define Cross_up / down umgesetzt.

Geschrieben
  • Autor

 

Nochwas: in den CrossedX ist ein Fehler: Beim ersten Ausführen wird immer ein Cross angezeigt, weil er von 0 auf Richtung kreuzt.

 

Du solltest die Bedingung:

  if(current_direction != last_direction) 
auf
 if(current_direction != last_direction && last_direction != 0) 
ändern und im else trotzdem die last_direction setzen.

 

btw. ist es eigentlich absicht das du auf Tickebene arbeitest? damit kannst du ja innerhalb der Kerze einen Cross angezeigt bekommen der am ende der Kerze nicht mehr da ist...

 

danke, das erklärt warum der EA im visual Backtest eine Position einging obwohl das Cross schon ~5Candles zuvor war! dachte es liegt an der <300Bars Regelung.

 

Tick trade ist nicht gewünscht, möchte noch eine Regelung einbauen - nur ein Trade pro Kerze, bzw. besser wärw auf Baropen warten. (muss da erst noch reinlesen WIE ich

das dem EA beibringen kann :)

Geschrieben
  • Autor

@Vola, conglom-o,

 

ja die SL Geschichte gefällt mir auch nicht muss ja nicht mal eine Katastrophe sein, ich sag nur FOMC!

Da muss noch eine Regelung her.

Geschrieben
  • Autor

Ich danke euch, also viele Wege führen nach Rom!,

 

bin grad am Candlerangefilter dran und hab gesehen ich hab

zu Beginn des Programms wieder 3 if Anfragen welche Bedingungen erreicht werden müssen damit der Robot tradet.

 

Das könnte ich ja hier auch wieder über den Operator && lösen können. Schnipsel kommt in ein paar Minuten.

Geschrieben
  • Autor


Das wäre ""mein"" Candlerangedetector (herausgeklaubt aus der Liquidex EA wie auch das MM), zur Überprüfung ob er wunschgemäß arbeitet sollte er je nach Erfüllung der Anforderungen eine Meldung ausgeben.

 

Wenn man am Header schaut sieht man überall den Verweis auf mql5?!? Ist der neue Editor der in MT4 Build600 integriert ist? Verwirrt mich ein wenig!

 

Als nächstes möchte ich ihn in den bestehenden EA integrieren.

 

Hab Überlegt ev. die iHigh und iLow Periode noch als extern int variable zu definieren um das Optimieren anschließend leichter zu machen.

 

Visuell im Backtest verliert der Roboter am meisten in kleinen ranges viele trades und viele losses.

 

Dann mach ich mich gleich über den one trade per Bar Code danke für all eure Vorschläge und die großartige Unterstützung!

 

 

Candlerangedetector.mq4

post-4614-0-91137500-1392062812_thumb.png

Geschrieben

Das Schnipsel sieht gut aus. Warum da mql5 steht ist eine gute Frage. MQL5 ist eigentlich eine andere Programmiersprache.

Du hast noch einiges an Code in dem Schnipsel das du nicht brauchst, aber das stört nicht. Warum point und digits nötig ist (und nicht direkt Point und Digits verwendet wird) versteh ich nicht ganz, aber mei ;)

Geschrieben
  • Autor

Hab ich mich auch gefragt, ev. weil points und digits Eingangs mit 0 und 0.0 definiert werden?

ch habs so übernommen.

Mach grad paralell am 2ten Rechner einen Test ob es ohne definition auch funktioniert.

 

Edit: funktioniert genauso, ev. war da im Code weiter hinten noch mehr versteckt...

Bearbeitet von Zahnstocher

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.