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)
-   -   Brauche Hilfe (http://www.expert-advisor.com/forum/showthread.php?t=2120)

Biatsch 09.04.12 23:58

Brauche Hilfe
 
HTML-Code:

      Differenz[i] = iBands(NULL,240,BandsPeriod,BandsDeviations,0,PRICE_CLOSE,MODE_UPPER,i) - iBands(NULL,240,BandsPeriod,BandsDeviations,0,PRICE_CLOSE,MODE_LOWER,i);
      MABuffer[i]  = iMAOnArray(Differenz,0,MAPeriod,0,MODE_SMA,i);

      if(Differenz[i]>MABuffer[i]){
.
.
.}


Kann mir jemand bei diesem Code_Ausschnitt helfen ?
Die if_Bedingung wird nie erfüllt, aber was stimmt da nicht ?
Ich vermute, dass die iMAOnArray_Funktion nicht richtig berechnet wird.
Wenn ich diese paar Zeilen lösche funktioniert der Rest.

Hier sollen die Differenz zwischen oberem und unterem Bollinger_Band und ein MovingAverage dieser Differenz miteinander verglichen werden.
Die Differenz soll kleiner sein als ihr MA, damit es weitergeht.

Biatsch 10.04.12 10:58

Ich habe gerade mit der Print_Funktion den Wert vom Differenz_Buffer ausgegeben.
Dieser beträgt konstant 0.
Aber warum ist das so ?

Der Differenz_Buffer ist als double_Variable definiert.

Hoschie 10.04.12 15:55

Hi,

welche Werte haben die folgenden Parameter:

BandsPeriod
BandsDeviations

Gruss,
Hoschie

Biatsch 10.04.12 16:57

BandsPeriod = 34
BandsDeviations = 2


Es gab aber noch folgenden Ausgangszustand:
Ich hatte diese 2 Buffer nicht als solche in der Init_Funktion definiert, da diese ja auch nicht gezeichnet werden sollten.
Nachdem ich sie aber initiiert habe mit
SetIndexBuffer(3,DifferenzBuffer);
SetIndexBuffer(4,MABuffer);
funktionierte es.
Vorher waren die ausgegebenen Werte dieser beiden Buffer konstant 0.

Mir stellt sich nun aber die Frage, ob denn jedes Array, das nicht einmal gezeichnet werden soll so initiiert werden muss.
Ist denn tatsächlich die Gesamtzahl an Arrays auf 8 begrenzt ?

Hoschie 10.04.12 20:43

Zitat:

Zitat von Biatsch (Beitrag 12482)
BandsPeriod = 34
BandsDeviations = 2


Es gab aber noch folgenden Ausgangszustand:
Ich hatte diese 2 Buffer nicht als solche in der Init_Funktion definiert, da diese ja auch nicht gezeichnet werden sollten.
Nachdem ich sie aber initiiert habe mit
SetIndexBuffer(3,DifferenzBuffer);
SetIndexBuffer(4,MABuffer);
funktionierte es.
Vorher waren die ausgegebenen Werte dieser beiden Buffer konstant 0.

Mir stellt sich nun aber die Frage, ob denn jedes Array, das nicht einmal gezeichnet werden soll so initiiert werden muss.
Ist denn tatsächlich die Gesamtzahl an Arrays auf 8 begrenzt ?



Hallo Biatsch,

nur für den IndikatorBuffer kannst du 8 Arrays verwenden. Mehr geht nicht.
void IndicatorBuffers( int count)
Allocates memory for buffers used for custom indicator calculations. The amount of buffers cannot exceed 8 or be less than the value given in the indicator_buffers property. If custom indicator requires additional buffers for counting, this function must be used for specifying of the total amount of buffers.
Nein, du musst es nicht in der init-Methode initieren. Du kannst in der start-Methode mal folgendes versuchen:
ArrayResize(MyBuffer5,Bars);
ArraySetAsSeries(MyBuffer5,true);


Gruss,
Hoschie

Biatsch 16.04.12 20:29

Moin. So, meine vorherigen Probleme habe ich mitlerweile nachvollzogen und damit beseitigt.
Ich möchte nun, dass meine Indikator Pfeile einzeichnet, die bei einem Long_Signal nach oben und bei einem Short_Signal nach unten gerichtet sind.

Ich verstehe diesmal aber nicht, warum alle Pfeile nach oben gerichtet sind, obwohl da ARROWDOWN steht !?

Also die Pfeile befinden sich zumindest immer an der richtigen Stelle.

Der Code sieht so aus:
#
PHP-Code:

if(Bedingung_1){
               
x++;
               
ObjectCreate("BUY" x,OBJ_ARROW,0,Time[i],Low[i]);
               
ObjectSet   ("BUY" x,OBJPROP_COLOR,Blue); 
               
ObjectSet   ("BUY" x,OBJPROP_STYLE,SYMBOL_ARROWUP); 
               
ObjectSet   ("BUY" x,OBJPROP_WIDTH,5); 
               
ObjectSet   ("BUY" x,OBJPROP_BACK,true);
               }

if(
Bedingung_2){
               
x++;
               
ObjectCreate("SELL" x,OBJ_ARROW,0,Time[i],High[i]);
               
ObjectSet   ("SELL" x,OBJPROP_COLOR,Red); 
               
ObjectSet   ("SELL" x,OBJPROP_STYLE,SYMBOL_ARROWDOWN); 
               
ObjectSet   ("SELL" x,OBJPROP_WIDTH,5); 
               
ObjectSet   ("SELL" x,OBJPROP_BACK,true);
               } 


Biatsch 17.04.12 12:25

Also ich habe jetzt ArrowUp und ArrowDown durch die Pfeilcodes 241 und 242 ersetzt, aber es funktioniert immer noch nicht.

Ich muss auch sagen, dass ich garnicht genau weiß, wozu die einzelnen Objektfunktionen da sind^^

Wie schon erwähnt, werden die Pfeile alle an die richtige Stelle eingezeichnet. Nur die Pfeilart stimmet nicht mit der gewollten überein.

Hätte jemand einen Vorschlag, was die Ursache für das Problem sein könnte ?

naranjoe 17.04.12 16:47

Hallo,

das sieht mir schwer danach aus, als ob immer Bedingung_1 ausgeführt wird und Bedingung_2 nicht zum Zug kommt.
Blockier doch mal zum Test Bedingung_1 und gib Bedingung_2 vor, damit sie
auf jeden Fall ausgeführt wird.

Gruß
naranjoe

Biatsch 17.04.12 19:42

Nee,
Die Bedingungen werden beide erfüllt. Außerdem ist die eine Pfeilfarbe rot, die andere blau. Im Chart sind beide Pfeilfarben vertreten und auch an den richtigen Stellen.

Beide Bedingungen werden immer korrekt angezeigt.
Die Pfeile, die nach unten gerichtet sein sollen, sind aber nach oben gerichtet.

naranjoe 17.04.12 20:57

Fehler gefunden!

Ersetze das
OBJPROP_STYLE,SYMBOL_ARROWUP bzw. SYMBOL_ARROWDOWN

durch
OBJPROP_ARROWCODE ,SYMBOL_ARROWUP bzw. SYMBOL_ARROWDOWN

Dadurch sollte das Problem behoben sein.

Gruß
naranjoe


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