Prezados todos,
Estou programando uma EA que funciona com Banda B e Largura B, Para a Largura B adicionei uma EA personalizada, Não há erros ao compilar,
Mas eu estou misturado com alguns detalhes na chamada do Indicador Personalizado.
Por isso, preciso da ajuda de alguns programadores para corrigi-lo, sempre agradecendo a quem me ajuda desta vez, bcoz eu fui parado agora,
Agradecimentos AntecipadosPor favor, preste atenção na ordem dos parâmetros de entrada do iBand Widh :
BB_Handle=iCustom(NULL,PERIOD_M1,"i-BB-Width",ibands_period,ibands_shift,ideviation,PRICE_CLOSE);
De acordo com a ordem de entrada do indicador, ele deve :
BB_Handle=iCustom(NULL,PERIOD_M1,"i-BB-Width",ibands_period,ideviation,iapplied_price,ibands_shift);
você não precisa deste indicador personalizado.
você tem bbands, basta subtrair os envelopes das bbands.

- 2009.11.23
- Андрей
- www.mql5.com
Por favor, preste atenção na ordem dos parâmetros de entrada do iBand Widh :
De acordo com a ordem de entrada do indicador, ele deve :
Estou adicionando esse Indicador personalizado, por favor, me multe o método correto de chamada deste indicador,
Obrigado por sua ajuda.
//+------------------------------------------------------------------+ //| 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
você não precisa deste indicador personalizado.
você tem bbands, basta subtrair os envelopes das 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); } //+------------------------------------------------------------------+
Estou acrescentando esse Indicador personalizado, por favor, me multe o método correto de chamada deste indicador,
Obrigado por sua ajuda.
Como eu disse antes, você deve prestar atenção às ordens. Portanto, se parâmetro de entrada como este :
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
então para chamar indicadores, você deve escrever as mesmas ordens
BB_Handle=iCustom(NULL,PERIOD_M1,"i-BB-Width",bands_period,deviation,applied_price,Shift);
Como eu disse antes, você deve prestar atenção às ordens. Portanto, se parâmetro de entrada como este :
então para chamar indicadores, você deve escrever as mesmas ordens
Eu fiz isso como u advaiced, mas o problema que ainda estou enfrentando está no ontick(), quando eu copio os buffers, o indicador de largura tem apenas uma única linha, e no código indicador ele mostra como IndiBuffer,
Então qual buffer devo copiar do indicador de largura, se for como no código do indicador de largura .
//---- 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);
não posso utilizá-lo em condições de compra e venda,
por favor me aconselhe a programá-lo da maneira correta, tentei mais de dois dias inteiros sobre isto,
Por favor, ajude o senhor.
O que graziani lhe disse é que o uso do "i-BB_Width" é desnecessário. Este indicador calcula apenas a diferença entre as faixas superior e inferior. Portanto, você pode remover completamente este indicador de seu EA.
Depois disso, cabe a você verificar a lógica de seu algoritmo.
O que graziani lhe disse é que o uso do "i-BB_Width" é desnecessário. Este indicador calcula apenas a diferença entre as faixas superior e inferior. Portanto, você pode remover completamente este indicador de seu EA.
Depois disso, cabe a você verificar a lógica de seu algoritmo.
Ha ha ha boa solução, eu gosto disso :-)
Senhor, eu tenho um pedido,
posso diferenciar a largura em uma eA ? como width=Upband-Lowband/Baseline,
é possível?
Ha ha ha boa solução, eu gosto disso :-)
Senhor, eu tenho um pedido,
posso diferenciar a largura em uma eA ? como width=Upband-Lowband/Baseline,
é possível?
Desculpe, mas não entendo sua pergunta.
Desculpe algum erro ortográfico,
quero a largura da faixa para isso, é necessário algum cálculo como
Largura=(banda superior-banda inferior)/banda de base
então é possível fazer este cálculo dentro da ea ?
como definir isto ? quando eu tento obter um erro,
Largura[]=(Banda superior[ ]-Banda inferior[ ])/Banda de base[ ],
por favor, advaice

- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Prezados todos,
Estou programando uma EA que funciona com Banda B e Largura B, Para a Largura B adicionei uma EA personalizada, Não há erros ao compilar,
Mas eu estou misturado com alguns detalhes na chamada do Indicador Personalizado.
Por isso, preciso da ajuda de alguns programadores para corrigi-lo, sempre agradecendo a quem me ajuda desta vez, bcoz eu fui parado agora,
Agradecimentos Antecipados