Indicators Used
0
Views
0
Downloads
0
Favorites
Regression_Channel_V2_v3
//+------------------------------------------------------------------+
//| Regression_Channel.mq4 |
//| Converted to MT4 by KimIV |
//| Modified bt MrPip to place lines at 2 different Standard Devs |
//| Also makes StDev level an input, with some Stache mods |
//+------------------------------------------------------------------+
/*
Name := Regression_Channel
Author := Copyright © 2004, MetaQuotes Software Corp.
Link := http://www.metaquotes.net/
*/
#property copyright "KimIV"
#property link "http://www.kimiv.ru"
//----
#property indicator_chart_window
//------- Âíåøíèå ïàðàìåòðû èíäèêàòîðà -------------------------------
extern int NumberName =1;
extern int iPeriod =56;
extern double MAShoot =50;
extern int LineWeight =1;
extern color LineColor=Magenta;
extern double StDevOutside=1.618;
extern color Outside=SteelBlue;
extern int OutsideWeight=1;
extern double StDevInside=0.809;
extern color Inside=Goldenrod;
extern int InsideWeight=1;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void init()
{
ObjectCreate("Regression_middle"+NumberName, OBJ_TREND, 0, 0,0, 0,0);
ObjectSet("Regression_middle"+NumberName, OBJPROP_COLOR, LineColor);
ObjectSet("Regression_middle"+NumberName, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet("Regression_middle"+NumberName, OBJPROP_WIDTH, LineWeight);
ObjectCreate("Regression_Outside_upper" +NumberName, OBJ_TREND, 0, 0,0, 0,0);
ObjectSet("Regression_Outside_upper"+NumberName, OBJPROP_COLOR, Outside);
ObjectSet("Regression_Outside_upper"+NumberName, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet("Regression_Outside_upper"+NumberName, OBJPROP_WIDTH, OutsideWeight);
ObjectCreate("Regression_Outside_lower" +NumberName, OBJ_TREND, 0, 0,0, 0,0);
ObjectSet("Regression_Outside_lower"+NumberName, OBJPROP_COLOR, Outside);
ObjectSet("Regression_Outside_lower"+NumberName, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet("Regression_Outside_lower"+NumberName, OBJPROP_WIDTH, OutsideWeight);
ObjectCreate("Regression_Inside_upper" +NumberName, OBJ_TREND, 0, 0,0, 0,0);
ObjectSet("Regression_Inside_upper"+NumberName, OBJPROP_COLOR, Inside);
ObjectSet("Regression_Inside_upper"+NumberName, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet("Regression_Inside_upper"+NumberName, OBJPROP_WIDTH, InsideWeight);
ObjectCreate("Regression_Inside_lower" +NumberName, OBJ_TREND, 0, 0,0, 0,0);
ObjectSet("Regression_Inside_lower"+NumberName, OBJPROP_COLOR, Inside);
ObjectSet("Regression_Inside_lower"+NumberName, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet("Regression_Inside_lower"+NumberName, OBJPROP_WIDTH, InsideWeight);
//----
Comment("Auto Regression channel");
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
void deinit()
{
ObjectDelete("Regression_middle"+NumberName);
ObjectDelete("Regression_Outside_upper" +NumberName);
ObjectDelete("Regression_Outside_lower" +NumberName);
ObjectDelete("Regression_Inside_upper" +NumberName);
ObjectDelete("Regression_Inside_lower" +NumberName);
Comment("");
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
void start()
{
bool check_low, check_high;
bool check_upper_chanel;
double save_low, save_high;
double MA, a1, a2, a3, b1, a_, b_, y1, y2, price;
double stddiv_low, stddiv_high, tmp_div;
double x_n_upOut, x_1_upOut, x_n_downOut, x_1_downOut;
double x_n_upIn, x_1_upIn, x_n_downIn, x_1_downIn;
double ratio_currency;
int shift;
int n, n_begin, n_end;
int MAType, MAPrice;
int save_shift_low, save_shift_high;
//----
save_low=-1;
save_high=-1;
save_shift_low=-1;
save_shift_high=-1;
//----
check_low=false;
check_high=false;
//----
MAType=MODE_SMA;
MAPrice=PRICE_CLOSE;
//----
if (Close[1]>80) ratio_currency=100;
else ratio_currency=10000;
// Ïîèñê òî÷åê ïåðåñå÷åíèÿ ñ ÌÀ
for(shift=Bars-1; shift>=0; shift--)
{
MA=iMA(NULL, 0, iPeriod, 0, MAType, MAPrice, shift);
if (MA-MAShoot/ratio_currency>Close[shift])
{
if (Close[shift]<save_low || save_low==-1)
{
check_low=true;
save_low=Close[shift];
save_shift_low=shift;
}
}
if (MA+MAShoot/ratio_currency<Close[shift])
{
if (save_high<Close[shift] || save_high==-1)
{
check_high=true;
save_high=Close[shift];
save_shift_high=shift;
}
}
if (check_low)
{
if (MA+MAShoot/ratio_currency<Close[shift])
{
check_low=false;
save_low=-1;
}
}
if (check_high)
{
if (MA-MAShoot/ratio_currency>Close[shift])
{
check_high=false;
save_high=-1;
}
}
}
//Îïðåäåëåíèå ãðàíèö ïîñòðîåíèÿ êàíàëëà
if (save_shift_low>save_shift_high)
{
n_begin=save_shift_low;
n_end=save_shift_high;
}
else
{
n_begin=save_shift_high;
n_end=save_shift_low;
}
if (n_end==0) n_end=1; // Íóëåâîé áàð íå èñïîëüçîâàòü
n=n_begin - n_end + 1; // äëèíà êàíàëà
//----
a1=0;
a2=0;
a3=0;
b1=0;
a_=0;
b_=0;
y1=0;
y2=0;
tmp_div=0;
//----
if (Close[n_begin]<Close[n_end]) check_upper_chanel=true;
else check_upper_chanel=false;
//----
for(shift=n_begin; shift>=n_end; shift--)
{
if (check_upper_chanel) price=Low[shift];
else price=High[shift];
//----
a1=a1 + shift*price;
a2=a2 + shift;
a3=a3 + price;
b1=b1 + shift*shift;
}
b_=(n*a1 - a2*a3)/(n*b1 - a2*a2);
a_=(a3 - b_*a2)/n;
y1=a_ + b_*n_begin;
y2=a_ + b_*n_end;
//----
ObjectSet("Regression_middle"+NumberName, OBJPROP_TIME1, Time[n_begin]);
ObjectSet("Regression_middle"+NumberName, OBJPROP_TIME2, Time[n_end]);
ObjectSet("Regression_middle"+NumberName, OBJPROP_PRICE1, y1);
ObjectSet("Regression_middle"+NumberName, OBJPROP_PRICE2, y2);
for(shift=n_begin; shift>=n_end; shift--)
{
if (check_upper_chanel) price=Low[shift];
else price=High[shift];
//----
tmp_div=tmp_div + (price - (a_ + b_*shift))*(price - (a_ + b_*shift));
}
stddiv_low=MathSqrt(tmp_div/n);
stddiv_high=MathSqrt(tmp_div/n);
//----
x_n_upOut=y1 + StDevOutside*stddiv_high;
x_1_upOut=y2 + StDevOutside*stddiv_high;
x_n_downOut=y1 - StDevOutside*stddiv_low;
x_1_downOut=y2 - StDevOutside*stddiv_low;
x_n_upIn=y1 + StDevInside*stddiv_high;
x_1_upIn=y2 + StDevInside*stddiv_high;
x_n_downIn=y1 - StDevInside*stddiv_low;
x_1_downIn=y2 - StDevInside*stddiv_low;
//OUTSIDE
//upper
ObjectSet("Regression_Outside_upper"+NumberName, OBJPROP_TIME1, Time[n_begin]);
ObjectSet("Regression_Outside_upper"+NumberName, OBJPROP_TIME2, Time[n_end]);
ObjectSet("Regression_Outside_upper"+NumberName, OBJPROP_PRICE1, x_n_upOut);
ObjectSet("Regression_Outside_upper"+NumberName, OBJPROP_PRICE2, x_1_upOut);
//lower
ObjectSet("Regression_Outside_lower"+NumberName, OBJPROP_TIME1, Time[n_begin]);
ObjectSet("Regression_Outside_lower"+NumberName, OBJPROP_TIME2, Time[n_end]);
ObjectSet("Regression_Outside_lower"+NumberName, OBJPROP_PRICE1, x_n_downOut);
ObjectSet("Regression_Outside_lower"+NumberName, OBJPROP_PRICE2, x_1_downOut);
//INSIDE
//upper
ObjectSet("Regression_Inside_upper"+NumberName, OBJPROP_TIME1, Time[n_begin]);
ObjectSet("Regression_Inside_upper"+NumberName, OBJPROP_TIME2, Time[n_end]);
ObjectSet("Regression_Inside_upper"+NumberName, OBJPROP_PRICE1, x_n_upIn);
ObjectSet("Regression_Inside_upper"+NumberName, OBJPROP_PRICE2, x_1_upIn);
//lower
ObjectSet("Regression_Inside_lower"+NumberName, OBJPROP_TIME1, Time[n_begin]);
ObjectSet("Regression_Inside_lower"+NumberName, OBJPROP_TIME2, Time[n_end]);
ObjectSet("Regression_Inside_lower"+NumberName, OBJPROP_PRICE1, x_n_downIn);
ObjectSet("Regression_Inside_lower"+NumberName, OBJPROP_PRICE2, x_1_downIn);
}
//-------------------------------------------------------------------+
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---