/* Äëÿ ðàáîòû èíäèêàòîðà ñëåäóåò ïîëîæèòü ôàéëû JMASeries.mqh, JUR001Series.mqh â ïàïêó (äèðåêòîðèþ): MetaTrader\experts\include\ Heiken Ashi#.mq4 â ïàïêó (äèðåêòîðèþ): MetaTrader\indicators\ "Îïèñàíèå èíäèêàòîðà Ò.ÄåÌàðêà " Âî âíîãèå ïàêåòû òåõíè÷åñêîãî âêëþ÷åí èíäèêàòîð, ïðåäëîæåííûé Ò.ÄåÌàðêîì. Áëèçêèé ïî ñìûñëó ê DMI, íî áîëåå ïðîñòî âû÷èñëÿåìûé (DEMARK â îòëè÷èå îò ADX, ó÷èòûâàåò òîëüêî ýêñòðåìàëüíûå öåíû, à íå öåíû çàêðûòèÿ) îí äàåò íàãëÿäíûå ñèãíàëû è íàðàâíå ñ äðóãèìè îñöèëëÿòîðàìè ìîæåò áûòü ïðèìåíåí äëÿ ïîñòðîåíèÿ òîðãîâûõ ñèñòåì. Îïðåäåëåíèå èíäèêàòîðà: åñëè ñåãîäíÿøíèé high âûøå â÷åðàøíåãî high, òî àêêóìóëèðóåì ñîîòâåòñòâóþùèå ðàçíîñòè, åñëè ñåãîäíÿøíèé low íèæå â÷åðàøíåãî, òî îòäåëüíî àêêóìóëèðóåì ñîîòâåòñòâóþùèå ðàçíîñòè (è òå è äðóãèå - ïîëîæèòåëüíûå âåëè÷èíû). Êîëè÷åñòâî ñâå÷åé n, ïî êîòîðûì ïðîèñõîäèò àêêóìóëèðîâàíèå (óñðåäíåíèå), ÿâëÿåòñÿ ïàðàìåòðîì èíäèêàòîðà, ðàâíîãî äðîáè: DEMARK = (íàêîïëåííûå çà n ñâå÷åé ðàçíîñòè high - high[-1]) / ( (íàêîïëåííûå çà n ñâå÷åé ðàçíîñòè high - high[-1]) + (íàêîïëåííûå çà n ñâå÷åé ðàçíîñòè low[-1] - low) ) Ïðè âûçîâå èíäèêàòîðà îí çàïðàøèâàåò äëèíó îêíà óñðåäåíåíèÿ n; ïî óìîë÷àíèþ ïðåäëàãàåòñÿ çíà÷åíèå n = 13. ×òåíèå ýòîãî èíäèêàòîðà âî ìíîãîì àíàëîãè÷íî RSI: îí òàêæå îáðàçóåò îáëàñòè ïåðåêóïëåííîñòè è ïåðåïðîäàííîñòè, ÷àñòî ïîêàçûâàåò õîðîøèå äèâåðãåíöèè.  òî æå âðåìÿ, âî âìîãèõ ñèòóàöèÿõ îí ìîæåò èìåòü ïðåèìóùåñòâà, òàê êàê áîëåå ïîëíî ó÷èòûâàåò ñòðóêòóðó ñâå÷è. © 1997-2005, «FOREX CLUB» http://www.fxclub.org/academy_lib_article/article17.html  äàííîì èíäèêàòîðå âíóòðè ðàñ÷¸òà êëàññè÷åñêèé àëãîðèòì óñðåäíåíèÿ çàìåí¸í íà àëãîðèòì óñðåäíåíèÿ îò èíäèêàòîðà JRSX ñ ïîìîùüþ ôóíêöèè JUR001Series è äîáàâëåíà ñèãíàëüíàÿ ëèíèÿ, ïîëó÷åííàÿ äîïîëíèòåëüíûì JMA ñãëàæèâàíèåì èíäèêàòîðà. */ //+------------------------------------------------------------------+ //| 3c_JDemarkX.mq4 | //| Copyright © 2006, Nikolay Kositsin | //| Khabarovsk, farria@mail.redcom.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Nikolay Kositsin" #property link "farria@mail.redcom.ru" //---- îòðèñîâêà èíäèêàòîðà â îòäåëüíîì îêíå #property indicator_separate_window //---- êîëè÷åñòâî èíäèêàòîðíûõ áóôåðîâ #property indicator_buffers 4 //---- öâåòà èíäèêàòîðà #property indicator_color1 Blue #property indicator_color2 Magenta #property indicator_color3 Purple #property indicator_color4 Aqua //---- òîëùèíà èíäèêàòîðíûõ ëèíèé #property indicator_width1 3 #property indicator_width2 3 #property indicator_width3 3 //---- ñòèëü ñèãíàëüíîé ëèíèè èíäèêàòîðà #property indicator_style4 4 //---- ïàðàìåòðû ãîðèçîíòàëüíûõ óðîâíåé èíäèêàòîðà #property indicator_level1 50 #property indicator_level2 -50 #property indicator_level3 0 #property indicator_levelcolor DarkOrchid #property indicator_levelstyle 4 //---- ÂÕÎÄÍÛÅ ÏÀÐÀÌÅÒÐÛ ÈÍÄÈÊÀÒÎÐÀ ææææææ+ extern int Demark_Length = 10; extern int Signal_Length = 15; extern int Signal_Phase = 100; //---- æææææææææææææææææææææææææææææææææææ+ //---- èíäèêàòîðíûå áóôåðû double Ind_Buffer1[]; double Ind_Buffer2[]; double Ind_Buffer3[]; double Ind_Buffer4[]; //+------------------------------------------------------------------+ //----+ Ââåäåíèå ôóíêöèè JJMASeries //----+ Ââåäåíèå ôóíêöèè JJMASeriesResize //----+ Ââåäåíèå ôóíêöèè JJMASeriesAlert //----+ Ââåäåíèå ôóíêöèè JMA_ErrDescr #include <JJMASeries.mqh> //+------------------------------------------------------------------+ //----+ Ââåäåíèå ôóíêöèè JurXSeries //----+ Ââåäåíèå ôóíêöèè JurXSeriesResize //----+ Ââåäåíèå ôóíêöèè JurXSeriesAlert //----+ Ââåäåíèå ôóíêöèè JurX_ErrDescr #include <JurXSeries.mqh> //+------------------------------------------------------------------+ //| JDemarkX initialization function | //+------------------------------------------------------------------+ int init() { //---- 4 èíäèêàòîðíûõ áóôåðà èñïîëüçîâàíû äëÿ ñ÷¸òà if(!SetIndexBuffer(0,Ind_Buffer1) && !SetIndexBuffer(1,Ind_Buffer2) && !SetIndexBuffer(2,Ind_Buffer3) && !SetIndexBuffer(3,Ind_Buffer4)) Print("Íå óäàëîñü óñòàíîâèòü èíäèêàòîðíûå áóôåðû!"); //---- ñòèëè èçîáðàæåíèÿ èíäèêàòîðà SetIndexStyle(0,DRAW_HISTOGRAM, STYLE_SOLID); SetIndexStyle(1,DRAW_HISTOGRAM, STYLE_SOLID); SetIndexStyle(2,DRAW_HISTOGRAM, STYLE_SOLID); SetIndexStyle(3,DRAW_LINE); //---- èìåíà äëÿ îêîí äàííûõ è ëýéáû äëÿ ñóáúîêîí IndicatorShortName ("JDemarkX"); SetIndexLabel(0,"Up_Trend"); SetIndexLabel(1,"Down_Trend"); SetIndexLabel(2,"Straight_Trend"); SetIndexLabel(3,"Signal"); //---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå SetIndexEmptyValue(0,0); SetIndexEmptyValue(1,0); SetIndexEmptyValue(2,0); SetIndexEmptyValue(3,0); //----+ Èçìåíåíèå ðàçìåðîâ áóôåðíûõ ïåðåìåííûõ ôóíêöèè JJMASeries, nJMAnumber=1(Îäíî îáðàùåíèå ê ôóíêöèè JJMASeries) if (JJMASeriesResize(1)!=1)return(-1); //----+ Èçìåíåíèå ðàçìåðîâ áóôåðíûõ ïåðåìåííûõ ôóíêöèè JurXSeries, nJurXnumber=2(Äâà îáðàùåíèÿ ê ôóíêöèè JurXSeries) if (JurXSeriesResize(2)!=2)return(-1); //---- óñòàíîâêà àëåðòîâ íà íåäîïóñòèìûå çíà÷åíèÿ âíåøíèõ ïåðåìåííûõ JurXSeriesAlert (0,"Demark_Length",Demark_Length); JJMASeriesAlert (0,"Signal_Length",Signal_Length); JJMASeriesAlert (1,"Sign_Phase", Signal_Phase); //---- óñòàíîâêà íîìåðà áàðà, íà÷èíàÿ ñ êîòîðîãî áóäåò îòðèñîâûâàòüñÿ èíäèêàòîð int drawbegin=Demark_Length+1; SetIndexDrawBegin(0,drawbegin); SetIndexDrawBegin(1,drawbegin); SetIndexDrawBegin(2,drawbegin); SetIndexDrawBegin(3,drawbegin+30); //---- Óñòàíîâêà ôîðìàòà òî÷íîñòè (êîëè÷åñòâî çíàêîâ ïîñëå äåñÿòè÷íîé òî÷êè) äëÿ âèçóàëèçàöèè çíà÷åíèé èíäèêàòîðà IndicatorDigits(0); //---- çàâåðøåíèå èíèöèàëèçàöèè return(0); } //+------------------------------------------------------------------+ //| JDemarkX iteration function | //+------------------------------------------------------------------+ int start() { //----+ Ââåäåíèå ïåðåìåííûõ ñ ïëàâàþùåé òî÷êîé double min_L,min_H,min_S,Jmin_H,Jmin_S,Demark,JDemarkX,trend,Signal; //---- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷¸òà if (Bars-1<Demark_Length)return(0); //----+ Ââåäåíèå öåëûõ ïåðåìåííûõ è ïîëó÷åíèå óæå ïîñ÷èòàííûõ áàðîâ int reset,limit,MaxBarD,MaxBarJ,counted_bars=IndicatorCounted(); //---- ïðîâåðêà íà âîçìîæíûå îøèáêè if (counted_bars<0)return(-1); //---- ïîñëåäíèé ïîñ÷èòàííûé áàð äîëæåí áûòü ïåðåñ÷èòàí //---- (áåç ýòîãî ïåðåñ÷¸òà äëÿ counted_bars ôóíêöèb JJMASeries è JurXSeries áóäóò ðàáîòàòü íåêîððåêòíî!!!) if (counted_bars>0) counted_bars--; //---- îïðåäåëåíèå íîìåðà ñàìîãî ñòàðîãî áàðà, íà÷èíàÿ ñ êîòîðîãî áóäåò ïðîèçåä¸í ïåðåñ÷¸ò íîâûõ áàðîâ limit=Bars-counted_bars-1; //---- îïðåäåëåíèå íîìåðà ìàêñèìàëüíîãî ñàìîãî ñòàðîãî áàðà, íà÷èíàÿ ñ êîòîðîãî áóäåò ïðîèçåä¸í ïåðåñ÷¸ò íîâûõ áàðîâ MaxBarD=Bars-2;MaxBarJ=MaxBarD-Demark_Length; if (limit>MaxBarD)limit=MaxBarD; //----+ ÎÑÍÎÂÍÎÉ ÖÈÊË ÐÀÑרÒÀ ÈÅÄÈÊÀÒÎÐÀ for(int bar=limit; bar>=0; bar--) { min_H=High[bar]-High[bar+1]; min_L=Low[bar+1]-Low[bar]; //----+ if(min_H<0) min_H=0; if(min_L<0) min_L=0; min_S = min_L + min_H; //----+ ----------------------------------------------------------------+ //----+ Äâà ïàðàëëåëüíûõ îáðàùåíèÿ ê ôóíêöèè JurXSeries çà íîìåðàìè 0, 1 //----+ ïàðàìåòð nJurXLength íå ìåíÿåòñÿ íà êàæäîì áàðå (nJurXdin=0) //----+ ----------------------------------------------------------------+ Jmin_H=JurXSeries(0,0,MaxBarD,limit,Demark_Length,min_H,bar,reset); //----+ ïðîâåðêà íà îòñóòñòâèå îøèáêè â ïðåäûäóùåé îïåðàöèè if(reset!=0)return(-1); //----+ ----------------------------------------------------------------+ Jmin_S=JurXSeries(1,0,MaxBarD,limit,Demark_Length,min_S,bar,reset); //----+ ïðîâåðêà íà îòñóòñòâèå îøèáêè â ïðåäûäóùåé îïåðàöèè if(reset!=0)return(-1); //----+ ----------------------------------------------------------------+ if (bar>MaxBarJ)continue; //----+ Ðàñ÷¸ò èíäèêàòîðà Äåìàðêà if(Jmin_S!=0)JDemarkX =(200*Jmin_H/Jmin_S)-100;else JDemarkX = 100; //---- +SSSSSSSSSSSSSSSS <<< Òð¸õöâåòíûé êîä èíäèêàòîðà >>> SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ trend=JDemarkX-Ind_Buffer1[bar+1]-Ind_Buffer2[bar+1]-Ind_Buffer3[bar+1]; if (trend>0){Ind_Buffer1[bar]=JDemarkX; Ind_Buffer2[bar]=0; Ind_Buffer3[bar]=0;} else{if(trend<0){Ind_Buffer1[bar]=0; Ind_Buffer2[bar]=JDemarkX; Ind_Buffer3[bar]=0;} else {Ind_Buffer1[bar]=0; Ind_Buffer2[bar]=0; Ind_Buffer3[bar]=JDemarkX;}} //---- +SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ //----+ Âû÷èñëåíèå ñèãíàëüíîé ëèíèè //----+ ---------------------------------------------------------------------------------------------------------------------------+ //----+ (Îäíî îáðàùåíèå ê ôóíêöèè JJMASeries çà íîìåðîì 0, ïàðàìåòðû nJMA.Phase è nJMA.Length íå ìåíÿþòñÿ íà êàæäîì áàðå (nJMA.din=0)) Signal=JJMASeries(0,0,MaxBarJ,limit,Signal_Phase,Signal_Length,JDemarkX,bar,reset); //----+ ïðîâåðêà íà îòñóòñòâèå îøèáêè â ïðåäûäóùåé îïåðàöèè if(reset!=0)return(-1); Ind_Buffer4[bar]=Signal; //----+ ---------------------------------------------------------------------------------------------------------------------------+ } if(limit>=MaxBarJ){int iii=MaxBarJ;Ind_Buffer1[iii]=0;Ind_Buffer2[iii]=0;Ind_Buffer3[iii]=0;} //---- çàâåðøåíèå âû÷èñëåíèé çíà÷åíèé èíäèêàòîðà return(0); } //+-------------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Indicator Curves created:
Implements a curve of type DRAW_HISTOGRAM
Implements a curve of type DRAW_LINE
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Other Features: