Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
...
Doku,
2 Puffer sind insgesamt verbraucht (also noch 6 übrig) Ich weiß nicht genau, wie du das Histo haben willst, also poste ich stattdessen das hier (kein Histo, die Warnungen wurden irgendwann hinzugefügt und ich schreibe die "short" und "long" im Namen nicht aus) Schrei, wenn du Hilfe mit dem Histo brauchst
Grüße
mladen
Hy mladen,
Könnten Sie mir sagen, ob es eine Möglichkeit gibt, diesen Indy auf Histo-Bars zu haben?
alle Puffer sind belegt und ich weiß nicht, wie man das ändern kann ...
Bitte um Hilfe hier
Vielen Dank an alle.
Beste Grüße
DocDanke mladen!
Sie sind erstaunlich! Was für ein fantastischer Code in so wenig Zeit!
Zu fantastisch für mich...ich bin ein wenig verwirrt, wie ich ihn modifizieren kann, weil er völlig anders ist als mein Standardwissen
Ich würde gerne einige Histo-Balken für die Kreuzung dieser beiden Linien haben: ergodic cci Linie mit Trigger-Linie
Mit freundlichen Grüßen
Doc
...
Zwei Versionen :
"Classical histo" - erstes Unter-Fenster
"Bars histo" -> das, was Sie wollten - grün, wenn der Trigger unter dem ergodischen CCI liegt, rot, wenn der Trigger über dem ergodischen CCI liegt, grau, wenn sie gleich sind
Mit freundlichen Grüßen
mladen
Danke mladen !
Sie sind erstaunlich! Was für ein fantastischer Code in so wenig Zeit!
Zu fantastisch für mich ... ich bin ein wenig verwirrt, wie ich ihn modifizieren kann, weil er völlig anders ist als mein Standardwissen
Ich würde gerne einige Histo-Balken für die Kreuzung dieser beiden Linien haben: ergodic cci Linie mit Trigger Linie
Mit freundlichen Grüßen
DocZwei Versionen :
"Classical histo" - erstes Unter-Fenster
"Bars histo" -> das von Ihnen gewünschte Fenster - grün, wenn der Trigger unter dem ergodischen CCI liegt, rot, wenn der Trigger über dem ergodischen CCI liegt, grau, wenn sie gleich sind
Grüße
mladenGenau das was ich brauche!
Danke mladen du bist ein Genie !
Beste Grüße
Doc
Hallo mladen,
ich habe heute Nachmittag kurz reingeschaut und muss mich beeilen, bevor ich Hallo sagen kann.
Danke für den neuen Indikator und den Artikel von McGinley selbst. Ich lese ihn noch. Ja, ich war auch überrascht über die große Ähnlichkeit, als ich zum ersten Mal deine 1. Version neben einen 9-EMA legte. Ja, die Metastock-Formel hat keine Ähnlichkeit mit McGinleys Formel. Tut mir leid für die Fehlinformation, aber das ist, was ich aus dem Netz habe.
Wenigstens wissen wir jetzt, dass der Investopedia-Artikel ein wenig übertrieben hat. Aber da es wirklich ziemlich unbekannt war und das Interesse geweckt hat, macht es im Großen und Ganzen Spaß.
Danke und beste Grüße,
jswei.
Entschuldigung mladen,
könnten Sie mir bei diesem letzten Teil helfen?
Ist es möglich, diese Farben (wie auf dem Bild) ohne graue und gelbe Linie und mit Balken in der gleichen Reihe zu haben?
Mit freundlichen Grüßen
Doc
...
Etwa so ?
Grüße
mladen
Entschuldigung mladen,
Könnten Sie mir bei diesem letzten Teil helfen?
Ist es möglich, diese Farben (wie auf dem Bild) ohne graue und gelbe Linie und mit Balken in der gleichen Reihe zu haben?
Mit freundlichen Grüßen
DocGefällt Ihnen das?
Mit freundlichen Grüßen
mladengenau!
Vielen Dank mladen...gute Pips für Sie
Viele Grüße
Doc
Ich versuche, (weitere) Änderungen an dem von linuxuser geposteten bollinger %b-Indikator vorzunehmen. Ich möchte, dass er sich ähnlich wie der Stochastik-Indikator verhält, d.h. eine Signallinie hat und in der Lage ist, mehrere Perioden in einem Diagramm anzuzeigen. Ich habe dies mit Hilfe von linuxuser bereits geschafft, so dass es im Moment entweder zwei oder drei Perioden im selben Fenster anzeigt.
Jetzt versuche ich, es so einzurichten, dass ich Bruchwerte für die Standardabweichung in den Berechnungen verwenden kann. Liege ich richtig in der Annahme, dass ich die Standardfunktion von iBands dafür nicht verwenden kann? Ich habe versucht, den im Standard-Bands-Indikator enthaltenen Code zu verwenden, aber ich hatte nicht viel Erfolg. Könnte mir bitte jemand weiterhelfen?
Ich hoffe auch, dass ich den Indikator in die Lage versetzen kann, Berechnungen aus anderen Zeitrahmen anzuzeigen, aber ich schätze, dass ich einen Schritt nach dem anderen machen muss. Ich habe gemerkt, dass dies etwas schwieriger sein könnte, als ich zunächst dachte.
Vielen Dank im Voraus!
//| Bollinger %b - Multi.mq4 |
//| based on Bollinger Bands %b.mq4 |
//| Original indicator by Alejandro Galindo |
//| Modified and Corrected by Linuxser for forex TSD |
//| Further modifications made by whitebloodcell |
//|
//| John Bollinger original formula is: |
//| (Last - Lower BB)/(Upper BB - Lower BB) |
//+-------------------------------------------------------------------+
#property copyright ""
#property link ""
#property indicator_separate_window
#property indicator_buffers 6
#property indicator_color1 LightSalmon
#property indicator_color2 LightSalmon
#property indicator_color3 SkyBlue
#property indicator_color4 SkyBlue
#property indicator_color5 Green
#property indicator_color6 Green
//---- input parameters
extern bool ShowBand1 = TRUE;
extern int Timeframe_1 = 15;
extern int BBPeriod_1=5;
extern double StdDeviation_1=1.9;
extern int MainLineMAPeriod_1=1;
extern int MainLineMAMethod_1=1;
extern int SignalMAPeriod_1=2;//corresponds to %D - the signal line
extern int SignalMAMethod_1=1;
extern bool ShowBand2 = TRUE;
extern int Timeframe_2 = 15;
extern int BBPeriod_2=10;
extern double StdDeviation_2=2;
extern int MainLineMAPeriod_2=2;
extern int MainLineMAMethod_2=1;
extern int SignalMAPeriod_2=3;
extern int SignalMAMethod_2=1;
extern bool ShowBand3 = TRUE;
extern int Timeframe_3 = 15;
extern int BBPeriod_3=20;
extern double StdDeviation_3=2.0;
extern int MainLineMAPeriod_3=2;
extern int MainLineMAMethod_3=1;
extern int SignalMAPeriod_3=3;
extern int SignalMAMethod_3=1;
extern int AppliedPrice=0;
extern string s2 = "0=SMA,1=EMA,2=Smoothed,4=LWMA";
extern string s1 = "0=Close,1=Open,2=High,3=Low,4=Median,5=Typical,6=Weighted";
//---- buffers
double BLG_Buffer_1[];
double MainLineBuffer_1[];
double SignalBuffer_1[];
double BLG_Buffer_2[];
double MainLineBuffer_2[];
double SignalBuffer_2[];
double BLG_Buffer_3[];
double MainLineBuffer_3[];
double SignalBuffer_3[];
//#include
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init() {
string short_name;
SetIndexStyle(0,DRAW_LINE,EMPTY,2);
SetIndexBuffer(0,MainLineBuffer_1);
SetIndexStyle(1,DRAW_LINE,STYLE_DOT);
SetIndexBuffer(1,SignalBuffer_1);
SetIndexStyle(2,DRAW_LINE,EMPTY,2);
SetIndexBuffer(2,MainLineBuffer_2);
SetIndexStyle(3,DRAW_LINE,STYLE_DOT);
SetIndexBuffer(3,SignalBuffer_2);
SetIndexStyle(4,DRAW_LINE,EMPTY,2);
SetIndexBuffer(4,MainLineBuffer_3);
SetIndexStyle(5,DRAW_LINE,STYLE_DOT);
SetIndexBuffer(5,SignalBuffer_3);
//SetLevelValue(1,10);
SetLevelValue(0,0);
SetLevelValue(1,20);
SetLevelValue(2,40);
SetLevelValue(3,60);
SetLevelValue(4,80);
SetLevelValue(5,100);
SetLevelStyle(STYLE_DOT,1,DimGray);
SetIndexDrawBegin(0,BBPeriod_1);
SetIndexDrawBegin(1,BBPeriod_1+SignalMAPeriod_1);
SetIndexDrawBegin(2,BBPeriod_2);
SetIndexDrawBegin(3,BBPeriod_2+SignalMAPeriod_2);
SetIndexDrawBegin(4,BBPeriod_3);
SetIndexDrawBegin(5,BBPeriod_3+SignalMAPeriod_3);
//name for DataWindow and indicator subwindow label
short_name="Bollinger Percent B (%b)("+BBPeriod_1+","+MainLineMAPeriod_1+") ("+BBPeriod_2+","+MainLineMAPeriod_2+") ("+BBPeriod_3+","+MainLineMAPeriod_3+")";
IndicatorShortName(short_name);
return(0);
}
//+------------------------------------------------------------------+
//| Momentum |
//+------------------------------------------------------------------+
int start() {
if(ShowBand1==TRUE) {
if(Bars<=BBPeriod_1) return(0);
MainFunction(BLG_Buffer_1, MainLineBuffer_1, SignalBuffer_1, Timeframe_1, BBPeriod_1, StdDeviation_1,
AppliedPrice, MainLineMAPeriod_1, MainLineMAMethod_1, SignalMAPeriod_1, SignalMAMethod_1);
}
if(ShowBand2==TRUE) {
if(Bars<=BBPeriod_2) return(0);
MainFunction(BLG_Buffer_2, MainLineBuffer_2, SignalBuffer_2, Timeframe_2, BBPeriod_2, StdDeviation_2,
AppliedPrice, MainLineMAPeriod_2, MainLineMAMethod_2, SignalMAPeriod_2, SignalMAMethod_2);
}
if(ShowBand3==TRUE) {
if(Bars<=BBPeriod_3) return(0);
MainFunction(BLG_Buffer_3, MainLineBuffer_3, SignalBuffer_3, Timeframe_3, BBPeriod_3, StdDeviation_3,
AppliedPrice, MainLineMAPeriod_3, MainLineMAMethod_3, SignalMAPeriod_3, SignalMAMethod_3);
}
return(0);
}
//+------------------------------------------------------------------+
void MainFunction(double &BLGBuffer[], double &MainLineBuffer[], double &SignalBuffer[], int timefame, int BBPeriod, double StdDeviation,
int AppliedPrice, int MainLineMAPeriod, int MainLineMAMethod, int SignalMAPeriod, int SignalMAMethod) {
int i=0,limit=0;
double PriceArray[];
if (ArrayRange(BLGBuffer,0) != Bars) {
ArrayResize(BLGBuffer,Bars);
ArraySetAsSeries(BLGBuffer, TRUE);
}
//number of bars already processed by indicator
int counted_bars=IndicatorCounted();
//load empty values into array until enough elements for calculation
if(counted_bars<1) {
for(i=1;i<=BBPeriod;i++) {
BLGBuffer=EMPTY_VALUE;
}//end for(i=1;i<=BandsPeriod;i++)
}//end if(counted_bars<1)
if(counted_bars>0) counted_bars--;
limit = MathMin(Bars-counted_bars,Bars-BBPeriod);
for(i=limit;i>=0;i--) {
//(Last - Lower BB)/(Upper BB - Lower BB)
BLGBuffer=((Close - iBands(NULL,timefame,BBPeriod,StdDeviation,0,AppliedPrice,MODE_LOWER,i))/
(iBands(NULL,timefame,BBPeriod,StdDeviation,0,AppliedPrice,MODE_UPPER,i)-iBands(NULL,timefame,BBPeriod,StdDeviation,0,AppliedPrice,MODE_LOWER,i)))*100;
}//end for(i=limit;i>=0;i--)
//smooth the signal by applying a moving average
for (i = limit; i >= 0; i--) MainLineBuffer = iMAOnArray(BLGBuffer, 0, MainLineMAPeriod, 0, MainLineMAMethod, i);
//create a Signal line (akin to stochastics) by further smoothing the (already smoothed) signal line.
for (i = limit; i >= 0; i--) SignalBuffer = iMAOnArray(MainLineBuffer, 0, SignalMAPeriod, 0, SignalMAMethod, i);
}//end MainFunction()
//--------------------------------------------------------------------------------
//Function: BandCalculation - Not yet working
//Purpose: Calculate the value of either the upper or lower bollinger band depen-
// on input variables.
//Inputs: Mode (int) - Calculate either upper or lower band
// limit (int) - Number of bars to calculate
// timeframe (int)
// BandsPeriod (int)
// MAMethod (int)
// BandsDeviation (double)
// AppliedPrice (int)
//Returns:
//--------------------------------------------------------------------------------
/*
void BandCalculation(int Mode, int limit, int timeframe, int BandsPeriod, int MAMethod, double BandsDeviation, int AppliedPrice) {
int i,k;
double deviation;
double sum,oldval,newres;
//if(counted_bars>0) limit++;
for(i=0; i<limit; i++) {
MovingBuffer=iMA(NULL,0,BandsPeriod,BandsShift,MAMethod,AppliedPrice,i);
}//end for(i=0; i<limit; i++)
i=limit;
//i=Bars-BandsPeriod+1;
//if(counted_bars>BandsPeriod-1) i=Bars-counted_bars-1;
while(i>=0) {
sum=0.0;
k=i+BandsPeriod-1;
oldval=MovingBuffer;
while(k>=i) {
newres=Close[k]-oldval;
sum+=newres*newres;
k--;
}//end while(k>=i)
//calculate deviation
deviation=BandsDeviations*MathSqrt(sum/BandsPeriod);
//Upper/Lower bands are equal to the moving average +/- deviation.
if(Mode==0) {
UpperBuffer=oldval+deviation;
}
else {
LowerBuffer=oldval-deviation;
}
i--;
}//end while(i>=0)
}//end start()
*/...
whitebloodcell,
Sie haben recht. Der eingebaute Bollinger-Band-Indikator funktioniert nur für ganzzahlige Werte des Standardabweichungsmultiplikators. Hier ist ein einfacher Indikator, der es Ihnen erlaubt, einen gebrochenen Multiplikator und mehrere Abweichungen zu verwenden. Könnte hilfreich sein.
Was die Schwierigkeit angeht: Geben Sie die Programmierung nicht auf. Wenn Sie fertig sind, was Sie kodieren wollten, werden Sie sehen
Grüße
mladen
Ich versuche, (weitere) Änderungen an dem von linuxuser geposteten bollinger %b-Indikator vorzunehmen. Ich versuche, ihn so zu gestalten, dass er sich ähnlich wie der Stochastik-Indikator verhält, d.h. eine Signallinie hat und in der Lage ist, mehrere Perioden in einem Diagramm anzuzeigen. Das ist mir mit Hilfe von linuxuser bereits gelungen, so dass er im Moment entweder zwei oder drei Perioden im selben Fenster anzeigt.
Jetzt versuche ich, es so zu machen, dass ich Bruchwerte für die Standardabweichung in den Berechnungen verwenden kann. Liege ich richtig in der Annahme, dass ich dafür nicht die Standardfunktion von iBands verwenden kann? Ich habe versucht, den im Standard-Bands-Indikator mitgelieferten Code zu verwenden, aber ich hatte nicht viel Erfolg. Könnte mir bitte jemand weiterhelfen?
Ich hoffe auch, dass ich den Indikator in die Lage versetzen kann, Berechnungen aus anderen Zeitrahmen anzuzeigen, aber ich schätze, dass ich einen Schritt nach dem anderen machen muss. Ich habe gemerkt, dass dies etwas schwieriger sein könnte, als ich zunächst dachte.
Vielen Dank im Voraus!
//| Bollinger %b - Multi.mq4 |
//| based on Bollinger Bands %b.mq4 |
//| Original indicator by Alejandro Galindo |
//| Modified and Corrected by Linuxser for forex TSD |
//| Further modifications made by whitebloodcell |
//|
//| John Bollinger original formula is: |
//| (Last - Lower BB)/(Upper BB - Lower BB) |
//+-------------------------------------------------------------------+
#property copyright ""
#property link ""
#property indicator_separate_window
#property indicator_buffers 6
#property indicator_color1 LightSalmon
#property indicator_color2 LightSalmon
#property indicator_color3 SkyBlue
#property indicator_color4 SkyBlue
#property indicator_color5 Green
#property indicator_color6 Green
//---- input parameters
extern bool ShowBand1 = TRUE;
extern int Timeframe_1 = 15;
extern int BBPeriod_1=5;
extern double StdDeviation_1=1.9;
extern int MainLineMAPeriod_1=1;
extern int MainLineMAMethod_1=1;
extern int SignalMAPeriod_1=2;//corresponds to %D - the signal line
extern int SignalMAMethod_1=1;
extern bool ShowBand2 = TRUE;
extern int Timeframe_2 = 15;
extern int BBPeriod_2=10;
extern double StdDeviation_2=2;
extern int MainLineMAPeriod_2=2;
extern int MainLineMAMethod_2=1;
extern int SignalMAPeriod_2=3;
extern int SignalMAMethod_2=1;
extern bool ShowBand3 = TRUE;
extern int Timeframe_3 = 15;
extern int BBPeriod_3=20;
extern double StdDeviation_3=2.0;
extern int MainLineMAPeriod_3=2;
extern int MainLineMAMethod_3=1;
extern int SignalMAPeriod_3=3;
extern int SignalMAMethod_3=1;
extern int AppliedPrice=0;
extern string s2 = "0=SMA,1=EMA,2=Smoothed,4=LWMA";
extern string s1 = "0=Close,1=Open,2=High,3=Low,4=Median,5=Typical,6=Weighted";
//---- buffers
double BLG_Buffer_1[];
double MainLineBuffer_1[];
double SignalBuffer_1[];
double BLG_Buffer_2[];
double MainLineBuffer_2[];
double SignalBuffer_2[];
double BLG_Buffer_3[];
double MainLineBuffer_3[];
double SignalBuffer_3[];
//#include
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init() {
string short_name;
SetIndexStyle(0,DRAW_LINE,EMPTY,2);
SetIndexBuffer(0,MainLineBuffer_1);
SetIndexStyle(1,DRAW_LINE,STYLE_DOT);
SetIndexBuffer(1,SignalBuffer_1);
SetIndexStyle(2,DRAW_LINE,EMPTY,2);
SetIndexBuffer(2,MainLineBuffer_2);
SetIndexStyle(3,DRAW_LINE,STYLE_DOT);
SetIndexBuffer(3,SignalBuffer_2);
SetIndexStyle(4,DRAW_LINE,EMPTY,2);
SetIndexBuffer(4,MainLineBuffer_3);
SetIndexStyle(5,DRAW_LINE,STYLE_DOT);
SetIndexBuffer(5,SignalBuffer_3);
//SetLevelValue(1,10);
SetLevelValue(0,0);
SetLevelValue(1,20);
SetLevelValue(2,40);
SetLevelValue(3,60);
SetLevelValue(4,80);
SetLevelValue(5,100);
SetLevelStyle(STYLE_DOT,1,DimGray);
SetIndexDrawBegin(0,BBPeriod_1);
SetIndexDrawBegin(1,BBPeriod_1+SignalMAPeriod_1);
SetIndexDrawBegin(2,BBPeriod_2);
SetIndexDrawBegin(3,BBPeriod_2+SignalMAPeriod_2);
SetIndexDrawBegin(4,BBPeriod_3);
SetIndexDrawBegin(5,BBPeriod_3+SignalMAPeriod_3);
//name for DataWindow and indicator subwindow label
short_name="Bollinger Percent B (%b)("+BBPeriod_1+","+MainLineMAPeriod_1+") ("+BBPeriod_2+","+MainLineMAPeriod_2+") ("+BBPeriod_3+","+MainLineMAPeriod_3+")";
IndicatorShortName(short_name);
return(0);
}
//+------------------------------------------------------------------+
//| Momentum |
//+------------------------------------------------------------------+
int start() {
if(ShowBand1==TRUE) {
if(Bars<=BBPeriod_1) return(0);
MainFunction(BLG_Buffer_1, MainLineBuffer_1, SignalBuffer_1, Timeframe_1, BBPeriod_1, StdDeviation_1,
AppliedPrice, MainLineMAPeriod_1, MainLineMAMethod_1, SignalMAPeriod_1, SignalMAMethod_1);
}
if(ShowBand2==TRUE) {
if(Bars<=BBPeriod_2) return(0);
MainFunction(BLG_Buffer_2, MainLineBuffer_2, SignalBuffer_2, Timeframe_2, BBPeriod_2, StdDeviation_2,
AppliedPrice, MainLineMAPeriod_2, MainLineMAMethod_2, SignalMAPeriod_2, SignalMAMethod_2);
}
if(ShowBand3==TRUE) {
if(Bars<=BBPeriod_3) return(0);
MainFunction(BLG_Buffer_3, MainLineBuffer_3, SignalBuffer_3, Timeframe_3, BBPeriod_3, StdDeviation_3,
AppliedPrice, MainLineMAPeriod_3, MainLineMAMethod_3, SignalMAPeriod_3, SignalMAMethod_3);
}
return(0);
}
//+------------------------------------------------------------------+
void MainFunction(double &BLGBuffer[], double &MainLineBuffer[], double &SignalBuffer[], int timefame, int BBPeriod, double StdDeviation,
int AppliedPrice, int MainLineMAPeriod, int MainLineMAMethod, int SignalMAPeriod, int SignalMAMethod) {
int i=0,limit=0;
double PriceArray[];
if (ArrayRange(BLGBuffer,0) != Bars) {
ArrayResize(BLGBuffer,Bars);
ArraySetAsSeries(BLGBuffer, TRUE);
}
//number of bars already processed by indicator
int counted_bars=IndicatorCounted();
//load empty values into array until enough elements for calculation
if(counted_bars<1) {
for(i=1;i<=BBPeriod;i++) {
BLGBuffer=EMPTY_VALUE;
}//end for(i=1;i<=BandsPeriod;i++)
}//end if(counted_bars<1)
if(counted_bars>0) counted_bars--;
limit = MathMin(Bars-counted_bars,Bars-BBPeriod);
for(i=limit;i>=0;i--) {
//(Last - Lower BB)/(Upper BB - Lower BB)
BLGBuffer=((Close - iBands(NULL,timefame,BBPeriod,StdDeviation,0,AppliedPrice,MODE_LOWER,i))/
(iBands(NULL,timefame,BBPeriod,StdDeviation,0,AppliedPrice,MODE_UPPER,i)-iBands(NULL,timefame,BBPeriod,StdDeviation,0,AppliedPrice,MODE_LOWER,i)))*100;
}//end for(i=limit;i>=0;i--)
//smooth the signal by applying a moving average
for (i = limit; i >= 0; i--) MainLineBuffer = iMAOnArray(BLGBuffer, 0, MainLineMAPeriod, 0, MainLineMAMethod, i);
//create a Signal line (akin to stochastics) by further smoothing the (already smoothed) signal line.
for (i = limit; i >= 0; i--) SignalBuffer = iMAOnArray(MainLineBuffer, 0, SignalMAPeriod, 0, SignalMAMethod, i);
}//end MainFunction()
//--------------------------------------------------------------------------------
//Function: BandCalculation - Not yet working
//Purpose: Calculate the value of either the upper or lower bollinger band depen-
// on input variables.
//Inputs: Mode (int) - Calculate either upper or lower band
// limit (int) - Number of bars to calculate
// timeframe (int)
// BandsPeriod (int)
// MAMethod (int)
// BandsDeviation (double)
// AppliedPrice (int)
//Returns:
//--------------------------------------------------------------------------------
/*
void BandCalculation(int Mode, int limit, int timeframe, int BandsPeriod, int MAMethod, double BandsDeviation, int AppliedPrice) {
int i,k;
double deviation;
double sum,oldval,newres;
//if(counted_bars>0) limit++;
for(i=0; i<limit; i++) {
MovingBuffer=iMA(NULL,0,BandsPeriod,BandsShift,MAMethod,AppliedPrice,i);
}//end for(i=0; i<limit; i++)
i=limit;
//i=Bars-BandsPeriod+1;
//if(counted_bars>BandsPeriod-1) i=Bars-counted_bars-1;
while(i>=0) {
sum=0.0;
k=i+BandsPeriod-1;
oldval=MovingBuffer;
while(k>=i) {
newres=Close[k]-oldval;
sum+=newres*newres;
k--;
}//end while(k>=i)
//calculate deviation
deviation=BandsDeviations*MathSqrt(sum/BandsPeriod);
//Upper/Lower bands are equal to the moving average +/- deviation.
if(Mode==0) {
UpperBuffer=oldval+deviation;
}
else {
LowerBuffer=oldval-deviation;
}
i--;
}//end while(i>=0)
}//end start()
*/