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: 4079
Beiträge: 38591
Benutzer: 6.372
Aktive Benutzer: 231
Links: 80
Wir begrüßen unseren neuesten Benutzer: Dario
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 18:12).
Neue Benutzer:
vor einem Tag
- Dario
vor 4 Tagen
- Redline
vor einer Woche
- kfiedler58
vor einer Woche
- Datoddy
vor einer Woche
- SebZei

Onlineuser
'Wer ist online' anzeigen Benutzer: 2
Gäste: 61
Gesamt: 63
Team: 0
Team:  
Benutzer:  tbooo, traderdoc
Freunde anzeigen

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor 2 Wochen
Mitglied
 
Registriert seit: Sep 2018
Beiträge: 44
Max2018 befindet sich auf einem aufstrebenden Ast
Standard Anzahl der Magicnummern prüfen

Hallo,

ich habe einen EA der mehrere Positionen anhand der Magicnummern in einem Markt verwaltet. Nun kann es mitunter passieren, dass ich vergesse dort eine Magicnummer einzutragen - was sich natürlich negativ auf das Trading auswirkt. Daher suche ich eine Formel, die mich warnt, wenn ich eine Magicnummer vergessen habe.
Ich hatte mir das so vorgestellt (natürlich bin ich auch für andere einfache Lösungen dankbar) Es werden die Anzahl der Orders mit der Anzahl der Magicnummern verglichen. Weicht diese ab, gibts eine Warnung:

1.SCHRITT Eine Formel die alle geöffneten und Pending Orders des Marktes zählt
das habe ich schon geschafft mit
Code:
int count_order()
  {
   int count=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS)==true)
        {
         if(OrderSymbol()==Symbol())
           {
            count=count+1;
            //count++;
           }
        }
     }
   return(count);
  }
und
Code:
 Comment(" count ",Symbol()," = ",count_order());
2.SCHRITT Ermitteln der Anzahl der im EA eingetragenen Magicnumbers => Wie mache ich das ??

3. SCHRITT Die beiden Zahlen miteinander vergleichen. Weicht diese Anzahl ab, gibt es eine Warnung!=> Wie mache ich das ??

Herzlichen Dank für die
Mit Zitat antworten
  #2 (permalink)  
Alt vor 2 Wochen
Mitglied
 
Registriert seit: Sep 2018
Beiträge: 44
Max2018 befindet sich auf einem aufstrebenden Ast
Standard

Habe SCHRITT 3 auch gelöst mit:
Code:
int FehlerMagicnumber=count_order()-AnzahlMagicNummern;

Comment(" count ",Symbol()," = ",count_order(),"  /  "," MagicNumbers ",Symbol()," = ",AnzahlMagicNummern,"  / FEHLER = ",FehlerMagicnumber); 
if(FehlerMagicnumber!=0)MessageBox("ZU WENIG MAGICNUMMERN: "+FehlerMagicnumber,"FEHLER IN MAGICNUMMERN"); 
  if (FehlerMagicnumber!=0)ExpertRemove();
Fehlt jetzt nur noch Schritt 2.... Das habe ich im Moment so gelöst, dass ich die einfach zähle
Das geht aber doch auch eleganter - oder?
Mit Zitat antworten
  #3 (permalink)  
Alt vor 2 Wochen
Mitglied
 
Registriert seit: Sep 2018
Beiträge: 44
Max2018 befindet sich auf einem aufstrebenden Ast
Talking

Das zählen war zwar ein schöner Ansatz. Abschließend habe ich es aber so gelöst :

oben in der Eingabe
Code:
int count_order()
  {
   int count=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS)==true)
        {
         if(OrderSymbol()==Symbol())
           {
            count=count+1;
            //count++;
           }
        }
     }
   return(count);
  }
Und dann für jede Magicnumber
Code:
//------------------------ 
//PRÜFE MAGICNUMMERN 20
//------------------------
int countMagic20=0;
int pos20=0;
    for(pos20=OrdersTotal()-1; pos20 >= 0 ; pos20--) 
    if ( OrderSelect(pos20, SELECT_BY_POS)                 // Nur meine Order/
    &&  OrderMagicNumber()  == MagicNumber20             // Spezielle Magicnumber
    &&  OrderSymbol()       == Symbol() ){              // und der Markt
        countMagic20++;
    }
if (!countMagic20&&count_order()>17)MessageBox("MAGICNUMMER 20 FEHLT ","MAGICNUMMER 20 FEHLT ");
if (!countMagic20&&count_order()>17)ExpertRemove();
Vielleicht nicht die elleganteste Lösung, aber es läuft

Schön, dass man hier im Monolog zu Ergebnissen kommt
Mit Zitat antworten
  #4 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.119
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Dann will ich den Monolog mal durchbrechen.

Die erste und entscheidende Frage. die ich mir stelle ist, warum vergibt man für jede Order eines Handelsinstruments eine separate MagicNumber? Oder habe ich da etwas falsch verstanden?

Mal abgesehen davon wurde countMagic20 als int deklariert, dann sollte man auch nicht if(!countMagic20 ...) verwenden, was bei einer bool-Deklaration verwendet werden würde.

Der Code ist auch nicht nachzuvollziehen, da die Herkunft von MagicNumber20 unbekannt ist.

Warum wird hier mit 17 verglichen?
count_order()>17
Was würde passieren, wenn es weniger als 18 Orders wären?

Aber ich denke, der Schlüssel zur endgültigen Lösung liegt in der Beantwortung der Eingangsfrage. Man sollte unter bestimmten Umständen durchaus unterschiedliche MagicNumbers vergeben, aber darauf komme ich zurück, wenn die Frage beantwortet wurde.

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

Hallo traderdoc,

ganz herzlichen Dank für die Antwort.
Du hast natürlich recht. Das Teil läuft noch nicht so wie ich es mir vorgestellt habe.

Warum diese Vorgehensweise?

1,. Ich habe eine Strategie, die leider (noch) nicht voll automatisierbar ist.
2. Somit werden die Positionen nach bestimmten Regeln eröffnet. Nur der Ausstieg wird dann über einen EA verwaltet.
3 Um aber sicherzustellen, dass alle Magicnummern - also alle Positionen auch korrekt übernommen wurden, benötige ich eine Kontrolle. Ich lese diese über den HistoryExport aus und füge diese dann in den EA ein.
=> Im EA soll aber dann nochmal geprüft werden, ob der EA alle Positionen und deren Magicnummern auch erfasst hat.

IDEEN
1. IDEE:
Zuerst habe ich überlegt dies über die Anzahl zu regeln, also grob, die Anzahl der Trades zu zählen und dann diese Zahl mit der Anzahl der Magicnummern zu vergleichen. PROBLEM: Wenn eine Magicnummer falsch geschrieben wurde werden diese nicht erfasst.
2. IDEE
In der neuen Lösung habe ich nun geschaut, ob die Magicnummern auch tatsächlich in Trades zu finden sind. PROBLEM: So wie ich das gelöst habe, kommt es zu Fehlermeldungen, wenn einzelne Positionen geschlossen werden, also diese Magicnummern verschwinden. D.h. dieser Teil hier ist noch nicht so elegant....
Code:
//------------------------ 
//PRÜFE MAGICNUMMERN 23
//------------------------
int countMagic23=0;
int pos23=0;
    for(pos23=OrdersTotal()-1; pos23 >= 0 ; pos23--) 
    if ( OrderSelect(pos23, SELECT_BY_POS)                 // 
    &&  OrderMagicNumber()  == MagicNumber23             // Das ist nur eine von vielen Magicnummern
    &&  OrderSymbol()       == Symbol() ){              // 
        countMagic23++;
    }
if (!countMagic23&&count_order()>20)MessageBox("MAGICNUMMER 23 FEHLT ","MAGICNUMMER 23 FEHLT ");
if (!countMagic23&&count_order()>20)ExpertRemove();


Die Idee mit
Code:
!countMagic23&&count_order()>20
ist nicht gut... Hier brauche ich eine andere Regel.... oder hast Du eine Idee wie man sowas kontrollieren kann?
Mit Zitat antworten
  #6 (permalink)  
Alt vor 2 Wochen
Mitglied
 
Registriert seit: Sep 2018
Beiträge: 44
Max2018 befindet sich auf einem aufstrebenden Ast
Standard

....count_order()>20 ist käse
Da hast Du recht. Aber stehe auf dem Schlauch und brauche eine andere "Kontrollregel" die mir sagt, wenn die Magicnummer nicht vergeben ist
und die NICHT zu einer Fehlermeldung führt wenn der EA im Betrieb ist und eine Position geschlossen wird ! DENN DAS IST das Problem im Moment !
Mit Zitat antworten
  #7 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.119
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Und warum können nicht alle Orders eines Handelsinstrumentes diesselbe MagicNumber haben?

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

weil unterschiedliche Stops, unterschiedliche Regeln usw.
Mit Zitat antworten
  #9 (permalink)  
Alt vor 2 Wochen
Mitglied
 
Registriert seit: Sep 2018
Beiträge: 44
Max2018 befindet sich auf einem aufstrebenden Ast
Standard

...ich packe die Abfrage je Magicnummer glaube ich in die int init()...
Mit Zitat antworten
  #10 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.119
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Max2018 Beitrag anzeigen
...ich packe die Abfrage je Magicnummer glaube ich in die int init()...
Ähm wie? Du glaubst? Das musst Du doch wissen, wo die bei Dir liegt.
Aber um es mal kurz zu machen. So richtig sehe ich in Deinem System nicht durch. Es wäre daher sehr hilfreich, wenn Du nochmals mit ganz kurzen prägnanten Sätzen formulierst, wo die Orders herkommen, wann wo eine MagicNumber und welche gesetzt wird und an welcher Stelle Du wann die MagicNumbers überprüfen willst.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
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 +2. Es ist jetzt 00:29 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.
-----------------------------------------------------------------------------------------------------------------------------