// +——————————————————————————————————————————————————————————————————————————————————————————————+ // ¦ Affine Transform AffineTransform.mq4 ¦ // ¦ Èíäèêàòîð âûïîëíÿåò àôôèííîå ïðåîáðàçîâàíèå âðåìåííîãî ðÿäà öåíîâûõ äàííûõ (ïî öåíàì, ¦ // ¦ óêàçàííûì â ïàðàìåòðå Applied_Price), èñïîëüçóÿ óãîë íàêëîíà òðåíäîâîé ëèíèè. ¦ // ¦ Ïîðÿäîê èñïîëüçîâàíèÿ: ¦ // ¦ •ñîçäàòü òðåíäîâóþ ëèíèþ, ïðèñâîèòü åå îáúåêòó èìÿ; ¦ // ¦ •ïðèñîåäèíèòü èíäèêàòîð ê ãðàôèêó, óêàçàâ èìÿ òðåíäîâîé ëèíèè â ïàðàìåòðå Trendline_Name; ¦ // ¦ •âûáðàòü öåíîâóþ êîíñòàíòó â ïàðàìåòðå Applied_Price (èëè óñòàíîâèòü åå =7 äëÿ ðàñ÷åòà ïî ¦ // ¦ äâóõ ëèíèé ïî ýêñòðåìóìàì áàðîâ). ¦ // ¦ Çàìå÷àíèå: ïðè èçìåíåíèè óãëà òðåíäîâîé ëèíèè, èíäèêàòîð ïåðåñ÷èòûâàåò âñå ïîêàçàíèÿ. ¦ // ¦ Âûðàæàþ áëàãîäàðíîñòü àâòîðó èäåè, ïîëîæåííîé â îñíîâàíèå èíäèêàòîðà: Ëèõîâèäîâó Â.Í. ¦ // ¦ Ññûëêà íà èíäèêàòîð â MQL4 Code Base: http://codebase.mql4.com/ru/6280 ¦ // ¦ Îãðîìíàÿ ïðîñüáà ðàñïðîñòðàíÿòü èíäèêàòîð òîëüêî â èñõîäíèêå (.mq4), è íå èçìåíÿòü òåêñò ¦ // ¦ ýòîãî çàãîëîâêà. ¦ // ¦----------------------------------------------------------------------------------------------¦ // ¦ [release 2] 10.12.2009 ¦ // ¦ (+)Îãðàíè÷åíèå áàðîâ èíäèêàòîðà, èõ ÷èñëî çàäàåòñÿ ïàðàìåòðîì MaxBars. Äîï. çíà÷åíèÿ: ¦ // ¦ 0: îòêëþ÷èòü; ¦ // ¦ -1: îãðàíè÷åíèå ïî ïåðâîé òî÷êå òðåíäîâîé ëèíèè. ¦ // ¦ (+)Ðåæèì äâóõ ëèíèé ïî ýêñòðåìóìàì áàðîâ. Äëÿ âêëþ÷åíèÿ, óêàæèòå ïàðàìåòð Applied_Price = 7. ¦ // ¦  ýòîì ðåæèìå, èíäèêàòîð ñòðîèò äâå ëèíèè: îäíó ïî ìàêñèìóìàì öåíû, à âòîðóþ ïî ¦ // ¦ ìèíèìóìàì. Ïðåäíàçíà÷åí äëÿ áîëåå òî÷íîãî îïðåäåëåíèÿ óðîâíåé ñîïðîòèâëåíèÿ/ïîääåðæêè. ¦ // ¦ (+)Öâåò ëèíèé èíäèêàòîðà òåïåðü ñîîòâåòñòâóåò öâåòó òðåíäîâîé ëèíèè, ê êîòîðîé îí ïðèâÿçàí. ¦ // ¦ [release 1] 06.12.2009 ¦ // ¦ (•)Ïåðâûé ðåëèç. Ïðåäëîæåíèÿ ïî óëó÷øåíèÿì ïðèâåòñòâóþòñÿ. _________________________________¦ // ¦ | © xp3rienced, Ekaterinburg 2009 ¦ // +——————————————————————————————————————————————————————————————————————————————————————————————+ #property copyright "© xp3rienced" #property link "no4ta[at]inbox.ru" #define PRICE_HIGHLOW 7 #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 Green #property indicator_color2 Green #property indicator_width1 1 #property indicator_width2 1 //====[ ïàðàìåòðû èíäèêàòîðà ]==== extern string Trendline_Name = "A_Line"; // Èìÿ îáúåêòà (òðåíäîâîé ëèíèè) extern int Applied_Price = PRICE_CLOSE; // Öåíîâûå äàííûå, ïî êîòîðûì ñòðîèòñÿ ëèíèÿ èíäèêàòîðà. Çíà÷åíèÿ: // Close = 0; Open = 1; High = 2; Low = 3; Median = 4; Typical = 5; Weighted = 6; HighLow = 7 extern int MaxBars = 500; // Îãðàíè÷åíèå áàðîâ èíäèêàòîðà. 0 = îòêëþ÷èòü; -1 = îãðàíè÷åíî ïåðâîé òî÷êîé òðåíäîâîé ëèíèè //====[ áóôåðû èíäèêàòîðà ]==== double At_High[]; double At_Low[]; //====[ ãëîáàëüíûå ïåðåìåííûå èíäèêàòîðà ]==== double LineAngleTg; // Òàíãåíñ óãëà íàêëîíà òðåíäîâîé ëèíèè double LinePrice1, LinePrice2; // Öåíîâûå êîîðäèíàòû òî÷åê òðåíäîâîé ëèíèè datetime LineTime1, LineTime2; // Âðåìåííûå êîîðäèíàòû òî÷åê òðåíäîâîé ëèíèè int Shift1, Shift2; // Áàðíîå ñìåùåíèå òî÷åê òðåíäîâîé ëèíèè int Multiplier; // Ìíîæèòåëü, ïðèìåíÿåìûé ê öåíå (äëÿ óìåíüøåíèÿ ïîãðåøíîñòè) bool NeedUpdate; //+------------------------------------------------------------------+ //| Ôóíêöèÿ èíèöèàëèçàöèè èíäèêàòîðà | //+------------------------------------------------------------------+ int init() { //---- if((Applied_Price < 0) || (Applied_Price > 7)) Applied_Price = PRICE_CLOSE; //---- íàçíà÷åíèå èíäåêñîâ áóôåðàì SetIndexBuffer(0, At_High); SetIndexBuffer(1, At_Low); //---- óñòàíîâêè îòðèñîâêè color c = GetTrendLineColor(); SetIndexStyle(0, DRAW_LINE, EMPTY, EMPTY, c); SetIndexStyle(1, DRAW_LINE, EMPTY, EMPTY, c); //---- èìÿ äëÿ Îêíà Äàííûõ, è íàäïèñè ïîäîêíà èíäèêàòîðà IndicatorShortName(StringConcatenate("Affine Transform(", PriceConstToStr(Applied_Price), ")")); string label1 = PriceConstToStr(Applied_Price); string label2 = label1; if(Applied_Price == 7) { label1 = "High"; label2 = "Low"; } SetIndexLabel(0, label1); SetIndexLabel(1, label2); //---- NeedUpdate = true; Multiplier = MathPow(10, Digits); //---- èíèöèàëèçàöèÿ çàâåðøåíà return(0); } //+------------------------------------------------------------------+ //| Ôóíêöèÿ äåèíèöèàëèçàöèè èíäèêàòîðà | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Ôóíêöèÿ èòåðàöèè èíäèêàòîðà | //+------------------------------------------------------------------+ int start() { int limit = Bars - IndicatorCounted(); if(limit < Bars) limit++; //---- âû÷èñëåíèå òàíãåíñà óãëà íàêëîíà, è åñëè îí èçìåíèëñÿ - ïîëíàÿ ïåðåðèñîâêà CalcAngleTg(); if(NeedUpdate) { limit = Bars - 1; NeedUpdate = false; } //---- îãðàíè÷åíèå áàðîâ ðàñ÷åòà, åñëè òðåáóåòñÿ if((MaxBars > 0) && (MaxBars < limit)) limit = MaxBars; if(MaxBars == -1) limit = Shift1; //---- âûïîëíåíèå àôôèííîãî ïðåîáðàçîâàíèÿ if(Applied_Price == 7) { //---- ðåæèì ïîñòðîåíèÿ äâóõ ëèíèé ïî ýêñòðåìóìàì áàðîâ for(int i=0; i