Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4
Startseite Registrieren Hilfe Community Kalender Heutige Beiträge Suchen

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4978
Beiträge: 44257
Benutzer: 7.224
Aktive Benutzer: 74
Links: 84
Wir begrüßen unseren neuesten Benutzer: Sundaytrader
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 14 Stunden
- Sundaytrad...
vor 21 Stunden
- TS_6
vor 2 Tagen
- Mane
vor 2 Wochen
- AlbertZiz
vor 2 Wochen
- michak

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 379
Gesamt: 379
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 19.03.20
Gesperrter Benutzer
 
Registriert seit: Aug 2017
Beiträge: 16
fintrad0 befindet sich auf einem aufstrebenden Ast
Standard High/Low NACH OrderOpenTime

Hallo,
kann mir jemand sagen, wie ich das High/Low NACH der Ordereröffnung ermitteln kann?
Das High/Low der laufenden Kerze kann genauso gut vor der Ordereröffnung gewesen sein, deswegen hilft mir das Beispiel aus der Hilfe nicht weiter.

Zitat:
BarsAfterOpen=iBarShift(symbol,PERIOD_M1,OrderOpen Time(),false);

PeriodHighest = iHigh(symbol,PERIOD_M1,iHighest(symbol,PERIOD_M1,M ODE_HIGH,BarsAfterOpen,0));
Beispiel:
Tmeframe M1
BarOpenTime: 10:27:00
OrderOpenTime: 10:27:32
High: 1,08500 vor oder nach OrderOpenTime?
Low: 1,08400 vor oder nach OrderOpenTime?

Es reicht also nicht, den Index der Kerze zu erhalten, in dem die Order eröffnet wurde.
Im Moment bin ich planlos. Meine spontane Idee wäre, die Uhrzeit des High/Low der laufenden Kerze festzustellen und diese mit der OrderOpenTime zu vergleichen. Nur, keine Ahnung, wie.

Es wäre super, wenn hier jemand eine Idee oder Lösung parat hätte.

Vielen Danke schon mal!

Gruß Werner
  #2 (permalink)  
Alt 19.03.20
Gesperrter Benutzer
 
Registriert seit: Aug 2017
Beiträge: 16
fintrad0 befindet sich auf einem aufstrebenden Ast
Standard Zaghafter Lösungsansatz

Falls mal jemand über diesen Beitrag stolpert, ich teste gerade dieses Vorgehen: Es geht um eine Multicurrency-EA mit Ordermanagement (Hidden-SL, -Trailing, -BE, -Teilverkauf, -TP). Da sich die Variablen für die Preislinien sich ständig ändern (je nach selektierter Order) orientiere ich mich an iHighest, iLowest und OrderOpenPrice() der jeweiligen Order.

Die Ordermanagement-Funktion rufe ich auf und übergebe die Ticketnumber.

Code:
//Anzahl der M1-Bars seit Ordereröffnung

BarsAfterOpen=iBarShift(symbol,PERIOD_M1,OrderOpenTime(),false);

             if(BarsAfterOpen == 0) {                       // wenn innerhalb der selben Kerze der Ordereröffnung
               if(ask >= OrderOpenPrice()) {             // wenn momentaner Preis >= Eröffnungspreis ...
                  PeriodHighest = ask;                       // momentaner Preis ist der höchste
                  PeriodLowest = OrderOpenPrice();   // tiefster Preis ist Eröffnungspreis
               }   
               
               if(bid <= OrderOpenPrice()){            // siehe oben al reves
                  PeriodHighest = OrderOpenPrice();
                  PeriodLowest = bid;
             }
             else {                                               // wenn seit der Eröffnung mehr als 0 Kerzen vergangen sind
                PeriodHighest = iHigh(symbol,PERIOD_M1,iHighest(symbol,PERIOD_M1,MODE_HIGH,BarsAfterOpen,0));
                PeriodLowest = iLow(symbol,PERIOD_M1,iLowest(symbol,PERIOD_M1,MODE_LOW,BarsAfterOpen,0));
             }
Die Preislinien PeriodHighest / PeriodLowest verwende ich, um den Abstand zum OrderOpenPrice() zu messen und um festzustellen, ob ich mich über/unter den Werten für TrailingStart, TrailingDistance, MoveToBreakEven, PartialClose etc. befinde:

Code:
               if(PeriodHighest > OrderOpenPrice()+trailingstart*point)                 
                 {
                  buystoplossprice= PeriodHighest - trailingdistance * point;                                                
                 }                  
            
               if(PeriodHighest > OrderOpenPrice() + breakevenpoints * point)
                 {
                   if(buystoplossprice < OrderOpenPrice())                                      
                       buystoplossprice = OrderOpenPrice() + breakevengain * point;                                                   
                  }  

etc., etc., etc.
Am Ende der Funktion prüfe ich, ob mein aktueller Preis eine der Linien (buystoplossprice, sellstoplossprice) über-/unterschritten hat um die Order teilweise oder ganz zu schließen.

Code:
 //---- schließt Order wenn unter/über SL/TP-Linie --------  
                              
                 if((bid <= buystoplossprice) || (ask >= buytakeprofitprice))
                  {
                    bool ret=OrderClose(ticketnumber,OrderLots(),OrderClosePrice(),Slippage,Red);              
                  }

Falls es so nicht klappen sollte, kann es immer noch als Inspiration dienen:-)

Schönen Gruß

Werner
  #3 (permalink)  
Alt 23.03.20
Mitglied
 
Registriert seit: Feb 2016
Beiträge: 240
RetepM befindet sich auf einem aufstrebenden Ast
Standard

Hi,
eine „quick and dirty“ Lösung. Schreibe das aktuelle High/Low parallel zum OrderSend in zwei Variablen. Danach brauchst Du nur zu prüfen, sind die danach auftretenden High/Low größer bzw. kleiner als die zuvor erfassten „OrderSend High/Low Variablen“.
Grüße
  #4 (permalink)  
Alt 25.03.20
Gesperrter Benutzer
 
Registriert seit: Aug 2017
Beiträge: 16
fintrad0 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von RetepM Beitrag anzeigen
Hi,
eine „quick and dirty“ Lösung. Schreibe das aktuelle High/Low parallel zum OrderSend in zwei Variablen. Danach brauchst Du nur zu prüfen, sind die danach auftretenden High/Low größer bzw. kleiner als die zuvor erfassten „OrderSend High/Low Variablen“.
Grüße
Guter Hinweis, danke!
Jetzt bin ich endlich fertig und der Code scheint auch sauber zu arbeiten. Es mussten doch noch einige Änderungen vorgenommen werden, an die ich anfangs nicht dachte und die mich fast zur Verzweiflung getrieben hätten. Vielleicht hilfts jemandem...

Anzahl Kerzen nach Ordereröffnung:
Code:
int BarsAfterOpen=iBarShift(symbol,PERIOD_M1,OrderOpenTime(),false);

// Wenn BarsAfterOpen == 0 (also während der selben Minute der Eröffnung), liefert High/Low der Kerze einen unsinnigen Wert., Deswegen ...
             
if(BarsAfterOpen < 1) BarsAfterOpen=1;  

//...BarsAfterOpen mindestens 1, bevor High/Low ermittelt wird

 double BuyPeriodHighest = iHigh(symbol,PERIOD_M1,iHighest(symbol,PERIOD_M1,MODE_HIGH,BarsAfterOpen,0));
Hoch/Tief der Trailingstop-Linie muss mindestens bei OrderOpenPrice() +- trailingstart liegen.
Code:
  double BuyInitPeriodHighest = NormalizeDouble(OrderOpenPrice() + (trailingstart*point), digits);
  double BuyPeriodHighest = iHigh(symbol,PERIOD_M1,iHighest(symbol,PERIOD_M1,MODE_HIGH,BarsAfterOpen,0));             

   if(BuyInitPeriodHighest >= BuyPeriodHighest) BuyPeriodHighest = BuyInitPeriodHighest;  // wenn Candlehigh < trailingstart
Wie gesagt, vom Code meines Originalposts ist nicht mehr viel übrig geblieben. Dafür ist meine Erkenntnis gewachsen.

Schönen Gruß
Werner
Thema geschlossen

Lesezeichen


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 +2. Es ist jetzt 09:18 Uhr.





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