Variable an die nächste Kerze übergeben

 

Hallo zusammen


Wahrscheinlich suche ich nach den falschen Begriffen aber ich habe leider nichts gefunden. Ich habe ein Problem und es will mir nicht ganz in den Kopf wie das zu lösen ist. Ich habe eine Funktion gebaut, welche ich in OnTick() - also bei jeder neuen Kerze aufrufe. Was ich aber wirklich einfach nicht hinbekomme ist es, den berechneten Wert bei der nächsten Kerze als Input wieder zu verwenden (und nicht wieder neu beginnen).


Ich stelle mir das so vor, aber leider scheint das nicht so ganz zu funktionieren.  

int a;
function(int a) {
        a = a*a;
}

Ich erhalte eigentlich immer den Wert 0. Mir ist klar, dass der Fehler ist, dass ich a mit jeder neuen Kerze wieder neu instanziere. Aber wie nehme ich die Variabel in die nächste Kerze mit? Die Frage fühlt sich dumm an aber ich komme einfach nicht weiter... Vielen Dank für jegliche Hilfe

 

In MQL4 werden/wurden den Variablen (bei Dir a) der Wert Null oder Vergleichbares zugewiesen, bei MQL5 nicht mehr, dann haben die Zufallswerte!

int a = 2;
function(int a) {
        a = a*a;
}

sollte 'immer' 4 ergeben.

 
Carl Schreiber:

In MQL4 werden/wurden den Variablen (bei Dir a) der Wert Null oder Vergleichbares zugewiesen, bei MQL5 nicht mehr, dann haben die Zufallswerte!

sollte 'immer' 4 ergeben.

Vielen Dank, das wusste ich schon mal nicht. Wir bei der nächsten Kerze a in diesem Fall nicht wieder mit 2 überschrieben? Daher wenn ich das onTick() schreibe, bleibt das Ergebnis immer 4, das wäre in meinem Fall nicht gewünscht.


Mein Ziel ist:

1. Kerze: 0 (oder 2 - eigentlich ist es da noch egal)

2. Kerze: 2

3. Kerze: 4

4. Kerze: 8

5. Kerze: 16

usw.

Es geht nicht um die mathematische Funktion (ist ja nur ein Beispiel) sondern darum, den Wert welcher bei der vorderen Kerze ausgerechnet wurde, auf der nächsten wieder zu verwenden.

 
Patrick Zberg:

Vielen Dank, das wusste ich schon mal nicht. Wir bei der nächsten Kerze a in diesem Fall nicht wieder mit 2 überschrieben? Daher wenn ich das onTick() schreibe, bleibt das Ergebnis immer 4, das wäre in meinem Fall nicht gewünscht.


Mein Ziel ist:

1. Kerze: 0 (oder 2 - eigentlich ist es da noch egal)

2. Kerze: 2

3. Kerze: 4

4. Kerze: 8

5. Kerze: 16

usw.

Es geht nicht um die mathematische Funktion (ist ja nur ein Beispiel) sondern darum, den Wert welcher bei der vorderen Kerze ausgerechnet wurde, auf der nächsten wieder zu verwenden.

was ich noch nicht ganz verstanden habe

1) in der OnTick, die wird ja bei jedem Tick ausgeführt, da brauchst Du noch eine Funktion isNewBar

bool isNewBar()
  {
   static datetime lastTime=0;
   datetime lastbarTime=(datetime)SeriesInfoInteger(Symbol(),0,SERIES_LASTBAR_DATE);
   if(lastTime==0)
     {
      lastTime=lastbarTime;
      return(false);
     }
   if(lastTime!=lastbarTime)
     {
      lastTime=lastbarTime;
      return(true);
     }
   return(false);
  }

2) dann was willst Du eigentlich machen? Jede Kerze hat einen Index, die aktuelle Kerze immer 0, die vorherige 1, die davor 2,....


wenn Du mal beschreibst was Du machen willst kann man vielleicht helfen

 
amando:

was ich noch nicht ganz verstanden habe

1) in der OnTick, die wird ja bei jedem Tick ausgeführt, da brauchst Du noch eine Funktion isNewBar

2) dann was willst Du eigentlich machen? Jede Kerze hat einen Index, die aktuelle Kerze immer 0, die vorherige 1, die davor 2,....


wenn Du mal beschreibst was Du machen willst kann man vielleicht helfen

vielen Dank für den Hinweis mit dem isNewBar() das ist sicher korrekt. Werde das noch anpassen.


Was ich eigentlich tun möchte entspricht in ungefähr dem hier (vereinfacht):

if (isNewBar == true) {
        if (DurchschnittswertKerze[1] > Preis) {
                Durchschnittswert[0] = Durchschnittswert[1]*1.1; //Durschnittswert neue Kerze soll dem Durchschnitswert der Vergängerkerze * 1.1 entsprechen
        }
        else {
                Duchschnittswert[0] = Durchschnittswert[2]*0.9; 
};

if (Durchschnittswert[0] > 10) {
       functionTueX();
}
else {
       functionTueY();

};
 
Patrick Zberg:

vielen Dank für den Hinweis mit dem isNewBar() das ist sicher korrekt. Werde das noch anpassen.


Was ich eigentlich tun möchte entspricht in ungefähr dem hier (vereinfacht):

Achso, das ist ja kein problem

wie rechnest du den durschnuttswert? (High+Low)/2.

Du hast ja in MQL alle Barinformationen,

du brauchst ja nur die Werte High, Low,..... in einen Array aus dem Array lesen

oder du verwendest iHigh( .......

und die restlichen direkt zum berechnen


siehe hier

https://www.mql5.com/de/docs/constants/structures/mqlrates

Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Datenstrukturen / Struktur der historischen Daten
Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Datenstrukturen / Struktur der historischen Daten
  • www.mql5.com
Konstanten, Enumerationen und Strukturen / Datenstrukturen / Struktur der historischen Daten - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 
amando:

Achso, das ist ja kein problem

wie rechnest du den durschnuttswert? (High+Low)/2.

Du hast ja in MQL alle Barinformationen,

du brauchst ja nur die Werte High, Low,..... in einen Array aus dem Array lesen

oder du verwendest iHigh( .......

und die restlichen direkt zum berechnen


siehe hier

https://www.mql5.com/de/docs/constants/structures/mqlrates

Das war ein vereinfachtes Beispiel. Ich denke es gibt leider keine bestehende Funktion die ich aufrufen kann. Das ist ja das Problem.
 
Patrick Zberg:
Das war ein vereinfachtes Beispiel. Ich denke es gibt leider keine bestehende Funktion die ich aufrufen kann. Das ist ja das Problem.

Dann weißt Du eigentlich noch nicht, wie Du Deine Idee mathematisch formulieren kannst - so lange kannst Du es dann auch nicht programmieren.

Nimm also erstmal Papier und Bleistift ... :)

 
da kann ich Carl jetzt nur zustimmen
 
Carl Schreiber:

Dann weißt Du eigentlich noch nicht, wie Du Deine Idee mathematisch formulieren kannst - so lange kannst Du es dann auch nicht programmieren.

Nimm also erstmal Papier und Bleistift ... :)

Ich möchte den Code nicht öffentlich machen...
 

Kann ich verstehen, aber dann kann Dir niemand helfen.

Es bliebe dann nur ein Beispiel in der CodeBase suche und das dann ändern ...

MQL5 Code Base
MQL5 Code Base
  • www.mql5.com
Ein Kanal ist ein Handelsbereich zwischen Unterstützungs- und Widerstandslevel, in dem ein Aktienkurs für einen bestimmten Zeitraum schwankt. Dieser Indikator zeichnet die Widerstands- und Unterstützungslinien basierend auf den Hochs und Tiefs, die sich innerhalb eines definierten Zeitraums befinden. Volume Profile + Range v6.0 (former TPO...
Grund der Beschwerde: