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: 3987
Beiträge: 37970
Benutzer: 6.301
Aktive Benutzer: 353
Links: 80
Wir begrüßen unseren neuesten Benutzer: beeo
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 8 Stunden
- beeo
vor 2 Tagen
- mkraibache...
vor 3 Tagen
- fob
vor 3 Tagen
- mapohle
vor 5 Tagen
- prithvisud...

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

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor 3 Wochen
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 619
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, 0x aufgerufen)
Mit Zitat antworten
  #2 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 619
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.
Mit Zitat antworten
  #3 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.037
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.
Mit Zitat antworten
  #4 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 619
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 (vor 2 Wochen um 22:54 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.037
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.
Mit Zitat antworten
  #6 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 619
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, 0x aufgerufen)
Mit Zitat antworten
  #7 (permalink)  
Alt vor 2 Wochen
Mitglied
 
Registriert seit: Jun 2016
Ort: Österreich
Beiträge: 162
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---
Mit Zitat antworten
  #8 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 619
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.
Mit Zitat antworten
  #9 (permalink)  
Alt vor 2 Wochen
Mitglied
 
Registriert seit: Jun 2016
Ort: Österreich
Beiträge: 162
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---
Mit Zitat antworten
  #10 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.037
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.
Mit Zitat antworten
Antwort

Lesezeichen

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


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 08:17 Uhr.



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