// +——————————————————————————————————————————————————————————————————————————————————————————————+ // ¦ Affine Transform AffineTransform.mq4 ¦ // ¦ Èíäèêàòîð âûïîëíÿåò àôôèííîå ïðåîáðàçîâàíèå âðåìåííîãî ðÿäà öåíîâûõ äàííûõ (ïî öåíàì, ¦ // ¦ óêàçàííûì â ïàðàìåòðå Applied_Price), èñïîëüçóÿ óãîë íàêëîíà òðåíäîâîé ëèíèè. ¦ // ¦ Ïîðÿäîê èñïîëüçîâàíèÿ: ¦ // ¦ •ñîçäàòü òðåíäîâóþ ëèíèþ, ïðèñâîèòü åå îáúåêòó èìÿ; ¦ // ¦ •ïðèñîåäèíèòü èíäèêàòîð ê ãðàôèêó, óêàçàâ èìÿ òðåíäîâîé ëèíèè â ïàðàìåòðå Trendline_Name; ¦ // ¦ •âûáðàòü öåíîâóþ êîíñòàíòó â ïàðàìåòðå Applied_Price. ¦ // ¦ Çàìå÷àíèå: ïðè èçìåíåíèè óãëà òðåíäîâîé ëèíèè, èíäèêàòîð ïåðåñ÷èòûâàåò âñå ïîêàçàíèÿ. ¦ // ¦ Âûðàæàþ áëàãîäàðíîñòü àâòîðó èäåè, ïîëîæåííîé â îñíîâàíèå èíäèêàòîðà: Ëèõîâèäîâó Â.Í. ¦ // ¦ Îãðîìíàÿ ïðîñüáà ðàñïðîñòðàíÿòü èíäèêàòîð òîëüêî â èñõîäíèêå (.mq4), è íå èçìåíÿòü òåêñò ¦ // ¦ ýòîãî çàãîëîâêà. ¦ // ¦----------------------------------------------------------------------------------------------¦ // ¦ [release 1] 06.12.2009 ¦ // ¦ (•)Ïåðâûé ðåëèç. Ïðåäëîæåíèÿ ïî óëó÷øåíèÿì ïðèâåòñòâóþòñÿ _________________________________¦ // ¦ | © xp3rienced, Ekaterinburg 2009 ¦ // +——————————————————————————————————————————————————————————————————————————————————————————————+ #property copyright "© xp3rienced" #property link "no4ta[at]inbox.ru" #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Blue #property indicator_width1 1 //====[ ïàðàìåòðû èíäèêàòîðà ]==== extern string Trendline_Name = "A_Line"; // Èìÿ îáúåêòà (òðåíäîâîé ëèíèè) extern int Applied_Price = PRICE_CLOSE; // Öåíîâûå äàííûå, ïî êîòîðûì ñòðîèòñÿ ëèíèÿ èíäèêàòîðà //====[ áóôåðû èíäèêàòîðà ]==== double A_t[]; //====[ ãëîáàëüíûå ïåðåìåííûå èíäèêàòîðà ]==== double LineAngleTg; // Òàíãåíñ óãëà íàêëîíà òðåíäîâîé ëèíèè double LinePrice1, LinePrice2; // Öåíîâûå êîîðäèíàòû òî÷åê òðåíäîâîé ëèíèè datetime LineTime1, LineTime2; // Âðåìåííûå êîîðäèíàòû òî÷åê òðåíäîâîé ëèíèè int Shift1, Shift2; // Áàðíîå ñìåùåíèå òî÷åê òðåíäîâîé ëèíèè int Multiplier; // Ìíîæèòåëü, ïðèìåíÿåìûé ê öåíå (äëÿ óìåíüøåíèÿ ïîãðåøíîñòè) bool NeedUpdate; //+------------------------------------------------------------------+ //| Ôóíêöèÿ èíèöèàëèçàöèè èíäèêàòîðà | //+------------------------------------------------------------------+ int init() { //---- if((Applied_Price < 0) || (Applied_Price > 6)) Applied_Price = PRICE_CLOSE; //---- íàçíà÷åíèå èíäåêñîâ áóôåðàì SetIndexBuffer(0, A_t); //---- óñòàíîâêè îòðèñîâêè SetIndexStyle(0, DRAW_LINE); //---- èìÿ äëÿ Îêíà Äàííûõ, è íàäïèñè ïîäîêíà èíäèêàòîðà IndicatorShortName(StringConcatenate("Affine Transform(", PriceConstToStr(Applied_Price), ")")); SetIndexLabel(0, PriceConstToStr(Applied_Price)); //---- 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; } //---- âûïîëíåíèå àôôèííîãî ïðåîáðàçîâàíèÿ for(int i=0; i