Hallo,
Ich verwende den Meta trader 5 auf meinem Macbook und habe ihn ganz normal heruntergeladen ohne extra Wine etc zu installieren.
Ich habe mit Hilfe einer Anleitung einen EA erstellt und versucht ihn im Strategie Tester auszuführen, leider ohne Erfolg.
Dann habe ich versucht einen EA aus den Vorlagen auszuführen, auch kein Erfolg.
Die Meldung hänge ich als Bild an.
Ich habe bereits in der Firewall das Programm freigegeben, 2 mal hat der Start schon funktioniert jedoch wurde kein Trade ausgelöst.
Hier noch die Einstellungen:
Ich würde mich freuen wenn mir jemand helfen kann, ob es am Mac liegt oder ob ich einen anderen Fehler mache.
Vielen Dank!
Hast du den Tester vorher im visuellen mode gestartet? Dann blockiert er dir Core 1.
Falls noch ein Chart vom Tester herum steht, schließe dieses.
Vielleicht hilft das
Hallo,
danke für deine Antwort.
Im Visuellen Modus ist manchmal ein neues Fenster aufgegangen und manchmal gab es dann einen schwarzen schirm zusehen wo stand dass auf ein update gewartet wird. Aber auch ohne visuellen modus Startet der Test nicht. Das Fenster wird hellgrau und ich kann den test nicht mehr Starten.
Kann es vielleicht sein dass ich irgendwelche Einstellungen im Programm ändern muss damit der EA zugriff auf das ganze bekommt?
Da gibt's eigentlich keine Einstellungen.
Probier einen anderen EA. Kann am Code liegen. Indexfehler können da heimtückisch sein.
Den zB.
//+------------------------------------------------------------------+ //| Beispiel: Einbinden eines MAs in einen EA | //+------------------------------------------------------------------+ input int ma_period = 20; input int ma_shift = 0; input ENUM_MA_METHOD ma_method = MODE_EMA; input ENUM_APPLIED_PRICE ma_price = PRICE_CLOSE; int handle; int OnInit() { handle=iMA(_Symbol,_Period,ma_period,ma_shift,ma_method,ma_price); // erzeugen des handles if(handle==INVALID_HANDLE) // check ob handle ok { Alert("*ERROR* creating iMA handle."); // Fehlermeldung return(INIT_FAILED); // raus hier } ChartIndicatorAdd(0,0,handle); // Indi im Chart darstellen return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { } void OnTick() { }
Ich habe diesen hier erstellt.
void OnTick() { // create an Array for several prices double myMovingAverageArray1[],myMovingAverageArray2[]; // the properties of the Moving Average 1 int movingAverageDefenition1 = iMA (_Symbol,_Period,20,0,MODE_SMA,PRICE_CLOSE); // the properties of the Moving Average 2 int movingAverageDefenition2 = iMA (_Symbol,_Period,50,0,MODE_SMA,PRICE_CLOSE); // sort the price array1 from the current Candle downwards ArraySetAsSeries(myMovingAverageArray1,true); // sort the price array2 from the current Candle downwards ArraySetAsSeries(myMovingAverageArray2,true); // Define MA1, one line, current candle, 3 candles, store result CopyBuffer(movingAverageDefenition1,0,0,3,myMovingAverageArray1); // Define MA2, one line, current candle, 3 candles, store result CopyBuffer(movingAverageDefenition2,0,0,3,myMovingAverageArray2); if ( // check if the 20 canlde MA is above the 50 candle MA (myMovingAverageArray1[0]>myMovingAverageArray2[0]) &&(myMovingAverageArray1[1]<myMovingAverageArray2[1]) ) { Comment ("BUY"); } if ( // check if the 50 canlde MA is above the 20 candle MA (myMovingAverageArray1[0]<myMovingAverageArray2[0]) &&(myMovingAverageArray1[1]>myMovingAverageArray2[1]) ) { Comment ("SELL"); }
Ich habe erneut versucht den EA den sie mir gegeben haben auszuführen und diesmal das gleiche Problem wie bei dem anderen..
Du stehst noch komplett am Anfang. Natürlich macht dieser EA nichts, ist ja auch nur zum Testen gedacht.
Zu deinem EA: Die Quelle ist mir bekannt. Stammt aus einem YT Kanal, von einem gewissen R.B. der immer alles oberhalb der OnTick() löscht, weil er damit nichts anzufangen weis.
Ich habe diesen Herren mehrmals darauf hingewiesen wie es richtig geht, aber er ist lernresistent, macht in gewohnter Manier weiter, hat mir nachgeschnüffelt(Kontakte etc.) und sogar gedroht mich irgendwie zu diffamieren.
Ich frag mich nur womit, und was ist mit diesem Typen wirklich los .....?
Zu deinem Code: Ich hab diesen umgearbeitet, so wie es imho richtig ist, Parameter für die Eingabe hinzugefügt um im Tester optimieren zu können.
Der EA ist nicht profitabel, aber auch nicht 'desaströs'. Filter für Spread und Handelszeiten sollten eingebaut werden.
Es fehlt eine Wiedereinstiegsmöglichkei bei langen Kursbewegungen und ein Filter für Seitwärtsbewegungen des Kurses und vieles mehr.
Es ist blos ein Demo.
//+------------------------------------------------------------------+ //| MyFirstEA.mq5 | //+------------------------------------------------------------------+ #property description "EA mit 2 gleitenden Durchschnitten die sich kreuzen" #property description "Leider kommen die Signale immer zu spät" #define SPACER "—————————————————————" // macro für die Eingabemaske #define METHOD ENUM_MA_METHOD // Abkürzung #define APRICE ENUM_APPLIED_PRICE // Abkürzung #include <Trade\Trade.mqh> // Einbinden dr Systembibliothek Trade CTrade Trade; // Instanz Trade erzeugen //+------------------------------------------------------------------+ input string txt_MAfast = SPACER; // ———— MA fast —————— input int inp_MAfastPeriod = 23; // MA fast Period input METHOD inp_MAfastMethod = MODE_CLOSE; // MA fast Method input APRICE inp_MAfastPrice = PRICE_CLOSE; // MA fast Price input string txt_MAslow = SPACER; // ———— MA slow —————— input int inp_MAslowPeriod = 51; // MA slow Period input METHOD inp_MAslowMethod = MODE_CLOSE; // MA slow Method input APRICE inp_MAslowPrice = PRICE_CLOSE; // MA slow Price input string txt_Trade = SPACER; // ———— Trade ——————— input int inp_SL = 95; // SL (points) input int inp_TP = 165; // TP (points) input double inp_Lots = 0.01; // Lotsize input bool inp_SigDisplay = true; // Signale anzeigen input bool inp_SigTrade = true; // Signale traden //+------------------------------------------------------------------+ int haMAfast, // handle für schnellen MA haMAslow; // handle für langsamen MA double buMAfast[], // buffer für schnellen MA buMAslow[]; // buffer für langsamen MA int toCopy = 3; // Anzahl der zu Kopierenden Preisdaten (rates) int Signal; double SL = inp_SL * _Point; // Berechnung points als Kursdifferenz double TP = inp_TP * _Point; //+------------------------------------------------------------------+ int OnInit() { haMAfast = iMA(_Symbol,_Period,inp_MAfastPeriod,0,inp_MAfastMethod,inp_MAfastPrice); // handle schneller MA erzeugen if(haMAfast==INVALID_HANDLE) // errorcheck { Alert("*ERROR* creating iMAfast handle."); // Fehlermeldung return(INIT_FAILED); // Beenden mit Fehler } haMAslow = iMA(_Symbol,_Period,inp_MAslowPeriod,0,inp_MAslowMethod,inp_MAslowPrice); // handle langsamer MA erzeugen if(haMAslow==INVALID_HANDLE) // errorcheck { Alert("*ERROR* creating iMAslow handle."); // Fehlermeldung return(INIT_FAILED); // Beenden mit Fehler } ArraySetAsSeries(buMAfast,true); // Zugriffsart auf Array festlegen. Index 0 ist jüngster Datensatz ArraySetAsSeries(buMAslow,true); // die Arrays werden hier nicht sortiert! es wird die Indizierung festgelegt ChartIndicatorAdd(0,0,haMAfast); // Indikatoren im Chart / Tester sichtbar machen ChartIndicatorAdd(0,0,haMAslow); return(INIT_SUCCEEDED); // soweit alles Ok } void OnDeinit(const int reason) // wird gebraucht wenn ChartObjekte gelöscht werden sollen, { // oder wie hier der Comment sonst stehen bleibt. Comment(""); // löschen wir den Comment } // Also erforderlich Aufräumarbeiten void OnTick() { double Ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK); double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID); if(CopyBuffer(haMAfast,0,0,toCopy,buMAfast)!=toCopy) return; // Daten aus den Indikatoren in die buffer kopieren if(CopyBuffer(haMAslow,0,0,toCopy,buMAslow)!=toCopy) return; // incl. ErrorCheck Signal=0; // default kein Signal if((buMAfast[0]>buMAslow[0]) && // Signal Buy (buMAfast[1]<buMAslow[1])) Signal= +1; if((buMAfast[0]<buMAslow[0]) && // Signal Sell (buMAfast[1]>buMAslow[1])) Signal= -1; if(inp_SigDisplay) // nur wenn angefordert switch(Signal) // Signal Ausgabe { case -1: Comment("Signal SELL"); break; case 0: Comment("Signal NONE"); break; case +1: Comment("Signal BUY" ); break; } if(inp_SigTrade) // nur wenn angefordert if(!PositionSelect(_Symbol)) // nur wenn keine Position offen switch(Signal) { case -1: Trade.Sell(inp_Lots,_Symbol,Bid,Ask+SL,Bid-TP); break; case +1: Trade.Buy (inp_Lots,_Symbol,Ask,Bid-SL,Ask+TP); break; } }
PS: man kann durch Unmengen an Kommentaren die man zwischen den Code 'hineinpappt' und durch VariablenNameDieSoLangSindWieEineHalbeZeile den Code besonders leserlich machen ;)
Guten Tag,
Das Problem mit meinem Strategie Tester habe ich mittlerweile in der Griff bekommen.
Ich muss gelegentlich auf den Reiter Agenten gehen den oberen dort einmal abschalten und wieder anschalten dann geht es meistens wieder, ich habe dass Gefühl dass es damit zusammenhängt das der MT am Anfang noch nicht genügend Daten hat um den Test auszuführen aber genau kann ich es auch nicht sagen. Die Hauptsache ist es funktioniert erstmal.
Vielen Dank Otto Pauser für deine Mühe den Code zu korrigieren, das weiß ich zu schätzen! Nach und nach enthüllen sich einige Zeilen als Sinnvoll wobei ich bei anderen noch im Dunklen tappe.
Ich habe seitdem ständig an meinem Code gearbeitet und mich auf mehreren Internetseiten belesen und gemerkt dass in dem Video nicht sauber gearbeitet wurde.
Ich muss auf jeden Fall noch viel lernen und werde mir demnächst mal etwas Lehrmaterial anschaffen.
Mittlerweile habe ich meinen Code noch bearbeitet, einen weiteren Indikator hinzugefügt. Gerade versuche ich einen Trailing Stop zu integrieren bei dem ich den Abstand als Eingabe festlegen kann. Hier mein aktueller Stand und darunter den Code den ich mir als Trailing Stop hier aus dem Forum herausgesucht habe, welcher aber irgendwie nicht mit meinem Code funktioniert ich befürchte dass dieser für mql4 ist:
//+------------------------------------------------------------------+ //| EACrossover.mq5 | //| Copyright 2018 | //| | //+------------------------------------------------------------------+ #property copyright "Copyright 2018" #property link "" #property version "1.00" #include <Trade/Trade.mqh> input double Cfd = 0.10; input int SLPoints = 300; input int TPPoints = 300; input int MASignalPerioden = 5; input int MABasisPerioden = 10; input int ATRPeriode = 5; input int ATRMin = 10; input int ATRMax = 50; input string Kommentar = ""; CTrade trade; bool isLongTrade, isShortTrade; int OnInit(){ return(INIT_SUCCEEDED); } void OnDeinit(const int reason){ } void OnTick(){ double myMovingAverageArray1[],myMovingAverageArray2[]; int movingAverageDefenition1 = iMA (_Symbol,_Period,MASignalPerioden,0,MODE_SMA,PRICE_CLOSE); int movingAverageDefenition2 = iMA (_Symbol,_Period,MABasisPerioden,0,MODE_SMA,PRICE_CLOSE); ArraySetAsSeries(myMovingAverageArray1,true); ArraySetAsSeries(myMovingAverageArray2,true); CopyBuffer(movingAverageDefenition1,0,0,3,myMovingAverageArray1); CopyBuffer(movingAverageDefenition2,0,0,3,myMovingAverageArray2); if ( (myMovingAverageArray1[0]<myMovingAverageArray2[0]) &&(myMovingAverageArray1[1]>myMovingAverageArray2[1]) ) { if(isLongTrade){ trade.PositionClose(_Symbol); isLongTrade = false; } if (!isShortTrade) isShortTrade = executeShort(); } else if ( (myMovingAverageArray1[0]>myMovingAverageArray2[0]) &&(myMovingAverageArray1[1]<myMovingAverageArray2[1]) ) { if(isShortTrade){ trade.PositionClose(_Symbol); isShortTrade = false; } if (!isLongTrade) isLongTrade = executeLong(); } } bool executeShort(){ double atr[] = {0}; int atrHandle = iATR(_Symbol,PERIOD_CURRENT,ATRPeriode); CopyBuffer(atrHandle,0,0,1,atr); if(atr[0] <= ATRMin) return 1; if(atr[0] >= ATRMax) return 1; double entry = SymbolInfoDouble(_Symbol,SYMBOL_BID); double sl = entry + SLPoints * _Point; double tp = entry - TPPoints * _Point; bool res; res = trade.Sell(Cfd,_Symbol,entry,sl,tp,Kommentar); return res; } bool executeLong(){ double atr[] = {0}; int atrHandle = iATR(_Symbol,PERIOD_CURRENT,ATRPeriode); CopyBuffer(atrHandle,0,0,1,atr); if(atr[0] <= ATRMin) return 1; if(atr[0] >= ATRMax) return 1; double entry = SymbolInfoDouble(_Symbol,SYMBOL_ASK); double sl = entry - SLPoints * _Point; double tp = entry + TPPoints * _Point; bool res; res = trade.Buy(Cfd,_Symbol,entry,sl,tp,Kommentar); return res; }
Hier noch der Trailing Stop Code:
input double stoploss = 0.00020; void TrailingSL() { double StopLossTemp; for(i = 0; i < PositionsTotal(); i++) { if(Symbol()==PositionGetSymbol(i)) { if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) { if(PositionGetDouble(POSITION_PRICE_CURRENT) > PositionGetDouble(POSITION_PRICE_OPEN)) { StopLossTemp = PositionGetDouble(POSITION_PRICE_CURRENT) - stoploss; ChangePosition(StopLossTemp); } } if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL) { if(PositionGetDouble(POSITION_PRICE_CURRENT) < PositionGetDouble(POSITION_PRICE_OPEN)) { StopLossTemp = PositionGetDouble(POSITION_PRICE_CURRENT) + stoploss; ChangePosition(StopLossTemp); } } } } } void ChangePosition(string StopLossTemp) { request.action = TRADE_ACTION_SLTP; request.symbol = Symbol(); request.sl = NormalizeDouble(StopLossTemp,Digits()); OrderSend(request,result); }
Vielen Dank für die Hilfe! Sollte ich für diese Fragen vielleicht ein neues Thema erstellen weil das eigentliche Problem ja gelöst ist?
Ich würde mich auf den bestehenden SL beziehen (hier nur für Kauf und nicht getestet):
... if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) { if( PositionGetDouble(POSITION_PRICE_CURRENT) > PositionGetDouble(POSITION_SL)+StepSL ) { StopLossTemp = PositionGetDouble(POSITION_PRICE_CURRENT) - PositionGetDouble(POSITION_SL)+StepSL; ChangePosition(PositionGetDouble(POSITION_SL)+StepSL); } } ...

- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Hallo,
Ich verwende den Meta trader 5 auf meinem Macbook und habe ihn ganz normal heruntergeladen ohne extra Wine etc zu installieren.
Ich habe mit Hilfe einer Anleitung einen EA erstellt und versucht ihn im Strategie Tester auszuführen, leider ohne Erfolg.
Dann habe ich versucht einen EA aus den Vorlagen auszuführen, auch kein Erfolg.
Die Meldung hänge ich als Bild an.
Ich habe bereits in der Firewall das Programm freigegeben, 2 mal hat der Start schon funktioniert jedoch wurde kein Trade ausgelöst.
Hier noch die Einstellungen:
Ich würde mich freuen wenn mir jemand helfen kann, ob es am Mac liegt oder ob ich einen anderen Fehler mache.
Vielen Dank!