Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3824
Beiträge: 36942
Benutzer: 6.081
Aktive Benutzer: 495
Links: 80
Wir begrüßen unseren neuesten Benutzer: DarthTrader
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 8 Stunden
- DarthTrade...
vor 10 Stunden
- Eren
vor 18 Stunden
- Rene1504
vor 19 Stunden
- ibdafx
vor einem Tag
- Batangenyo

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 63
Gesamt: 64
Team: 0
Team:  
Benutzer:  fxnoob
Freunde anzeigen

Empfehlungen

Werbung

Like Tree1Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 15.04.13
Neues Mitglied
 
Registriert seit: Mar 2013
Beiträge: 13
janbuk63 befindet sich auf einem aufstrebenden Ast
Standard Bitte wer weiss wie man's macht?

Hallo!
ich habe ein EA für viel Geld gekauft aber leider der Programmierer hat das Wort nicht gehalten und mir ein nutzloses Ding gegeben.
Meine Kaufstrategie hatte gar nicht umgesetzt und das absichern der Verlustpositionen durch hedgen auch nicht.
Nach tagelangem sitzen und grübbeln ist mir gelungen das Tradenverhalten so zu verändern, dass jetzt EA richtig Kauft und Verkauft.
Es bleibt nur das hedgen richtig zu machen und dann kann ich loslegen mit dem automatisiertem Handeln.
Leider bin ich kein Programmierer und das MQL4 Buch auf english ist nur bedingt hilfreich.
Ich hoffe, dass hier im Forum jemand mir helfen kann.
Ich habe das wichtigste wie ich denke durchdacht und richtig geschrieben. Leider kann ich eine bestimmt für Programmierer einfache logische Aufgabe nicht lösen.

Es geht um folgendes:
for(pos=OrdersTotal();pos>=0;pos--) // überprüft alle Positionen ob sie auf
bestimmten Preis sitzen
{
if (OrderSelect(pos,SELECT_BY_POS) && OrderOpenPrice()== openprice_hedge)// && OrderCloseTime()==0 && Close_Hedge_Times>=0)
break; // wenn zutrifft dann soll abbrechen und weiter Nichts mehr machen.

else // wenn keine Position zutrifft erst dann wird Hedge gesetzt!!
{


MarketOrder(OP_SELL,openprice_hedge,Lot,stoplostic ksell,takeprofithedgeticksell,"Hedge_f_Buy"+pos,Sy mbol()));
Close_Hedge_Times--; // zähler

}
}

Das Problem ist, dass es alle Positionen überprüfen soll und wenn keine die Bedinung erfüllt erst dann soll die EA ein Hedge aufmachen.
Ich schaffe es nicht die Logik richtig im Code zu schreiben.
Bei mir entweder nach jeder Schleife will sie hedgen oder gar nicht.
Die soll aber komplett alle Schleifen machen und wenn Nichts passendes gefunden wird erst dann etwas unternehmen.
Wie macht man das richtig?

Grüße

janbuk
  #2 (permalink)  
Alt 15.04.13
Mitglied
 
Registriert seit: Mar 2012
Ort: Wien
Beiträge: 191
Deepack befindet sich auf einem aufstrebenden Ast
Deepack eine Nachricht über Skype™ schicken
Standard

so wie du es hier umsetzt kann es nicht funktionieren
da du eine Position prüfst und wenn sie die anforderungen nicht erfüllt
kommt "else"

nud das wird mit jeder position gemacht

den else- teil müsstest du erst nach der Forschleife starten
wenn keine position die bedingungen erfüllt

Code:
//Pseudocode


bool irgendeineVariable = false;

for(pos=OrdersTotal();pos>=0;pos--) // überprüft alle Positionen ob sie auf 
bestimmten Preis sitzen
{ 

if (OrderSelect(pos,SELECT_BY_POS) && OrderOpenPrice()== openprice_hedge)// && OrderCloseTime()==0 && Close_Hedge_Times>=0) 
//break; // wenn zutrifft dann soll abbrechen und weiter Nichts mehr machen. 
irgendeineVariable = true; // also
continue;

}


if (irgendeineVariable == false)  // wenn keine Position zutrifft erst dann wird Hedge gesetzt!!
{ 


MarketOrder(OP_SELL,openprice_hedge,Lot,stoplostic ksell,takeprofithedgeticksell,"Hedge_f_Buy"+pos,Sy mbol())); 
Close_Hedge_Times--; // zähler 

}
so müsste die logik zumindest ansatzweise richtig sein
ich habs nicht getestet
du musst sicher nochwas anpassen
lg
  #3 (permalink)  
Alt 15.04.13
Neues Mitglied
 
Registriert seit: Mar 2013
Beiträge: 13
janbuk63 befindet sich auf einem aufstrebenden Ast
Standard

vielen Dank!
so werde ich es probierren!
jetzt ist das Programm ganz unbrauchbar geworden, ich habe wohl zu viel ausprobiert!
Ich muss jetzt ein Schritt zurückgehen und dann probiere ich Deine Version, erstmal Danke!
Gruß
janbuk
  #4 (permalink)  
Alt 15.04.13
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

So wird es jetzt richtig funktionieren!

Code:
//Pseudocode


bool irgendeineVariable = false;

for(pos=OrdersTotal();pos>=0;pos--) // überprüft alle Positionen ob sie auf 
bestimmten Preis sitzen
{ 


if (OrderSelect(pos,SELECT_BY_POS) && OrderOpenPrice()== openprice_hedge
   {
       irgendeineVariable = true;
       break;
    }
}


if (irgendeineVariable == false)  // wenn keine Position zutrifft erst dann wird Hedge gesetzt!!
{ 


MarketOrder(OP_SELL,openprice_hedge,Lot,stoplostic ksell,takeprofithedgeticksell,"Hedge_f_Buy"+pos,Sy mbol())); 
Close_Hedge_Times--; // zähler 

}
traderdoc
  #5 (permalink)  
Alt 15.04.13
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Da ich mein Post nicht korrigieren kann, dann auf diese Weise.

Hinter openprice_hedge fehlt die Klammer )

traderdoc
  #6 (permalink)  
Alt 15.04.13
Neues Mitglied
 
Registriert seit: Mar 2013
Beiträge: 13
janbuk63 befindet sich auf einem aufstrebenden Ast
Standard

Danke!
wie gesagt ich muss das Programm zu ürsprünglichen Punkt zurückführen, weil mein test EA " verrückt geworden ist". Jetzt macht etwas ganz komisches. Eröffnet mehr als 130 sell Positionen, schreibt Alerts aus diesen Zeilen die ich mit // deaktiviert habe, für eine bestehende Position gibt OrderOpenPrice()=0,
OrderMagicNumber()=0 !!
Alles so schöne Dinge!
Jetzt geht gar nichts mehr.
Ich gehe zurück zu Version wo noch alles funktionierte und dann schneide ich Schritt für Schritt alles weg was unbrauchbar war und erst dann kann ich Eure Ratschläge anwenden.
Danke erst mal!
Gruß
janbuk
  #7 (permalink)  
Alt 15.04.13
Mitglied
 
Registriert seit: Mar 2012
Ort: Wien
Beiträge: 191
Deepack befindet sich auf einem aufstrebenden Ast
Deepack eine Nachricht über Skype™ schicken
Standard

wo ist denn der unterschied zwischen break und continue?
  #8 (permalink)  
Alt 15.04.13
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Also erstmal hatte ich die if-Abfrage aufgeräumt.

Aber nun zu Deiner Frage:
Wenn es keinen Unterschied gäbe, würde es nicht zwei verschiedene Schlüsselwörter geben.
Das continue in Deinem Code hättest Du auch getrost weglassen können, denn die for-Schleife arbeitet bis zum letzten Element alles ab, ob da Dein continue steht oder nicht. Warum? Na weil das continue am Ende der for-Schleife steht, an der sowieso das nächste Element genommen wird. Sinn macht continue nur, wenn es weiter oben in der for-Schleife steht, dann nämlich wird der Rest der for-Schleife nicht! durchlaufen und sofort das nächste Element genommen.
Das break wiederum an dieser meiner Stelle bewirkt einen Abbruch! der for-Schleife, wenn die if-Abfrage auch nur einmal true ergibt, denn dann wurde Deine Variable irgendeineVariable = true; gesetzt und egal was, die restlichen Elemente der for-Schleife noch ergeben hätten, es bleibt bei irgendeineVariable = true, und es wird keine Hedgeorder gesetzt.
So kann man auch die Zei-Performance des EAs steigern.

Ich vermute mal, dass Du davon ausgegangen bist, dass nach continue die Schleife verlassen wird, dem ist aber überhaupt nicht so!

traderdoc
Deepack likes this.
  #9 (permalink)  
Alt 16.04.13
Neues Mitglied
 
Registriert seit: Mar 2013
Beiträge: 13
janbuk63 befindet sich auf einem aufstrebenden Ast
Standard

Hi!
uff, die EA laüft wieder, und das was kaputt war ist echt komisch. Eine Variable die nach eine Formel berechnet wird zeigte unverständlicherweise immer 0 Wert da obwohl alles korrekt geschrieben war. Da habe ich die Zeile gelöscht und nochmal geschrieben und siehe da, jetzt zeigt sie den normalen Wert an.

@traderdoc
Danke für die Erklärung zwischen continue und break! In MQL4 Book und noch eine in polnische Sprache wird es nur sehr formell angeganngen und in der Praxis macht man dann Fehler. Jetzt habe ich es so wie angezeigt geschrieben und es wäre bestimmt gut. Ich schreibe "wäre", weil es hat sich gezeigt,dass so wie ich es wollte klappt es nicht.

Ich wollte so vorgehen:
1. Überprüfen alle Offenen Positionen ob sie in Verlust sind.(mit eine for Schleife)
2. Wenn was gefunden wurde den OrderOpenPrice benutzen und fürs hedgen ein Punkt feststellen zB. 30 Pips in Verlustrichtung.
3. Überprüfen mit weiterer for Schleife alle Positionen auf OpenPrice ob sie nicht schon auf den zuvorermittelten Hedgepunkt "sitzen" und somit schon ein Hedge da ist, wenn Nichts gefunden wurde dann Hedgen (das ist das Teil wo ich diesen Schalter Hedgen=true oder false, dank Dir benutze! )

Leider das funktionirt nicht richtig! Ich habe die Order mit MarketOrder gesetzt und das ist keine genaue Methode. Wegen Slippage wird niemals der Hedgepunkt genau getroffen und dann bei späteren überprüfen Punkt.2 wird kein Hedge gefunden obwohl schon eine da ist und wird erneut gehedgt und das -zig mal hintereinander. Da sehe ich auf dem Chart eine schöne rote Wolke aus sell Pfeilen

Vielleicht könnte man diese Ungenauigkeit beim setzten mit Pendingorder lösen aber weil ich noch ein Zähler (Close_Hedge_Time) habe und der muss ja für alle Hedges einzeln geführt werden habe ich mir was anderes überlegt.

Neuer Ansatz:
1.Ich lege eine Tabelle an, ein Array mit 2 Zeilen. Die 0 Zeile mit sagen wir 50 Positionen und die 1 Zeile mit natürlich auch 50 Plätzen also HedgenPos[50,2]. In der 0 Zeile werden die MagicNumber von allen in Verlust gelaufenen Positionen abgespeichert und in 1 Zeile die Zählerstände für einzelne Hedgepositionen. Die Tabelle mus vor Init Teil stehen damit es beim nächsten Durchlauf die Werte noch da sind.
2.Überprüfen alle Positionen genau wie oben Punkt1. aber wenn was gefunden wird soll die OrderMagicNumber in die Tabelle rein!
3.Überprüfen alle Positionen wie oben Punkt.2 aber mit Hilfe von Tabelle. Wenn die MagicNumber gefunden wird das heißt: Hedge ist schon da Hedgen=true und break, wenn nicht Hedgen setzen und Zähler dekrementieren, runter um 1.
Die Order würde ich dann lieber mit Pendingorder setzen allerdings weiss ich nicht ob ein StopLoss = 5 Pips -als Beispiel- akzeptiert wird?

was denkt Ihr? Lege ich da richtig oder macher ich wieder Denkfehler?
Wie gesgt ich bin kein Programmierer und muss ich alles bei der "Arbeit" lernen. Ich weiss nicht mal wie man die Arrays initialisiert, versuche schon seit Stunden und immer kommeen Fehler: Klammer zu viel, keine Klammer, unexpected token ...
Gruß
janbuk
  #10 (permalink)  
Alt 16.04.13
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Also, mein gutster @janbuk63, was Du jetzt beschrieben hast, kann ja mir dem Codeschnipsel von uns nicht gehen.
Wenn ich das, was Du jetzt beschrieben hast, coden würde, abgesehen davon, ob das von der Ablauflogik her rein ist, nimmt die Arbeit eine Dimension an, die bei mir dann unter Honorarpflichtigkeit läuft.
Denn das kann man nicht mal so schnell zwischen Aufstehen und Frühstück erledigen.

Mich brauchst Du jetzt aber auch nicht zu beauftragen, da ich z.Z. mit Aufträgen ausgelastet bin. Trotzdem kann der eine oder andere immer mal wieder per PN anfragen, wenn es was zu coden gibt.

Ich wünsche Dir noch viel Erfolg bei der Umsetzung Deiner Ideen.

VG

traderdoc
Thema geschlossen

Lesezeichen

Stichworte
ea, expert advisor, hedgen, mql4, programmierung, programmierung metatrader


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr.



Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2017 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------