B BANDI VE B GENİŞLİĞİNE DAYALI BİR EA, BAZI ACİL YARDIM GEREKİYOR !!

 

Sayın Arkadaşlar,

B Bandı ve B Genişliği ile çalışan bir adet programlıyorum, B Genişliği için özel bir EA ekledim, Derlerken Hata Gelmiyor,

Ama Özel Gösterge aramasında bazı sorunlar olduğundan eminim.

bu yüzden düzeltmek için bazı programcıların yardımına ihtiyacım var, bu sefer bana yardım edene her zaman minnettarım, çünkü şimdi durduruldum,

 //+------------------------------------------------------------------+
//|                                            Bolinger_Width_EA.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link       "http://www.mql5.com"
#property version   "1.00"

//--- input parameters
input int bands_period= 20 ;         // Bollinger Bands period
input int bands_shift = 0 ;         // Bollinger Bands shift
input double deviation= 2 ;         // Standard deviation
input double    Lot= 1 ;             // Lots to trade
//-----------------------
input uint ibands_period= 15 ; //smoothing depth                    
input double ideviation= 1.5 ; //deviation
input ENUM_APPLIED_PRICE   iapplied_price= PRICE_CLOSE ; //type of price or handle
input int ibands_shift= 0 ; //horizontal shift of the indicator in bars
//--- global variables
int BolBandsHandle;                 // Bolinger Bands handle
double BBUp[],BBLow[],BBMidle[];   // dynamic arrays for numerical values of Bollinger Bands
//------------
double i_BB_Width[];
int BB_Handle;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- Do we have sufficient bars to work
   if ( Bars ( _Symbol , _Period )< 60 ) // total number of bars is less than 60?
     {
       Alert ( "We have less than 60 bars on the chart, an Expert Advisor terminated!!" );
       return (- 1 );
     }
//--- get handle of the Bollinger Bands and Width indicators
   BolBandsHandle= iBands ( NULL , PERIOD_M1 ,bands_period,bands_shift,deviation, PRICE_CLOSE );
   BB_Handle= iCustom ( NULL , PERIOD_M1 , "i-BB-Width" ,ibands_period,ibands_shift,ideviation, PRICE_CLOSE );
//--- Check for Invalid Handle
   if ((BolBandsHandle< 0 ) || (BB_Handle< 0 ))
     {
       Alert ( "Error in creation of indicators - error: " , GetLastError (), "!!" );
       return (- 1 );
     }

   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//--- release indicator handles
   IndicatorRelease (BolBandsHandle);
   IndicatorRelease (BB_Handle);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//--- we will use the static Old_Time variable to serve the bar time.
//--- at each OnTick execution we will check the current bar time with the saved one.
//--- if the bar time isn't equal to the saved time, it indicates that we have a new tick.

   static datetime Old_Time;
   datetime New_Time[ 1 ];
   bool IsNewBar= false ;

//--- copying the last bar time to the element New_Time[0]
   int copied= CopyTime ( _Symbol , _Period , 0 , 1 ,New_Time);
   if (copied> 0 ) // ok, the data has been copied successfully
     {
       if (Old_Time!=New_Time[ 0 ]) // if old time isn't equal to new bar time
        {
         IsNewBar= true ;   // if it isn't a first call, the new bar has appeared
         if ( MQL5InfoInteger ( MQL5_DEBUGGING )) Print ( "We have new bar here " ,New_Time[ 0 ], " old time was " ,Old_Time);
         Old_Time=New_Time[ 0 ];             // saving bar time
        }
     }
   else
     {
       Alert ( "Error in copying historical times data, error =" , GetLastError ());
       ResetLastError ();
       return ;
     }

//--- EA should only check for new trade if we have a new bar
   if (IsNewBar== false )
     {
       return ;
     }

//--- do we have enough bars to work with
   int Mybars= Bars ( _Symbol , _Period );
   if (Mybars< 60 ) // if total bars is less than 60 bars
     {
       Alert ( "We have less than 60 bars, EA will now exit!!" );
       return ;
     }

   MqlRates mrate[];           // To be used to store the prices, volumes and spread of each bar   

/*
     Let's make sure our arrays values for the Rates and Indicators 
     is stored serially similar to the timeseries array
*/

// the rates arrays
   ArraySetAsSeries (mrate, true );
   ArraySetAsSeries (i_BB_Width, true );
// the indicator arrays
   ArraySetAsSeries (BBUp, true );
   ArraySetAsSeries (BBLow, true );
   ArraySetAsSeries (BBMidle, true );

//--- Get the details of the latest 3 bars
   if ( CopyRates ( _Symbol , _Period , 0 , 3 ,mrate)< 0 )
     {
       Alert ( "Error copying rates/history data - error:" , GetLastError (), "!!" );
       return ;
     }

//--- Copy the new values of our indicators to buffers (arrays) using the handle
   if ( CopyBuffer (BolBandsHandle, 0 , 0 , 3 ,BBMidle)< 0 || CopyBuffer (BolBandsHandle, 1 , 0 , 3 ,BBUp)< 0
      || CopyBuffer (BolBandsHandle, 2 , 0 , 3 ,BBLow)< 0 )
     {
       Alert ( "Error copying Bollinger Bands indicator Buffers - error:" , GetLastError (), "!!" );
       return ;
     }

   if ( CopyBuffer (BB_Handle, 0 , 0 , 3 ,i_BB_Width)< 0 )
     {
       Alert ( "Error copying BB indicator buffer - error:" , GetLastError ());
       return ;
     }

   double Ask = SymbolInfoDouble ( _Symbol , SYMBOL_ASK );   // Ask price
   double Bid = SymbolInfoDouble ( _Symbol , SYMBOL_BID );   // Bid price

//--- Declare bool type variables to hold our Buy and Sell Conditions
   bool Buy_Condition =(mrate[ 1 ].close > BBUp[ 1 ] && mrate[ 1 ].open < BBUp[ 1 ] &&   // White (bull) candle crossed the Lower Band from below to above
                        i_BB_Width[ 0 ]>i_BB_Width[ 1 ] && i_BB_Width[ 1 ]>i_BB_Width[ 2 ]); // and Width is growing up

   bool Sell_Condition = (mrate[ 1 ].close < BBLow[ 1 ] && mrate[ 1 ].open > BBLow[ 1 ] &&   // Black (bear) candle crossed the Upper Band from above to below
                          i_BB_Width[ 0 ]>i_BB_Width[ 1 ] && i_BB_Width[ 1 ]>i_BB_Width[ 2 ]); // and Width is falling down

   bool Buy_Close=(mrate[ 1 ].close<BBMidle[ 1 ] && mrate[ 1 ].open>BBMidle[ 1 ]);               // Black candle crossed the Upper Band from above to below

   bool Sell_Close=(mrate[ 1 ].close>BBMidle[ 1 ] && mrate[ 1 ].open<BBMidle[ 1 ]);           // White candle crossed the Lower Band from below to above

   if (Buy_Condition && ! PositionSelect ( _Symbol ))     // Open long position
     {                                               // Width is growing up
      LongPositionOpen();                           // and white candle crossed the Lower Band from below to above
     }

   if (Sell_Condition && ! PositionSelect ( _Symbol ))   // Open short position
     {                                               // Width is falling down
      ShortPositionOpen();                           // and Black candle crossed the Upper Band from above to below
     }

   if (Buy_Close && PositionSelect ( _Symbol ))         // Close long position
     {                                               // Black candle crossed the Upper Band from above to below
      LongPositionClose();
     }

   if (Sell_Close && PositionSelect ( _Symbol ))         // Close short position
     {                                               // White candle crossed the Lower Band from below to above
      ShortPositionClose();
     }

   return ;
  }
//+------------------------------------------------------------------+
//| Open Long position                                               |
//+------------------------------------------------------------------+
void LongPositionOpen()
  {
   MqlTradeRequest mrequest;                             // Will be used for trade requests
   MqlTradeResult mresult;                               // Will be used for results of trade requests
   
   ZeroMemory (mrequest);
   ZeroMemory (mresult);
   
   double Ask = SymbolInfoDouble ( _Symbol , SYMBOL_ASK );     // Ask price
   double Bid = SymbolInfoDouble ( _Symbol , SYMBOL_BID );     // Bid price

   if (! PositionSelect ( _Symbol ))
     {
      mrequest.action = TRADE_ACTION_DEAL ;               // Immediate order execution
      mrequest.price = NormalizeDouble (Ask, _Digits );     // Lastest Ask price
      mrequest.sl = 0 ;                                   // Stop Loss
      mrequest.tp = 0 ;                                   // Take Profit
      mrequest.symbol = _Symbol ;                         // Symbol
      mrequest.volume = Lot;                             // Number of lots to trade
      mrequest.magic = 0 ;                                 // Magic Number
      mrequest.type = ORDER_TYPE_BUY ;                     // Buy Order
      mrequest.type_filling = ORDER_FILLING_FOK ;         // Order execution type
      mrequest.deviation= 5 ;                               // Deviation from current price
       OrderSend (mrequest,mresult);                       // Send order
     }
  }
//+------------------------------------------------------------------+
//| Open Short position                                              |
//+------------------------------------------------------------------+
void ShortPositionOpen()
  {
   MqlTradeRequest mrequest;                             // Will be used for trade requests
   MqlTradeResult mresult;                               // Will be used for results of trade requests
   
   ZeroMemory (mrequest);
   ZeroMemory (mresult);
   
   double Ask = SymbolInfoDouble ( _Symbol , SYMBOL_ASK );     // Ask price
   double Bid = SymbolInfoDouble ( _Symbol , SYMBOL_BID );     // Bid price

   if (! PositionSelect ( _Symbol ))
     {
      mrequest.action = TRADE_ACTION_DEAL ;               // Immediate order execution
      mrequest.price = NormalizeDouble (Bid, _Digits );     // Lastest Bid price
      mrequest.sl = 0 ;                                   // Stop Loss
      mrequest.tp = 0 ;                                   // Take Profit
      mrequest.symbol = _Symbol ;                         // Symbol
      mrequest.volume = Lot;                             // Number of lots to trade
      mrequest.magic = 0 ;                                 // Magic Number
      mrequest.type= ORDER_TYPE_SELL ;                     // Sell order
      mrequest.type_filling = ORDER_FILLING_FOK ;         // Order execution type
      mrequest.deviation= 5 ;                               // Deviation from current price
       OrderSend (mrequest,mresult);                       // Send order
     }
  }
//+------------------------------------------------------------------+
//| Close Long position                                              |
//+------------------------------------------------------------------+
void LongPositionClose()
  {
   MqlTradeRequest mrequest;                             // Will be used for trade requests
   MqlTradeResult mresult;                               // Will be used for results of trade requests
   
   ZeroMemory (mrequest);
   ZeroMemory (mresult);
   
   double Ask = SymbolInfoDouble ( _Symbol , SYMBOL_ASK );     // Ask price
   double Bid = SymbolInfoDouble ( _Symbol , SYMBOL_BID );     // Bid price

   if ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_BUY )
     {
      mrequest.action = TRADE_ACTION_DEAL ;               // Immediate order execution
      mrequest.price = NormalizeDouble (Bid, _Digits );     // Lastest Bid price
      mrequest.sl = 0 ;                                   // Stop Loss
      mrequest.tp = 0 ;                                   // Take Profit
      mrequest.symbol = _Symbol ;                         // Symbol
      mrequest.volume = Lot;                             // Number of lots to trade
      mrequest.magic = 0 ;                                 // Magic Number
      mrequest.type= ORDER_TYPE_SELL ;                     // Sell order
      mrequest.type_filling = ORDER_FILLING_FOK ;         // Order execution type
      mrequest.deviation= 5 ;                               // Deviation from current price
       OrderSend (mrequest,mresult);                       // Send order
     }
  }
//+------------------------------------------------------------------+
//| Close Short position                                             |
//+------------------------------------------------------------------+
void ShortPositionClose()
  {
   MqlTradeRequest mrequest;                             // Will be used for trade requests
   MqlTradeResult mresult;                               // Will be used for results of trade requests
   
   ZeroMemory (mrequest);
   ZeroMemory (mresult);
   
   double Ask = SymbolInfoDouble ( _Symbol , SYMBOL_ASK );     // Ask price
   double Bid = SymbolInfoDouble ( _Symbol , SYMBOL_BID );     // Bid price

   if ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_SELL )
     {
      mrequest.action = TRADE_ACTION_DEAL ;               // Immediate order execution
      mrequest.price = NormalizeDouble (Ask, _Digits );     // Latest ask price
      mrequest.sl = 0 ;                                   // Stop Loss
      mrequest.tp = 0 ;                                   // Take Profit
      mrequest.symbol = _Symbol ;                         // Symbol
      mrequest.volume = Lot;                             // Number of lots to trade
      mrequest.magic = 0 ;                                 // Magic Number
      mrequest.type = ORDER_TYPE_BUY ;                     // Buy order
      mrequest.type_filling = ORDER_FILLING_FOK ;         // Order execution type
      mrequest.deviation= 5 ;                               // Deviation from current price
       OrderSend (mrequest,mresult);                       // Send order
     }
  }
//+------------------------------------------------------------------+
Şimdiden teşekkürler
Step on New Rails: Custom Indicators in MQL5
Step on New Rails: Custom Indicators in MQL5
  • 2009.11.23
  • Андрей
  • www.mql5.com
I will not list all of the new possibilities and features of the new terminal and language. They are numerous, and some novelties are worth the discussion in a separate article. Also there is no code here, written with object-oriented programming, it is a too serous topic to be simply mentioned in a context as additional advantages for developers. In this article we will consider the indicators, their structure, drawing, types and their programming details, as compared to MQL4. I hope that this article will be useful both for beginners and experienced developers, maybe some of them will find something new.
 
surubabs :

Sayın Arkadaşlar,

B Bandı ve B Genişliği ile çalışan bir adet programlıyorum, B Genişliği için özel bir EA ekledim, Derlerken Hata Gelmiyor,

Ama Özel Gösterge aramasında bazı sorunlar olduğundan eminim.

bu yüzden düzeltmek için bazı programcıların yardımına ihtiyacım var, bu sefer bana yardım edene her zaman minnettarım, çünkü şimdi durduruldum,

Şimdiden teşekkürler

Lütfen iBand Widh giriş parametresinin sırasına dikkat edin:

BB_Handle= iCustom ( NULL , PERIOD_M1 , "i-BB-Width" ,ibands_period,ibands_shift,ideviation, PRICE_CLOSE );

Göstergenin giriş sırasına göre şunları yapmalıdır:

BB_Handle= iCustom ( NULL , PERIOD_M1 , "i-BB-Width" ,ibands_period,ideviation,iapplied_price,ibands_shift);
 

bu özel göstergeye ihtiyacınız yok.

bbandlarınız var, sadece bbandların zarflarını çıkarın.

Step on New Rails: Custom Indicators in MQL5
Step on New Rails: Custom Indicators in MQL5
  • 2009.11.23
  • Андрей
  • www.mql5.com
I will not list all of the new possibilities and features of the new terminal and language. They are numerous, and some novelties are worth the discussion in a separate article. Also there is no code here, written with object-oriented programming, it is a too serous topic to be simply mentioned in a context as additional advantages for developers. In this article we will consider the indicators, their structure, drawing, types and their programming details, as compared to MQL4. I hope that this article will be useful both for beginners and experienced developers, maybe some of them will find something new.
 
achidayat :

Lütfen iBand Widh giriş parametresinin sırasına dikkat edin:

Göstergenin giriş sırasına göre şunları yapmalıdır:

Bu Özel Göstergeyi ekliyorum, lütfen bu göstergenin doğru arama yöntemini bana cezalandırın,

Yardımlarınız için teşekkürler.

 //+------------------------------------------------------------------+
//|                                                   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);
  }
//+------------------------------------------------------------------+
Step on New Rails: Custom Indicators in MQL5
Step on New Rails: Custom Indicators in MQL5
  • 2009.11.23
  • Андрей
  • www.mql5.com
I will not list all of the new possibilities and features of the new terminal and language. They are numerous, and some novelties are worth the discussion in a separate article. Also there is no code here, written with object-oriented programming, it is a too serous topic to be simply mentioned in a context as additional advantages for developers. In this article we will consider the indicators, their structure, drawing, types and their programming details, as compared to MQL4. I hope that this article will be useful both for beginners and experienced developers, maybe some of them will find something new.
 
graziani :

bu özel göstergeye ihtiyacınız yok.

bbandlarınız var, sadece bbandların zarflarını çıkarın.

Yorumunuz için teşekkürler, buraya gösterge kodunu ekliyorum,
 //+------------------------------------------------------------------+
//|                                                   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);
  }
//+------------------------------------------------------------------+
 
surubabs :

Bu Özel Göstergeyi ekliyorum, lütfen bu göstergenin doğru arama yöntemini bana cezalandırın,

Yardımlarınız için teşekkürler.

Daha önce de söylediğim gibi siparişlere dikkat etmelisiniz. Yani giriş parametresi şöyle ise:

 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

daha sonra göstergeleri aramak için aynı siparişleri yazmalısınız

BB_Handle= iCustom ( NULL , PERIOD_M1 , "i-BB-Width" ,bands_period,deviation,applied_price,Shift);
 
achidayat :

Daha önce de söylediğim gibi siparişlere dikkat etmelisiniz. Yani giriş parametresi şöyle ise:

daha sonra göstergeleri aramak için aynı siparişleri yazmalısınız

Dediğiniz gibi yaptım, ancak hala karşılaştığım sorun ontick()'te, arabellekleri kopyaladığımda genişlik göstergesinin yalnızca tek bir satırı var ve gösterge kodunda IndiBuffer olarak görünüyor,

O zaman genişlik göstergesi kodundaki gibiyse, genişlik göstergesinden hangi arabelleği kopyalamalıyım.

 //---- 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);

bunu alış satış koşullarında kullanamam,

lütfen bana doğru şekilde programlamamı tavsiye edin, bunun üzerinde iki günden fazla denedim,

Lütfen yardım edin efendim.

 

Graziani size "i-BB_Width" kullanımının gereksiz olduğunu söyledi. Bu gösterge yalnızca Üst ve Alt bantlar arasındaki farkı hesaplar. Böylece bu göstergeyi EA'nızdan tamamen kaldırabilirsiniz.

Bundan sonra algoritmanızın mantığını kontrol etmek size kalmış.

Dosyalar:
 
angevoyageur :

Graziani size "i-BB_Width" kullanımının gereksiz olduğunu söyledi. Bu gösterge yalnızca Üst ve Alt bantlar arasındaki farkı hesaplar. Böylece bu göstergeyi EA'nızdan tamamen kaldırabilirsiniz.

Bundan sonra algoritmanızın mantığını kontrol etmek size kalmış.

Ha ha güzel çözüm, beğendim :-)

Efendim, bir hamurum var,

genişliği bir adette değiştirebilir miyim? genişlik gibi=Geniş Bant-Düşük Bant/Temel,

mümkün mü?

 
surubabs :

Ha ha güzel çözüm, beğendim :-)

Efendim, bir hamurum var,

genişliği bir adette değiştirebilir miyim? genişlik gibi=Geniş Bant-Düşük Bant/Temel,

mümkün mü?

Üzgünüm ama sorunuzu anlamıyorum.
 
angevoyageur :
Üzgünüm ama sorunuzu anlamıyorum.

Özür dilerim yazım yanlışı,

bunun için bandın genişliğini istiyorum, bunun gibi bir hesaplamaya ihtiyacı var

Genişlik=(üst bant-alt bant)/temel bant

peki bu hesaplamayı ea içinde yapmak mümkün mü?

bu nasıl tanımlanır? bir hata almaya çalıştığımda,

Genişlik[]=(Üst Bant[ ]-Alt Bant[ ])/Temel Bant[ ],

lütfen tavsiye

Neden: