Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Anzahl der Magicnummern prüfen (http://www.expert-advisor.com/forum/showthread.php?t=6242)

Max2018 31.10.18 13:58

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

Max2018 31.10.18 14:19

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?

Max2018 01.11.18 09:35

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 :D

Schön, dass man hier im Monolog zu Ergebnissen kommt :rolleyes:

traderdoc 01.11.18 11:46

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

Max2018 01.11.18 19:28

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();

:confused:

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?

Max2018 01.11.18 19:38

....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 !

traderdoc 01.11.18 19:55

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

traderdoc

Max2018 02.11.18 00:07

weil unterschiedliche Stops, unterschiedliche Regeln usw.

Max2018 02.11.18 12:55

...ich packe die Abfrage je Magicnummer glaube ich in die int init()...
:)

traderdoc 02.11.18 13:07

Zitat:

Zitat von Max2018 (Beitrag 41781)
...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


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum