Alle Inhalte von Zahnstocher
- Mein erster EA
-
Mein erster EA
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
- Mein erster EA
- Mein erster EA
- Mein erster EA
-
Mein erster EA
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.
- Mein erster EA
-
Mein erster EA
Danke für eure Hilfe! nö hab keine Geheimnisse, muss morgen früh aus den Federn, hab jetzt noch den Stoploss hinzugefügt. Werde morgen Abend den ganzen Expert hochladen und dann könnt ihr euch austoben. Crosslogik, TS, SL, TP funktioniert schon einwandfrei. Grüße Zahnstocher Edit: hab mir schon überlegt was als nächstes kommt, der ADX! Hoffe die Entries so weit eingrenzen zu können das die Positionsgröße sinnvoll erhöht werden kann! EARISOMA_CandlerangeV4.mq4
- Mein erster EA
- Mein erster EA
-
Mein erster EA
bei einem längeren Zeitraum geht mein Rechner ordentlich in die Knie Was ich heute mal versucht hab maximale Orderanzahl auf 26offene Trades erhöht, ist zwar nicht das gleiche aber es werden viel mehr mögliche Kombiniationen an Entries und Exits durchgespielt. anbei die Grafik. Was ich immer noch nicht geschafft habe ist die Candlerange, sie wird einfach vom EA ignoriert.
-
Mein erster EA
trotz alle "mängel" freuuuuuuuuu Bedingt durch den exit cross der untergeordneten Periode ist der Takeprofit nur sekundär. Hab da nicht lange Rumgedocktort oder optimiert, einfach mal laufen lassen. Bin mir sicher das mit den zusätzlichen Einschränkungen die Trefferquote hoch und der mögliche TF runter geht :) schei*e ich freu mich
-
Mein erster EA
herzlichen Dank, da bin ich einem irrglauben erlegen! Wie es aushieht kann ich einen weiteren Teil meiner Entry Logik heute Abend abhaken, das 3fach Cross siehe Example: was nun noch fehlt ist die Eingrenzung des Langfristigen RSIOMA mit Periode 244 Dieser ist im Cross eingearbeitet ABER - was noch fehlt: - only Buy if RSIOMA >80, only Sell if RSIOMA <20; denn dzt. kauft der EA auch in einen RSIOMA <20 noch fleissig rein.... - Candlerange - SL oder Exitstrategie Mach heute mit der Aktuellen Version 1e noch ein paar Backtests denn in einem Choppy market sollte er eigentlich keine gröberen Mankos haben.
-
Mein erster EA
^^ eine Frage hab ich noch zum RangeFilter, ich hätte ihn unter int start platziert, quasi vor dem Macht es Programmierungstechnisch einen Sinn wenn ich das ganze unter Sprich der EA initialisiert sich nur fertig wenn die Candlerange erfüllt wird und geht in die deinitialisierung über wenn die nicht erfüllt wird. Referenz für die Candlerange ist Periode_H1 => Trade Entrys sind jedoch im 1, 5 oder 15min Chart, je nachdem wie genau ich die Entries mit der Open und Close Logic timen kann. Grüße Zahnstocher Bin für jeden Tip dankbar (erwarte keinen Fertigen Code, aber ein kleiner Schubser wäre net :))
-
Mein erster EA
Ah danke!, Da haben mich dann die anderen Symbole am Desktop fehlgeleitet, es scheint aber dennoch unterschiede zu geben: ihigh, ilow findet sich nicht mehr in der Onlinehilfe und scheint auch vom Programm her nicht mehr unterstützt zu werden?!? Gut ist jetzt nicht soo dramatisch hab auch noch einen Roboforex account (auf dem der Robot dann auch laufen wird) der ist noch Build 579 (wenn ich mich nicht irre und der Editor ist noch der alte). Eine Funktion beim neuen Editor ist mir aufgefallen "zusammengehörige" Parameter in (xxxxx) oder {xxxx} werden für den User übersichtlich markiert. Das erleichtert für mich das Lesen wesentlich. Grüße Zahnstocher
-
Mein erster EA
Das mit dem gleich testen hat sich erledigt! Meine MT4 Plattform hat sich regelrecht zerrechnet (als ob der Rechner in einer Schleife arbeiten würde) also neu downgeloadet und siehe da OANDA MT4 hat nun Build 600 und der editor sieht auch anders aus dürfte also MQL5 sein. Scheinbar ist MQL5 aber abwärtskompaktibel und der MT4 Roboter kann auch in MQL5 kompiliert werden und hat heute diverse Backtests manche sogar mit minimal Gewinn absolviert. Code ist aber noch fehlerbehaftet, SL funktioniert noch nicht, Entrylogic auch noch nicht, Candlerange dito... Ist nicht leicht :)
- Mein erster EA
-
Mein erster EA
So und jetzt steh ich mal so richtig an, ich erhalte keine Fehlermeldung... Das Print wird aber brav ausgeführt, im Backtest wird keine Order abgesetzt obwohl die Range erfüllt wird. a der Print anzeigt kein Trade möglich, liegt mein Problem wohl am "Datensammeln" Was hab ich übersehen? Nur eine Keinigkeit oder ein gröberer Fehler? Variablen sind alle definiert, jedenfalls keinerlei Fehlermeldung beim Compilieren, der EA tut einfach nichts?
- Mein erster EA
- Mein erster EA
-
Mein erster EA
//+------------------------------------------------------------------+ //| 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>
-
Relativ profitable EA verbessern Backtest vorhanden, Hilfe erbeten
^^ Hab ich schon ist also nicht "curve fitted" ber es gibt immer "drawdown" Phasen und "gain" Phasen. Das Verhalten bleibt gleich egal ob 1 - 2 Monate oder das letzte Jahr. Weiter zurückgehen find ich ehrlich gesagt nicht sinnvoll da sich die Priceaction sehr geändert hat. Kann ich aber natürlich noch machen. Grüße Zahnstocher
-
Relativ profitable EA verbessern Backtest vorhanden, Hilfe erbeten
Entschuldigt bitte die Verwirrung! Bei 5% stimmt das nicht ganz sorry! ab gerade eben einen Backtest 2 Monate gemacht mit 1% initial Risk und aktuellem Spread auf meiner Platform => 0.9pip Das Gewinn Verlust Ratio ist m.E. Bemerkenswert immerhin gibts kein Martingale oder sonstiges Averaging. ber wie gesagt nix ist in Stein gemeiselt, ich freue mich auf eure Kritik und Anregungen! Grüße Zahnstocher Danke fürs Editieren des vorherigen Beitrags! Mit der Quote ist das wesentlich lesefreundlicher :)
-
Relativ profitable EA verbessern Backtest vorhanden, Hilfe erbeten
// This indicator was created by Kalenzo, email: bartlomiej.gorski@gmail.com, web: http://www.fxservice.eu // The base for this indicator was orginal RSI attached with Metatrader. #property copyright "Copyright © 2004, MetaQuotes Software Corp." #property link "http://www.metaquotes.net/" #property indicator_separate_window #property indicator_minimum -10 #property indicator_maximum 100 #property indicator_buffers 6 #property indicator_color1 Blue //---- input parameters extern int RSIOMA = 14; extern int RSIOMA_MODE = MODE_EMA; extern int RSIOMA_PRICE = PRICE_CLOSE; //---- buffers double RSIBuffer[]; double PosBuffer[]; double NegBuffer[]; double bdn[],bup[]; double sdn[],sup[]; string short_name; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { short_name = StringConcatenate("RSIOMA(",RSIOMA,")"); IndicatorBuffers(8); SetIndexBuffer(0,RSIBuffer); SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,3); SetIndexBuffer(6,PosBuffer); SetIndexBuffer(7,NegBuffer); IndicatorShortName(short_name); SetIndexDrawBegin(0,RSIOMA); SetIndexDrawBegin(1,RSIOMA); SetIndexDrawBegin(2,RSIOMA); SetIndexDrawBegin(3,RSIOMA); SetIndexDrawBegin(4,RSIOMA); SetIndexDrawBegin(5,RSIOMA); SetIndexDrawBegin(6,RSIOMA); SetIndexDrawBegin(7,RSIOMA); return(0); } //+------------------------------------------------------------------+ //| Relative Strength Index | //+------------------------------------------------------------------+ int start() { int i,counted_bars=IndicatorCounted(); double rel,negative,positive; //---- if(Bars<=RSIOMA) return(0); //---- initial zero if(counted_bars<1) for(i=1;i<=RSIOMA;i++) RSIBuffer[bars-i]=0.0; //---- i=Bars-RSIOMA-1; int ma = i; if(counted_bars>=RSIOMA) i=Bars-counted_bars-1; while(i>=0) { double sumn=0.0,sump=0.0; if(i==Bars-RSIOMA-1) { int k=Bars-2; //---- initial accumulation while(k>=i) { double cma = iMA(Symbol(),0,RSIOMA,0,RSIOMA_MODE,RSIOMA_PRICE,k); double pma = iMA(Symbol(),0,RSIOMA,0,RSIOMA_MODE,RSIOMA_PRICE,k+1); rel=cma-pma; if(rel>0) sump+=rel; else sumn-=rel; k--; } positive=sump/RSIOMA; negative=sumn/RSIOMA; } else { //---- smoothed moving average double ccma = iMA(Symbol(),0,RSIOMA,0,RSIOMA_MODE,RSIOMA_PRICE,i); double ppma = iMA(Symbol(),0,RSIOMA,0,RSIOMA_MODE,RSIOMA_PRICE,i+1); rel=ccma-ppma; if(rel>0) sump=rel; else sumn=-rel; positive=(PosBuffer[i+1]*(RSIOMA-1)+sump)/RSIOMA; negative=(NegBuffer[i+1]*(RSIOMA-1)+sumn)/RSIOMA; } PosBuffer[i]=positive; NegBuffer[i]=negative; if(negative==0.0) RSIBuffer[i]=0.0; else { RSIBuffer[i]=100.0-100.0/(1+positive/negative); bdn[i] = 0; bup[i] = 0; sdn[i] = 0; sup[i] = 0; if(RSIBuffer[i]<20 && RSIBuffer[i]>RSIBuffer[i+1]) sup[i] = -10; if(RSIBuffer[i]>80 && RSIBuffer[i]<RSIBuffer[i+1]) sdn[i] = -10; } i--; } return(0); } //+------------------------------------------------------------------+ void drawLine(double lvl,string name, color Col ) { ObjectDelete(name); ObjectCreate(name, OBJ_HLINE, WindowFind(short_name), Time[0], lvl,Time[0],lvl); ObjectSet(name, OBJPROP_STYLE, STYLE_DOT); ObjectSet(name, OBJPROP_COLOR, Col); ObjectSet(name,OBJPROP_WIDTH,1); } OK das zusammenstutzen mit tatkräftiger Unterstützung der Compilefunktion war jetzt nicht soooo schwer, allerdings weiß ich nicht ob nicht noch einige Karteileichen im Indikator verblieben sind. Wenn ich jetzt 2 weitere Perioden hinzufügen will wäre das so in Ordnung? //---- input parameters extern int RSIOMA = 14; 72; //funktioniert nicht! Wie mache ich dem Programm klar das ich eine 2Line haben will mit einzigem Unterschied der gewählten Periode? extern int RSIOMA = 72; // erhalte dann eine Fehlermeldung das die Variable schon definiert ist extern int RSIOMA_MODE = MODE_EMA; // sollte global sein extern int RSIOMA_PRICE = PRICE_CLOSE; // sollte global sein Danke und gute Nacht! Ein kleiner Tip reicht schon ich wills ja selbst lernen :)
-
Relativ profitable EA verbessern Backtest vorhanden, Hilfe erbeten
Mein erstes "Project" Istzustand: 3x wird der RSIOMA geladen http://abload.de/img/ist0msnm.png ich möchte den RSIOMA so umbauen das er beim ersten laden so aussieht: http://abload.de/img/solljcskq.png Die Trendindicatoren die der RSIOMA aufweist und die zusätzliche Trigger linie brauche ich nicht und möchte sie demnach entfernen, ich erhoffe mir dadurch weniger Rechenbelastung? Realistisch? Hier ist der Code: /* This indicator was created by Kalenzo email: bartlomiej.gorski@gmail.com web: http://www.fxservice.eu The base for this indicator was orginal RSI attached with Metatrader. */ #property copyright "Copyright © 2004, MetaQuotes Software Corp." #property link "http://www.metaquotes.net/" #property indicator_separate_window #property indicator_minimum -10 #property indicator_maximum 100 #property indicator_buffers 6 #property indicator_color1 Blue #property indicator_color2 Red #property indicator_color3 Green #property indicator_color4 Magenta #property indicator_color5 DodgerBlue #property indicator_color6 BlueViolet //---- input parameters extern int RSIOMA = 14; extern int RSIOMA_MODE = MODE_EMA; extern int RSIOMA_PRICE = PRICE_CLOSE; extern int Ma_RSIOMA = 21, Ma_RSIOMA_MODE = MODE_EMA; extern int BuyTrigger = 80; extern int SellTrigger = 20; extern color BuyTriggerColor = DodgerBlue; extern color SellTriggerColor = Magenta; extern int MainTrendLong = 50; extern int MainTrendShort = 50; extern color MainTrendLongColor = Red; extern color MainTrendShortColor = Green; //---- buffers double RSIBuffer[]; double PosBuffer[]; double NegBuffer[]; double bdn[],bup[]; double sdn[],sup[]; double marsioma[]; string short_name; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { short_name = StringConcatenate("RSIOMA(",RSIOMA,")"); IndicatorBuffers(8); SetIndexBuffer(0,RSIBuffer); SetIndexBuffer(2,bup); SetIndexBuffer(1,bdn); SetIndexBuffer(3,sdn); SetIndexBuffer(4,sup); SetIndexBuffer(5,marsioma); SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,3); SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,1); SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,1); SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID,1); SetIndexStyle(4,DRAW_HISTOGRAM,STYLE_SOLID,1); SetIndexStyle(5,DRAW_LINE,STYLE_SOLID,1); SetIndexBuffer(6,PosBuffer); SetIndexBuffer(7,NegBuffer); IndicatorShortName(short_name); SetIndexDrawBegin(0,RSIOMA); SetIndexDrawBegin(1,RSIOMA); SetIndexDrawBegin(2,RSIOMA); SetIndexDrawBegin(3,RSIOMA); SetIndexDrawBegin(4,RSIOMA); SetIndexDrawBegin(5,RSIOMA); SetIndexDrawBegin(6,RSIOMA); SetIndexDrawBegin(7,RSIOMA); //---- drawLine(BuyTrigger,"BuyTrigger", BuyTriggerColor); drawLine(SellTrigger,"SellTrigger", SellTriggerColor ); drawLine(MainTrendLong,"MainTrendLong", MainTrendLongColor ); drawLine(MainTrendShort,"MainTrendShort",MainTrendShortColor ); return(0); } //+------------------------------------------------------------------+ //| Relative Strength Index | //+------------------------------------------------------------------+ int start() { int i,counted_bars=IndicatorCounted(); double rel,negative,positive; //---- if(Bars<=RSIOMA) return(0); //---- initial zero if(counted_bars<1) for(i=1;i<=RSIOMA;i++) RSIBuffer[bars-i]=0.0; //---- i=Bars-RSIOMA-1; int ma = i; if(counted_bars>=RSIOMA) i=Bars-counted_bars-1; while(i>=0) { double sumn=0.0,sump=0.0; if(i==Bars-RSIOMA-1) { int k=Bars-2; //---- initial accumulation while(k>=i) { double cma = iMA(Symbol(),0,RSIOMA,0,RSIOMA_MODE,RSIOMA_PRICE,k); double pma = iMA(Symbol(),0,RSIOMA,0,RSIOMA_MODE,RSIOMA_PRICE,k+1); rel=cma-pma; if(rel>0) sump+=rel; else sumn-=rel; k--; } positive=sump/RSIOMA; negative=sumn/RSIOMA; } else { //---- smoothed moving average double ccma = iMA(Symbol(),0,RSIOMA,0,RSIOMA_MODE,RSIOMA_PRICE,i); double ppma = iMA(Symbol(),0,RSIOMA,0,RSIOMA_MODE,RSIOMA_PRICE,i+1); rel=ccma-ppma; if(rel>0) sump=rel; else sumn=-rel; positive=(PosBuffer[i+1]*(RSIOMA-1)+sump)/RSIOMA; negative=(NegBuffer[i+1]*(RSIOMA-1)+sumn)/RSIOMA; } PosBuffer[i]=positive; NegBuffer[i]=negative; if(negative==0.0) RSIBuffer[i]=0.0; else { RSIBuffer[i]=100.0-100.0/(1+positive/negative); bdn[i] = 0; bup[i] = 0; sdn[i] = 0; sup[i] = 0; if(RSIBuffer[i]>MainTrendLong) bup[i] = -10; if(RSIBuffer[i]<MainTrendShort) bdn[i] = -10; if(RSIBuffer[i]<20 && RSIBuffer[i]>RSIBuffer[i+1]) sup[i] = -10; if(RSIBuffer[i]>80 && RSIBuffer[i]<RSIBuffer[i+1]) sdn[i] = -10; } i--; } while(ma>=0) { marsioma[ma] = iMAOnArray(RSIBuffer,0,Ma_RSIOMA,0,Ma_RSIOMA_MODE,ma); ma--; } //---- return(0); } //+------------------------------------------------------------------+ void drawLine(double lvl,string name, color Col ) { ObjectDelete(name); ObjectCreate(name, OBJ_HLINE, WindowFind(short_name), Time[0], lvl,Time[0],lvl); ObjectSet(name, OBJPROP_STYLE, STYLE_DOT); ObjectSet(name, OBJPROP_COLOR, Col); ObjectSet(name,OBJPROP_WIDTH,1); } ich versuche ihn mal Schritt für Schritt zu verstehen, meld mich dann wieder in 4-5Jahren :)