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.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4396
Beiträge: 40162
Benutzer: 6.773
Aktive Benutzer: 228
Links: 80
Wir begrüßen unseren neuesten Benutzer: Muhammad ali001
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 3 Stunden
- Muhammad...
vor 23 Stunden
- wiktor
vor 2 Tagen
- Pierrot150...
vor 3 Tagen
- doanabogda...
vor 5 Tagen
- mausgamble...

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

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor 2 Wochen
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
Mit Zitat antworten
  #2 (permalink)  
Alt vor 2 Wochen
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
Mit Zitat antworten
  #3 (permalink)  
Alt vor einer Woche
Mitglied
 
Registriert seit: Feb 2016
Beiträge: 189
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
Mit Zitat antworten
  #4 (permalink)  
Alt vor einer Woche
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
Mit Zitat antworten
Antwort

Lesezeichen


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


Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2020 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.
-----------------------------------------------------------------------------------------------------------------------------