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)
-   -   Bei mehreren gleichzeitig geöffneten Long- und Shortorder einen Teilverkauf vornehmen (http://www.expert-advisor.com/forum/showthread.php?t=5142)

Hasenfuss 30.08.16 05:27

Bei mehreren gleichzeitig geöffneten Long- und Shortorder einen Teilverkauf vornehmen
 
Hallo Superprogrammierer,

ich hätte da mal ein Problem. So fangen vermutlich hier die meisten Sätze an!

Ich würde gerne meinen EA um eine Funktion erweitern. Es werden mehrere Orders eröffnet:

1. Order Long 1 Lot
2. Order Short 2 Lot
3. Order Long 3 Lot
4. Order Short 6 Lot

Gesamtgröße Long = 4 Lot
Gesamtgröße Short = 8 Lot

Überhang Short = 4 Lot

Der Überhang auf der Shortseite sorgt dafür, dass alle Verluste irgendwann ausgeglichen sind, wenn der Kurs fällt. Bin ich im Gewinn, dann möchte ich die schlechten Longorders loswerden. Einfach verkaufen geht nicht, weil dann die Positionsgröße auf der Shortseite zu groß wird. Ich müsste also 4 Lot Long loswerden und 4 Lot Short. Aber ich habe keine 4 Lot Short.

Ok, ein Teilverkauf könnte das Problem lösen, aber weil meine Wünsche mal wieder größer sind, als mein Gehirn und meine Programmierkünste, wird die Sache nicht ganz so einfach. Als erstes möchte ich die Shortorder loswerden, die den geringsten Abstand zum aktuellen Kurs hat und erst wenn diese nicht groß genug ist, dann soll die nächste Order verkauft (oder teilverkauft) werden. usw., usw.... bis nur noch der Überhang übrig bleibt.

Jetzt kämpfe ich schon ein paar Wochen mit dem Problem und komme auf keine Lösung. Vermutlich geht das nur mit einem Array und davon habe ich null Ahnung. Ich weiß nicht, wie man ein Array befüllt und die Daten wieder auslesen kann. Auf den Englischen Hilfeseiten komme ich nicht weiter. Kann mir jemand erklären, wie man so ein Array erstellt und wieder auslesen kann und wie man so eine Programmierung aufbauen muss? Ich sage schon mal DANKE für eure Hilfe!

traderdoc 30.08.16 09:26

Kann dieses einfache Problem etwa kein EA-Builder lösen?

traderdoc

MA-EA 30.08.16 10:13

Zitat:

Zitat von Hasenfuss (Beitrag 35575)
Ich würde gerne meinen EA um eine Funktion erweitern. Es werden mehrere Orders eröffnet:

1. Order Long 1 Lot
2. Order Short 2 Lot
3. Order Long 3 Lot
4. Order Short 6 Lot

Gesamtgröße Long = 4 Lot
Gesamtgröße Short = 8 Lot

Überhang Short = 4 Lot

Der Überhang auf der Shortseite sorgt dafür, dass alle Verluste irgendwann ausgeglichen sind, wenn der Kurs fällt. Bin ich im Gewinn, dann möchte ich die schlechten Longorders loswerden. Einfach verkaufen geht nicht, weil dann die Positionsgröße auf der Shortseite zu groß wird. Ich müsste also 4 Lot Long loswerden und 4 Lot Short. Aber ich habe keine 4 Lot Short.

Ok, ein Teilverkauf könnte das Problem lösen, aber weil meine Wünsche mal wieder größer sind, als mein Gehirn und meine Programmierkünste, wird die Sache nicht ganz so einfach. Als erstes möchte ich die Shortorder loswerden, die den geringsten Abstand zum aktuellen Kurs hat und erst wenn diese nicht groß genug ist, dann soll die nächste Order verkauft (oder teilverkauft) werden. usw., usw.... bis nur noch der Überhang übrig bleibt.

Also willst Du letztendlich mit den Longs Gewinn machen? Und wenns nach unten geht, mit den Shorts die Verluste ausgleichen? Und nach welchen Kriterien sollen überhaupt Orders geöffnet werden?

Hasenfuss 30.08.16 11:51

das sollte doch nur ein Beispiel sein. Was hat jetzt die Eröffnung der Orders mit dem Verkauf von eröffneten Orders zu tun?

@Traderdoc
Hier sind die Grenzen von EATree auf jeden Fall erreicht. In dem Programm lassen sich nur eine Long- und eine Shortorder gleichzeitig eröffnen.

traderdoc 30.08.16 12:39

Zitat:

Zitat von Hasenfuss (Beitrag 35586)
@Traderdoc
Hier sind die Grenzen von EATree auf jeden Fall erreicht. In dem Programm lassen sich nur eine Long- und eine Shortorder gleichzeitig eröffnen.

Ja, davon rede ich doch die ganze Zeit, dass schon bei einfachsten Aufgabenstellungen die Builder versagen.

Was man "gut" mit den Builders realisieren kann - irgendwelche scheinbar sinnvollen Kreuzungen allermöglichen Indikatoren mir dem aktuellen Preis oder dem der letzten geschlossenen Kerze.

Lernt das Programmieren!!

traderdoc

Hasenfuss 30.08.16 12:50

Ich versuche seit 2 Jahren das Programmieren zu lernen. Wenn das Ganze nur nicht so einfach wäre ;)

Aber jetzt mal im Ernst. Gib mir doch lieber mal einen Tipp, wie man mein Programmproblem lösen könnte, als über Sinn und Unsinn von EA-Builder uns auszutauschen.

So werde ich nie Programmieren lernen und für immer dumm und unwissend bleiben. Da lerne ich nichts dazu. Wie befülle ich ein Array und kann dann die Daten wieder abrufen?

Du programmierst doch auch im Auftrag. Was würde sowas kosten?

traderdoc 30.08.16 13:07

int MeinArray[10];
...
int x = 0;
if (int i = 0; i<=9; i++) {
MeinArray[i] = x * 2;
x++;
}

Und wenn dann über das Auslesen:
if (int i = 0; i<=9; i++) {
Print("i: ", MeinArray[i]);
}

der Reihe nach die Zahlen
0
2
4
6
8
10
12
14
16
18

erscheinen, dann hast Du alles richtig gemacht.
Aber auch hier gilt, Beispiele anschauen, die selber ausprobieren, mal eine Veränderung programmieren und schauen, was sich tut und weitere Beispiele studieren!

traderdoc

Hasenfuss 30.08.16 14:00

Danke Traderdoc!

kann man auch mehrere Werte gleichzeitig in einem Array speichern? Ich bräuchte zumindest Positionsgröße und Eröffnungskurs.

Könnte man auch schreiben:

MeinArray[i] = x * 2, y +1;

Wie gebe ich dann die Werte wieder aus?

Print("i von x: ", MeinArray[i]);????
Print("i von y: ", MeinArray[i]);???? wie kann x und y unterschieden werden?

Bei der Ausgabe hätte ich keine Idee, wie das mit 2 Werten gehen soll???

Macht man dann einfach 2 Array? Eins für Kurs und eins für Lotgröße. Aber wie bekomme ich dann die Orders wieder richtig zueinander geordnet?

Programmieren lernen besteht nur aus Millionen von Fragen!

traderdoc 30.08.16 14:32

double MeinArray[10][2];
...
if (int i = 0; i<=9; i++) {
MeinArray[i][0] = Positionsgröße;
MeinArray[i][1] = Eröffnungskurs;
}

traderdoc


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:41 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