Autor Thema: Wir lernen MQL4  (Gelesen 7250 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

  • Global Moderator
  • Ist Forum süchtig
  • *
  • *
  • *
    • Beiträge: 1714
    • Karma: +422/-6
    • Mitglied seit:
      11 Aug 2009
  • Broker: IGMarkets

  • Mars Defense Car Chaos Get Groovy BallsPC Motorrad-Trauma
    Bloons Tower Defense
  • Stop
Antw:Wir lernen MQL4
« Antwort #15 am: Juli 21, 2010, 15:37:14 pm »
Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen
na, da hab ich doch gleich was. ;)

>   int    counted_bars=IndicatorCounted();

Alle historischen Bars, die älter als die aktuelle sind müssten das doch sein, oder? Also im Stundenchart dann die aus der letzten Stunde? Aber bezieht sich das nur auf die Bars des Screens oder alle historischen Bars bis zum Datenanfang?

"IndicatorCounted() ist immer gleich Bars-1. Außnahme ist nur wenn sich die neue Kerze ausgebildet hat,
dann hat IndicatorCounted() nur für diesen Agenblick den Wert Bars-2.
"

Und das ganze bezieht sich dann auf die historischen Bars bis zum Datenanfang!
Chleudere den Purchen zu Poden!

  • "One Hit Wonder"
  • *
    • Beiträge: 1
    • Karma: +0/-0
    • Mitglied seit:
      27 Jul 2010

  • Stop
Antw:Wir lernen MQL4
« Antwort #16 am: Juli 27, 2010, 18:58:57 pm »
Danke nightyhawk

schön erklärt.
Ich arbeitete meist mit kopieren / einfügen wenn ich einen EA erstellen oder ändern wollte.
Aber mit der Zeit lernt man so einiges für den Hausgebrauch. Ansonsten ist es halt schon wie traderdoc sagt: eine sehr komplexe Sache wenn man einen gescheiten EA programmieren will.

  • Global Moderator
  • Ist Forum süchtig
  • *
  • *
  • *
    • Beiträge: 1714
    • Karma: +422/-6
    • Mitglied seit:
      11 Aug 2009
  • Broker: IGMarkets

  • Mars Defense Car Chaos Get Groovy BallsPC Motorrad-Trauma
    Bloons Tower Defense
  • Stop
Antw:Wir lernen MQL4
« Antwort #17 am: August 16, 2010, 22:45:12 pm »
Nachdem mich Traderdoc darauf hinweisen mußte, ist mir eingefallen, daß dieser Thread ja auch noch existiert....  :-[

Kümmern wir uns heute mal um Schleifen. Nun was sind Schleifen? Wenn man an Endlosschleifen denkt, sind es Dinge die sich immer und immer wieder wiederholen. Und genau darum geht es, um Wiederholungen. Nun wollen wir nichts endlos wiederholen - aber doch schon derart oft, dass unsere Aufgabe erfüllt wird bzw. bis gewissen Bedingungen eingetreten sind.

Welche Schleifen gibt es denn dafür?

Prinzipiell unterscheidet man drei Arten von Schleifen

Kopfgesteuert
Diese Schleifen haben eine Bedingung vor Ausführung des Schleifenkörpers und wenn immer diese Bedingung wahr ist, wird die Schleife ausgeführt:

solange (nightyhawk hat Durst)
{
  trinke();
}

Fußgesteuert
Hier wird grundsätzlich erstmal die Schleifenanweisung ausgeführt und dann geschaut, ob die Bedingungen für einen weiteren Durchlauf gegeben sind.

wiederhole
{
  diesenArtikelLesen();
}
bis (inhaltWurdeVerstanden);

Zählergesteuert
Wenn man genau weiß, wie oft der Anweisungsblock ausgeführt werden muß, nimmt eine sogenannte Zählschleife

for (i=0; i<10; i++)
{
  Anweisung
}


Als Faustregel gilt, dass sich jeder Schleifentyp in jeden anderen Schleifentyp überführen läßt. Obwohl selbiges natürlich nicht immer sinnvoll ist.

Das nächste Mal kümmern wir uns dann wieder um den Stoc-Indi!
Chleudere den Purchen zu Poden!

  • Blogger
  • Tastaturflitzer
  • *
    • Beiträge: 260
    • Karma: +94/-0
    • Mitglied seit:
      16 Jul 2010

  • Stop
Antw:Wir lernen MQL4
« Antwort #18 am: September 27, 2010, 19:59:43 pm »
hi nightyhawk,

ich habe nochmal eine Frage zu:

int start() { ... }
Diese Funktion ist das "Herzstück" jedes Indikator oder EAs. MT4 ruft start bei jedem neuen Tick auf. Also wenn sich der Preis im Chart X ändert und unser Indikator in diesem Chart liegt, so wird umgehend start aufgerufen.

Ich dachte bisher das es möglich wäre den Code so gestalten das bei einem neuen Tick nur der aktuelle Bar, also I=0 berechnet wird. Ich habe mir in meinem Indi Ausgaben per Print geben lassen und bemerke das er den gesamten Code bei jedem Tick neu macht, was er eigentlich nicht soll.
Code: Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen
int start()
  {
   int i,counted_bars=IndicatorCounted();

//----
   i=Bars;
   if(counted_bars<1) {i=0;}
   
   
   while(i>=0)
     {
      Hier ist der Print drin.
      i--;
     }
return(0);

Ich bin davon ausgegangen das er bei einem neuen Tick nicht I=Bars setzt, sondern i nur den aktuellen Bar. Ist das nicht möglich, hab ich nen Denkfehler, oder wie würde man das richtig machen?
Never give up, NEVER!

"Damit das Mögliche entsteht, muss immer wieder das Unmögliche versucht werden." Hermann Hesse

  • Ist Forum süchtig
  • ****
    • Beiträge: 1567
    • Karma: +431/-289
    • Mitglied seit:
      16 Jun 2009

  • Vintage Carbon Backgammon Spinning Bubbles Air Traffic Chief 4 Wheels Madness
    Cryptraider Skidwrx Formula Fun
  • Stop
Antw:Wir lernen MQL4
« Antwort #19 am: September 27, 2010, 22:57:51 pm »
denkfehler

wenn du eine berechnung, zb einen ma, ema oder ähnliches machst mit Periode = x und der kurs = y errechnet er sich logischerweise den wert über die Periode x hin zum close des kurses y

also im konkreten fall du hast einen ema20
bei einem tick ändert sich der wert, hier kann mans schön sehen weil der ema gewichtet ist
hast du als berechnung die bars von 1-21 also auch 20 nur der aktuelle ist ihm egal, dann ändert sich der wert zwar nicht, aber eine neue berechnung erfolgt.

The biggest drawdown is ahead of you. (from Joel R.)

aktueller Tetris Rekordhalter!!!!!!!!!!!!!!!!

warum ist mein karma positiv??????? bitte immer auf ein minus mehr als plus

  • Blogger
  • Tastaturflitzer
  • *
    • Beiträge: 260
    • Karma: +94/-0
    • Mitglied seit:
      16 Jul 2010

  • Stop
Antw:Wir lernen MQL4
« Antwort #20 am: September 29, 2010, 21:10:35 pm »
ok, hatte schon vermutet das es damit zusammenhängen könnte. :/ Hmm naja muss ich erstmal mit leben. Momentan fehlt mir die Muße mich in EA einzuarbeiten und mir da dann die Backtestdaten rausgeben zu lassen. Momentan mache ich es halt über Print und simuliere meine Kauf und Verkaufsorder da drüber. Einziger grosser Nachteil, ich muss jedesmal meine Internetverbidnung kappen wenn ich das backtesten will, sonst fängt die Berechnung dann bei jedem Tick ja neu an wie ich nun gelernt habe.  ;D Aber ich hätte da noch ne andere Frage, ich pack das mal hier in den Lern-Thread mit rein weil ich dafür keinen eigenen Post aufmachen will. Ich hoffe Du verzeihst mir das nightyhawk  ;)

Ich versuche gerade ein Datum auszugeben was ich auch als normal Sterblicher auch verstehen kann. Die Sekundenzeit seid erstem Bar ist mir dann doch zu heftig. Wie kann ich denn das Ergebnis von iTime in ein normales Datum umwandeln?
Mit datime Datumnormal=itime(Symbol)... klappts jedenfalls nicht. Und in der Hilfe hab ich nur den Hinweis erhalten das intern das Datum halt als:

internal representation is a long integer number of 4 bytes. The value represents the amount of seconds elapse from 00:00 Jan 1, 1970. ausgeben. Also 'D'19.07.1980 12:30:27'' in Sekunden zum Beispiel.

thx
DS
Never give up, NEVER!

"Damit das Mögliche entsteht, muss immer wieder das Unmögliche versucht werden." Hermann Hesse

  • Ist Forum süchtig
  • ****
    • Beiträge: 1567
    • Karma: +431/-289
    • Mitglied seit:
      16 Jun 2009

  • Vintage Carbon Backgammon Spinning Bubbles Air Traffic Chief 4 Wheels Madness
    Cryptraider Skidwrx Formula Fun
  • Stop
Antw:Wir lernen MQL4
« Antwort #21 am: September 29, 2010, 21:59:24 pm »
was für ein datum willst du denn haben? heutiges?

string datum = Day() + "." + Month() + "." + Year();
The biggest drawdown is ahead of you. (from Joel R.)

aktueller Tetris Rekordhalter!!!!!!!!!!!!!!!!

warum ist mein karma positiv??????? bitte immer auf ein minus mehr als plus

  • Blogger
  • Tastaturflitzer
  • *
    • Beiträge: 260
    • Karma: +94/-0
    • Mitglied seit:
      16 Jul 2010

  • Stop
Antw:Wir lernen MQL4
« Antwort #22 am: September 30, 2010, 07:08:56 am »
hi forexler,

ich möchte das Datum mit Zeit des aktuellen Bars in der Schleife haben. Also abhängig vom Index dann.

Code: Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen
int timeNow=iTime(Symbol(),0,i);
Das was ich da rausbekomme in Sekunden möchte ich als Datum mit Zeit ausgegeben haben.
Never give up, NEVER!

"Damit das Mögliche entsteht, muss immer wieder das Unmögliche versucht werden." Hermann Hesse

  • Ist Forum süchtig
  • ****
    • Beiträge: 1567
    • Karma: +431/-289
    • Mitglied seit:
      16 Jun 2009

  • Vintage Carbon Backgammon Spinning Bubbles Air Traffic Chief 4 Wheels Madness
    Cryptraider Skidwrx Formula Fun
  • Stop
Antw:Wir lernen MQL4
« Antwort #23 am: September 30, 2010, 07:49:16 am »
dann verwende einfach timetostr(xxx|xx);
The biggest drawdown is ahead of you. (from Joel R.)

aktueller Tetris Rekordhalter!!!!!!!!!!!!!!!!

warum ist mein karma positiv??????? bitte immer auf ein minus mehr als plus

  • Gehört zum Inventar
  • ***
    • Beiträge: 954
    • Karma: +183/-7
    • Mitglied seit:
      19 Jun 2010

  • Stop
Antw:Wir lernen MQL4
« Antwort #24 am: Oktober 01, 2010, 12:27:41 pm »
Evtl kann der Link jm helfen:

besonders die Rubrik "Liste der Konfigurationsvariablen"

Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen
Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen

  • Blogger
  • Tastaturflitzer
  • *
    • Beiträge: 260
    • Karma: +94/-0
    • Mitglied seit:
      16 Jul 2010

  • Stop
Antw:Wir lernen MQL4
« Antwort #25 am: Oktober 01, 2010, 19:17:05 pm »
ich danke Dir forexler.
Hat vielleicht noch jemand einen Tipp auf Lager warum ich bei der Print Ausgabe nicht alle Werte im Experten Log ausgegeben bekomme? Mir ist das schon häufiger aufgefallen das nicht der gesamte Index dort ausgegeben wird. Sagen wir mal ich habe 50.000 Bars bei einem Timeframe, dann beginnt die Ausgabe im Print aber erst bei 8.000. Kann man das irgendwo einstellen das man alle ausgegeben bekommt. Im Chart ist alles wunderbar, nur im Print fehlt halt was.
Never give up, NEVER!

"Damit das Mögliche entsteht, muss immer wieder das Unmögliche versucht werden." Hermann Hesse

  • Blogger
  • Tastaturflitzer
  • *
    • Beiträge: 260
    • Karma: +94/-0
    • Mitglied seit:
      16 Jul 2010

  • Stop
Antw:Wir lernen MQL4
« Antwort #26 am: Oktober 02, 2010, 12:35:32 pm »
hat sich erledigt. Ich hab mir das Ganze nun als CSV ausgeben lassen und analysiere dann in OpenOffice. Ist eh besser dafür geeignet. :)
Never give up, NEVER!

"Damit das Mögliche entsteht, muss immer wieder das Unmögliche versucht werden." Hermann Hesse

  • Global Moderator
  • Ist Forum süchtig
  • *
  • *
  • *
    • Beiträge: 1714
    • Karma: +422/-6
    • Mitglied seit:
      11 Aug 2009
  • Broker: IGMarkets

  • Mars Defense Car Chaos Get Groovy BallsPC Motorrad-Trauma
    Bloons Tower Defense
  • Stop
Antw:Wir lernen MQL4
« Antwort #27 am: Dezember 22, 2010, 13:19:38 pm »
Über ein viertel Jahr ist vergangen und keinem ausser einem (  :beer: ) ist aufgefallen, dass es hier nicht weitergeht. Nun denn, ran an die Tasten und den nächsten Codeblock unter die Lupe genommen:

Code: Es ist Dir nicht erlaubt Links zu betrachten. Registrieren oder Einloggen
//---- minimums counting
   i=Bars-KPeriod;
   if(counted_bars>KPeriod) i=Bars-counted_bars-1;
   while(i>=0)
     {
      double min=1000000;
      k=i+KPeriod-1;
      while(k>=i)
        {
         price=Low[k];
         if(min>price) min=price;
         k--;
        }
      LowesBuffer[i]=min;
      i--;
     }
Um den Code besser zu verstehen, sollte man sich überlegen, was der Stochastik überhaupt macht. Einfach gesagt, setzt der Stochastik den aktuellen Schlußkurs ins Verhältnis zum Höchsten Hoch und zum tiefsten Tief der letzten x-Perioden (in diesem Fall der letzten kPeriod-Perioden)!
Der obige Code ist nun ein Bestandteil davon und errechnet uns für jede beliebige Candle das tiefste Tief. Und wie macht der Code das?


i=Bars-KPeriod;
if(counted_bars>KPeriod) i=Bars-counted_bars-1;

Nun, zuerst wird ermittelt für wieviele Candles wir das überhaupt berechnen müssen. Prinzipiell für alle ausser die letzten kPeriod Kerzen. Warum? Nehmen wir an, unser Chart hat 20 Kerzen und wir wollen den Tiefpunkt von 14 aufeinanderfolgenden Kerzen ermitteln, dann kann man daraus schließen das diese Betrachtung nur für die letzten 6 Kerzen Sinn macht (für die erste Kerze bspw. existieren keine 13 Vorgänger, wir können also nicht die letzten 14 Kerzen betrachten!)!
Aus Effizienzgründen vergleicht der Indicator nun noch, wieviel Bars sich seit dem letzten Mal nicht verändert haben - für diese wäre ein erneutes Berechnen dann ebenfalls sinnlos, da der Wert hierfür schon besteht!
Die Variable i enthält nun die Anzahl an Kerzen, für die wir das kPeriod-Minimum berechnen wollen!

while(i>=0)
{
   double min=1000000;
   k=i+KPeriod-1;

   [...]

   LowesBuffer[ i]=min;
   i--;
}

Hier haben wir ein schönes Beispiel, für eine kopfgesteuerte Schleife - (zur Erinnerung, solange die Bedingung -also i>=0- erfüllt bleibt, solange soll der folgende Abschnitt ausgeführt werden!). Die Schleife geht nun jede Kerze, die neu berechnet werden muss, durch und führt die folgenden Anweisungen aus. Zuerst setzt sie die Variable min auf einen sehr hohen Pseudowert - diesen benötigen wir für den späteren Vergleich! Dann wird die Variable k auf den Index der Kerze gesetzt, die wir als erste für unser Minimum überprüfen wollen.
In der ausgelassen Schleifen suchen wir das Minimum und weisen es dann dem Array LowesBuffer an der Stelle i zu. Letztlich wird i um eins gesenkt (i--) und der Code springt zurück in den Kopf der Schleife, um die Bedingung erneut zu prüfen.


while(k>=i)
{
 price=Low[k];
 if(min>price) min=price;
 k--;
}

In diesem Berich wird der Variable price das Low der Kerze an Position k zugewiesen. Wenn unser bisheriges Minimum (min) noch größer als dieser Price ist, dann folgt daraus unser price ist kleiner als das bisherige Minimum. Wir haben also ein neues Minimum und können die nächste Kerze überprüfen.

Dazu ein kleines Beispiel:
Wir wollen nach diesem Algorithmus das Minimum aus den folgenden acht Minimum-Preisen ermitteln:

10 10 05 20 14 21 30 35
7. 6. 5. 4. 3. 2. 1. 0.


Und zwar soll das Minimum über vier Preise ermittelt werden. Durch diese Bedingung, können wir für die Positionen 7,6 und 5 gar kein Minimum über vier Kerzen (und damit später auch keinen Stochastik) berechnen.
Unser erster Wert für i wäre als 4 (für Position 4)!
Nun wird unserer min auf 1000000 gesetzt und k berechnet sich aus k = 4 (i) + 4 (kPeriod) - 1 sind also k = 4 + 4 - 1 sind 7!

Wir springen also in die innere Schleife, da k>=i (also 7>=4) ist. Hier wird price das Low[k] also der Tiefstwert der Kerze 7 zugewiesen. Price ist also in unserem Beispiel 10! Das 10 kleiner ist als 1000000 ist unser neues Minimum 10! Zum Schluß wird k auf 6 verringert und wir prüfen erneut die Schleifenbedingung (6>=4), machen also einen neuen Schleifendurchlauf!

Der Price ist diesmal Low[6] also wieder 10. 10 ist nicht kleiner als 10, am min ändert sich nichts!

Nächster Schleifendurchlauf k=5! Diesmal ist der Low[5] = 5 und wir haben ein neues Minimum (min = 5)!

Nächster Schleifendurchlauf k=4! Kein neues min, da Low[4] = 20!

Nun wird die innere Schleife auch abgebrochen, da unsere Bedingung (3>=4) nicht mehr stimmt. Wir haben also mit min = 5 ein Minimum ermittelt. Dieses wird nun dem Array LowesBuffer an der Stelle i (also an der Stelle 4) übergeben!

Der ganze Algorithmus läuft nun noch für die Stellen i=3, i=2, i=1 und i=0 ab. Unser Lowesbuffer sieht dann zum Schluß so aus:

10 10 05 20 14 21 30 35
7. 6. 5. 4. 3. 2. 1. 0.
-- -- -- 05 05 05 14 14

Chleudere den Purchen zu Poden!

  • Gelegenheitsschreiber
  • *
    • Beiträge: 62
    • Karma: +27/-0
    • Mitglied seit:
      11 Feb 2011

  • Stop
Antw:Wir lernen MQL4
« Antwort #28 am: Februar 12, 2011, 02:01:24 am »
Hallo nightyhawk,

toll das sich hier einer die Mühe macht solch ein komplexes Thema einem näher zu bringen. Da ich zukünftig auch ein oder mehrere EA´s produzieren möchte werde ich diesen Thread mit großen Interesse verfolgen!

Gruß Oliver

  • Blogger
  • Gehört zum Inventar
  • *
    • Beiträge: 1218
    • Karma: +238/-4
    • Mitglied seit:
      19 Nov 2008
    • Vorwärts immer - rückwärts nimmer !
  • Broker: Activtrades Demo, IBFX AU Demo, GO Markets

  • Stop
Antw:Wir lernen MQL4
« Antwort #29 am: Juni 05, 2011, 12:17:40 pm »
na ja vll passt dies hier rein ? ... und ist von Nutzen ...
"I DO it my way !" (frei nach F.S.)



 

Ähnliche Themen

  Betreff / Begonnen von Antworten Letzter Beitrag
0 Antworten
588 Aufrufe
Letzter Beitrag November 15, 2008, 22:47:16 pm
von Gregor
15 Antworten
4220 Aufrufe
Letzter Beitrag Juni 19, 2011, 00:43:25 am
von Egetuerk
17 Antworten
3904 Aufrufe
Letzter Beitrag Juni 30, 2011, 14:07:38 pm
von Andreas
2 Antworten
1803 Aufrufe
Letzter Beitrag Juli 25, 2010, 01:17:32 am
von Divecall
1 Antworten
878 Aufrufe
Letzter Beitrag Mai 08, 2011, 07:46:48 am
von fxdaytrader
5 Antworten
561 Aufrufe
Letzter Beitrag Juli 02, 2011, 11:56:41 am
von ekenom
36 Antworten
1415 Aufrufe
Letzter Beitrag April 25, 2012, 06:59:57 am
von Der-Sucher
12 Antworten
532 Aufrufe
Letzter Beitrag März 27, 2012, 22:51:25 pm
von NastyCem


ChartTec´s World Topsites