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: 4383
Beiträge: 40234
Benutzer: 6.740
Aktive Benutzer: 228
Links: 80
Wir begrüßen unseren neuesten Benutzer: eurix
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 8 Stunden
- eurix
vor 12 Stunden
- Yogi
vor einem Tag
- olistr
vor einem Tag
- IstDochEga...
vor 5 Tagen
- junga

Onlineuser
'Wer ist online' anzeigen Benutzer: 2
Gäste: 290
Gesamt: 292
Team: 0
Team:  
Benutzer:  Leopold, Yogi
Freunde anzeigen

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor 2 Wochen
Neues Mitglied
 
Registriert seit: Feb 2020
Beiträge: 15
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..
Mit Zitat antworten
  #2 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 884
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?
Mit Zitat antworten
  #3 (permalink)  
Alt vor 2 Wochen
Neues Mitglied
 
Registriert seit: Feb 2020
Beiträge: 15
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..
Mit Zitat antworten
  #4 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 884
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.
Mit Zitat antworten
  #5 (permalink)  
Alt vor 2 Wochen
Neues Mitglied
 
Registriert seit: Feb 2020
Beiträge: 15
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
Mit Zitat antworten
  #6 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 884
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.
Mit Zitat antworten
  #7 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.290
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.
Mit Zitat antworten
  #8 (permalink)  
Alt vor 2 Wochen
AVT AVT ist offline
Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 268
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
Mit Zitat antworten
  #9 (permalink)  
Alt vor 2 Wochen
Neues Mitglied
 
Registriert seit: Feb 2020
Beiträge: 15
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.
Mit Zitat antworten
  #10 (permalink)  
Alt vor 2 Wochen
AVT AVT ist offline
Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 268
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
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
atr auslesen, breakeven berechnen, expert adviosor


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 22:30 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.
-----------------------------------------------------------------------------------------------------------------------------