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)
-   -   MagicNo integrieren & Mehrfachtrades verhindern (http://www.expert-advisor.com/forum/showthread.php?t=3499)

Forexcrawler 27.02.14 19:14

MagicNo integrieren & Mehrfachtrades verhindern
 
Hallo!

Nachdem ich mich nun ein bißchen hier und anderweitig im Netz nach EAs umgesehen habe, die zu meinen Ansichten und meinem Stil passen, habe ich zwar an vielen Stellen große Augen gemacht (und wäre am liebsten an 20 Stellen gleichzeitig reingesprungen! :p ), aber entweder habe ich nicht so richtig kapiert, was die tun, oder ich wurde beim Lesen der Beschreibungen skeptisch ob der Ertragsaussichten.

Einen habe ich gefunden, der meinen Grundvorstellungen schon recht gut entspricht, den ich aber gerne um so einige Funktionen anpassen und erweitern würde. Allerdings bin ich mit der EA-Programmierung noch gänzlich unbeleckt...

Habe mich durch den (kurzen und übersichtlichen) Code gegraben und verstehe nun Zeile für Zeile, was das Ding tut. Soweit schon mal stolz! :rolleyes:

Genug gesabbelt, hier die Fragen:

MagicNumber
Momentan hat er keine Magic Number. Habe ihn aufm Demo in EURUSD und GBPUSD laufen. Die MaxTrades will ich beibehalten, allerdings zählt er so aktuell auf beiden Paaren zusammen und sperrt dann, wenn die Summe (bsp. 20) im Gesamten erreicht ist. Ich will aber, dass er 20 PRO Paar aufreisst!? Wie könnte ich eine Magic integrieren und dann entsprechend mit abfragen?

Mehrfachorders
Aktuell ist gegeben: "X Pips von Wert Y = Order raus"...
Daher: Schwankt der Wert dann mehrmals über diese Stelle, wird jedes Mal eine Order aufgerissen. Wie könnte ich das vermeiden? Kann ich irgendwie die offenen Trades nach diesem Einstiegswert durchsuchen und falls vorhanden den Trade unterbinden?

Danke für eure Hilfe und Geduld. :)

traderdoc 28.02.14 11:25

Hallo Forexcrawler,

da braucht man keine MagicNumber, sondern es müßte die Stelle abgeändert werden, die die Trades zusammenzählt. D.h. Am besten in der Routine des Checks der offenen Orders müßte dann in die Anzahl des einen WP und er des anderen WP separiert werden und evtl. noch ein bis zwei andere Anpassungen vorgenommen werden.

Zu den Mehrfachorders:
Das hört sich so an, als wäre der EA ein Grid-Trader. Einstiegspunkte kann man am besten mit Flags kennzeichnen. Das sind Variablen des Typs bool, für die nur der Zusandte existiert true oder false. D.h. existiert der Trade an der Stelle dann ist die Variable true usw.
Aber das ist aus der Ferne etwas kompliziert zu erklären, zumal Du geschrieben hattest, nicht programmieren zu können. Da wundert es mich schon, dass Du nunmehr Zeile für Zeile verstehst.

traderdoc

fxdaytrader 28.02.14 12:28

Zitat:

Zitat von Forexcrawler (Beitrag 25366)
Momentan hat er keine Magic Number. Habe ihn aufm Demo in EURUSD und GBPUSD laufen. Die MaxTrades will ich beibehalten, allerdings zählt er so aktuell auf beiden Paaren zusammen und sperrt dann, wenn die Summe (bsp. 20) im Gesamten erreicht ist. Ich will aber, dass er 20 PRO Paar aufreisst!? Wie könnte ich eine Magic integrieren und dann entsprechend mit abfragen?

Du könntest auch nach Währungspaar filtern. Macht aber m.E. auch nur Sinn wenn auf dem Konto NUR der EA arbeitet.
Mein Vorschlag: Nach MagicNumber UND nach Währungspaar filtern, so solltest Du auf der sicheren Seite sein. ;)

Zitat:

Zitat von Forexcrawler (Beitrag 25366)
Aktuell ist gegeben: "X Pips von Wert Y = Order raus"...
Daher: Schwankt der Wert dann mehrmals über diese Stelle, wird jedes Mal eine Order aufgerissen. Wie könnte ich das vermeiden?

Da dürfte es mehrere Möglichkeiten geben. Spontan würde ich folgendes präferieren: Entweder nach Zeit/Bar filtern (bspw. letzter trade muß mindestens xyz bars vorher eröffnet worden sein). Das macht aber bei grid-Dingern wenig sinn da es hier mehr um pipabstände geht.
Hier könnte man nach Preis filtern. Bspw. Öffnugnspreis der letzten order mjß mindestens xyz pips entfernt sein.

Zum Thema "wie baut man das ein"? -> Hänge den EA (mq4-Datei) hier mit dran, ggf. wird sich dann jemand darum kümmern ... :cool:

Forexcrawler 28.02.14 13:20

Hallo ihr beiden,

vielen Dank für die Antworten! :)

Habe zwischendurch weiter gemacht und eine Magic eingebaut. Von außen einstellbar, schreibt sich bei Ordererteilung mit in den Kommentar und die nächste Stelle. So weit, so gut.

Auch auf die Ideemit dem WP bin ich mittlerweile gekommen. :P

Das mit den Flags verstehe ich zwar, aber in der Tat noch keinen Dunst für die Umsetzung. Habe im Netz einen EA zum abgucken gefunden, der macht eine Schleife mit Orderselect über alle Trades und last sich die Einstiegszeit ausgeben. Wollte das so abwandeln, dass er die Einstiegspreise nimmt und nur ordert wenn kein gleicher Preis gefunden?

Zu deiner Frage, Traderdoc: Ich habe mal vor rund 15 Jahren Anwendungsentwicklung gelernt und habe bis vor 8 Jahren Programme geschrieben. Allerdings für Industriesteuerungen (SPS). Das gundlegende Verständnis ist also wohl schon da, aber die Syntax muss ich mühsam nachschlagen... Mit C(++) war ich nur in der Berufsschule in Berührung

fxdaytrader 28.02.14 13:26

Zitat:

Zitat von Forexcrawler (Beitrag 25376)
Wollte das so abwandeln, dass er die Einstiegspreise nimmt und nur ordert wenn kein gleicher Preis gefunden?

In der theorie gut, in der Praxis dürfte das u.U. nicht funktionieren da Du nicht wissen kannst ob Du denselben entryprice erhältst. Das braucht ja nur einen pip Unterschied zu machen und der EA denkt alles wäre i.O. und öffnet einen trade.

Ich würde mal testen mit kalkuliertem einstiegspreis und der hälfte der gridpips oder ähnlich, müsstest mal testen.

Also (entweder keiine order offen) ODER (es sind orders offen UND um kalkulierten einstiegspreis +- (gridpips/2) befindet sich aktuell keine offene order) ... ;)

Forexcrawler 28.02.14 17:07

Kleine Schritte... :(

Was haltet ihr für die Zählung von aktuell in diesem WP offenen Orders davon?

Code:

  if(OrdersTotal()>0){
      for(int oc =0;oc<=OrdersTotal();oc++){
        OrderSelect(oc,SELECT_BY_POS,MODE_TRADES);
        if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic){
            CurrentTrades = CurrentTrades++;
        }
      }
  }

CurrentTrades wurde zuvor als int definiert und initialisiert.

fxdaytrader 28.02.14 17:18

Code:

int GetOpenTrades() {
 int CurrentTrades=0;
 for (int cnt=OrdersTotal()-1; cnt>=0; cnt--) {
  if (!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)) continue;
  if (OrderSymbol()!=symbol) continue;
  if (OrderMagicNumber()!=magicnumber) continue;
  {
  CurrentTrades++;
  }
 return(CurrentTrades)
}

und dann lässt sich simpel abfragen bspw.
if (GetOpenTrades()==0) öffne order etc. pp.

Forexcrawler 28.02.14 18:08

Super, danke!!!!

Habe noch ein paar Zeichen wie } und ; eingestreut, nun lässt es sich kompilieren. :)

Zum Verständnis:

Du nimmst alle Orders, ziehst die ab, die nix mit uns zu tun haben und erhöhst für jede relevante den CurrentTrade? Der geht dann am Ende an die Globale zurück, die dann die Anzahl der offenen Trades enhält, wodurch is sie mit Globale < maxTrades als Bedingung nutzen kann?

fxdaytrader 28.02.14 18:13

hehe, jo, flüchtigkeitsfehler.
Auch die vorhandenen variablen magicnumber und symbol mußt durch Deine ersetzen ...

Ja, es wird durch alle offenen trades gelooped und addiert (wobei hier alle diejenigen gefiltert werden wo symbol und MagicNumber nicht passen).

global ist die currenttrade-variable nicht, sie besteht nur innerthalb der funktion.
Die Funktion gibt einen Inegerwert zurück (0 wenn keine offenen trades vorhanden sind), ansonsten die Zahl der offenen trades.

Ach ja, das ist "old mql4-syntax", inwieweit daß jetzt mit dem aktuellen build anders läuft weiß ich nicht, noch nicht.
Ich habe mich mit dem neuen style noch nicht befasst, mir steht der Kopf aktuell auch woanders, bzw. liegen meine Prioritäten anders sodaß ich derzeit wenig bis gar nicht progge.

Forexcrawler 28.02.14 18:20

Ja, habe ich schon angepasst. :)

Ich danke dir, dass du dir trotzdem die Zeit nimmst, und hier hilfst! Das ist nicht selbstverständlich!

Jetzt muss ich noch die Mehrfachtrades verrammeln, dann ist das Tagesziel erreicht. :)


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:01 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