HomeSample Page

Sample Page Title


Very often, customers ask the right way to combine an indicator bought on the Market into their buying and selling advisors. It is time to present a easy, dependable and feature-rich resolution. The connection instance is so simple as potential, it would permit even a novice programmer to determine it out. 

That is an included class file for connecting the indicator. It’s essential put it within the “Embody” folder of your terminal.




class i_FourAverage
{
public:
    
    int               Handle1;
    bool              FirstStart;
    
    double Buffer1[];
    bool              Sign;
    
    bool              DownloadsIndicator(bool& recalculation, string image, ENUM_TIMEFRAMES timeframe, int shift,
                                         
                                         int preset,
                                         int periodFA = 32,
                                         int average_1 = 134,
                                         int average_2 = 47,
                                         int average_3 = 1,
                                         int average_4 = 45,
                                         int vary = 50,
                                         
                                         int bars = 3);
    
    i_FourAverage()
    {
        FirstStart = true;
        Handle1 = -1;
    }
};



bool i_FourAverage::DownloadsIndicator(bool& recalculation, string image, ENUM_TIMEFRAMES timeframe, int shift,
                                       
                                       int preset,
                                       int periodFA = 32,
                                       int average_1 = 134,
                                       int average_2 = 47,
                                       int average_3 = 1,
                                       int average_4 = 45,
                                       int vary = 50,
                                       
                                       int bars = 3)
{
    
    if(FirstStart)
    {
        

        
        Handle1 = iCustom(image, timeframe, "MarketFourAverageMT5",
                          
                          preset,
                          "_",
                          periodFA,
                          average_1,
                          average_2,
                          average_3,
                          average_4,
                          vary,
                          
                          0,
                          "_",
                          false,
                          0,
                          false,
                          0);

        
        FirstStart = false;
    }
    
    Sign = false;
    int shiftmulti = GetShiftMultiSymbol(image, timeframe, shift, false);
    if(shiftmulti == -1)
    {
        recalculation = true;
        return(false);
    }
    
    string title = "FourAverage";
    if(!FillArrayFromBuffer(Handle1, 0,  title, shiftmulti, bars, Buffer1, true)) return(false);
    
    
    recalculation = false;
    
    return(true);
}




int GetShiftMultiSymbol(string image, ENUM_TIMEFRAMES timeframe, int shift = 1, bool no_search = false)
{
    if(Image() == image)
    {
        return(shift);
    }
    else
    {
        datetime time_bar1 = iTime(Image(), timeframe, shift);
        int shiftmulti = iBarShift(image, timeframe, time_bar1, no_search);
        return(shiftmulti);
    }
}




bool FillArrayFromBuffer
(
    int       indicator_handle,          
    int       buffer_num,                
    string    title,                      
    int       start_pos,                 
    int       rely,                     
    double    &buffer[],                 
    bool      expand_and_revers = false  
)
{
    
    ResetLastError();
    
    if(expand_and_revers) ArrayResize(buffer, rely);
    
    if(CopyBuffer(indicator_handle, buffer_num, start_pos, rely, buffer) < 0)
    {
        
        
        
        
        
        
        
        
        
        string error = string(GetLastError());
        
        PrintFormat(TextByLanguage("Не удалось скопировать данные из индикатора " + title + ", буффер № " + string(buffer_num) + ", код ошибки: " + error + ", старт: " + string(start_pos) + ", сколько: " + string(rely),
                    "Failed to repeat knowledge from the indicator " + title + ", buffer № " + string(buffer_num) + " , error code: " + error + ", begin pos: " + string(start_pos) + ", n: " + string(rely)));
        
        return(false);
        
    }
    
    if(expand_and_revers) ArrayReverse(buffer);
    
    return(true);
}



string TextByLanguage(string rus, string eng, string zh = " ", string pt = " ")
{
    if(TerminalInfoString(TERMINAL_LANGUAGE) == "Russian" && rus != " ") return(rus);
    else if(TerminalInfoString(TERMINAL_LANGUAGE) == "Chinese language (Simplified)" && zh != " ") return(zh);
    else if(TerminalInfoString(TERMINAL_LANGUAGE) == "Chinese language (Conventional)" && zh != " ") return(zh);
    else if(TerminalInfoString(TERMINAL_LANGUAGE) == "Portuguese (Brazil)" && pt != " ") return(pt);
    else if(TerminalInfoString(TERMINAL_LANGUAGE) == "Portuguese (Portugal)" && pt != " ") return(pt);
    else return(eng);
}



An instance is getting indicator knowledge in an skilled Advisor.

#embody <CFourAverage_iCustom.mqh>
static i_FourAverage ind_0;

enter int PeriodFA = 10;      
enter int Average_1 = 112;     
enter int Average_2 = 148;    
enter int Average_3 = 100;     
enter int Average_4 = 146;    
enter int Vary = 31;



int OnInit()
{



    return(INIT_SUCCEEDED);
}



void OnDeinit(const int purpose)
{


}



void OnTick()
{
    
    bool recalculate = false;
    string image = Image();  
    
    if(!ind_0.DownloadsIndicator(recalculate, image, PERIOD_CURRENT, 0,
                                 
                                 0,
                                 PeriodFA,
                                 Average_1,
                                 Average_2,
                                 Average_3,
                                 Average_4,
                                 Vary,
                                 5)) return;
    
    if(ind_0.Buffer1[0] > 0) Print("BUY: FA = " + string(ind_0.Buffer1[0]));
    if(ind_0.Buffer1[0] < 0) Print("SELL: FA = " + string(ind_0.Buffer1[0]));
    
}


Further sources and details about the FourAverage indicator

Obtain the FourAverage indicator

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Latest Articles