Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
mv-i-Chuvashov
//+------------------------------------------------------------------+
//| mv-i-Chuvashov.mq4 |
//| Ìàêñèì Âàñèëåíêî Â. MaxV42 |
//| http:// |
//| Èíäèêàòîð ðàáîòàåò ïî ñòðàòåãèè "Âèëêà ×óâàøîâà". |
//| Âåðñèÿ 1.0: |
//+------------------------------------------------------------------+
#property copyright "Ìàêñèì Âàñèëåíêî Â. MaxV42"
#property link "http://"
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_width1 1
#property indicator_width2 1
//+------------------------------------------------------------------+
extern string Ind_Coment1= "--- Âíåøíèå ïàðàìåòðû èíäèêàòîðà ---";
extern bool ShowFractals = true; // Âêë/âûêë çíà÷êîâ ôðàêòàëîâ
extern bool OnAlert = true; // Âêë/âûêë ñèãíàëà
extern bool OnPrint = false; // Âêë/âûêë âûâîä ñèãíàëà â æóðíàëå ýêñïåðòà
extern int nVilka.Upper = 1; // Êîëè÷åñòâî âûâîäèìûõ âîñõîäÿùèõ "âèëîê"
extern int nVilka.Lower = 1; // Êîëè÷åñòâî âûâîäèìûõ íèñõîäÿùèõ "âèëîê"
extern color Color.LineUpper = Red; // Öâåò âîñõîäÿùèõ "âèëîê"
extern color Color.LineLower = Blue; // Öâåò íèñõîäÿùèõ "âèëîê"
extern int Width.LineUpper = 2; // Øèðèíà âîñõîäÿùèõ "âèëîê"
extern int Width.LineLower = 2; // Øèðèíà íèñõîäÿùèõ "âèëîê"
//+------------------------------------------------------------------+
// ãëîáàëüíûå ïåðåìåííûå
int nLine.Upper = 0, // Êîëè÷åñòâî òðåíäîâûõ ëèíèé, íàïðàâëåííûõ ââåðõ
nLine.Lower = 0, // Êîëè÷åñòâî òðåíäîâûõ ëèíèé, íàïðàâëåííûõ âíèç
nBars = 0; //
datetime mLineUpper.DateTime[][2]; // ìàññèâ ñ ïàðàìåòðàìè âîñõîäÿùèõ "âèëîê"
// mLineUpper.DateTime[i][0] // Âðåìÿ ïåðâîé êîîðäèíàòû
// mLineUpper.DateTime[i][1] // Âðåìÿ âòîðîé êîîðäèíàòû
double mLineUpper.Price[][2]; // ìàññèâ ñ ïàðàìåòðàìè âîñõîäÿùèõ "âèëîê"
// mLineUpper.Price[i][0] // Öåíà ïåðâîé êîîðäèíàòû
// mLineUpper.Price[i][1] // Öåíà âòîðîé êîîðäèíàòû
datetime mLineLower.DateTime[][2]; // ìàññèâ ñ ïàðàìåòðàìè íèñõîäÿùèõ "âèëîê"
// mLineLower.DateTime[i][0] // Âðåìÿ ïåðâîé êîîðäèíàòû
// mLineLower.DateTime[i][1] // Âðåìÿ âòîðîé êîîðäèíàòû
double mLineLower.Price[][2]; // ìàññèâ ñ ïàðàìåòðàìè íèñõîäÿùèõ "âèëîê"
// mLineLower.Price[i][0] // Öåíà ïåðâîé êîîðäèíàòû
// mLineLower.Price[i][1] // Öåíà âòîðîé êîîðäèíàòû
//----- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
void init() { // Custom indicator initialization function
int Qnt=ObjectsTotal();
// ----- Indicators Properties
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,217);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexEmptyValue(0,0.0);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,218);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexEmptyValue(1,0.0);
// ----- Name for DataWindow and indicator subwindow label
IndicatorShortName("Fractals");
SetIndexLabel(0,"FractalsUp");
SetIndexLabel(1,"FractalsDown");
// ----- óñòàíàâëèâàåì êîëè÷åñòâî ýëåìåíòîâ â ìàññèâàõ òðåíäîâûõ ëèíèé
ArrayResize(mLineUpper.DateTime,nVilka.Upper*2); ArrayResize(mLineUpper.Price,nVilka.Upper*2);
ArrayResize(mLineLower.DateTime,nVilka.Lower*2); ArrayResize(mLineLower.Price,nVilka.Lower*2);
return;
}
//+------------------------------------------------------------------+
void deinit() { // Custom indicator deinitialization function
int Qnt=ObjectsTotal();
// ----- Óäàëÿåì òðåíäîâûå ëèíèè
for (int i=0; i<Qnt; i++) { // Öèêë ïî îáúåêòàì
if(StringFind(ObjectName(i),"Line.Upper",0)>=0) {
ObjectDelete(ObjectName(i)); // íàïðàâëåííûå ââåðõ
i--; continue;
}
if(StringFind(ObjectName(i),"Line.Lower",0)>=0) {
ObjectDelete(ObjectName(i)); // íàïðàâëåííûå âíèç
i--; continue;
}
if(i>=ObjectsTotal()) break;
}
return;
}
//+------------------------------------------------------------------+
void start() { // Custom indicator iteration function
int counted_bars=IndicatorCounted();
int limit;
int Spred=MarketInfo(Symbol(),MODE_SPREAD);
// íîâûé áàð íå ïîÿâèëñÿ
if(!isNewBar()) return;
// ----- Ïîñëåäíèé ïîñ÷èòàííûé áàð áóäåò ïåðåñ÷èòàí
if (counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
// ----- Îñíîâíîé öèêë
for (int i=limit; i>2; i--) {
if(ShowFractals) { // îòîáðàæàåì âðûêòàëû íà ãðàôèêå
ExtMapBuffer1[i]=iFractals(NULL,0,MODE_UPPER,i)+Spred*Point;
ExtMapBuffer2[i]=iFractals(NULL,0,MODE_LOWER,i)-Spred*Point;
}
//---- Áëîê Upper-ôðàêòàëîâ (íèñõîäÿùèå "âèëêè")
if (iFractals(NULL,0,MODE_UPPER,i)!=0) {
if(LowerVilka(i)) {
if(OnAlert) Alert(Symbol(),Period()," Íèñõîäÿùàÿ âèëêà! ",TimeToStr(Time[i],TIME_DATE|TIME_SECONDS));
if(OnPrint) Print(Symbol(),Period()," Íèñõîäÿùàÿ âèëêà! ",TimeToStr(Time[i],TIME_DATE|TIME_SECONDS));
}
}
//---- Áëîê Lower-ôðàêòàëîâ (âîñõîäÿùèå "âèëêè")
if (iFractals(NULL,0,MODE_LOWER,i)!=0) {
if(UpperVilka(i)) {
if(OnAlert) Alert(Symbol(),Period()," Âîñõîäÿùàÿ âèëêà! ",TimeToStr(Time[i],TIME_DATE|TIME_SECONDS));
if(OnPrint) Print(Symbol(),Period()," Âîñõîäÿùàÿ âèëêà! ",TimeToStr(Time[i],TIME_DATE|TIME_SECONDS));
}
}
}
return;
}
//+------------------------------------------------------------------+
bool UpperVilka(int nBar) { // Ôóíêöèÿ îïðåäåëÿåò è ðèñóåò âîñõîäÿùèå "âèëêè"
int j=0;
double Fractal.Lower=0;
double mFractals.Price[3];
datetime mFractals.DateTime[3];
// ----- çàïîëíÿåì ìàññèâû èíôîðìàöèåé î ïîñëåäíèõ òðåõ ôðàêòàëàõ
ArrayInitialize(mFractals.Price,0); ArrayInitialize(mFractals.DateTime,0);
for (int i=nBar; i<Bars; i++) { // Öèêë ïî áàðàì
Fractal.Lower=iFractals(NULL,0,MODE_LOWER,i);
if(Fractal.Lower!=0) {
mFractals.Price[j]=Fractal.Lower-MarketInfo(Symbol(),MODE_SPREAD)*Point;
mFractals.DateTime[j]=Time[i];
j++;
}
if(j>2) break;
}
// ----- ðèñóåì âîñõîäÿùóþ "âèëêó"
if(mFractals.Price[2]<mFractals.Price[1] && mFractals.Price[1]<mFractals.Price[0]) {
string Name1="Line.Upper"+DoubleToStr(nLine.Upper,0); nLine.Upper++;
string Name2="Line.Upper"+DoubleToStr(nLine.Upper,0); nLine.Upper++;
ObjectCreate(Name1,OBJ_TREND,0,mFractals.DateTime[2],mFractals.Price[2],mFractals.DateTime[1],mFractals.Price[1]);
ObjectCreate(Name2,OBJ_TREND,0,mFractals.DateTime[1],mFractals.Price[1],mFractals.DateTime[0],mFractals.Price[0]);
if (ObjectGetValueByShift(Name1,nBar)<ObjectGetValueByShift(Name2,nBar)) {
ObjectDelete(Name1); ObjectDelete(Name2); nLine.Upper--; nLine.Upper--; return(false);
}
ObjectSet(Name1,OBJPROP_COLOR,Color.LineUpper); ObjectSet(Name2,OBJPROP_COLOR,Color.LineUpper);
ObjectSet(Name1,OBJPROP_WIDTH,Width.LineUpper); ObjectSet(Name2,OBJPROP_WIDTH,Width.LineUpper);
ObjectSet(Name1,OBJPROP_RAY,True); ObjectSet(Name2,OBJPROP_RAY,True);
CheckNumVilka(10);
return(true);
}
return(false);
}
//+------------------------------------------------------------------+
bool LowerVilka(int nBar) { // Ôóíêöèÿ îïðåäåëÿåò è ðèñóåò íèñõîäÿùèå "âèëêè"
int j=0;
double Fractal.Upper=0;
double mFractals.Price[3];
datetime mFractals.DateTime[3];
// ----- çàïîëíÿåì ìàññèâû èíôîðìàöèåé î ïîñëåäíèõ òðåõ ôðàêòàëàõ
ArrayInitialize(mFractals.Price,0); ArrayInitialize(mFractals.DateTime,0);
for (int i=nBar; i<Bars; i++) { // Öèêë ïî áàðàì
Fractal.Upper=iFractals(NULL,0,MODE_UPPER,i);
if(Fractal.Upper!=0) {
mFractals.Price[j]=Fractal.Upper+MarketInfo(Symbol(),MODE_SPREAD)*Point;
mFractals.DateTime[j]=Time[i];
j++;
}
if(j>2) break;
}
// ----- ðèñóåì íèñõîäÿùèå "âèëêó"
if(mFractals.Price[2]>mFractals.Price[1] && mFractals.Price[1]>mFractals.Price[0]) {
string Name1="Line.Lower"+DoubleToStr(nLine.Lower,0); nLine.Lower++;
string Name2="Line.Lower"+DoubleToStr(nLine.Lower,0); nLine.Lower++;
ObjectCreate(Name1,OBJ_TREND,0,mFractals.DateTime[2],mFractals.Price[2],mFractals.DateTime[1],mFractals.Price[1]);
ObjectCreate(Name2,OBJ_TREND,0,mFractals.DateTime[1],mFractals.Price[1],mFractals.DateTime[0],mFractals.Price[0]);
if (ObjectGetValueByShift(Name1,nBar)>ObjectGetValueByShift(Name2,nBar)) {
ObjectDelete(Name1); ObjectDelete(Name2); nLine.Lower--; nLine.Lower--; return(false);
}
ObjectSet(Name1,OBJPROP_COLOR,Color.LineLower); ObjectSet(Name2,OBJPROP_COLOR,Color.LineLower);
ObjectSet(Name1,OBJPROP_WIDTH,Width.LineLower); ObjectSet(Name2,OBJPROP_WIDTH,Width.LineLower);
ObjectSet(Name1,OBJPROP_RAY,True); ObjectSet(Name2,OBJPROP_RAY,True);
CheckNumVilka(20);
return(true);
}
return(false);
}
//+------------------------------------------------------------------+
bool isNewBar() { // Ôóíêöèÿ âîçâðàùàåò true, åñëè ïîÿâèòüñÿ íîâûé áàð, èíà÷å false
if(nBars!=Bars) {
nBars=Bars; return(true);
}
return(false);
}
//+------------------------------------------------------------------+
void CheckNumVilka(int Type) { // Ôóíêöèÿ ïðîâåðÿåò äîïóñòèìîå êîëè÷åñòâî âèëîê óêàçàííîãî òèïà
int i;
switch(Type) {
case 10:
//--------------------------------------------------------- 1 --
if(nLine.Upper<=nVilka.Upper*2) {
mLineUpper.DateTime[nLine.Upper-2][0]=ObjectGet("Line.Upper"+(nLine.Upper-2),OBJPROP_TIME1);
mLineUpper.DateTime[nLine.Upper-2][1]=ObjectGet("Line.Upper"+(nLine.Upper-2),OBJPROP_TIME2);
mLineUpper.Price[nLine.Upper-2][0]=ObjectGet("Line.Upper"+(nLine.Upper-2),OBJPROP_PRICE1);
mLineUpper.Price[nLine.Upper-2][1]=ObjectGet("Line.Upper"+(nLine.Upper-2),OBJPROP_PRICE2);
//+------------------------------------------------------------------+
mLineUpper.DateTime[nLine.Upper-1][0]=ObjectGet("Line.Upper"+(nLine.Upper-1),OBJPROP_TIME1);
mLineUpper.DateTime[nLine.Upper-1][1]=ObjectGet("Line.Upper"+(nLine.Upper-1),OBJPROP_TIME2);
mLineUpper.Price[nLine.Upper-1][0]=ObjectGet("Line.Upper"+(nLine.Upper-1),OBJPROP_PRICE1);
mLineUpper.Price[nLine.Upper-1][1]=ObjectGet("Line.Upper"+(nLine.Upper-1),OBJPROP_PRICE2);
}
//--------------------------------------------------------- 2 --
if(nLine.Upper >nVilka.Upper*2) {
for (i=0; i<nLine.Upper-4; i++) {
mLineUpper.DateTime[i][0]=mLineUpper.DateTime[i+2][0]; mLineUpper.DateTime[i][1]=mLineUpper.DateTime[i+2][1];
mLineUpper.Price[i][0]=mLineUpper.Price[i+2][0]; mLineUpper.Price[i][1]=mLineUpper.Price[i+2][1];
}
mLineUpper.DateTime[nLine.Upper-4][0]=ObjectGet("Line.Upper"+(nLine.Upper-2),OBJPROP_TIME1);
mLineUpper.DateTime[nLine.Upper-4][1]=ObjectGet("Line.Upper"+(nLine.Upper-2),OBJPROP_TIME2);
mLineUpper.Price[nLine.Upper-4][0]=ObjectGet("Line.Upper"+(nLine.Upper-2),OBJPROP_PRICE1);
mLineUpper.Price[nLine.Upper-4][1]=ObjectGet("Line.Upper"+(nLine.Upper-2),OBJPROP_PRICE2);
//+------------------------------------------------------------------+
mLineUpper.DateTime[nLine.Upper-3][0]=ObjectGet("Line.Upper"+(nLine.Upper-1),OBJPROP_TIME1);
mLineUpper.DateTime[nLine.Upper-3][1]=ObjectGet("Line.Upper"+(nLine.Upper-1),OBJPROP_TIME2);
mLineUpper.Price[nLine.Upper-3][0]=ObjectGet("Line.Upper"+(nLine.Upper-1),OBJPROP_PRICE1);
mLineUpper.Price[nLine.Upper-3][1]=ObjectGet("Line.Upper"+(nLine.Upper-1),OBJPROP_PRICE2);
//+------------------------------------------------------------------+
ObjectDelete("Line.Upper"+(nLine.Upper-2)); ObjectDelete("Line.Upper"+(nLine.Upper-1));
nLine.Upper--;nLine.Upper--;
//+------------------------------------------------------------------+
for (i=0; i<nLine.Upper; i++) {
ObjectMove("Line.Upper"+i,0,mLineUpper.DateTime[i][0],mLineUpper.Price[i][0]);
ObjectMove("Line.Upper"+i,1,mLineUpper.DateTime[i][1],mLineUpper.Price[i][1]);
}
}
case 20:
//--------------------------------------------------------- 1 --
if(nLine.Lower<=nVilka.Lower*2) {
mLineLower.DateTime[nLine.Lower-2][0]=ObjectGet("Line.Lower"+(nLine.Lower-2),OBJPROP_TIME1);
mLineLower.DateTime[nLine.Lower-2][1]=ObjectGet("Line.Lower"+(nLine.Lower-2),OBJPROP_TIME2);
mLineLower.Price[nLine.Lower-2][0]=ObjectGet("Line.Lower"+(nLine.Lower-2),OBJPROP_PRICE1);
mLineLower.Price[nLine.Lower-2][1]=ObjectGet("Line.Lower"+(nLine.Lower-2),OBJPROP_PRICE2);
//+------------------------------------------------------------------+
mLineLower.DateTime[nLine.Lower-1][0]=ObjectGet("Line.Lower"+(nLine.Lower-1),OBJPROP_TIME1);
mLineLower.DateTime[nLine.Lower-1][1]=ObjectGet("Line.Lower"+(nLine.Lower-1),OBJPROP_TIME2);
mLineLower.Price[nLine.Lower-1][0]=ObjectGet("Line.Lower"+(nLine.Lower-1),OBJPROP_PRICE1);
mLineLower.Price[nLine.Lower-1][1]=ObjectGet("Line.Lower"+(nLine.Lower-1),OBJPROP_PRICE2);
}
//--------------------------------------------------------- 2 --
if(nLine.Lower >nVilka.Lower*2) {
for (i=0; i<nLine.Lower-4; i++) {
mLineLower.DateTime[i][0]=mLineLower.DateTime[i+2][0]; mLineLower.DateTime[i][1]=mLineLower.DateTime[i+2][1];
mLineLower.Price[i][0]=mLineLower.Price[i+2][0]; mLineLower.Price[i][1]=mLineLower.Price[i+2][1];
}
mLineLower.DateTime[nLine.Lower-4][0]=ObjectGet("Line.Lower"+(nLine.Lower-2),OBJPROP_TIME1);
mLineLower.DateTime[nLine.Lower-4][1]=ObjectGet("Line.Lower"+(nLine.Lower-2),OBJPROP_TIME2);
mLineLower.Price[nLine.Lower-4][0]=ObjectGet("Line.Lower"+(nLine.Lower-2),OBJPROP_PRICE1);
mLineLower.Price[nLine.Lower-4][1]=ObjectGet("Line.Lower"+(nLine.Lower-2),OBJPROP_PRICE2);
//+------------------------------------------------------------------+
mLineLower.DateTime[nLine.Lower-3][0]=ObjectGet("Line.Lower"+(nLine.Lower-1),OBJPROP_TIME1);
mLineLower.DateTime[nLine.Lower-3][1]=ObjectGet("Line.Lower"+(nLine.Lower-1),OBJPROP_TIME2);
mLineLower.Price[nLine.Lower-3][0]=ObjectGet("Line.Lower"+(nLine.Lower-1),OBJPROP_PRICE1);
mLineLower.Price[nLine.Lower-3][1]=ObjectGet("Line.Lower"+(nLine.Lower-1),OBJPROP_PRICE2);
//+------------------------------------------------------------------+
ObjectDelete("Line.Lower"+(nLine.Lower-2)); ObjectDelete("Line.Lower"+(nLine.Lower-1));
nLine.Lower--;nLine.Lower--;
//+------------------------------------------------------------------+
for (i=0; i<nLine.Lower; i++) {
ObjectMove("Line.Lower"+i,0,mLineLower.DateTime[i][0],mLineLower.Price[i][0]);
ObjectMove("Line.Lower"+i,1,mLineLower.DateTime[i][1],mLineLower.Price[i][1]);
}
}
}
return;
}
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
---