Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 5 > Programmierung MQL5

Programmierung MQL5 Hier gehts rund ums Programmieren in MQL5.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4883
Beiträge: 42954
Benutzer: 7.176
Aktive Benutzer: 85
Links: 83
Wir begrüßen unseren neuesten Benutzer: NiceMods
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 3 Stunden
- NiceMods
vor 3 Tagen
- schlupjup
vor 5 Tagen
- Brunow
vor 6 Tagen
- Berndt
vor 6 Tagen
- hellbird

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

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 16.03.22
Neues Mitglied
 
Registriert seit: Aug 2021
Beiträge: 7
Cobalt befindet sich auf einem aufstrebenden Ast
Standard Einfacher SELL-Order Trailingstop klapppt nicht

Hi!

Da ich aus irgendwelchen Gründen unter MT5 keinen Trailingstop setzen kann,
habe ich versucht mir ein EA zu schreiben, der dies übernimmt.
Einen für BUY- und einen für SELL-Positionen,
etwas umständlich aber besser als ohne zu arbeiten.


Im Backtest klappt alles bestens!

Live nicht...


(lasse ihn beim Test eine Position eröffnen, habe diese Zeilen aber entfernt)


Code:
input int Trailingstop = 100;
input int Schrittgröße = 1;


#include<Trade\Trade.mqh>

CTrade  trade;

void OnTick()
  {
  double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
  CheckTrailingStop(Bid);    
  }  
  
  
void CheckTrailingStop(double Bid)  
   {
   if(PositionsTotal()>0)
   
      {
      double SL=NormalizeDouble(Bid+Trailingstop*_Point,_Digits);
         for(int i=PositionsTotal() -1; i>=0; i--) 
   
         {  
         string symbol=PositionGetSymbol(i);
         if (_Symbol==symbol)
         if (PositionGetInteger(POSITION_TYPE)==ORDER_TYPE_SELL)
         
            {
            ulong PositionTicket=PositionGetInteger(POSITION_TICKET);
            double CurrentStopLoss=PositionGetDouble(POSITION_SL);
            if (CurrentStopLoss>SL)
   
               {
               trade.PositionModify(PositionTicket,(CurrentStopLoss-Schrittgröße*_Point),0);
               }
            }
         }               
      }
   }
Was habe ich übersehen?


Bin für jeden Ratschlag dankbar!
  #2 (permalink)  
Alt 16.03.22
Benutzerbild von Indikator-Trading
Premium Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 321
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

Du hast die Order nicht ausgewählt, dafür ist Funktion PositionSelect() vorgesehen.
Jetzt werden die Aufrufe von PositionGetInteger() auf irgend eine andere, zuvor ausgewählte Position zeigen.
  #3 (permalink)  
Alt 16.03.22
Neues Mitglied
 
Registriert seit: Aug 2021
Beiträge: 7
Cobalt befindet sich auf einem aufstrebenden Ast
Standard

Danke!


Code:
 for(int i=PositionsTotal() -1; i>=0; i--) 
           {
           
         PositionSelect(_Symbol);
         string symbol=PositionGetSymbol(i);
         if (_Symbol==symbol)
         if (PositionGetInteger(POSITION_TYPE)==ORDER_TYPE_SELL)
         
            {

So sollte das dann aussehen, oder?

Die Umstellung von MT4 auf MT5 verwirrt mich etwas.
War noch nie gut im Programmieren.
  #4 (permalink)  
Alt 16.03.22
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.677
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Könnte man so proggen.
Ich würde zu der sicheren Variante greifen:

Code:
for (uint i = PositionsTotal()-1; i >= 0; i--) {
   if ((ticket = PositionGetTicket(i)) > 0) {
      if (PositionGetString(POSITION_SYMBOL) == Symbol() && PositionGetInteger(POSITION_MAGIC) == MagicNumber){
         if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) {

         }
         if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) {

         }
      }
   }
}
Falle keine MagicNumber vergeben wurde, dann weglassen.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #5 (permalink)  
Alt 16.03.22
Neues Mitglied
 
Registriert seit: Aug 2021
Beiträge: 7
Cobalt befindet sich auf einem aufstrebenden Ast
Standard

Also ohne PositionSelect?

Bin jetzt noch mehr verwirrt...


Bei MT4 war das irgendwie einfacher.
  #6 (permalink)  
Alt 17.03.22
Benutzerbild von Indikator-Trading
Premium Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 321
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

Das funktioniert, da der Aufruf von PositionGetTicket(i) ebenfalls die jeweilige Position selektiert, genauso wie PositionSelect().
PositionSelect() würde allerdings auch nur dann sicher funktionieren, wenn du nur eine Position pro Symbol hättest. Die Implementierung von TraderDoc ist somit die Variante, welche sicherer und besser ist.
Thema geschlossen

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 19:30 Uhr.





Die Suchmaschine - Der Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2022 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2020 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------