Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3824
Beiträge: 36909
Benutzer: 6.081
Aktive Benutzer: 495
Links: 80
Wir begrüßen unseren neuesten Benutzer: DarthTrader
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 2 Stunden
- DarthTrade...
vor 4 Stunden
- Eren
vor 12 Stunden
- Rene1504
vor 13 Stunden
- ibdafx
vor einem Tag
- Batangenyo

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 64
Gesamt: 64
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Werbung

Like Tree2Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 07.04.12
Mitglied
 
Registriert seit: Oct 2011
Beiträge: 77
Biatsch befindet sich auf einem aufstrebenden Ast
Standard Indikator mit BollingerBands

Hi,
ich versuche mich gerade ein einem Indikator, der mir ein Pfeilsignal gibt, wenn der Kurs innerhalb der letzten 25 Perioden das untere Band geschnitten hat.
Alles soll im 4H_Chart geprüft werden.

Leider setzt was auch immer ich da programmiert habe einen Pfeil an jede einzelne Kerze.
Außerdem werden die Pfeile beim Entfernen des Indikators nicht gelöscht, was aber der Fall sein soll.

Wisst Ihr, wo der Fehler liegt ?

HTML-Code:
#property indicator_chart_window

#property indicator_buffers 3
#property indicator_color1 LightSeaGreen
#property indicator_color2 LightSeaGreen
#property indicator_color3 LightSeaGreen
//---- indicator parameters
extern int    BandsPeriod=34;
extern int    BandsShift=0;
extern double BandsDeviations=2.0;
//---- buffers
double MovingBuffer[];
double UpperBuffer[];
double LowerBuffer[];
int x=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int deinit()
{
 for(int z=1;z<=x;z++)
      {
       ObjectDelete("BUY" + z);
      }
}

int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,MovingBuffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,UpperBuffer);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,LowerBuffer);
//----
   SetIndexDrawBegin(0,BandsPeriod+BandsShift);
   SetIndexDrawBegin(1,BandsPeriod+BandsShift);
   SetIndexDrawBegin(2,BandsPeriod+BandsShift);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Bollinger Bands                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int i,k,counted_bars=IndicatorCounted();
   
   i = Bars-counted_bars-1;
   
   while(i>=0)
      {      
      MovingBuffer[i] = iMA   (NULL,240,BandsPeriod,BandsShift,MODE_SMA,MODE_CLOSE,i);
      UpperBuffer[i]  = iBands(NULL,240,BandsPeriod,BandsDeviations,0,PRICE_CLOSE,MODE_UPPER,i);
      LowerBuffer[i]  = iBands(NULL,240,BandsPeriod,BandsDeviations,0,PRICE_CLOSE,MODE_LOWER,i);
      
      double Min = Low[Lowest(NULL,240,MODE_LOW,25,i)]; 
      double MinLowerBand = ArrayMinimum(LowerBuffer,25,i);
      
         if(Min<MinLowerBand){
            x++;
            ObjectCreate("BUY" + x,OBJ_ARROW,0,Time[i],Low[i]);
            ObjectSet("BUY" + x,OBJPROP_COLOR,Red); 
            ObjectSet("BUY" + x,OBJPROP_STYLE,SYMBOL_ARROWUP); 
            ObjectSet("BUY" + x,OBJPROP_WIDTH,3); 
            ObjectSet("BUY" + x,OBJPROP_BACK,true);
         }
      
      i--;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
  #2 (permalink)  
Alt 07.04.12
Elite Mitglied
 
Registriert seit: Jun 2010
Ort: Trier
Beiträge: 116
naranjoe befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

in deinem Code vergleichst du Äpfel mit Birnen.

Code:
double MinLowerBand = ArrayMinimum(LowerBuffer,25,i);
ArrayMinimum liefert dir ein INT mit der Position der entsprechenden Kerze.
Du musst also an der gefunden Position erst noch den Preis auslesen.

Bei
Code:
double Min = Low[Lowest(NULL,240,MODE_LOW,25,i)];
hast du das "i" vergessen, soll heissen iLowest !!!

Eigentlich hast du alles richtig gemacht, die Pfeile müssten auch
gelöscht werden, lt. deinem Code ist da alles O.K.


Gruß
naranjoe
Biatsch likes this.
  #3 (permalink)  
Alt 08.04.12
Mitglied
 
Registriert seit: Oct 2011
Beiträge: 77
Biatsch befindet sich auf einem aufstrebenden Ast
Standard

Thx, ich habe den Code nun nachgebessert, aber das Resultat ist nicht das, das ich erhofft hatte.

Ich wollte, dass der Pfeil immer dann auftaucht, wenn der Kurs das untere Band innerhalb der letzten 25 Perioden im 4H_Chart unterschritten hat.

Dies trifft aber nicht zu.
Ich scheine also noch (mindestens) einen Denkfehler zu machen.

Ich habe mal ein Bild des Indikators hochgeladen.
Unter anderem dort, wo die Daumen sind hätten weitere Pfeile sein müssen.

PS: Dass der Indikator keinen Sinn macht ist mir bewusst. Es geht mir darum das Prinzip zu verstehen.



HTML-Code:
#property indicator_chart_window

#property indicator_buffers 3
#property indicator_color1 LightSeaGreen
#property indicator_color2 LightSeaGreen
#property indicator_color3 LightSeaGreen

extern int    BandsPeriod=34;
extern int    BandsShift=0;
extern double BandsDeviations=2.0;

double MovingBuffer[];
double UpperBuffer[];
double LowerBuffer[];
int x=0;
int MinPosition=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int deinit()
{
 for(int z=1;z<=x;z++)
      {
       ObjectDelete("BUY" + z);
      }
}

int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,MovingBuffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,UpperBuffer);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,LowerBuffer);
//----
   SetIndexDrawBegin(0,BandsPeriod+BandsShift);
   SetIndexDrawBegin(1,BandsPeriod+BandsShift);
   SetIndexDrawBegin(2,BandsPeriod+BandsShift);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Bollinger Bands                                                  |
//+------------------------------------------------------------------+
int start()
{
   int i,k,counted_bars=IndicatorCounted();

   i = Bars-counted_bars-1;

   while(i>=0)
      {
      MovingBuffer[i] = iMA   (NULL,240,BandsPeriod,BandsShift,MODE_SMA,MODE_CLOSE,i);
      UpperBuffer[i]  = iBands(NULL,240,BandsPeriod,BandsDeviations,0,PRICE_CLOSE,MODE_UPPER,i);
      LowerBuffer[i]  = iBands(NULL,240,BandsPeriod,BandsDeviations,0,PRICE_CLOSE,MODE_LOWER,i);

      double Min = Low[iLowest(NULL,240,MODE_LOW,25,i)];
      int MinPosition = ArrayMinimum(LowerBuffer,25,i);
      double MinLowerBand = iBands(NULL,240,BandsPeriod,BandsDeviations,0,PRICE_CLOSE,MODE_LOWER,MinPosition);  

         if(Min<MinLowerBand){
            x++;
            ObjectCreate("BUY" + x,OBJ_ARROW,0,Time[i],Low[i]);
            ObjectSet("BUY" + x,OBJPROP_COLOR,Red); 
            ObjectSet("BUY" + x,OBJPROP_STYLE,SYMBOL_ARROWUP); 
            ObjectSet("BUY" + x,OBJPROP_WIDTH,3); 
            ObjectSet("BUY" + x,OBJPROP_BACK,true);
         }

      i--;
     }
//----
   return(0);
}
  #4 (permalink)  
Alt 08.04.12
Mitglied
 
Registriert seit: Oct 2011
Beiträge: 77
Biatsch befindet sich auf einem aufstrebenden Ast
Standard

Ich habe außerdem noch eine Frage zur Zeile:

int MinPosition = ArrayMinimum(LowerBuffer,25,i);

Wenn das Minimum z.B. 25 Perioden von der aktuellen Position entfernt ist und i=100 ist; welchen Wert hat dann MinPosition ? 125 oder 25 ?
  #5 (permalink)  
Alt 08.04.12
Elite Mitglied
 
Registriert seit: Jun 2010
Ort: Trier
Beiträge: 116
naranjoe befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Biatsch Beitrag anzeigen
Ich habe außerdem noch eine Frage zur Zeile:

int MinPosition = ArrayMinimum(LowerBuffer,25,i);

Wenn das Minimum z.B. 25 Perioden von der aktuellen Position entfernt ist und i=100 ist; welchen Wert hat dann MinPosition ? 125 oder 25 ?
Die 25 Perioden werden immer von der aktuellen Pos., also i berechnet.
wenn i=100 dann ist die Pos. 125.

Gruß
narnajoe
Biatsch likes this.
  #6 (permalink)  
Alt 08.04.12
Mitglied
 
Registriert seit: Oct 2011
Beiträge: 77
Biatsch befindet sich auf einem aufstrebenden Ast
Standard

Und wie schaut es mit meinem Code aus ?
Hast du dafür eine Lösung ?
  #7 (permalink)  
Alt 08.04.12
Elite Mitglied
 
Registriert seit: Jun 2010
Ort: Trier
Beiträge: 116
naranjoe befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Thx, ich habe den Code nun nachgebessert, aber das Resultat ist nicht das, das ich erhofft hatte.

Ich wollte, dass der Pfeil immer dann auftaucht, wenn der Kurs das untere Band innerhalb der letzten 25 Perioden im 4H_Chart unterschritten hat.

Dies trifft aber nicht zu.
Ich scheine also noch (mindestens) einen Denkfehler zu machen.
Ich vermute mal, das der Fehler darin liegt, dass du eine Pos. in den letzten 25 Kerzen markieren möchtest ausgehend von i.
Eigentlich überflüssing da deine Schleife die Pos. schon passiert hat.
Versuch das ganze doch mal ohne die letzten 25 Positionen auszuwerten und
nur mit der aktuellen Position zu arbeiten.

Gruß
naranjoe
  #8 (permalink)  
Alt 08.04.12
Mitglied
 
Registriert seit: Oct 2011
Beiträge: 77
Biatsch befindet sich auf einem aufstrebenden Ast
Standard

Ich meinte es schon so, wie ich es beschrieben habe.
Wenn der Kurs einmal unterhalb des unteren Bandes liegt, sollen alle folgenden 25 Kerzen einen Pfeil bekommen.
Links vom ersten Daumen wurde das untere Band unterschritten, also hätten die nächsten 25 Kerzen ebenfalls rote Pfeile bekommen sollen.
  #9 (permalink)  
Alt 08.04.12
Elite Mitglied
 
Registriert seit: Jun 2010
Ort: Trier
Beiträge: 116
naranjoe befindet sich auf einem aufstrebenden Ast
Standard

Nochwas,

MinPosition suchst du mit ArrayMinimum.
Bei dem Buffer den du durchsuchst sind die Elemente allerdings von links
nach rechts ablgelegt. Du müsstest also ein ArraySetAsSeries
auf LowerBuffer anwenden. Das ist allerdings nicht möglich da ja der
Indikator von links nach rechts arbeitet.
Mein Vorschlag:
Du suchst die Position wie bei Min mit iLowest.

Code:
MinPosition = iLowest(NULL,240,MODE_LOW,25,i);
Gruß
naranjoe
  #10 (permalink)  
Alt 09.04.12
Mitglied
 
Registriert seit: Oct 2011
Beiträge: 77
Biatsch befindet sich auf einem aufstrebenden Ast
Standard

Nun hätte ich eine Frage zum folgenden Indikator:
Ich habe das Problem, dass die grüne Linie nicht angezeigt wird, wenn ich den Indikator anlege.
Ich muss ihm immer erst kompilieren, damit die Linie sichtbar wird.

HTML-Code:
#property indicator_separate_window

#property indicator_buffers 2
#property indicator_color1 Yellow
#property indicator_width1 2
#property indicator_color2 Green
#property indicator_width2 2

extern int BBPeriod        = 34;
extern int StdDeviation    = 2;
extern int MAPeriod        = 23;

double BLGBuffer[];
double MABuffer[];

int init() {
    string short_name;
    
    SetIndexStyle(0,DRAW_LINE);
    SetIndexBuffer(0,BLGBuffer);
    SetIndexStyle(1,DRAW_LINE);
    SetIndexBuffer(1,MABuffer);

    return(0);
}


int start() {

    int i = Bars - IndicatorCounted() - 1;
    
    while(i>=0){
    
        double dUpperBand = iBands(NULL,0,BBPeriod,StdDeviation,0,PRICE_CLOSE,MODE_UPPER,i);
        double dLowerBand = iBands(NULL,0,BBPeriod,StdDeviation,0,PRICE_CLOSE,MODE_LOWER,i);
            
        BLGBuffer[i] = dUpperBand - dLowerBand;
        
        MABuffer[i]  = iMAOnArray(BLGBuffer,0,MAPeriod,0,MODE_SMA,i);
    i--;
    }

    return(0);
}
Thema geschlossen

Lesezeichen

Stichworte
bollinger bands, bollinger bänder, bollingerbands, bollingerbänder, indikator, mql4, programmierung metatrader


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 03:20 Uhr.



Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2017 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------