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: 43270
Benutzer: 7.223
Aktive Benutzer: 73
Links: 84
Wir begrüßen unseren neuesten Benutzer: TS_6
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 5 Stunden
- TS_6
vor 2 Tagen
- Mane
vor 2 Wochen
- AlbertZiz
vor 2 Wochen
- michak
vor 2 Wochen
- Amateur

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

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 04.02.20
Neues Mitglied
 
Registriert seit: Feb 2020
Beiträge: 20
chesstigran befindet sich auf einem aufstrebenden Ast
Question Probleme bei Breakeven, TP und SL Bestimmung, im Zusammenhang mit ATR

Moin,

mein Code funktionierte noch vorhin, und jetzt irgendwie nicht mehr und ich verstehe nicht wieso.
Ziel des ganzen ist folgendes:
1. Take Profit Bestimmung durch 2*ATR Wert + Triggerzone (der Strategie, also einfach ein fester Wert.)

2. Breakeven setzen wenn der Trade 1*ATR im Profit ist.

3. SL Bestimmung durch 1*ATR abgezogen (oder addiert je nachdem obs Buy oder Sell ist ) von der Triggerzone.

Code:
bool bResult=false;

    double EinmalATR = iATR(OrderSymbol(),_Period,14,1);
    double ZweimalATR = 2*iATR(OrderSymbol(),_Period,14,1);
    double dBuyTPatr = dZoneHigh + ZweimalATR;
    double dSellTPatr = dZoneLow - ZweimalATR;    
    double dBuySLatr = dZoneHigh - EinmalATR;
    double dSellSLatr = dZoneLow + EinmalATR;

    if (Schritt1 == true && Schritt2 == true && Schritt3 == true && Schritt4 == true && IsNewCandle ()) {
    int BuyStop = OrderSend
    (
         Symbol(),      // currency pair on the chart
         OP_BUYSTOP,    // place a buystop
         Lotsize,          // how much lot
         dBuyStop,      // entry
         20,          // allow only 3 pips of deviation
         dBuySLatr,        // StopLoss
         dBuyTPatr,        // TakeProfit
         NULL,          // no comment
         0,             // no ID number
         ExpirationTime, // expiration date
         Green          // color of the order in the chart
    );
    int SellStop = OrderSend
    (
         Symbol(),      // currency pair on the chart
         OP_SELLSTOP,    // place a buystop
         Lotsize,          // how much lot
         dSellStop,      // entry
         20,          // allow only 3 pips of deviation
         dSellSLatr,        // StopLoss
         dSellTPatr,        // TakeProfit
         NULL,          // no comment
         0,             // no ID number
         ExpirationTime, // expiration date
         Green          // color of the order in the chart
    );    
    for(int i = OrdersTotal() - 1; i >= 0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {  
       
    if(OrderType() == OP_BUY && OrderOpenPrice() > OrderStopLoss() && Bid - OrderOpenPrice() >= EinmalATR) {
    bResult = OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
  	 }
  		 
  	 if(OrderType() == OP_SELL && OrderOpenPrice() < OrderStopLoss() && OrderOpenPrice() - Ask >= EinmalATR){
  	 bResult = OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
  	      }
      }
    }
    }
    else {
    return;
    }
Mein Problem ist nun folgendes. Die Orders setzt er jeweils nur einmal und sie laufen auch nach der genauen Zeit ab.

Allerdings werden die Takeprofits komisch bestimmt (ich habe das ganze auf GBPJPY getestet, was ein sehr volatiles Währungspaar ist und das auf H1), und die Stoplosse immer clean auf 15 Pips, und das versteh ich nicht.

HTML-Code:
13	2019.10.03 04:05	sell stop	6	9.98	(Preis)131.585	(SL)131.736	(TP)131.582	(Gewinn)0.00	(Kontostand)99899.64
kann mir da vllt jemand mal erklären was ich falsch gemacht habe?

das ganze ist übrigens in MQL 4 geschrieben..
  #2 (permalink)  
Alt 05.02.20
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Die OrderModify Funktion sieht komisch aus. Da scheint Alles gleich zu bleiben.

https://docs.mql4.com/trading/ordermodify

Edit:Und was ist eigentlich ATR?
  #3 (permalink)  
Alt 05.02.20
Neues Mitglied
 
Registriert seit: Feb 2020
Beiträge: 20
chesstigran befindet sich auf einem aufstrebenden Ast
Standard

ATR ist Average of True Range. Ein Indikator der dir einen Pipwert wiedergibt der der Durchschnitt der letzen 14(das kannst du selber entscheiden kannst zb auch 50 nehmen) Kerzen anzeigt.

Ja das könnte vllt auch sein aber wo ist der Fehler? Order wird modifyed und das SL wird auf OrderOpenPrice gezogen das ergibt doch nur sinn.

Leider weiß ich nicht wo der Fehler ist..
  #4 (permalink)  
Alt 05.02.20
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Der Fehler ist vermutlich der Spread. ATR hin oder her, der Spread wird beim Long öffnen und beim Short schließen aufgeschlagen. Der muss mit einkalkuliert werden.
  #5 (permalink)  
Alt 05.02.20
Neues Mitglied
 
Registriert seit: Feb 2020
Beiträge: 20
chesstigran befindet sich auf einem aufstrebenden Ast
Standard

Es geht hier nicht um den Spread , es geht hier darum das beispielsweise der TP komisch bestimmt wird und die Breakevenfunktion irgendwie nicht so funktioniert wie sie funktionieren sollte, und ich weiß nicht woran das liegt.

HTML-Code:
1	2019.10.01 10:43	buy stop	1	10.00	132.186	132.036	132.187	0.00	100000.00
Es kann bei einem Einstiegspreis von 132.186 nicht sein das der TP bei 2*ATR 132.187 (also eine Pipette!!) ist. und deswegen oben der Code, also falls jemand weiter weiß wäre ich sehr dankbar <3
  #6 (permalink)  
Alt 05.02.20
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard



Was ist das denn überhaupt für ne SL / TP Berechnung? Der ATR hat doch nen ganz anderen Wert als Bid/Ask.
  #7 (permalink)  
Alt 05.02.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Wo liegt denn dBuyStop bzw. dSellStop bzgl. dZoneHigh bzw. dZoneLow?

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #8 (permalink)  
Alt 05.02.20
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

So wie ich die Doks verstanden habe, gilt dieser Slippage/Deviation Wert nur wenn man Signale aus einem Signal-Dienst empfangen will. Für die reale (also wenn man selber seinen eignen EA laufen läßt) nehme ich einen BE erst dann, wenn alle Kosten (Trade im Plus + Kommission) gedeckt sind und dann noch 2* Spread obendrauf. Bei mir kommt reale Slippage zu ca. 50% vor, unterm Strich mehr negativ als positiv - und der doppelte Spread reicht, um im Plus zu bleiben. AVT
  #9 (permalink)  
Alt 05.02.20
Neues Mitglied
 
Registriert seit: Feb 2020
Beiträge: 20
chesstigran befindet sich auf einem aufstrebenden Ast
Standard

Code:
    if (ActCurrPair == "US30" && ActTimeFrame == 15) {             //für Doe 20 Pips zum Triggern der Popgun 
    TriggerPips = 20;
    Lotsize = Equity / 100000;
    }
    if (ActCurrPair == "US30" && ActTimeFrame == 30) {
    TriggerPips = 20;
    Lotsize = Equity / 100000;
    }
    if (ActCurrPair == "US30" && ActTimeFrame == 60) {
    TriggerPips = 20;
    Lotsize = Equity / 100000;
    }
    if(ActCurrPair == "GER30" && ActTimeFrame == 15) {              // für Dax 10 Pips zum Triggern der Popgun
    TriggerPips = 10;
    Lotsize = Equity / 100000;
    }
    if(ActCurrPair == "GER30" && ActTimeFrame == 30) {
    TriggerPips = 10;
    Lotsize = Equity / 100000;
    }
    if(ActCurrPair == "GER30" && ActTimeFrame == 60) {
    TriggerPips = 10;
    Lotsize = Equity / 100000;
    }
    if (ActCurrPair == "XAUUSD" && ActTimeFrame == 15) {             // für Gold 1.0 = 10 Pips zum Triggern der Popgun
    TriggerPips = 1.0;
    Lotsize = Equity / 10000;
    }
    if (ActCurrPair == "XAUUSD" && ActTimeFrame == 30) {
    TriggerPips = 1.0;
    Lotsize = Equity / 10000;
    }
    if (ActCurrPair == "XAUUSD" && ActTimeFrame == 60) {
    TriggerPips = 1.0;
    Lotsize = Equity / 10000;
    }
    if(ActTimeFrame == 15 && ActCurrPair == "GBPJPY") {        // für die JPY Paare und Öl 0.1 = 10 Pips zum Triggern der PG
    TriggerPips = 0.1;

    Lotsize = Equity / 10000;
    }
    if(ActTimeFrame == 30 && ActCurrPair == "GBPJPY") {
    TriggerPips = 0.1;
    Lotsize = Equity / 10000;
    }
    if(ActTimeFrame == 60 && ActCurrPair == "GBPJPY") {
    TriggerPips = 0.1;
    Lotsize = Equity / 10000;
    }
    if (ActTimeFrame == 15 && ActCurrPair == "GBPAUD") {
    TriggerPips = 0.001;
    Lotsize = Equity / 10000;
    }
    if (ActTimeFrame == 30 && ActCurrPair == "GBPAUD") {
    TriggerPips = 0.001;
    Lotsize = Equity / 10000;
    }
    if (ActTimeFrame == 60 && ActCurrPair == "GBPAUD") {
    TriggerPips = 0.001;;
    Lotsize = Equity / 10000;
    }
    if (ActTimeFrame == 15 && ActCurrPair == "EURAUD") {
    TriggerPips = 0.001;
    Lotsize = Equity / 10000;
    }
    if (ActTimeFrame == 30 && ActCurrPair == "EURAUD") {
    TriggerPips = 0.001;
    Lotsize = Equity / 10000;
    }
    if (ActTimeFrame == 60 && ActCurrPair == "EURAUD") {
    TriggerPips = 0.001;
    Lotsize = Equity / 10000;
    }

double dZoneLow = NormalizeDouble(Low[1],Digits); 
double dZoneHigh = NormalizeDouble(High[1],Digits);
double dSellStop = dZoneLow-TriggerPips;     
double dBuyStop = dZoneHigh+TriggerPips;
TriggerPips wird je nach Währungspaar und Timeframe unterschiedlich festgelegt.
  #10 (permalink)  
Alt 05.02.20
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

Wenn Du mit Popguns arbeitest, hast Du bedacht, daß Du für die Trigger den Wert der Outside zu der Kerzenzeit der Outside nimmst? AVT
Thema geschlossen

Lesezeichen

Stichworte
atr auslesen, breakeven berechnen, expert adviosor


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 17:10 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.
-----------------------------------------------------------------------------------------------------------------------------