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: 4973
Beiträge: 43249
Benutzer: 7.219
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: Hopfen&Malz
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107
vor 2 Wochen
- rg-trader

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

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 24.01.21
Neues Mitglied
 
Registriert seit: Dec 2020
Beiträge: 11
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.
  #2 (permalink)  
Alt 24.01.21
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
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.
  #3 (permalink)  
Alt 11.02.21
Neues Mitglied
 
Registriert seit: Dec 2020
Beiträge: 11
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);
  #4 (permalink)  
Alt 12.02.21
Benutzerbild von Indikator-Trading
Premium Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 345
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)
  #5 (permalink)  
Alt 12.02.21
Benutzerbild von Indikator-Trading
Premium Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 345
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
  #6 (permalink)  
Alt 12.02.21
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
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.
  #7 (permalink)  
Alt 13.02.21
Neues Mitglied
 
Registriert seit: Dec 2020
Beiträge: 11
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.
  #8 (permalink)  
Alt 13.02.21
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
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.
  #9 (permalink)  
Alt 14.02.21
Neues Mitglied
 
Registriert seit: Dec 2020
Beiträge: 11
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.
  #10 (permalink)  
Alt 14.02.21
Benutzerbild von Indikator-Trading
Premium Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 345
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.
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 +1. Es ist jetzt 20:26 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.
-----------------------------------------------------------------------------------------------------------------------------