Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Hilfe bei einer Programmierung (http://www.expert-advisor.com/forum/showthread.php?t=4876)

Ginto 08.04.16 18:02

Hilfe bei einer Programmierung
 
Liste der Anhänge anzeigen (Anzahl: 2)
Halli Hallo liebe Tradercommunity,

ich bin ein blutiger Anfänger was das Programmieren von EA's angeht. Dennoch bin ich fastziniert von dem Prinzip des automatisierten Handeln's da es so ohne jegliche Emotionen stattfindet. Kurz gesagt ich habe Blut geleckt. :D

Ich beschäftige mich damit aber erst seit ein paar Wochen und weiss, dass ich davon noch keine Ahnung habe. Ich taste mich an das Thema Trading seit etwa 3 Monaten heran und da ich durch meinen Beruf wenig Zeit habe vor dem PC zu sitzen und mir die Charts anzuschauen, glaube ich fest an die Vorstellung, dass mein PC das auch gut ohne mich hinbekommt :D

Nun werden sicher Viele die Hände über den Kopf zusammenschlagen und denken "was für ein Idiot, der kann doch nicht ernsthaft davon ausgehen, dass ein PC bessere Entscheidungen treffen kann als ein erfahrener Trader etc". Das kann ich nur schwer beurteilen. Mir fehlt die Erfahrung und da ich mich vorerst auch nur an Demokonten versuche, gehe ich hierbei aber auch kein Risiko ein :D. Mein PC und der Metatrader haben also die Macht und die Kontrolle über mein gesammtes Monopoly Geld, dass ich hierfür zur Verfügung habe :D

Soviel zu mir und nun zu meinen Fragen:

Mein aus Codefetzen bestehender EA, den ich mit meinem wenigen Verständnis aus verschiedenen einfachen EA's zusammengefummelt habe, macht nur bedingt das was ich möchte.

Meine Strategie:

Der EA soll bei einem Wechsel von einem Roten Balken zu einem Grünen eine Long Order eröffnen. Er zieht den Stop selbsttändig nach (bei mir sind das 5 Pips). Sobald der Kurs dann wieder von einem Grünen zu einem Roten Balken wechselt möchte ich, dass der EA eine Sell Order eröffnet ohne die Longorder zu schliessen (auf dem Demokonto was ich nutze ist das ohne Problem möglich). Der EA soll nun die Stops in beide Richtungen nachziehen und maximal jeweils eine Longorder und eine Short Order offen haben. Bisschen Hedging-mäßig. Läuft der Kurs durch einen Stop (egal ob Trailing oder StopLoss) soll erst wieder eine Order geöffnet werden wenn ein jeweiliges Signal vorliegt. Also wird eine Longorder durch einen Stop geschlossen soll der EA erst eine Long Order eröffnen wenn dafür ein Signal vorliegt.

Ob die Strategie nun sinnvoll ist oder nicht ist hierbei für mich uninteressant und darüber möchte ich hier an dieser Stelle auch nicht diskutieren. Es geht mir in diesem Beitrag ausschliesslich um eine Lösung für meine Probleme bei der Programmierung. Danke für euer Verständnis.

Mein kleines Monster macht im Großen und ganzen auch was er soll aber ich habe noch kleine Probleme mit großer Wirkung:

Hierzu findet ihr ein Bild als Anhang.

Problem 1

Der EA öffnet direkt nachdem er auf das Chart plaziert wurde 2 Positionen. 1 x Long und 1 x Short. Das stört mich, da er vorher prüfen soll ob überhaupt ein Handelssignal vorliegt. Ich verwende Renko Charts und für die Signalerstellung einfach 2 Gleitende Durchschnitte. Ein Brick ist 1 Pip groß.
Im Bild an der Stelle wo die 1 steht hat der EA die Order eröffnet.

MA 1 stellt 2 Perioden dar und der zweite MA eine Periode. So findet nach jedem Wechsel von grün auf rot und umgekehrt eine Kreutzung der MA's statt und es werden entsprechende Signale an den EA übermittelt.

Problem 2

Der EA öffnet maximal 2 Positionen (eine Long und eine Short Position). Leider öffnet er sofort nachdem eine der beiden Orders duch einen Stop gelaufen ist sofort eine in die Richtung die ausgestoppt wurde. Hierzu im Bild ist die Stelle mit einer 2 markiert. Das war in diesem Fall zwar gut aber wenn der Kurs so wie bei Nummer 3 oder 7 weiter gelaufen ist dann hat man zwangsläufig zu viele Trades die durch den StopLoss laufen. Ich möchte das der EA also erst wieder eine neue Short oder Long Position eröffnet wenn er dafür ein Signal durch die MA's bekommt.

Ich hab hier mal den Code als Textdatei angehangen, bitte schaut doch mal rüber und sagt mir was ich hier ändern müsste damit diese beiden Probleme nicht mehr auftreten.
Da ich leider noch nicht so den Überblick habe wie ihr habe ich den Code etwas einsteigerfreundlich gestaltet, so finde ich mich einfach schneller im Code zurecht. Wenn Ihr also Änderungen vorschlagt dann sagt mir bitte auch an welcher Stelle da ich wirklich keine MQL Kenntnisse habe.

Ich nutze für die Handelssignale bisher nur die Gleitenden Durchschnitte. Ich habe zwar noch eine Stochastik und einen externen Indikator mit eingefügt, die beiden sollen hierbei aber keine Rolle spielen fürs erste.

Ich bedanke mich im Voraus für eure Bemühungen und eure Nachsicht.

Liebe Grüße
Ginto aka Chrischi

MA-EA 08.04.16 21:07

1 und 2 sind für MAs vermutlich zu aggressiv. Versuch mal nicht kleiner
als 3 und 6.

Ginto 08.04.16 21:42

Liste der Anhänge anzeigen (Anzahl: 1)
Ich glaub das das Problem mit dem Order Management zu tun hat, ich verstehe nur nicht wie ich dem EA mitteilen kann das er nach dem SL oder TP erst wieder eine Order öffnet wenn er durch die MA's ein Signal bekommt. Beim Renko Chart ist das deutlich und ohne großes rummeiern :D.

Steigt der Kurs und mein Shorttrade wird ausgestoppt muss der EA warten bis er ein Signal bekommt und kann nicht direkt nach dem ausstoppen eine neue Short Order erstellen, er bekommt ja in dem Moment kein Short Signal. Und genau da liegt mein Problem, der EA möchte immer eine Long und eine Short Position aufhaben, das ist ja auch das Ziel aber der Einstiegspunkt sollte ja durch die Signale zu Stande kommen und nicht bei jedem SL oder TP.

Ich hoffe ich drücke mich verständlich genug aus. :confused:

Ich hab den Code nocheinmal etwas angepasst da ich kleinere Änderungen vorgenommen habe (Stoch und den externen Indikator entfernt + SL und TP Einstellungen).

MA-EA 08.04.16 22:22

Zitat:

Zitat von Ginto (Beitrag 34110)
Ich glaub das das Problem mit dem Order Management zu tun hat, ich verstehe nur nicht wie ich dem EA mitteilen kann das er nach dem SL oder TP erst wieder eine Order öffnet wenn er durch die MA's ein Signal bekommt. Beim Renko Chart ist das deutlich und ohne großes rummeiern :D.

Steigt der Kurs und mein Shorttrade wird ausgestoppt muss der EA warten bis er ein Signal bekommt und kann nicht direkt nach dem ausstoppen eine neue Short Order erstellen, er bekommt ja in dem Moment kein Short Signal. Und genau da liegt mein Problem, der EA möchte immer eine Long und eine Short Position aufhaben, das ist ja auch das Ziel aber der Einstiegspunkt sollte ja durch die Signale zu Stande kommen und nicht bei jedem SL oder TP.

Dann musst Du vielleicht den Last Close oder so einbeziehen. Nur öffnen lassen, wenn auch der über/unter beiden GDs ist.

Z.B.
Buy if (LastClose>kleiner MA && kleiner MA>großer MA)
Oder den Open oder High oder Low. Allerdings hatte ich mit denen keine guten Erfahrungen gemacht. Vielleicht hab ich auch irgendwas falsch gemacht.

Oder vielleicht irgendwie den Kurs vergleichen. Nur öffnen lassen, wenn Kurs <> Sl/TP Marke ist.

Ginto 08.04.16 22:53

Ich dachte das wäre hier geregelt:

if(MAkurz>MAlang && MAkurzVorperiode<=MAlangVorperiode)
{
LongSignal = true;

}
else LongSignal = false;

if(MAkurz<MAlang && MAkurzVorperiode>=MAlangVorperiode)
{
ShortSignal = true;

}
else ShortSignal = false;

}
else
{
LongSignal = false;
ShortSignal = false;
}

if(LongSignal == true)
{
Hier Stand ein Code der die offenen Short Positionen geschlossen hat sobald eine Long Position geöffnet wurde. Diesen Code hab ich rausgenommen.
}

while(LongOrder<=0)
{
LongOrder = OrderSend(Symbol(),OP_BUY,HandelsLots,Ask,10,0,0," Ginto LONG",LongNummer,0,Green);
}

if(ShortSignal == true)
{
Hier Stand ein Code der die offenen Long Positionen geschlossen hat sobald eine Short Position geöffnet wurde. Diesen Code hab ich rausgenommen.
}

while(ShortOrder<=0)
{
ShortOrder = OrderSend(Symbol(),OP_SELL,HandelsLots,Bid,10,0,0, "Ginto SHORT",ShortNummer,0,Red);
}

MA-EA 08.04.16 23:10

Zitat:

Zitat von Ginto (Beitrag 34112)
Ich dachte das wäre hier geregelt:

if(LastClose>MAkurz && MAkurz>MAlang)
{
LongSignal = true;

}
else LongSignal = false;

if(LastClose<MAkurz && MAkurz<MAlang)
{
ShortSignal = true;

}
else ShortSignal = false;

Hab bloß mal kurz überflogen.

Je nach Richtung noch einfügen, dass der LC </> SL-Wert sein muss. Welchen man allerdings bei jeder Order wieder neu vergeben muss. :confused:

Ist schon spät und ich hab Kopfschmerzen. :(

Ginto 08.04.16 23:58

würde das mit den Signalen statt mit der MA auch hiemit gehen? Wie gesagt verwende ich Renko Charts:

Long:
(Close[2] < Open[2]) && (Close[1] > Open[1]))

Short:
(Close[2] > Open[2]) && (Close[1] > Open[1]))

Ist schwierig da was im Netz zu finden da das auch nicht bei jedem Broker geht bzw nicht überall erlaubt ist.

Danke aber für deine Hilfe :D

MA-EA 09.04.16 12:37

Versteh nix von Renko. Weiß nicht, ob EAs mit dem umgehen können. Bzw. müsste man vielleicht extra einen für Renko programmieren.

TogoTiger 09.04.16 16:41

Dein Longsignal von den EMAs kann immer noch true sein, wenn deine Position durch einen StopLoss geschlossen wird. Dann erstellt der EA sofort wieder einen Auftrag. Wenn du das logischerweise nicht willst, musst du noch was einbauen, z.B. erst bei der nächsten Kerze, oder wenn der Kurs wieder höher ist als der letzte Close oder Mindestabstand zum letzten Close oder irgend sowas.
Das Problem hast du immer, wenn du StopLoss verwendest (oder Trailing Stops). Wenn diese Stops ausgelöst werden (beim Broker, nicht in deinem EA) ändert das nicht deine Signale.

Ginto 09.04.16 17:07

Liste der Anhänge anzeigen (Anzahl: 2)
Ich hab mich da wohl noch nicht klar genug ausgedrückt:

Beispiel LONG:
EA öffnet LONG Position, Kurs steigt. Kurs steigt um etwa 10 Pips. Mein Trailing Stop zieht um 5 Pips nach. Nun fäällt der Kurs wieder und die Long Position läuft durch den Trailing Stop. Damit hab ich 5 Pips Gewinn. Nun müsste der EA eigentlich auf das nächste LONG Signal warten das er durch die MA's erst bekommt wenn der Kurs wieder steigen würde. Da der Kurs weiter fällt liegt ein entsprechendes Signal nicht vor. Und genau das ist mein Problem.
Ich poste hier mal ein Bild. So sollte das der EA sehen wenn er nur Signale von den Moving Averages bekommt. Das ist das tolle beim Renko, da ist das immer sehr eindeutig.

TogoTiger 09.04.16 17:29

Verwendest du MT4? Für den MT5 hätte ich keine Ahnung.
Wenn du also MT4 verwendest, dann kann der doch eigentlich von Haus aus keine Renko-Charts, also hast du einen Custom-Indikator installiert. Bist du sicher, dass die Funktion iMA(...) nicht mit den Originalkerzen (1M-Kerzen) arbeitet. Ein CustomIndikator bewirkt doch nur eine Anzeige, keine Aenderung der Kerzen. Was hast du installiert für deine Renko? Bist du sicher, dass die ganzen Mt4-Funktionen mit den RenkoBriks arbeiten?
Bin aber nicht so sicher, ob das stimmt, was ich hier schreibe. Mach doch einfach mal Prints in dein Programm und lass dir die EMAlang und EMAkurz anzeigen oder/und Close(0), Open(0), High(0), Low(0) dann weisst du was Sache ist.

TogoTiger 09.04.16 17:36

Ich glaube immer noch, du machst einen Denkfehler. Warum soll dein EMA auch fallen, wenn der Kurs um 10 Pips zurückgeht? Dein Stoploss wird ausgelöst, EMASignal ist immer noch Long -> also wird sofort eine neue LongPosi eröffnet.
Mach Prints in dein Programm und schau das Journal an.

Ginto 09.04.16 17:51

Liste der Anhänge anzeigen (Anzahl: 2)
Ich hatte den vorher so eingestellt das er nach jedem Wechsel von rot auf grün eine Long Order geöffnet hat und die bestehende Short Order geschlossen hat und umgekehrt hat er nach dem wechsel von grün auf rot die Long Order geschlossen und eine Short Order geöffnet. Das funktioniert in volativen Marktphasen wo der Kurs mehr als 5 Pips in jede Richtung macht ganz ausgezeichnet und man holt das maximum an Pips raus aber wenn der nur 1,2 oder 3 Pips in eine Richtung macht und dann wieder 2 Pips nach unten dreht und dann wieder 2 Pips steigt macht man auf Grund der Kommi oder wegen dem Spread Verlust. Ganz besonders schlimm ist es wenn der Kurs flattert und immer 1 Pip hoch und wieder ein Pip runter. Dann sind die Verluste riesig.

Beispiel:

1 Lot Position = 10 € Kommi

Kurs bewegt sich um eine entsprechende Anzahl an Pips in eine Richtung und wechselt dann die Richtung.

1 Pip = -30€ Verlust (20€ durch die Orderschliessung + Kommi)
2 Pip = -20€ Verlust (10€ durch Orderschließung + Kommi)
3 Pip = -10€ ...
4 Pip = +/- 0€
5 Pip = +10€ Gewinn

Durch eine Seitwärtsbewegung oder kleinen Kursschwankungen bei einer Kursbewegung von weniger als 4 Pip ist man da wahnsinnig schnell sein Geld los.

Wird die Posi durch den Trailing stop geschloss hat der Kurs gut 5 Pips Platz um sich zu bewegen. Damit wird man auch Verluste machen und es werden Order plaziert die durch den SL laufen aber man nimmt größere Bewegungen auch trotz Gegenbewegungen mit.

Hierzu ein weiteres Bild um das zu veranschaulichen.

Ja ich arbeite mit dem MT4 und ja das mit den Renkocharts funktioniert ganz ausgezeichnet. Hier der Renko Chart Indikator. Der Arbeitet mit offline Charts und funktioniert super, ich stelle die Brickgröße auf 1 Pip, damit hab ich bei Forex die besten Erfahrungen gemacht.

TogoTiger 09.04.16 18:10

Ich habe bisher nicht mit Renko Charts gearbeitet, aber wenn ich Onkel Google frage, wird empfohlen, dass man zusätzlich einen Trendindikator verwenden soll.
Es ist immer schwierig, in einem Seitwärtstrend automatisch zu handeln. Meine EA's machen nur Gewinn, wenn ein klarer Trend ersichtlich ist. Die Frage ist nun, wie erkennt man den Wechsel von Seitwärts zu Trend, und zwar ohne dass der Trend schon weit fortgeschritten ist, dann sag mir das bitte. Diese Erkenntnis würde auch für 2 Millionäre reichen :)

Ginto 09.04.16 18:21

hehe naja das mit den Indikatoren ist immer so eine Sache, wirklich verlässliche Infos wirst du da nie bekommen. Ich kann dir Renko Charts wirklich sehr empfehlen, die sind halt zeitunabhängig und geben dir nur die Richtung an egal wie langsam oder schnell. Damit kann man Trendbewegungen gut identifizieren. Nun muss mien EA nur noch das machen was ich von ihm verlange dann kann ich den endlich mal testen. Das ist das Problem bei Renko...Backtesting ist nicht so einfach, bzw hab ich es noch nicht hinbekommen :(

MA-EA 09.04.16 18:50

Schätze, er kann nicht direkt mit Renkos arbeiten. Aber vielleicht funktioniert ne Median Price/MA Kombi.

Statt Renkos oder so einfach im EA den Median benutzen.

https://www.mql5.com/de/code/10784

Ginto 10.04.16 03:07

kurze Frage:

Ich bekomme beim compiler immer die Meldung das ErrorDescription nicht definiert ist.

Code

....
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == 38)
{
exists = true;
}
}
else
{
Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
}
...

Als was sollte ich den definieren ? int ? double? in dem Originalcode ist der nicht definiert und der kompiler gibt mir da keinen Fehler aus :confused:

traderdoc 10.04.16 07:36

Am Anfang des Programms

#include <stderror.mqh>
#include <stdlib.mqh>

einfügen.

traderdoc

TogoTiger 10.04.16 11:04

Wenn du nicht im Strategietester testen kannst ist das immer ein Problem. Das wird schwierig, nach Fehlern zu suchen.
Der MT4 kann definitiv nicht direkt mit Renkocharts arbeiten, aber du kannst die doch einfach selbst berechnen. Dann siehst die zwar nicht, aber dein EA arbeitet damit und du kannst im Strategietester Fehler suchen.
Die Berechnung der Renkocharts ist ja nun keine Hexerei:

Renko Charts in der Praxis - Tradesignal Online

Ginto 10.04.16 12:26

Zitat:

Zitat von traderdoc (Beitrag 34128)
Am Anfang des Programms

#include <stderror.mqh>
#include <stdlib.mqh>

einfügen.

traderdoc

Danke traderdoc, nu läuft das ohne Fehler an der Stelle.

@TogoTiger

ich hab ja auch keine Probleme bei der Chart erstellung sondern nur beim Backtesting, das geht wohl beim MT4 nur mit zusätzlicher Software wie zum Beispiel Tick Data Suite. Dennoch tue ich mich schwer damit das Backtesting Chart auch in Renkos darzustellen da das mit dem Indikator den ich dafür verwende nur auf Offline Charts geht. Ich habe bereits verschiedene Lösungsansätze verfolgt. Diese waren jedoch meist nur auf Englisch und da werd ich sicher den einen oder anderen Fehler durch die Übersetzung gemacht haben :( Da ich jedoch noch nichtmal 99% bei der Tickqualität im Backtest hinbekomme ist das mit dem Backtesting auch noch nicht so wichtig für mich, ermal soll der EA so handeln wie ich das mit meiner Strategie auch machen würde. So lange wie das nicht funktioniert sind Backtest's eh für den Hintern :D

Ich danke euch auf jeden Fall bis hier hin schon mal für eure Hilfe und die Zeit die Ihr mit der Beantwortung meiner Fragen investiert habt :D 1000 Dank!!!


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:05 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum