Liebe alle,
Ich programmiere eine ea, die mit B-Band und B-Breite arbeitet, für die B-Breite habe ich eine benutzerdefinierte EA hinzugefügt, es gibt keine Fehler Comeps, wenn ich kompilieren,
Aber ich bin shure es einige probs in Custom Indicator Aufruf.
so brauche ich einige Programmierer Hilfe, um es zu korrigieren, ich immer dankbar sein, wer hilft mir dieses Mal, bcoz ich jetzt gestoppt bekam,
Vielen Dank im VorausBitte achten Sie auf die Reihenfolge der Eingabeparameter von iBand Widh:
BB_Handle=iCustom(NULL,PERIOD_M1,"i-BB-Width",ibands_period,ibands_shift,ideviation,PRICE_CLOSE);
Entsprechend der Eingabereihenfolge des Indikators, sollte es :
BB_Handle=iCustom(NULL,PERIOD_M1,"i-BB-Width",ibands_period,ideviation,iapplied_price,ibands_shift);
Sie brauchen diesen benutzerdefinierten Indikator nicht.
Sie haben bbands, subtrahieren Sie einfach die Hüllkurven der bbands.

- 2009.11.23
- Андрей
- www.mql5.com
Bitte achten Sie auf die Reihenfolge der Eingabeparameter von iBand Widh:
Je nach der Reihenfolge der Eingabe des Indikators, sollte es :
Ich füge diesen benutzerdefinierten Indikator hinzu, bitte geben Sie mir die richtige Aufrufmethode für diesen Indikator,
Danke für Ihre Hilfe.
//+------------------------------------------------------------------+ //| i-BB-Width.mq5 | //| Copyright © 2007, Kim Igor V. aka KimIV. | //| http://www.kimiv.ru/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, Kim Igor V. aka KimIV." #property link "http://www.kimiv.ru/" #property description "The width of the Bollinger Bands" //---- indicator version number #property version "1.00" //---- drawing indicator in a separate window #property indicator_separate_window //---- number of indicator buffers #property indicator_buffers 1 //---- only one plot is used #property indicator_plots 1 //+-----------------------------------+ //| Parameters of indicator drawing | //+-----------------------------------+ //---- drawing the indicator as a line #property indicator_type1 DRAW_LINE //---- blue color is used for the indicator line #property indicator_color1 Blue //---- the indicator line is a continuous curve #property indicator_style1 STYLE_SOLID //---- Indicator line width is equal to 1 #property indicator_width1 2 //---- displaying the indicator label #property indicator_label1 "i-BB-Width" //+-----------------------------------+ //| Declaration of constants | //+-----------------------------------+ #define RESET 0 // the constant for getting the command for the indicator recalculation back to the terminal //+-----------------------------------+ //| Input parameters of the indicator| //+-----------------------------------+ input uint bands_period=20; //smoothing depth input double deviation=2.0; //deviation input ENUM_APPLIED_PRICE applied_price=PRICE_CLOSE; //type of price or handle input int Shift=0; //horizontal shift of the indicator in bars //+-----------------------------------+ //---- declaration of a dynamic array that further // will be used as an indicator buffer double IndBuffer[]; //---- declaration of integer variables for the indicators handles int BB_Handle; //---- declaration of the integer variables for the start of data calculation uint min_rates_total; //+------------------------------------------------------------------+ //| i-BB-Width indicator initialization function | //+------------------------------------------------------------------+ void OnInit() { //---- Initialization of variables of the start of data calculation min_rates_total=bands_period; //---- getting handle of the iBearsPower indicator BB_Handle=iBands(NULL,0,int(bands_period),0,deviation,applied_price); if(BB_Handle==INVALID_HANDLE) Print(" Failed to get handle of the iBands indicator"); //---- set dynamic array as an indicator buffer SetIndexBuffer(0,IndBuffer,INDICATOR_DATA); //---- moving the indicator 1 horizontally PlotIndexSetInteger(0,PLOT_SHIFT,Shift); //---- performing the shift of beginning of indicator drawing PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total); //---- setting the indicator values that won't be visible on a chart PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE); //---- indexing elements in the buffer as in timeseries ArraySetAsSeries(IndBuffer,true); //---- initializations of variable for indicator short name string shortname; StringConcatenate(shortname,"i-BB-Width(", bands_period,", ",deviation,", ",EnumToString(applied_price),", ",Shift,")"); //--- creation of the name to be displayed in a separate sub-window and in a pop up help IndicatorSetString(INDICATOR_SHORTNAME,shortname); //---- determination of accuracy of displaying the indicator values IndicatorSetInteger(INDICATOR_DIGITS,0); //---- end of initialization } //+------------------------------------------------------------------+ //| i-BB-Width iteration function | //+------------------------------------------------------------------+ int OnCalculate( const int rates_total, // amount of history in bars at the current tick const int prev_calculated,// amount of history in bars at the previous tick 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[] ) { //---- checking the number of bars to be enough for calculation if(BarsCalculated(BB_Handle)<rates_total || rates_total<int(min_rates_total)) return(RESET); //---- declaration of variables with a floating point double UpBB[],DnBB[]; //---- Declaration of integer variables and getting already calculated bars int limit,bar,to_copy; //--- calculations of the necessary amount of data to be copied and //the "limit" starting index for loop of bars recalculation if(prev_calculated>rates_total || prev_calculated<=0)// checking for the first start of the indicator calculation { limit=int(rates_total-min_rates_total-1); // starting index for calculation of all bars } else limit=rates_total-prev_calculated; // starting index for calculation of new bars to_copy=limit+1; //---- indexing elements in arrays as time series ArraySetAsSeries(UpBB,true); ArraySetAsSeries(DnBB,true); //---- copy newly appeared data into the arrays if(CopyBuffer(BB_Handle,UPPER_BAND,0,to_copy,UpBB)<=0) return(RESET); if(CopyBuffer(BB_Handle,LOWER_BAND,0,to_copy,DnBB)<=0) return(RESET); //---- Main cycle of calculation of the indicator for(bar=limit; bar>=0 && !IsStopped(); bar--) IndBuffer[bar]=(UpBB[bar]-DnBB[bar])/_Point; //---- return(rates_total); } //+------------------------------------------------------------------+

- 2009.11.23
- Андрей
- www.mql5.com
Sie brauchen diesen benutzerdefinierten Indikator nicht.
Sie haben bbands, subtrahieren Sie einfach die Hüllkurven der bbands.
//+------------------------------------------------------------------+ //| i-BB-Width.mq5 | //| Copyright © 2007, Kim Igor V. aka KimIV. | //| http://www.kimiv.ru/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, Kim Igor V. aka KimIV." #property link "http://www.kimiv.ru/" #property description "The width of the Bollinger Bands" //---- indicator version number #property version "1.00" //---- drawing indicator in a separate window #property indicator_separate_window //---- number of indicator buffers #property indicator_buffers 1 //---- only one plot is used #property indicator_plots 1 //+-----------------------------------+ //| Parameters of indicator drawing | //+-----------------------------------+ //---- drawing the indicator as a line #property indicator_type1 DRAW_LINE //---- blue color is used for the indicator line #property indicator_color1 Blue //---- the indicator line is a continuous curve #property indicator_style1 STYLE_SOLID //---- Indicator line width is equal to 1 #property indicator_width1 2 //---- displaying the indicator label #property indicator_label1 "i-BB-Width" //+-----------------------------------+ //| Declaration of constants | //+-----------------------------------+ #define RESET 0 // the constant for getting the command for the indicator recalculation back to the terminal //+-----------------------------------+ //| Input parameters of the indicator| //+-----------------------------------+ input uint bands_period=20; //smoothing depth input double deviation=2.0; //deviation input ENUM_APPLIED_PRICE applied_price=PRICE_CLOSE; //type of price or handle input int Shift=0; //horizontal shift of the indicator in bars //+-----------------------------------+ //---- declaration of a dynamic array that further // will be used as an indicator buffer double IndBuffer[]; //---- declaration of integer variables for the indicators handles int BB_Handle; //---- declaration of the integer variables for the start of data calculation uint min_rates_total; //+------------------------------------------------------------------+ //| i-BB-Width indicator initialization function | //+------------------------------------------------------------------+ void OnInit() { //---- Initialization of variables of the start of data calculation min_rates_total=bands_period; //---- getting handle of the iBearsPower indicator BB_Handle=iBands(NULL,0,int(bands_period),0,deviation,applied_price); if(BB_Handle==INVALID_HANDLE) Print(" Failed to get handle of the iBands indicator"); //---- set dynamic array as an indicator buffer SetIndexBuffer(0,IndBuffer,INDICATOR_DATA); //---- moving the indicator 1 horizontally PlotIndexSetInteger(0,PLOT_SHIFT,Shift); //---- performing the shift of beginning of indicator drawing PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total); //---- setting the indicator values that won't be visible on a chart PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE); //---- indexing elements in the buffer as in timeseries ArraySetAsSeries(IndBuffer,true); //---- initializations of variable for indicator short name string shortname; StringConcatenate(shortname,"i-BB-Width(", bands_period,", ",deviation,", ",EnumToString(applied_price),", ",Shift,")"); //--- creation of the name to be displayed in a separate sub-window and in a pop up help IndicatorSetString(INDICATOR_SHORTNAME,shortname); //---- determination of accuracy of displaying the indicator values IndicatorSetInteger(INDICATOR_DIGITS,0); //---- end of initialization } //+------------------------------------------------------------------+ //| i-BB-Width iteration function | //+------------------------------------------------------------------+ int OnCalculate( const int rates_total, // amount of history in bars at the current tick const int prev_calculated,// amount of history in bars at the previous tick 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[] ) { //---- checking the number of bars to be enough for calculation if(BarsCalculated(BB_Handle)<rates_total || rates_total<int(min_rates_total)) return(RESET); //---- declaration of variables with a floating point double UpBB[],DnBB[]; //---- Declaration of integer variables and getting already calculated bars int limit,bar,to_copy; //--- calculations of the necessary amount of data to be copied and //the "limit" starting index for loop of bars recalculation if(prev_calculated>rates_total || prev_calculated<=0)// checking for the first start of the indicator calculation { limit=int(rates_total-min_rates_total-1); // starting index for calculation of all bars } else limit=rates_total-prev_calculated; // starting index for calculation of new bars to_copy=limit+1; //---- indexing elements in arrays as time series ArraySetAsSeries(UpBB,true); ArraySetAsSeries(DnBB,true); //---- copy newly appeared data into the arrays if(CopyBuffer(BB_Handle,UPPER_BAND,0,to_copy,UpBB)<=0) return(RESET); if(CopyBuffer(BB_Handle,LOWER_BAND,0,to_copy,DnBB)<=0) return(RESET); //---- Main cycle of calculation of the indicator for(bar=limit; bar>=0 && !IsStopped(); bar--) IndBuffer[bar]=(UpBB[bar]-DnBB[bar])/_Point; //---- return(rates_total); } //+------------------------------------------------------------------+
Ich füge diesen benutzerdefinierten Indikator hinzu. Bitte geben Sie mir die korrekte Aufrufmethode für diesen Indikator an,
Vielen Dank für Ihre Hilfe.
Wie ich schon sagte, sollten Sie auf die Aufträge achten. Wenn Sie also einen Parameter wie diesen eingeben:
input uint bands_period=20; //smoothing depth input double deviation=2.0; //deviation input ENUM_APPLIED_PRICE applied_price=PRICE_CLOSE; //type of price or handle input int Shift=0; //horizontal shift of the indicator in bar
dann sollten Sie zum Aufrufen der Indikatoren die gleichen Aufträge schreiben
BB_Handle=iCustom(NULL,PERIOD_M1,"i-BB-Width",bands_period,deviation,applied_price,Shift);
Wie ich bereits sagte, sollten Sie auf die Aufträge achten. Wenn Sie also einen Parameter wie diesen eingeben :
dann zum Aufruf von Indikatoren sollten Sie die gleichen Aufträge schreiben
Ich tat es wie u advaiced, aber das Problem, das ich noch konfrontiert bin, ist in ontick(), wenn ich die Puffer kopieren, die Breite Indikator hat nur eine einzige Zeile, und in der Indikator-Code zeigt es als IndiBuffer,
Welchen Puffer soll ich dann vom Breitenindikator kopieren, wenn er wie im Breitenindikatorcode ist.
//---- copy newly appeared data into the arrays if(CopyBuffer(BB_Handle,UPPER_BAND,0,to_copy,UpBB)<=0) return(RESET); if(CopyBuffer(BB_Handle,LOWER_BAND,0,to_copy,DnBB)<=0) return(RESET);
Ich kann dies nicht in Kauf-Verkaufs-Bedingungen verwenden,
Bitte beraten Sie mich, um es in der richtigen Weise zu programmieren, ich versuchte mehr als zwei ganze Tage auf diese,
Bitte helfen Sie, Sir.
Was graziani Ihnen sagte, ist, dass die Verwendung von "i-BB_Width" unnötig ist . Dieser Indikator berechnet nur die Differenz zwischen dem oberen und unteren Band. Sie können diesen Indikator also komplett aus Ihrem EA entfernen.
Danach liegt es an dir, die Logik deines Algorithmus zu überprüfen.
Was graziani Ihnen sagte, ist, dass die Verwendung von "i-BB_Width" unnötig ist . Dieser Indikator berechnet nur die Differenz zwischen dem oberen und unteren Band. Sie können diesen Indikator also komplett aus Ihrem EA entfernen.
Danach liegt es an dir, die Logik deines Algorithmus zu überprüfen.
Ha ha schöne Lösung, gefällt mir :-)
Sir, ich habe eine Frage,
kann ich die Breite in einem EA differenzieren? wie width=Upband-Lowband/Baseline,
ist das möglich?
Ha ha schöne Lösung, gefällt mir :-)
Sir, ich habe eine Frage,
kann ich die Breite in einem Ea differenzieren? wie width=Upband-Lowband/Baseline,
ist das möglich?
Sorry, aber ich verstehe Ihre Frage nicht.
Sorry einige Rechtschreibfehler,
Ich möchte die Breite des Bandes für diese es brauchen einige Berechnung wie
Breite=(oberes-Band-unteres-Band)/Basisband
Ist es möglich, diese Berechnung innerhalb der Ea zu machen?
Wie kann man das definieren? Als ich es versuchte, bekam ich einen Fehler,
Width[]=(Upperband[ ]-Lowerband[ ])/Baseband[ ],
Bitte um Ratschläge

- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Liebe alle,
Ich programmiere eine ea, die mit B-Band und B-Breite arbeitet, für die B-Breite habe ich eine benutzerdefinierte EA hinzugefügt, es gibt keine Fehler Comeps, wenn ich kompilieren,
Aber ich bin shure es einige probs in Custom Indicator Aufruf.
so brauche ich einige Programmierer helfen, es zu korrigieren, ich immer dankbar sein, wer hilft mir dieses Mal, bcoz ich jetzt gestoppt,
Vielen Dank im Voraus