/////////////////////////////////////////////////////// // // SaherElm IT Center MA Indicator // --------------------------------------------- // saherelm implementation of above indicator ... // this indicator uses two ma line: // - fast ma; // - slow ma; // // Maintainer: // ------------ // Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) // ////////////////////////////////////////////////////// // // Global Properties ... #property copyright "Copyright 2023, SaherElm IT Center" #property link "https://saherelm.ir" #property version "1.00" #property description "SaherElm MA Indicator" #property strict // // START Inputs ... // // // Fast MA ... input int maLength = 20; // MA Length input int maShift = 0; // MA Shift input ENUM_MA_METHOD maMethod = MODE_EMA; // MA Method input ENUM_APPLIED_PRICE maAppliedPrice = PRICE_CLOSE; // MA Applied Price // // START Global Definitions: Variables, Properties and etc ... // #property indicator_chart_window // #property indicator_buffers 1 // #property indicator_plots 1 // // Start Define Indicator Buffer Styles ... // // // Fast Ma Buffer ... #property indicator_label1 "Ma" #property indicator_type1 DRAW_LINE #property indicator_color1 clrYellow #property indicator_style1 STYLE_DOT #property indicator_width1 2 // // End Define Indicator Buffer Styles ... // // // Buffers ... #define maBufferIndex 0 double maBuffer[]; // // END Global Definitions: Variables, Properties and etc ... // // // Start Event Handlers ... // // // Initialization ... int OnInit() { // // Initialize what we want ... if (maLength <= 0) { return INIT_PARAMETERS_INCORRECT; } // // Start Set Index Buffers ... // // // Ma ... SetIndexBuffer(maBufferIndex, maBuffer); SetIndexDrawBegin(maBufferIndex, maLength + 1); // // End Set Index Buffers ... // // return INIT_SUCCEEDED; } // // Calculating what we want ... int OnCalculate(const int rates_total, const int prev_calculated, 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[] ) { // // this counts Available Bars ... int limit; // // because in some cases we may have more than one input for // calculation and we must prevent any calculation // untill we pass the biggest input length, here we get max Input length // and then wait until pass it ... int maxLength = MathMax(0, maLength); // // input variable, we return 0 means nothing passed ... if (rates_total < maxLength) { return 0; } // // found which candles calculated before ... limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; // // this is the main loop of calculations, for each bar index ... for (int i = limit - 1; i >= 0; i--) { // // Start Calculation here ... // i is bar_index ... // // Calculate Ma ... CalculateMa(i); } // return rates_total; } // // END Event Handlers ... // // // START Functions ... // // // Calculating Ma ... void CalculateMa( const int &bar_index ) { // // Calculating Fast Ma ... double ma = iMA( _Symbol, _Period, maLength, maShift, maMethod, maAppliedPrice, bar_index ); // maBuffer[bar_index] = ma; } // // END Functions ... //