Author: 2010, Nikolay Kositsin
2 Views
0 Downloads
0 Favorites
LRMA
/*
 * Äëÿ ðàáîòû  èíäèêàòîðà  ñëåäóåò  ïîëîæèòü ôàéëû
 * SmoothAlgorithms.mqh
 * IndicatorsAlgorithms.mqh
 * â ïàïêó (äèðåêòîðèþ): MetaTrader\\MQL5\Include
 */
//+X================================================================X+
//|                                                         LRMA.mq5 |
//|                               Copyright © 2010, Nikolay Kositsin |
//|                              Khabarovsk,   farria@mail.redcom.ru | 
//+X================================================================X+
#property copyright "2010,   Nikolay Kositsin"
#property link      "farria@mail.redcom.ru"
#property version   "1.00"

//---- îòðèñîâêà èíäèêàòîðà â îñíîâíîì îêíå
#property indicator_chart_window
//---- äëÿ ðàñ÷¸òà è îòðèñîâêè èíäèêàòîðà èñïîëüçîâàí îäèí áóôåð
#property indicator_buffers 1
//---- èñïîëüçîâàíî âñåãî îäíî ãðàôè÷åñêîå ïîñòðîåíèå
#property indicator_plots   1
//---- îòðèñîâêà èíäèêàòîðà â âèäå ëèíèè
#property indicator_type1   DRAW_LINE
//---- â êà÷åñòâå öâåòà ëèíèè èíäèêàòîðà èñïîëüçîâàí çåë¸íûé öâåò
#property indicator_color1  LimeGreen

//---- âõîäíûå ïàðàìåòðû èíäèêàòîðà
input double LRMAPeriod = 13; // Ïåðèîä LRMA
input int    LRMAShift = 0; // Ñäâèã LRMA ïî ãîðèçîíòàëè â áàðàõ
input int    LRMAPriceShift = 0; // LRMA ìóâèíãà ïî âåðòèêàëè â ïóíêòàõ

//--- Èíäèêàòîðíûé áóôåð
double ExtLineBuffer[];

double dPriceShift;
//+X================================================================X+
//| Custom indicator initialization function                         |
//+X================================================================X+
void OnInit()
  {
//----+
   //---- èìÿ äëÿ îêîí äàííûõ è ëýéáà äëÿ ñóáúîêîí 
   string short_name = "LRMA";
   IndicatorSetString(INDICATOR_SHORTNAME, short_name + "(" + string(LRMAPeriod) + ")"); 
   //---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷¸òà îòðèñîâêè èíäèêàòîðà
   PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, LRMAPeriod); 
   //---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
   PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, EMPTY_VALUE);
   //---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà ExtLineBuffer â èíäèêàòîðíûé áóôåð
   SetIndexBuffer(0, ExtLineBuffer, INDICATOR_DATA);
   //---- îñóùåñòâëåíèå ñäâèãà ñêîëüçÿùåé ñðåäíåé ïî ãîðèçîíòàëè íà MAShift
   PlotIndexSetInteger(0, PLOT_SHIFT, LRMAShift);
   //---- Óñòàíîâêà ôîðìàòà òî÷íîñòè îòîáðàæåíèÿ èíäèêàòîðà
   IndicatorSetInteger(INDICATOR_DIGITS, _Digits + 1);
   //---- Èíèöèàëèçàöèÿ ñäâèãà ïî âåðòèêàëè
   dPriceShift = _Point * LRMAPriceShift;
   //---- îáúÿâëåíèå ïåðåìåííîé êëàññà Moving_Average èç ôàéëà MASeries_Cls.mqh
   CMoving_Average LRMA1;
   //---- óñòàíîâêà àëåðòîâ íà íåäîïóñòèìûå çíà÷åíèÿ âíåøíèõ ïåðåìåííûõ
   LRMA1.MALengthCheck("LRMAPeriod", LRMAPeriod);
//----+
  }
//+X================================================================X+
// Îïèñàíèå êëàññîâ óñðåäíåíèÿ è èíäèêàòîðîâ                         |
//+X================================================================X+ 
#include <SmoothAlgorithms.mqh>
#include <IndicatorsAlgorithms.mqh> 
//+X================================================================X+ 
//|  Moving Average                                                  |
//+X================================================================X+
int OnCalculate
               (
                const int rates_total, // êîëè÷åñòâî èñòîðèè â áàðàõ íà òåêóùåì òèêå
                const int prev_calculated, // êîëè÷åñòâî èñòîðèè â áàðàõ íà ïðåäûäóùåì òèêå
                const int begin, // íîìåð íà÷àëà äîñòîâåðíîãî îòñ÷¸òà áàðîâ
                const double &price[] // öåíîâîé ìàññèâ äëÿ ðàñ÷¸òà èíäèêàòîðà
               ) 
  {
//----+   
   //---- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷¸òà
   if (rates_total < begin + LRMAPeriod)
    return(0);
   
   //---- îáúÿâëåíèÿ ëîêàëüíûõ ïåðåìåííûõ 
   int first, bar;
   
   //---- ðàñ÷¸ò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷¸òà áàðîâ
   if (prev_calculated == 0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷¸òà èíäèêàòîðà
    {
     first = begin; // ñòàðòîâûé íîìåð äëÿ ðàñ÷¸òà âñåõ áàðîâ
     for(bar = 0; bar <= begin; bar++)
       ExtLineBuffer[bar] = 0;
    }
   else first = prev_calculated - 1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷¸òà íîâûõ áàðîâ
   
   //---- îáúÿâëåíèå ïåðåìåííîé êëàññà Moving_Average èç ôàéëà LRMASeries_Cls.mqh
   static CLRMA LRMA1;
   
   //---- îñíîâíîé öèêë ðàñ÷¸òà èíäèêàòîðà
   for(bar = first; bar < rates_total; bar++)
    {
     //---- Ïîëó÷åíèå ñðåäíåãî çíà÷åíèÿ. Îäèí âûçîâ ôóíêöèè LRMASeries.  
     ExtLineBuffer[bar] = LRMA1.LRMASeries(begin, prev_calculated, rates_total, LRMAPeriod, price[bar], bar, false) + dPriceShift;
    }
//----+     
   return(rates_total);
  }
//+X----------------------+ <<< The End >>> +-----------------------X+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---