Warum selber machen - mit all den Fehlern?
- Es gibt zwei oder mehr EA, die als Beispiel dienen können,
- Es gibt die CodeBase nit noch VIEL MEHR EAs,
- Es gibt hier eine Suchfunktion (die Lupe oben rechts) und es gibt Google, denn
- Es gibt fast nichts, was es für MT4/5 nicht gibt!
Also Warum so etwas noch einmal programmieren?
Erst suchen und dann einen bestehenden EA nahmen und etwas abändern, sie schauen fast alle gleich aus:
a) Positionsmanagement (was mache ich mit der offenen Position)
b) Signalmanagement (wann kaufen, verkaufen oder schließen)
Dieses Programm hat keine Fehler. So läuft es auf dem Strategietester.
Es fehlt diese eine Funktion oder Parameter noch.
Du kannst aber nicht erwarten, dass wir für Dich den EA programmieren, weil Du keine Zeit hast?!
Dafür gibt es die Freelancer (ab 30-)
@Calli: Ja, da bin ich teilweise bei dir, ABER....... Chistian ist ja noch jung und will was lernen!
In der Codebase gibt es Beispiele wie Sand am Meer, da sind aber nur wenige Perlen darunter.
@Christian: Der Hauptfehler ist ab der Zeile
if (OrdersTotal()==0)
also wenn keine Position offen ist....
Dieses if bezieht sich nur auf die nächste Anweisung! Da gehört ein geschweiftes Klammernpaar {} über den Code auf den sich das bezieht.
Weiters sollte die Abfrage ob eine neue Kerze entstanden ist eingebaut werden.
Am Code erkenne ich einen YouTuber mit einem MQL5-Tutorial, der immer alles oberhalb der OnTick() Funktion löscht...... Stimmt's? oder hab ich recht?
Auch die Variablennamen sind etwas schräg.
Ich hab da was in der Tischlade (auf der Festplatte) das hänge ich morgen hier dran, mit dem kannst du sicher was anfangen.
LG, Otto
Ups, da habt ihr mich 2x überholt !
@Christian: Dieses Programm hat EINIGE Fehler, vor Allem fehlt dem noch unendlich viel um ein vollwertiges Tradingsystem zu werden.
Habe gerade bemerkt, daß in beiden Fällen eine BuyOrder abgesetzt wird. Soweit zu 'Dieses Programm hat keine Fehler'
Hallo,
endlich mal jemand der proggen lernen will, da helfen die sinnlosen kommentare auch nicht.
so wie ich dich verstehe willst du eine market order absetzen welche dann als position im terminal angezeigt wird.
bevor du die order Bedingungen abfrägst musst du dann aber positiontotal verwenden
eine position ist offener trade
eine order eine pending order welche noch nicht ausgeführt ist
deine bedining muss also sein position total =0 nicht order total
noch ein tipp, wenn du für variablen englische bezeichnungen verwendest wird der code besser lesbar, das deutsche verwende ich persönlich nur für kommentare
lg
amando
Hallo,
endlich mal jemand der proggen lernen will, da helfen die sinnlosen kommentare auch nicht.
so wie ich dich verstehe willst du eine market order absetzen welche dann als position im terminal angezeigt wird.
bevor du die order Bedingungen abfrägst musst du dann aber positiontotal verwenden
eine position ist offener trade
eine order eine pending order welche noch nicht ausgeführt ist
deine bedining muss also sein position total =0 nicht order total
noch ein tipp, wenn du für variablen englische bezeichnungen verwendest wird der code besser lesbar, das deutsche verwende ich persönlich nur für kommentare
lg
amando
Hi amando,
mit den 'sinnlosen Kommentaren' meinst du hoffentlich weder meine, noch die vom Calli. Also welche Kommentare meinst du?
Wie versprochen poste ich hier meine Vorstellung von einem rudimentären EA.
#include <Trade\Trade.mqh> CTrade Trade; // Instanz von CTrade definieren #define SPACER "—————————————————————" // simle definition #define PRICE ENUM_APPLIED_PRICE // simple abbreviation #define METHOD ENUM_MA_METHOD // simple abbreviation input string txt_MA1 = SPACER; // MA1 Settings input int inp_MA1Period = 14; // Period input METHOD inp_MA1Method = MODE_SMA; // Method input int inp_MA1Shift = 0; // Shift input PRICE inp_MA1Price = PRICE_WEIGHTED; // Price input string txt_MA2 = SPACER; // MA2 Settings input int inp_MA2Period = 50; // Period input METHOD inp_MA2Method = MODE_SMA; // Method input int inp_MA2Shift = 0; // Shift input PRICE inp_MA2Price = PRICE_WEIGHTED; // Price input string txt_MA3 = SPACER; // MA3 Settings input int inp_MA3Period = 200; // Period input METHOD inp_MA3Method = MODE_SMA; // Method input int inp_MA3Shift = 0; // Shift input PRICE inp_MA3Price = PRICE_WEIGHTED; // Price input string txt_MA4 = SPACER; // Other Settings input double inp_Lotsize = 0.05; // LotSize int haMA1, // handles für die MAs haMA2, haMA3; double buMA1[], // buffer für die MAs buMA2[], buMA3[]; int copyRates = 3; // copy rates to buffer int OnInit() { haMA1=iMA(_Symbol, _Period, inp_MA1Period, inp_MA1Shift, inp_MA1Method, inp_MA1Price); if(haMA1==INVALID_HANDLE) return(INIT_FAILED); haMA2=iMA(_Symbol, _Period, inp_MA2Period, inp_MA2Shift, inp_MA2Method, inp_MA2Price); if(haMA2==INVALID_HANDLE) return(INIT_FAILED); haMA3=iMA(_Symbol, _Period, inp_MA3Period, inp_MA3Shift, inp_MA3Method, inp_MA3Price); if(haMA3==INVALID_HANDLE) return(INIT_FAILED); ArraySetAsSeries(buMA1, true); // indizierung festlegen (da wird nix sortiert!) ArraySetAsSeries(buMA2, true); // das ist nur 1x notwendig !!! ArraySetAsSeries(buMA3, true); return(INIT_SUCCEEDED); } void OnTick() { if(CopyBuffer(haMA1,0,0,copyRates,buMA1)!=copyRates) return; if(CopyBuffer(haMA2,0,0,copyRates,buMA2)!=copyRates) return; if(CopyBuffer(haMA3,0,0,copyRates,buMA3)!=copyRates) return; if(PositionSelect(_Symbol)) // check ob offene position vorhanden { // position existiert switch((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE)) { case POSITION_TYPE_BUY: // prüfen auf buy schließen // und schließen falls erforderlich return; // break kann durch return ersetzt werden case POSITION_TYPE_SELL: // prüfen auf sell schließen // und schließen falls erforderlich return; // break kann durch return ersetzt werden } } else { // keine position offen if(Condition_Buy()) // prüfen auf buy und kaufen, falls bedingungen zutreffen return; if(Condition_Sell()) // prüfen auf sell und verkaufen, falls bedingungen zutreffen return; } } bool Condition_Buy() { // hier prüfen auf kaufen und return(true) falls gekauft wurde. return(false); // kaufbedingung war nicht zutreffend } bool Condition_Sell() { // hier prüfen auf verkaufen und return(true) falls verkauft wurde. return(false); // verkaufsbedingung war nicht zutreffend }
Die Erzeugung der Handles ist in der OnInit() bestens aufgehoben, ebenso das ArraySetAsSeries().
Das in die OnTick() reinzunehmen ist gleichbedeutend wie Autofahren mit angezogener Handbremse. (Aber der Raimund Bauer versteht das nicht).
Ein weiterer Hinweis: die Handles sollten auf Gültigkeit überprüft werden. Besonders bei der Verwendung von iCustom() !!!
Zur Abfrage einer offenen Position verwende ich nicht PositionsTotal() sondern PositionSelect(). Begründung siehe Reference zu PositionsSelect().
Function PositionSelect() copies data about a position into the program environment, and further calls of PositionGetDouble(), PositionGetInteger() and PositionGetString() return the earlier copied data.
This means that the position itself may no longer exist (or its volume, direction, etc. has changed), but data of this position still can be obtained.
To ensure receipt of fresh data about a position, it is recommended to call PositionSelect() right before referring to them.
MfG, Otto
PS: Die Parameter als Input anzugeben ist wegen der allgemeinen Verwendung und der Optimierung im Tester sinnvoll.
Die Vorgabewerte 14/50/200 sind aus der Literaur entnommen. (Dein Tradingplan, Holger Schack)
https://www.mql5.com/de/forum/233899
Linkin6Ecko Schurke: Bitte keine mehrfachposts zu gleichem Thema!
- 2018.03.31
- www.mql5.com
Seh ich das richtig, das du überprüfst ob du eine offene position hast, die schliesst du dann und wenn keine offene position da ist eröffnest du eine?
das ist ein perpetum mobile der Selbstzerstörung
Du musst dir auch klar werden ob du im hedging mode proggst oder im netting mode. Da sind noch welten dazwischen.
Ich hab mir angewöhnt alles für den hedge zu schreiben, das funkt im netting auch.
position select im hedge funktioniert so nicht, so wie du fas schreibst funkt das nur im netting, da es im netting nur eine position gibt.
im hedge must du die position auch noch selektieren
- 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 Community,
Bin neu hier deswegen stell ich mich mal vor.
Christian mein Name bin 24 Jahre alt. Beruf: Industriemechaniker.
Trading Erfahrung seit 5 Monaten. Erfahrung mit Stochastik, Bollinder Bands, MA´s RSI und Fibonacci. Leider mit dem Beruf sehr wenig zeit zum Traden.
Hier mein anliegen;
Das System soll kaufen oder verkaufen wenn die 9 MA durch die 18 MA nach oben geht kaufen [1x]. Mit TP und SL angesichert.
Anderen falls wenn die 9 MA durch die 18 nach unten geht verkaufen [1x]. Mit TP und SL angesichert.
Nun kauft er sich kaputt. Wie richtet man ein Ticket Limit ein.
Sorry aber leider wenig mit diesem System beschäftigt und auch keine Zeit mich richtig damit zu befassen.
Danke im Vorraus.