//+------------------------------------------------------------------+ //| lukas1 arrows & curves.mq4 | //| Èäåÿ from Silver, Ramdass åùå è Lukas1 ðóêó ïðèëîæèë | //| ..... v3e | //| Ãëîáàëüûå ïåðåìåííûå åñòü. ïî íèì òîðãóåò ñîâåòíèê Rosa | //+------------------------------------------------------------------+ #property copyright "Lukas1+Silver+CrazyChart" #property link "http://viac.ru/" //---- #property indicator_chart_window #property indicator_buffers 4 #property indicator_color1 RoyalBlue #property indicator_color2 OrangeRed #property indicator_color3 Green #property indicator_color4 Green //---- input parameters extern int SSP = 19; //ïåðèîä ëèíåéíîãî ðàçâîðîòà èíäèêàòîðà extern int RISK = 3; extern int CountBars = 18250; //ðàñ÷åòíûé ïåðèîä - äëÿ 30 ìèí áîëüøå ãîäà extern double SkyCh = 23.6; //---- int Shift = 0; int TSP = 9; int PrevAlertTime; double smin, smax; //---- buffers double val1[]; // áóôåð äëÿ áàé double val2[]; // áóôåð äëÿ ñåëë double Sky_BufferH[]; double Sky_BufferL[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { string short_name; //---- indicator line SetIndexStyle(0, DRAW_ARROW); SetIndexArrow(0, 233); // arrowbuy SetIndexStyle(1, DRAW_ARROW); SetIndexArrow(1, 234); // arrowsell SetIndexBuffer(0, val1); // èíäåêñ áóôåðà äëÿ buy SetIndexBuffer(1, val2); // èíäåêñ áóôåðà äëÿ sell //---- SetIndexStyle(2, DRAW_LINE); SetIndexBuffer(2, Sky_BufferH); SetIndexShift(2, Shift); SetIndexLabel(2, "Sky-channel High"); //---- SetIndexStyle(3, DRAW_LINE); SetIndexBuffer(3, Sky_BufferL); SetIndexShift(3, Shift); SetIndexLabel(3, "Sky-channel Low"); //---- if(CountBars >= Bars) CountBars=Bars; // CountBars ðàâíî êîëè÷åñòâó áàðîâ íà ãðàôèêå // äëÿ êðèâîé "0"- ñàìî ðèñîâàíèå; íå ðàñ÷èòûâàòü ïåðâûå SSP áàðîâ (ñíà÷àëà SSP=9) SetIndexDrawBegin(0, Bars - CountBars + SSP); // äëÿ êðèâîé "1"- ñàìî ðèñîâàíèå; íå ðàñ÷èòûâàòü ïåðâûå SSP áàðîâ (ñíà÷àëà SSP=9) SetIndexDrawBegin(1, Bars - CountBars + SSP); SetIndexDrawBegin(2, SSP + Shift - 1); SetIndexDrawBegin(3, SSP + Shift - 1); //---- return(0); } //+------------------------------------------------------------------+ //| SilverTrend_Signal | //+------------------------------------------------------------------+ int start() { int i; int shift; // ðàñ÷åòíîå ñìåùåíèå int counted_bars = IndicatorCounted(); // òåêóùèé áàð äëÿ ðàñ÷åòà èíäèêàòîðà int i1; int i2; int K, k; double Range, AvgRange, SsMax, SsMin, price; bool uptrend, old; double high, low; //---- if(Bars <= SSP + 1) return(0); //---- initial zero if(counted_bars < SSP + 1) { for(i = 1; i <= SSP; i++) val1[CountBars-i] = 0.0; // îáíóëèëè ìàññèâ val1 //---- for(i = 1; i <= SSP; i++) val2[CountBars-i]=0.0; // îáíóëèëè ìàññèâ val2 //---- for(i = 1; i <= SSP; i++) { Sky_BufferH[Bars-i] = 0; Sky_BufferL[Bars-i] = 0; } } GlobalVariableSet("xSELL", 0); // çàäàëè ñóùåñòâîâàíèå è îáíóëèëè xSELL=0 GlobalVariableSet("xBUY", 0); // çàäàëè ñóùåñòâîâàíèå è îáíóëèëè xBUY =0 // ñòàíäàðòíûå âû÷èñëåíèÿ äî 0-ãî áàðà i = Bars - SSP; //---- if(counted_bars > SSP) i = Bars - counted_bars - 1; //---- while(i >= 0) { high = High[i]; low = Low[i]; k = i - 1 + SSP; //---- while(k >= i) { price = High[k]; //---- if(high < price) high = price; price = Low[k]; //---- if(low > price) low = price; k--; } // âñå ïîñ÷èòàëè - çàïèñûâàåì çíà÷åíèÿ òî÷êè â ìàññèâ èíäèêàòîðà Sky_BufferL[i+Shift] = low + (high - low)*SkyCh / 100; Sky_BufferH[i+Shift] = high - (high - low)*SkyCh / 100; i--; // äâèãàåì ñ÷åò÷èê } i = Shift - 1; // Ñ÷èòàåì òî÷êè ñäâèãà - ñïðàâà îò íóëåâîãî i=Shift-1; //---- while(i >= 0) { high = High[0]; low = Low[0]; k = SSP - Shift - 1 + i; // êàæäûé ñëåäóþùèé óìåíüøàåò ïåðèîä k=SSP-Shift+i; //---- while(k >= 0) { price = High[k]; //---- if(high < price) high = price; price = Low[k]; //---- if(low > price) low = price; k--; } // çàïèñûâàåì çíà÷åíèÿ â ìàññèâ Sky_BufferL[i] = low + (high - low)*SkyCh / 100; Sky_BufferH[i] = high - (high - low)*SkyCh / 100; i--; } K = 33 - RISK; //---- for(shift = CountBars - SSP; shift >= 0; shift--) // óìåíüø çíà÷åíèå shift íà 1 çà ïðîõîä; { Range = 0; AvgRange = 0; //---- for(i1 = shift; i1 <= shift + SSP; i1++) // óâåëè÷ "i1" îò shift äî (shift+SSP) // ñðåäíèå êîëåáàíèÿ òåêóùèõ öåí AvgRange = AvgRange + MathAbs(High[i1] - Low[i1]); Range = AvgRange / (SSP + 1); // äèàïàçîí êîëåáàíèÿ òåêóùèõ öåí SsMax = High[shift]; // çàäàòü SsMax SsMin = Low[shift]; // çàäàòü SsMin //---- for(i2 = shift; i2 <= shift + SSP - 1; i2++) // óâåëè÷ "i2" îò shift äî (shift+SSP) { price = High[i2]; // çàäàòü price //---- if(SsMax < price) SsMax = price; // ïîäòÿíóëè SsMax äî óðîâíÿ High[i2] price = Low[i2]; //---- if(SsMin >= price) SsMin = price; // ïîíèçèëè SsMin äî óðîâíÿ Low[i2] } smin = SsMin + (SsMax - SsMin)*K / 100; // smin âûøå SsMin ñ ó÷åòîì êîýôô.ðèñêà smax = SsMax - (SsMax - SsMin)*K / 100; // smax íèæå SsMax ñ ó÷åòîì êîýôô.ðèñêà val1[shift] = 0; // áóôåð äëÿ áàé val2[shift] = 0; // áóôåð äëÿ ñåëë //---- if(Close[shift] < smin) uptrend = false; //---- if(Close[shift] > smax) uptrend = true; //---- if(uptrend != old && uptrend == true) { val1[shift] = Low[shift] - Range*0.5; // åñëè óñëîâèÿ âûïîëíåíû òî âû÷èñëÿåì val1 //---- if(shift == 0) GlobalVariableSet("xBUY",1); } //---- if(uptrend != old && uptrend == false) { val2[shift] = High[shift] + Range*0.5; // åñëè óñëîâèÿ âûïîëíåíû òî âû÷èñëÿåì val2 //---- if(shift == 0) GlobalVariableSet("xSELL",1); } old=uptrend; } 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
Series array that contains close prices for each bar
Indicator Curves created:
Implements a curve of type DRAW_ARROW
Implements a curve of type DRAW_LINE
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Other Features: