|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Lücken bei CrossOver
Hallo Leute,
ich stehe irgendwie total auf dem Schlauch, habe einen Übungsindikator geproggt, um mehr Erfahrung zu sammeln aber ja komm gerade nicht weiter bzw. kann den Wald vor lauter bäumen nicht mehr sehen xdddd folgendes: upperShortMovingAverage = MovingAverage 9 upperLongMovingAverage = MovingVerage 14 9>14 = Bollinger Band UpperLine = Green 9<14 = Bollinger Band UpperLie = Red lowerShortMovingAverage = MovingAverage 9 lowerLongMovingAverage = MovingVerage 14 9>14 = Bollinger Band lowerLine = Green 9<14 = Bollinger Band lowerLine = Red Problem genau an der Stelle wo die Überkreuzung stattfindet entstehen lücken in der Bollinger Bands anzeige egal ob upperLine oder lowerLine ich poste mal den Code bin echt offen für alles, aber denke das Problem muss mit dem Counting Bars zu tun haben bin irgendwie total überfragt gerade :/ Hinweis: was mir auch sehr komisch vorkommt wenn ich i+1 oder i+10 mache bekomme ich auch keine ArrayOutOfRange Fehlermeldung????? Code:
//+------------------------------------------------------------------+ //| presvm_v1.mq4 | //| Copyright 2020, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #property indicator_chart_window //setting Buffers #property indicator_buffers 8 //preCompiling color (Buffer1 = ArrayIndex0) #property indicator_color1 clrGreen //modeUpperBBandGreen #property indicator_color2 clrRed //modeLowerBBandRed #property indicator_color3 clrRed //modeUpperBBandRed #property indicator_color4 clrGreen //modeLowerBBandGreen #property indicator_color5 clrGreen //modeMiddleBBandGreen #property indicator_color6 clrRed //modeMiddleBBandRed #property indicator_color7 clrGreen//upArrow #property indicator_color8 clrRed//downArrow //preCompiling width #property indicator_width1 2 //modeUpperBBandGreen #property indicator_width2 2 //modeLowerBBandRed #property indicator_width3 2 //modeUpperBBandRed #property indicator_width4 2 //modeLowerBBandGreen #property indicator_width5 2 //modeMiddleBBandGreen #property indicator_width6 2 //modeMiddleBBandRed #property indicator_width7 3 //upArrow #property indicator_width8 3 //downArrow //externalSettings upArrowDownArrow extern string visualization;//>>>>>>Visualization Settings<<<<<< extern bool arrowsVisualization = true; extern bool bandsVisualization = true; //externalSettings upperBBand extern string upperDescriptionBBand;//>>>>>>upper Bollinger Bands Settings<<<<<< extern int upperBBandPeriod = 20; extern int upperBBandOffset = 0; extern int upperBBandDeviation = 2; extern ENUM_APPLIED_PRICE upperBBandPrice = PRICE_OPEN; //externalSettings lowerBBand extern string lowerDescriptionBBand;//>>>>>>lower Bollinger Bands Settings<<<<<< extern int lowerBBandPeriod = 20; extern int lowerBBandOffset = 0; extern int lowerBBandDeviation = 2; extern ENUM_APPLIED_PRICE lowerBBandPrice = PRICE_OPEN; //externalSettings upperShortMovingAverage extern string upperShortMovingAverageDescription; //>>>>>>upper Short Moving Average Settings<<<<<< extern int upperShortMovingAveragePeriod = 9; extern int upperShortMovingAverageOffset = 0; extern ENUM_MA_METHOD upperShortMovingAverageMode = MODE_SMA; extern ENUM_APPLIED_PRICE upperShortMovingAveragePrice = PRICE_OPEN; //externalSettings upperLongMovingAverage extern string upperLongMovingAverageDescription; //>>>>>>upper Long Moving Average Settings<<<<<< extern int upperLongMovingAveragePeriod = 14; extern int upperLongMovingAverageOffset = 0; extern ENUM_MA_METHOD upperLongMovingAverageMode = MODE_SMA; extern ENUM_APPLIED_PRICE upperLongMovingAveragePrice = PRICE_OPEN; //externalSettings lowerShortMovingAverage extern string lowerShortMovingAverageDescription; //>>>>>>lower Short Moving Average Settings<<<<<< extern int lowerShortMovingAveragePeriod = 9; extern int lowerShortMovingAverageOffset = 0; extern ENUM_MA_METHOD lowerShortMovingAverageMode = MODE_SMA; extern ENUM_APPLIED_PRICE lowerShortMovingAveragePrice = PRICE_OPEN; //externalSettings lowerLongMovingAverage extern string lowerLongMovingAverageDescription; //>>>>>>lower Long Moving Average Settings<<<<<< extern int lowerLongMovingAveragePeriod = 14; extern int lowerLongMovingAverageOffset = 0; extern ENUM_MA_METHOD lowerLongMovingAverageMode = MODE_SMA; extern ENUM_APPLIED_PRICE lowerLongMovingAveragePrice = PRICE_OPEN; //arrayDeclaration (Dynamic) double modeUpperBBandGreen[]; double modeLowerBBandRed[]; double modeUpperBBandRed[]; double modeLowerBBandGreen[]; double modeMiddleBBandGreen[]; double modeMiddleBBandRed[]; double upArrow[]; double downArrow[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping //modeUpperBBandGreen SetIndexBuffer(0,modeUpperBBandGreen); SetIndexStyle(0,DRAW_LINE); //modeLowerBBandGreen SetIndexBuffer(1,modeLowerBBandRed); SetIndexStyle(1,DRAW_LINE); //modeUpperBBandGreen SetIndexBuffer(2,modeUpperBBandRed); SetIndexStyle(2,DRAW_LINE); //modeLowerBBandGreen SetIndexBuffer(3,modeLowerBBandGreen); SetIndexStyle(3,DRAW_LINE); //modeMiddleBBandGreen SetIndexBuffer(4,modeMiddleBBandGreen); SetIndexStyle(4,DRAW_LINE); //modeMiddleBBandRed SetIndexBuffer(5,modeMiddleBBandRed); SetIndexStyle(5,DRAW_LINE); //upArrow SetIndexBuffer(6,upArrow); SetIndexStyle(6,DRAW_ARROW); SetIndexArrow(6,233); SetIndexLabel(6,"Buy Signal"); //downArrow SetIndexBuffer(7,downArrow); SetIndexStyle(7,DRAW_ARROW); SetIndexArrow(7,234); SetIndexLabel(7,"Sell Signal"); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- //Counting Bars int counted_bars, limit; counted_bars=IndicatorCounted(); limit=Bars-counted_bars; for(int i=0;i<limit;i++){ //Bollinger Band declaration double modeUpperBBand=iBands(NULL,0,upperBBandPeriod,upperBBandDeviation,upperBBandOffset,upperBBandPrice,MODE_UPPER,i); double modeLowerBBand=iBands(NULL,0,lowerBBandPeriod,lowerBBandDeviation,lowerBBandOffset,lowerBBandPrice,MODE_LOWER,i); double modeMiddleBBand=iBands(NULL,0,lowerBBandPeriod,lowerBBandDeviation,lowerBBandOffset,lowerBBandPrice,MODE_MAIN,i); //Moving Average declaration double upperShortMovingAverage=iMA(NULL,0,upperShortMovingAveragePeriod,upperShortMovingAverageOffset,upperShortMovingAverageMode,upperShortMovingAveragePrice,i); double upperLongMovingAverage=iMA(NULL,0,upperLongMovingAveragePeriod,upperLongMovingAverageOffset,upperLongMovingAverageMode,upperLongMovingAveragePrice,i); double lowerShortMovingAverage=iMA(NULL,0,lowerShortMovingAveragePeriod,lowerShortMovingAverageOffset,lowerShortMovingAverageMode,lowerShortMovingAveragePrice,i); double lowerLongMovingAverage=iMA(NULL,0,lowerLongMovingAveragePeriod,lowerLongMovingAverageOffset,lowerLongMovingAverageMode,lowerLongMovingAveragePrice,i); double movingAverage200=iMA(NULL,0,200,0,MODE_SMA,PRICE_OPEN,i); //visualization of Bollinger Band and Moving Average (conditional) if(bandsVisualization==true){ //modeUpperBBandGreen if(upperShortMovingAverage>upperLongMovingAverage){ modeUpperBBandGreen[i]=modeUpperBBand; modeUpperBBandRed[i]=EMPTY_VALUE; //modeLowerBBandGreen if(lowerShortMovingAverage>lowerLongMovingAverage){ modeLowerBBandGreen[i]=modeLowerBBand; modeLowerBBandRed[i]=EMPTY_VALUE; //modeLowerBBandRed }else if(lowerShortMovingAverage<lowerLongMovingAverage){ modeLowerBBandRed[i]=modeLowerBBand; modeLowerBBandGreen[i]=EMPTY_VALUE; } //modeUpperBBandRed }else if(upperShortMovingAverage<upperLongMovingAverage){ modeUpperBBandRed[i]=modeUpperBBand; modeUpperBBandGreen[i]=EMPTY_VALUE; //modeLowerBBandGreen if(lowerShortMovingAverage>lowerLongMovingAverage){ modeLowerBBandGreen[i]=modeLowerBBand; modeLowerBBandRed[i]=EMPTY_VALUE; //modeLowerBBandRed }else if(lowerShortMovingAverage<lowerLongMovingAverage){ modeLowerBBandRed[i]=modeLowerBBand; modeLowerBBandGreen[i]=EMPTY_VALUE; } } } //visualization of upArrow and downArrow with Alert (conditional) if(arrowsVisualization==true){ if(upperShortMovingAverage>upperLongMovingAverage && lowerShortMovingAverage>lowerLongMovingAverage && Close[i]<Open[i] && Close[i]<modeLowerBBand ){ upArrow[i]=Close[i]; }else if(upperShortMovingAverage<upperLongMovingAverage && lowerShortMovingAverage<lowerLongMovingAverage && Close[i]>Open[i] && Close[i]>modeUpperBBand ){ downArrow[i]=Close[i]; } } //visualization of modeMiddleBBandGreen and modeMiddleBBandRed if(movingAverage200<Close[i]){ modeMiddleBBandGreen[i]=modeMiddleBBand; modeMiddleBBandRed[i]=EMPTY_VALUE; }else{ modeMiddleBBandRed[i]=modeMiddleBBand; modeMiddleBBandGreen[i]=EMPTY_VALUE; } } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ |
|
|||
Indikator-Trading hat bereits gesagt, woran es liegt.
Ich verfahre bei so etwas grundsätzlich so: 1. Bänder/Linien werden zuerst in neutraler Farbe gezeichnet 2. bei Bedingung erfüllt a. wird ein grüner Buffer (9>14) b. wird ein roter Buffer (9<14) mit dem neutralen Wert über die neutrale Farbe gezeichnet Reihenfolge der Buffer in OnInit 1. neutral: wird immer gezeichnet 2. grün: wird nur bei Bedingung a gezeichnet 3. rot: wird nur bei Bedingung b gezeichnet Nachteil: man braucht 2 zusätzliche Buffer im MT4 Vorteil: man kann z.B. eine Option zum Ein-/Ausschalten des Farbwechsels einsetzen. Der neutrale Wert ist immer vorhanden (man erhält keine Lücken und sieht zugleich, wann keiner der Bedingungen erfüllt ist; praktisch zum Auslesen, wenn man nur den Wert braucht). Man kann auch nur die neutrale Version nutzen. AVT |
|
|||
Zitat:
|
|
|||
Zitat:
|
|
|||
Zitat:
1. Band oben und Band unten nur grün/rot Wechsel 2. Band mitte grün/gelb/rot Wechsel Dann formuliere die Bedingungen für 1. anders: 9>=14 noch grün und 9<14 rot -- oder 9>14 grün und 9<=14 schon rot Das deckt alle Fälle ab. Du mußt nur entscheiden, ob der = Fall noch als grün gilt oder schon rot erscheint. So auf die Schnelle ohne Prüfung im MT. AVT |
Lesezeichen |
|
|