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: 43262
Benutzer: 7.222
Aktive Benutzer: 72
Links: 84
Wir begrüßen unseren neuesten Benutzer: Mane
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Mane
vor 2 Wochen
- AlbertZiz
vor 2 Wochen
- michak
vor 2 Wochen
- Amateur
vor 2 Wochen
- infos1982

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

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 22.06.18
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard Trailing Stop

Hallo.

Seit etlichen Stunden versuche ich einen Trailing Stop hin zu bekommen. Er soll alle 7 Pips den SL hinter ASK/BID herziehen. Einfacher SL und TP funktionieren einwandfrei.

Ich hab alles Mögliche probiert und gedreht und studiert und getestet und mir das Hirn zerbrochen. Aber er wird einfach nicht hinter her gezogen. Fehlermeldungen oder sowas kommen auch nicht.
Code:
extern string TS="Trailing Stop";
extern bool Trailing_Stop=true;//
 extern int Trailing_Stop_Step=7;//Bei ActivTrades müssen SL/TP anscheinend mindestens 5 sein
Code:
double M_CA=MarketInfo(Symbol(),MODE_ASK);
double M_CB=MarketInfo(Symbol(),MODE_BID);
Code:
if(Trailing_Stop==true){
 
  double M_CB_SL_TSS=NormalizeDouble(M_CB-Stoploss-Trailing_Stop_Step*_Point,_Digits);//M_CA = Mode Current Ask
  
  double M_CA_SL_TSS=NormalizeDouble(M_CA+Stoploss+Trailing_Stop_Step*_Point,_Digits);//M_CB = Mode Current Bid

  double B_TS=NormalizeDouble(M_CB-Stoploss*_Point,_Digits);
  
  double S_TS=NormalizeDouble(M_CA+Stoploss*_Point,_Digits);

}
Code:
//Modify Orders (Trailing Stop nach ziehen)
if(Trailing_Stop==true){

  for(i=OrdersTotal()-1;i>=0;i--){
    if(OrderSelect(i,SELECT_BY_TICKET)){

      if(OrderType()==OP_BUY&&OrderMagicNumber()==Buy_MagicNumber&&OrderSymbol()==Symbol()){//modify Buy
        if(OrderStopLoss()<M_CB_SL_TSS)OrderModify(OrderTicket(),OrderOpenPrice(),B_TS,OrderTakeProfit(),0,LawnGreen);}// ?

      if(OrderType()==OP_SELL&&OrderMagicNumber()==Sell_MagicNumber&&OrderSymbol()==Symbol()){//modify Sell
        if(OrderStopLoss()>M_CA_SL_TSS)OrderModify(OrderTicket(),OrderOpenPrice(),S_TS,OrderTakeProfit(),0,Gold);}}}}// ?
Angehängte Dateien
Dateityp: mq4 Valerius_MT4_AutoSL_TS_AutoTP_LoSh_EA.mq4 (30,7 KB, 1x aufgerufen)
  #2 (permalink)  
Alt 27.06.18
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Benutzt hier Niemand nen Trailing Stop?


Er wird nie hinterher gezogen und ich hab nicht die leisteste Ahnung warum.


Anscheinend werden auch keine Orders modifiziert.
  #3 (permalink)  
Alt 27.06.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Na Du weißt doch, wie man die Fehler eingrenzen kann.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #4 (permalink)  
Alt 27.06.18
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Entweder stimmt die OrderModify Funktion nicht, oder die entsprechenden Bedingungen sind nicht erfüllt. Aber es kommen keine Fehlermeldungen oder Warnungen.

Aber eigentlich ist doch Alles richtig. Hab wirklich keinen Schimmer was nicht stimmt.



extern bool Trailing_Stop=true;
extern int Trailing_Stop_Step=15;


double M_CA=MarketInfo(Symbol(),MODE_ASK);
double M_CB=MarketInfo(Symbol(),MODE_BID);


if(Trailing_Stop==true){

//Bid - Stoploss = neuer Buy "SL", der bei OrderModify gesendet werden soll
double B_TS=NormalizeDouble(M_CB-Stoploss*_Point,_Digits);

//Ask + Stoploss = neuer Sell "SL", der bei OrderModify gesendet werden soll
double S_TS=NormalizeDouble(M_CA+Stoploss*_Point,_Digits) ;


//neuer Buy "SL" - Trailing Stop Step.
//Wenn alter Buy SL kleiner ist, soll neuer Buy "SL" (B_TS) gesendet werden.
double B_TS_TSS=NormalizeDouble(B_TS-Trailing_Stop_Step*_Point,_Digits);

//neuer Sell "SL" - Trailing Stop Step.
//Wenn alter Sell SL kleiner ist, soll neuer Sell "SL" (B_TS) gesendet werden.
double S_TS_TSS=NormalizeDouble(S_TS+Trailing_Stop_Step*_ Point,_Digits);

}


if(Trailing_Stop==true){

for(i=OrdersTotal()-1;i>=0;i--){
if(OrderSelect(i,SELECT_BY_TICKET)){

if(OrderType()==OP_BUY&&OrderMagicNumber()==Buy_Ma gicNumber&&OrderSymbol()==Symbol()){//modify Buy
if(NormalizeDouble(OrderStopLoss()<B_TS_TSS*_Point ,_Digits)){
OrderModify(OrderTicket(),OrderOpenPrice(),B_TS,Or derTakeProfit(),0,LawnGreen);}}

if(OrderType()==OP_SELL&&OrderMagicNumber()==Sell_ MagicNumber&&OrderSymbol()==Symbol()){//modify Sell
if(NormalizeDouble(OrderStopLoss()>S_TS_TSS*_Point ,_Digits)){
OrderModify(OrderTicket(),OrderOpenPrice(),S_TS,Or derTakeProfit(),0,Gold);}}}}}




Edit:Kam nen paar Mal die Meldung "Trade Context is busy" oder so. Aber normaler SL und TP werden ja richtig gesetzt...

Geändert von MA-EA (27.06.18 um 22:54 Uhr)
  #5 (permalink)  
Alt 27.06.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Tja, was soll ich bei solch gravierenden Fehlern noch schreiben?
Sorry, aber da fällt mir wirklich nichts mehr zu ein, wenn Du hier große EAs schreiben willst:

for(i=OrdersTotal()-1;i>=0;i--){
if(OrderSelect(i,SELECT_BY_TICKET)){

ist denn i die Ticketnummer?

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #6 (permalink)  
Alt 28.06.18
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

So wird der TS auch nie nach gezogen:

for(i=OrdersTotal()-1;i>=0;i--){
if(OrderSelect(ticket,SELECT_BY_TICKET)){


Liegts vielleicht daran, dass ein Buy und ein Sell geöffnet werden?

Und diese Schleifen hab ich nie kapiert.


Edit:Fehler gibts keine, ausser bei EURNZD "invalid SL or TP"
Angehängte Dateien
Dateityp: mq4 Valerius_MT4_AutoSL_TS_AutoTP_LoSh_EA.mq4 (30,5 KB, 1x aufgerufen)
  #7 (permalink)  
Alt 28.06.18
Premium Mitglied
 
Registriert seit: Jun 2016
Ort: Österreich
Beiträge: 362
Leopold befindet sich auf einem aufstrebenden Ast
Standard

Hallo MA-EA (Elite Mitglied),

du hast das scheinbar nicht verstanden, das traderdoc vorhin geschrieben hat.
Du musst SELECT_BY_POS verwenden!

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

---Leopold---
  #8 (permalink)  
Alt 28.06.18
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

select_by_pos wenn mit ner Schleife gearbeitet werden soll. Soweit ich das kapiert hab.


Aber wie muss es aussehn mit select_by_ticket ?


Ich kapier überhaupt nix mehr.
  #9 (permalink)  
Alt 28.06.18
Premium Mitglied
 
Registriert seit: Jun 2016
Ort: Österreich
Beiträge: 362
Leopold befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

da du das in einer Schleife mit dem Zähler i hast:

if(OrderSelect(i, SELECT_BY_POS))
....

wenn du mit der Ticketnummer arbeiten willst benötigst du diese Schleife nicht, musst aber die Ticketnummer wissen.

bitte schau dir die Doku an!

---Leopold---
  #10 (permalink)  
Alt 28.06.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

@MA-EA, ich glaube fest, dass Du deshalb nix mehr kapierst, wie Du es selber geschrieben hast, weil Dir einfach die Grundlagen fehlen. Denn diese Grundlagen sind überall nachlesbar und müssen einfach sitzen, sonst fragst Du Dir hier den Wolf. Ein Beispiel war der damalige Thread mit dem CCI.

Also, Hausaufgaben erledigen und erst dann große EAs programmieren.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Thema geschlossen

Lesezeichen

Stichworte
mql4, programmierung, programmierung metatrader, programmierung mql4, trailing, trailing stop, trailingstop


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 06:01 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.
-----------------------------------------------------------------------------------------------------------------------------