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: 4642
Beiträge: 41838
Benutzer: 7.010
Aktive Benutzer: 171
Links: 82
Wir begrüßen unseren neuesten Benutzer: Beef_Poppi
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Beef_Poppi
vor einer Woche
- Innocent
vor einer Woche
- Olaf4476
vor einer Woche
- bobbyandex...
vor einer Woche
- boboyelang

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

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 24.01.21
Neues Mitglied
 
Registriert seit: Dec 2020
Beiträge: 9
Gaydon befindet sich auf einem aufstrebenden Ast
Standard Kontrolliere ob ein TakeProfit gesetz ist

Ich kann leider keinen Code zur Verfügung stellen, habe aber folgendes Problem.
Mein Programm erstellt eine Order OHNE TakeProfit, setzt aber unter bestimmt Voraussetzungen ein TakeProfit und danach kommt Modify error 1, weil er Tausende OrderModify macht.

meine Überlegung war eine Wahr/Falsch abfrage um das zu Stoppen.

if(OrderTakeProfit()>0)

weil ich dachte es existiert ja nicht und wenn er gesetzt wird, ist er ja erst größer 0.
Aber darauf reagiert das Programm nicht, wenn ein TakeProfit gesetzt wird.
Es erkennt das TakeProfit nicht da ist macht aber auch nichts, wenn es da ist.
Mit Zitat antworten
  #2 (permalink)  
Alt 24.01.21
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.501
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Gaydon Beitrag anzeigen
Ich kann leider keinen Code zur Verfügung stellen, habe aber folgendes Problem.
Mein Programm erstellt eine Order OHNE TakeProfit, setzt aber unter bestimmt Voraussetzungen ein TakeProfit und danach kommt Modify error 1, weil er Tausende OrderModify macht.

meine Überlegung war eine Wahr/Falsch abfrage um das zu Stoppen.

if(OrderTakeProfit()>0)

weil ich dachte es existiert ja nicht und wenn er gesetzt wird, ist er ja erst größer 0.
Aber darauf reagiert das Programm nicht, wenn ein TakeProfit gesetzt wird.
Es erkennt das TakeProfit nicht da ist macht aber auch nichts, wenn es da ist.
Siehst Du und genau das ist der Grund, warum wir hier den Code brauchen.
Wer oder was hindert Dich denn daran, den Code wenigstens in Teilen zu posten?

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #3 (permalink)  
Alt vor 2 Wochen
Neues Mitglied
 
Registriert seit: Dec 2020
Beiträge: 9
Gaydon befindet sich auf einem aufstrebenden Ast
Standard

So nun der Code, weil ich jetzt erst einen habe.
Im Tester funktioniert das Ganze aber ich bekomme immer OrderModify error 130, obwohl er im Tester den TakeProfit setzt und wenn der TakeProfit da ist kommt der Fehler weiter. Er ändert auch laufend den TakeProfit, obwohl er ja eindeutig definiert ist, denke ich.
Wenn Ich direkt ein TakeProfit setzte, passiert nichts also keine error Meldung.
Mir kommt aber auch die Frage, warum nimmt er den OpenPrice nicht nachdem der MACD das macht was er machen soll, sondern einfach direkt den letzten den er findet und ignoriert den MACD?

Code:
      for (int b=OrdersTotal()-1;b>=0;b--)
         {
         if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
            {
            if(OrderSymbol()==Symbol())
               {
               if(OrderType()==OP_BUY)
                  {
                  if((Bid>OrderStopLoss())&&(OrderTakeProfit()==0))
                     {                  
                     if((iOpen(_Symbol,PERIOD_M5,0)>SMA_21)&&(MACD_15M<=MACD_15M1));
                        {
                        double Ausstieg_5Ml=0;
                        int l=0;
                        for(l=0;(iLow(_Symbol,PERIOD_M5,l)<SMA_21);l++)   
                           {
                           NormalizeDouble ((Ausstieg_5Ml=iOpen(_Symbol,PERIOD_M5,l)),4);
                           if(Ausstieg_5Ml-Takeprofit_Abstand)
                              {
                              OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ausstieg_5Ml,0,0);
                              SendNotification("OrderModified");
                              Print("OrderModified", Ausstieg_5Ml);
Mit Zitat antworten
  #4 (permalink)  
Alt vor 2 Wochen
Benutzerbild von Indikator-Trading
Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 192
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

Ok, leider sind hier einige Teile in deinem Code nicht logisch, bzw. falsch

Die If-Abfrage wird nie etwas bewirken, da du da ein Semicolon am Ende gesetzt hast:
Code:
if((iOpen(_Symbol,PERIOD_M5,0)>SMA_21)&&(MACD_15M<=MACD_15M1));
NormalizeDouble hat keinen Einfluss, da der Rückgabewert nicht gespeichert wird, auch beschreibst du innerhalb der NormalizeDouble Funktion die Variable Ausstieg_5MI, was eine sehr unleserliche Art und Weise ist:
Code:
NormalizeDouble ((Ausstieg_5Ml=iOpen(_Symbol,PERIOD_M5,l)),4);
Das hier ist keine sinngebende If-Abfrage:
Code:
if(Ausstieg_5Ml-Takeprofit_Abstand)
Mit Zitat antworten
  #5 (permalink)  
Alt vor 2 Wochen
Benutzerbild von Indikator-Trading
Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 192
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

Da du erst jetzt einen Code hast, gehe ich mal davon aus, dass du den von jemanden anderes hast programmieren lassen. Verlange besser dein Geld zurück, falls du was dafür bezahlt haben solltest!

Gruß und weiterhin viel Erfolg!
Timo
Mit Zitat antworten
  #6 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.501
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Der Code als solcher und dessen Ursprung wirft in der Tat einige Fragen auf.

Arbeiten kann man damit auf jeden Fall nicht.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #7 (permalink)  
Alt vor 2 Wochen
Neues Mitglied
 
Registriert seit: Dec 2020
Beiträge: 9
Gaydon befindet sich auf einem aufstrebenden Ast
Standard

Danke für eure Antworten.

Das Semikolon habe ich übersehen, komischer weiße tat das Programm dennoch was es machen sollte.
NormalizeDouble hatte ich einfach nur schnell reingeworfen, das aber anscheinend auch noch falsch. Wie geht das den Richtig?
Stimmt die letzte if abfrage macht so keinen Sinn.

Nochmal kurz zum Programm.
Das Programm soll bei einer LongPosition einen Ausstieg erstellen, über den TakeProfit. Indem er guckt wann ist der Openprice über dem Gleitendendurchschnitt von 21 und das Low dieser Kerze unter dem 21iger Durchschnitt. Um dann den OpenPrice dieser Kerze als TakeProfit zu setzten bei noch anderen Indikatioren.
Ich hoffe das war verständlich.

So nun wo klemmt das Ganze?

Die Auswahl der Order funktioniert anscheinend.

Die "Laufzeit" und Kontrolle der Ausführung
Code:
if((Bid>OrderStopLoss())&&(OrderTakeProfit()==0))
hier ist für mich schon die Frage, warum modifziert er weiter wenn doch ein TakeProfit automatisch gesetzt ist? Aber wenn ich ihn manuell setzt hört er auf genau wie er soll?

Auswahl des TakeProfit
Code:
double Ausstieg_5Ml=0;
int l=0;
for(l=0;(iLow(_Symbol,PERIOD_M5,l)<SMA_21);l++)   
   {
     Ausstieg_5Ml=iOpen(_Symbol,PERIOD_M5,l);
Das funktioniert, der Preis steht fest und wird richtig "berechnet".
Nun die Frage warum ändert er dennoch laufend den Preis um 5 Pips hoch und dann wieder runter? Der Preis ist doch fest und der TakeProfit ist doch gesetzt darum müsste er doch bei "Laufzeit und Kontrolle" sagen ist falsch, weil TakeProfit gesetzt ist und damit TakeProfit !=0 oder was ist falsch?

OrderModify wird natürlich so gestartet, denke ich.
Code:
if((Ausstieg_5Ml-Takeprofit_Abstand)<Ask)
also vielen Dank für eure Hilfe schonmal.
Mit Zitat antworten
  #8 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.100
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Gaydon Beitrag anzeigen
Das Programm soll bei einer LongPosition einen Ausstieg erstellen, über den TakeProfit. Indem er guckt wann ist der Openprice über dem Gleitendendurchschnitt von 21 und das Low dieser Kerze unter dem 21iger Durchschnitt. Um dann den OpenPrice dieser Kerze als TakeProfit zu setzten bei noch anderen Indikatioren.
Ich hoffe das war verständlich.
Poste mal das ganze Programm.
Mit Zitat antworten
  #9 (permalink)  
Alt vor 2 Wochen
Neues Mitglied
 
Registriert seit: Dec 2020
Beiträge: 9
Gaydon befindet sich auf einem aufstrebenden Ast
Standard

hier ist mein Ausstiegscode.
Code:
void Ausstieg()
{
   double Ausstieg_Indikator_long = iLow(_Symbol,PERIOD_M5,0);
   double Takeprofit_Abstand = MarketInfo(_Symbol,MODE_STOPLEVEL);
   double SMA_21 = iMA(_Symbol,PERIOD_M5,21,0,MODE_SMA,PRICE_CLOSE,0);
   double MACD_15M = iMACD(_Symbol,PERIOD_M15,12,26,9,PRICE_CLOSE,0,0);
   double MACD_15M1 = iMACD(_Symbol,PERIOD_M15,12,26,9,PRICE_CLOSE,0,1);
      {
      for (int b=OrdersTotal()-1;b>=0;b--)
         {
         if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
            {
            if(OrderSymbol()==Symbol())
               {
               if(OrderType()==OP_BUY)
                  {
                  if((Ask>OrderStopLoss())&&(OrderTakeProfit()==0))
                     {                  
                     if((iOpen(_Symbol,PERIOD_M5,0)>SMA_21)&&(MACD_15M<=MACD_15M1))
                        {
                        double Ausstieg_5Ml=0;
                        int l=0;
                        for(l=0;(iLow(_Symbol,PERIOD_M5,l)<SMA_21);l++)   
                           {
                           Ausstieg_5Ml=iOpen(_Symbol,PERIOD_M5,l);
                           if((Ausstieg_5Ml-Takeprofit_Abstand)<Ask)
                              {
                              OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ausstieg_5Ml,0,0);
                              }                             
                           }   
                        }   
                     }
                  }
               } 
            }
         }
      }
ich vermute er hat ein Problem mit der Schleife aber ich habe keine andere Lösung für die Schleife, vielleicht ist sie ja auch unnütz aber er soll jetzt nicht immer den TakeProfit setzten wenn er unter den 21iger Durchschnitt kommt.
Mit Zitat antworten
  #10 (permalink)  
Alt vor 2 Wochen
Benutzerbild von Indikator-Trading
Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 192
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

Ich sehe hier ein Problem mit dieser if-Abfrage:
Code:
 if((Ausstieg_5Ml-Takeprofit_Abstand)<Ask)
Dein TP darf nie kleiner als dein Ask sein, wenn du wie in deinem Code den TP für deine Buy-Order setzten willst.
Außerdem wird deine Buy-Order über den Bid-Preis geschlossen!

Du müsstest also abfragen, ob der neue TP hochgenug ist, damit er akzeptiert wird:
Code:
 if(Ausstieg_5Ml>(Bid+Takeprofit_Abstand))
Bei meinem Broker kam übrigens bei MarketInfo(_Symbol,MODE_STOPLEVEL);
für Forex Märkte 0 zurück, vielleicht liegt das jetzt aber auch nur daran, dass die Märkte gerade geschlossen haben.
Mit Zitat antworten
Antwort

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 +1. Es ist jetzt 23:43 Uhr.





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