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.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3824
Beiträge: 37296
Benutzer: 6.076
Aktive Benutzer: 496
Links: 80
Wir begrüßen unseren neuesten Benutzer: Spitzmaus
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 14 Stunden
- Spitzmaus
vor 17 Stunden
- juleslesqu...
vor einem Tag
- hmf44
vor einem Tag
- Crossa
vor 2 Tagen
- snatshit

Onlineuser
'Wer ist online' anzeigen Benutzer: 2
Gäste: 63
Gesamt: 65
Team: 0
Team:  
Benutzer:  Domke01, ForexMax
Freunde anzeigen

Empfehlungen

Werbung

Like Tree1Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #11 (permalink)  
Alt 03.10.15
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

"Wie ist es nun richtig?"

Du mußt mal unterscheiden zwischen mathematischer und programmtechnischer Logik. Das sind zwei verschiedene Schuhe.
Insofern bleibt es wie es ist, mathematisch logisch, programmtechnisch falsch umgesetzt.

Also die Antwort auf die o.g. Frage:
"Mathematisch:
EMA1_15min > EMA2_15min > EMA3_15min > EMA4_15min"

"Programmtechnisch richtig!:
EMA1_15min > EMA2_15min && EMA2_15min > EMA3_15min && EMA3_15min > EMA4_15min"

Insofern bleibt es im Sinne meines letzten Posts.

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

So,

nachdem ich meinen Rechner wieder fit habe und meinen Code aufräumen konnte, stehe ich nur noch vor einem Problem(chen?)

Der EA eröffnet Trades, zieht den SL nach etc. Alles wie es soll.

Allerdings möchte ich nun gern, dass er auch manuell gesetzte Trades modifiziert und den SL für mich nach zieht und entsprechend auch keine neue POS öffnet - da ja schon eine offen ist.

Ich bin beim Googlen zwar über OrdersTotal() gestolpert, allerdings komme ich damit nicht recht weiter.
Aktuell wähle ich ja meine Orders via SELECT_BY_TICKET im OrderSelect aus. Es muss doch aber eine Möglichkeit geben dort über eine Oder-Verknüpfung eine gewisse Halbautomatik hinzubekommen.

Code:
  //Shortsignale umsetzen in Deals
     if(Shortsignal==true)
      {
         //Eventuelle LongOrder schliessen
         if (LongOrder>0)
            {
               if(OrderSelect(LongOrder,SELECT_BY_TICKET)==true)
               {
               bool LongOrderClosed = OrderClose(LongOrder,OrderLots(),Bid,10,Orange);
               if (LongOrderClosed == true) LongOrder = 0;
               }
            }
         
         //ShortOrder eröffnen
         while(ShortOrder<=0)
            {
               ShortOrder = OrderSend(Symbol(),OP_SELL,Lots,Bid,10,0,0,"ShortOrder",MagicNumber,0,Red);
            }
      }
      
//+------------------------------------------------------------------+
//|                                                                  |
//|                         SL bzw TP setzen                         |
//|                                                                  |
//+------------------------------------------------------------------+     

      //StopLoss Longdeals setzen
      if(NeuePeriodeBegonnen==true)
      {
      if(OrderSelect(LongOrder,SELECT_BY_TICKET)==true)
         {
            if(OrderCloseTime()==0&&OrderStopLoss()==0)
               {
                  double StopLoss=NormalizeDouble((MA3),Digits);
                  bool OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss,OrderTakeProfit(),0,Yellow);
               }
         }

Und hier dann noch das Nachziehen des SL
Code:
//+------------------------------------------------------------------+
//|                                                                  |
//|                    Ticketnummer zurücksetzen                     |
//|                                                                  |
//+------------------------------------------------------------------+     

      //Ticketnummer nach SL oder TP zurücksetzen
      if(OrderSelect(LongOrder,SELECT_BY_TICKET)==true)
         {
            if(OrderTicket()>0 && OrderCloseTime()>0) LongOrder=0;
         }
         
      if(OrderSelect(ShortOrder,SELECT_BY_TICKET)==true)
         {
            if(OrderTicket()>0 && OrderCloseTime()>0) ShortOrder=0;
         }
     
     
//+------------------------------------------------------------------+
//|                                                                  |
//|                    Stops nachziehen auf MA3_1d                   |
//|                                                                  |
//+------------------------------------------------------------------+     
     
     //LongOrder Stop nachziehen
     if (LongOrder>0 && OrderType() == OP_BUY&&NeuePeriodeBegonnen==true)
      {
         Print ("SL wird nachgezogen");
         bool result=false;
         result=OrderSelect(LongOrder,SELECT_BY_TICKET);
         bool result1=false;
         result1=OrderModify(OrderTicket(),OrderOpenPrice(),MA3,0,1);
         Print ("SL ",OrderTicket()," nachgezogen!");
      }
  #13 (permalink)  
Alt 07.10.15
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Entscheidend ist hierbei, an welcher Stelle bekommt der EA die TicketNumber in Form der Variablen LongOrder bzw. ShortOrder? Bei EA-geöffneten Orders entweder über die OrderSend()-Funktion direkt oder die OrderSelect-Abfrage, die aber an dieser Stelle! nur über SELECT_BY_POS und nicht! über SELECT_BY_TICKET geht.
Wenn nun bei der Methode über SELECT_BY_POS zusätzlich noch über die MagicNumber selektiert werden soll, dann versagt die Selektion bei manuell geöffneten Orders, weil es dort keine Möglichleit der Angabe der MagicNumber gibt.
Einziger Ausweg: entweder ohne MagicNumber selektieren oder die im EA verwendete MagicNumber in die Kommentarzeile beim manuellen Öffnen eingeben und bei OrderSelect() dann die MagicNumber als Kommentartext auslesen und wie gewohnt vergleichen.

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

Okay das macht durchaus Sinn

Nach deiner Aussage habe ich beschlossen nochmal einen eigenen EA für das Manuelle Trading zu schreiben und diesen dann stumpf nur den SL nachziehen zu lassen.

Allerdings bin ich mir etwas unsicher was die Syntax angeht. Die Hilfe hilft mir leider nicht so recht weiter.

Code:
//+------------------------------------------------------------------+
//|                                                                  |
//|                    Stops nachziehen auf MA 20                    |
//|                                                                  |
//+------------------------------------------------------------------+     
     //LongOrder Stop nachziehen
     if (OrdersTotal()>0 && OrderType() == OP_BUY&&NeuePeriodeBegonnen==true)
      {
         Print ("SL wird nachgezogen");
         bool result=false;
         result=OrderSelect(OP_BUY,SELECT_BY_POS);
         bool result1=false;
         result1=OrderModify(OrderTicket(),OrderOpenPrice(),MA_SL,0,1);
         Print ("SL ",OrderTicket()," nachgezogen!");
      }
     
 
      //ShortOrder Stop nachziehen
     if (OrdersTotal()>0 && OrderType() == OP_SELL&&NeuePeriodeBegonnen==true)
      {
         Print ("SL wird nachgezogen");
         bool result=false;
         result=OrderSelect(OP_SELL,SELECT_BY_POS);
         bool result1=false;
         result1=OrderModify(OrderTicket(),OrderOpenPrice(),MA_SL,0,1);
         Print ("SL ",OrderTicket()," nachgezogen!");
      }

Somit versuche ich zunächst abzufragen ob überhaupt Orders offen sind (OrdersTotal()) und ob es die richtigen sind für den Stop bzw Long (wobei das hinfällig sein dürfte da ich den SL auf einen EMA ziehe)

jetzt bin ich etwas unsicher was das OrderSelect angeht - wie man sehen kann versuche ich mit dem Ordertypen zu selektieren - allerdings steht ja in der Hilfe, dass er, wenn er mittels POS selektieren soll in einen Pool greift und man den Index nun in der ersten Variable zuweisen soll. Daher bin ich unschlüssig ob das mittels dem "OP_SELL" bzw dem "OP_BUY" so klappt...
  #15 (permalink)  
Alt 07.10.15
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Nein, wenn man die TicketNumber nicht kennt muß man wie folgt selektieren:

Code:
//i ist die Position der Order im internen Orderbuch
for (int i = OrdersTotal() - 1; i >= 0; i--) { //hier wird die neueste Order zuerst abgefragt - rückwärts gezählt
//mit for (int i = 0; i < OrdersTotal(); i++) { wird die älteste Order zuerst abgefragt - vorwärts gezählt
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_Number) {
            TN = OrderTicket();
            if (OrderType() == OP_BUY)  Buy = true;
            if (OrderType() == OP_SELL) Sell = true;
            break; //springt aus der for-Schleife, falls nur die letzte geöffnete Order gesucht wird
         }
      }
   }

// nun kann TN als TicketNumber weiterverwendet werden.
traderdoc
skynat likes this.
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #16 (permalink)  
Alt 08.10.15
Mitglied
 
Registriert seit: Sep 2015
Beiträge: 30
skynat befindet sich auf einem aufstrebenden Ast
Standard

Super vielen Dank

Auf die Idee eine Zählschleife zu verwenden bin ich gar nicht gekommen - kurioserweise hat mein Ansatz auch funktioniert...irgendwie...manchmal


Dann werde ich mich noch um ein paar Dinge versuchen zu kümmern die ich gern angezeigt bekommen hätte
Thema geschlossen

Lesezeichen

Stichworte
long, mql4, programmierung, programmierung metatrader, short


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 11:31 Uhr.



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