Price Data Components
Orders Execution
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
cm-ea-options_cmillion
#property copyright "Copyright © 2014 http://cmillion.ru"
#property link "http://cmillion.ru"
#property description "Ñîâåòíèê òîðãóåò îïöèîíàìè ïî èíäèêàòîðàì"
//+------------------------------------------------------------------
extern bool Zigzag = true;
extern int Zigzag_Depth = 12;
extern int Zigzag_Deviation = 5;
extern int Zigzag_Backstep = 3;
extern bool MA = true;
extern int Period_MA = 35;
extern bool Parabolic = true;
extern double Step = 0.02; //ïàðàìåòð Parabolic Step
extern double Maximum = 0.2; //ïàðàìåòð Parabolic Maximum
extern bool CCI = true;
extern int Period_CCI = 14; //ïåðèîä CCI
extern bool Stochastic = true;
extern int Kperiod = 5; // ïåðèîä ëèíèè K
extern int Dperiod = 3; // ïåðèîä ëèíèè D
extern int slowing = 3; // çàìåäëåíèå = 0.2; //ïàðàìåòð Parabolic Maximum
extern int LevelSell = 75; // ïåðåêóïëåííîñòü
extern int LevelBuy = 25; // ïåðåïðîäàííîñòü
extern bool MACD = true;
extern int fast_ema_period = 12; // ïåðèîä áûñòðîé ñðåäíåé
extern int slow_ema_period = 26; // ïåðèîä ìåäëåííîé ñðåäíåé
extern int signal_period = 9; // ïåðèîä ñèãíàëüíîé ëèíèè
extern double Lot = 0.10;
extern int Magic = 0;
input color Color_1 = clrBlack; // öâåò
input color Color_2 = clrLightGray; // öâåò
input color Color_3 = clrSnow; // öâåò
input string Font = "Times New Roman"; // Øðèôò
input string CommentOrder = "15"; // êîìåíòàðèé îðäåðàì
int S[6][9];
bool trade=false;
//--------------------------------------------------------------------
int OnInit()
{
if (Lot<MarketInfo(NULL,MODE_MINLOT)) Lot=MarketInfo(NULL,MODE_MINLOT);
int X=10;
int Y=60;
int i;
RectLabelCreate(0,"cm-fon" ,0,X-5,Y-5,290 ,150,Color_2,Color_1,STYLE_SOLID,1,true,false,true,0);
ButtonCreate (0,"cm-Trade",0,X,Y,100,20,"Trade",Font,10,Color_1,Color_3,Color_2,false);
ButtonCreate (0,"cm-S1.b",0,X,Y+20,100,20,"Zigzag",Font,10,Color_1,Color_3,Color_2,Zigzag);
ButtonCreate (0,"cm-S2.b",0,X,Y+40,100,20,"MA "+Period_MA,Font,10,Color_1,Color_3,Color_2,MA);
ButtonCreate (0,"cm-S3.b",0,X,Y+60,100,20,"Parabolic",Font,10,Color_1,Color_3,Color_2,Parabolic);
ButtonCreate (0,"cm-S4.b",0,X,Y+80,100,20,"CCI",Font,10,Color_1,Color_3,Color_2,Parabolic);
ButtonCreate (0,"cm-S5.b",0,X,Y+100,100,20,"Stochastic",Font,10,Color_1,Color_3,Color_2,Parabolic);
ButtonCreate (0,"cm-S6.b",0,X,Y+120,100,20,"MACD",Font,10,Color_1,Color_3,Color_2,Parabolic);
X+=100;
int TF=1;
for (i=0; i<9; i++)
{
ButtonCreate(0,StringConcatenate("cm-TF",TF) ,0,X,Y,20,20,string_per(TF),Font,6,Color_1,Color_3,Color_2,Zigzag);
ButtonCreate(0,StringConcatenate("cm-S1.l",TF),0,X,Y+20,20,20,CharToStr(185),"Wingdings",10,Color_1,Color_3,Color_2,Zigzag);
ButtonCreate(0,StringConcatenate("cm-S2.l",TF),0,X,Y+40,20,20,CharToStr(185),"Wingdings",10,Color_1,Color_3,Color_2,Zigzag);
ButtonCreate(0,StringConcatenate("cm-S3.l",TF),0,X,Y+60,20,20,CharToStr(185),"Wingdings",10,Color_1,Color_3,Color_2,Zigzag);
ButtonCreate(0,StringConcatenate("cm-S4.l",TF),0,X,Y+80,20,20,CharToStr(185),"Wingdings",10,Color_1,Color_3,Color_2,Zigzag);
ButtonCreate(0,StringConcatenate("cm-S5.l",TF),0,X,Y+100,20,20,CharToStr(185),"Wingdings",10,Color_1,Color_3,Color_2,Zigzag);
ButtonCreate(0,StringConcatenate("cm-S6.l",TF),0,X,Y+120,20,20,CharToStr(185),"Wingdings",10,Color_1,Color_3,Color_2,Zigzag);
TF=next_period(TF+1);X+=20;
}
chekbuttom();
return(INIT_SUCCEEDED);
}
//--------------------------------------------------------------------
void OnDeinit(const int reason)
{
Comment("");
//ObjectsDeleteAll(0);
for(int k=ObjectsTotal()-1; k>=0; k--)
{
string Obj_Name=ObjectName(k);
string Head=StringSubstr(Obj_Name,0,3);
if (Head=="cm-")
{
ObjectDelete(Obj_Name);
}
}
}
//--------------------------------------------------------------------
int Char(int i)
{
if (i>0) return(233);
if (i<0) return(234);
return(192);
}
//--------------------------------------------------------------------
color Color(double i)
{
if (i==1) return(clrDarkTurquoise);
if (i==-1) return(clrMaroon);
if (i>1) return(clrBlue);
if (i<-1) return(clrRed);
return(clrGray);
}
//--------------------------------------------------------------------
string OT(int i)
{
if (i==0) return("BUY");
return("SELL");
}
//--------------------------------------------------------------------
void OnTick()
{
if (!IsTradeAllowed()) return;
trade = ObjectGetInteger(0,"cm-Trade",OBJPROP_STATE);
//---
chekbuttom();
//---
double OOP;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol() && Magic==OrderMagicNumber())
{
trade=false;
OOP=OrderOpenPrice();
Comment(TimeToStr(OrderOpenTime(),TIME_SECONDS)," Îòêðûò îïöèîí ",OT(OrderType()),", Çàêðûòèå ÷åðåç ",TimeToStr(OrderExpiration()-TimeCurrent(),TIME_SECONDS)/*," ",OOP," ",Bid*/);
if (OrderType()==OP_SELL) RectLabelCreate(0,"cm-îïöèîí.r",0,10,30,450,20,Color(OOP-Bid),Color_2,STYLE_SOLID,1,false,false,true,1);
else RectLabelCreate(0,"cm-îïöèîí.r",0,10,30,450,20,Color(Bid-OOP),Color_2,STYLE_SOLID,1,false,false,true,1);
LabelCreate(0,"cm-îïöèîí.l",0,220,40,CORNER_LEFT_UPPER,StringConcatenate(TimeToStr(OrderOpenTime(),TIME_SECONDS)," Îòêðûò îïöèîí ",OT(OrderType()),", Çàêðûòèå ÷åðåç ",TimeToStr(OrderExpiration()-TimeCurrent(),TIME_SECONDS)),Font,10,clrBlack,0,ANCHOR_CENTER,false,false,true,0);
return;
}
}
}
ObjectDelete("cm-îïöèîí.r");
ObjectDelete("cm-îïöèîí.l");
//---
if (trade) Trade();
}
//--------------------------------------------------------------------
void Trade()
{
bool SELL=true,BUY=true;
for (int i=0; i<6; i++)
{
for (int j=0; j<9; j++)
{
if (S[i][j]<0) BUY=false;
if (S[i][j]>0) SELL=false;
}
}
Comment(TimeToStr(OrderOpenTime(),TIME_SECONDS)," ",BUY," ",SELL);
if (BUY)
{
if (OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),2,0,0,CommentOrder,Magic,3)==-1)
Print("Îøèáêà îòêðûòèÿ îðäåðà <<",GetLastError(),">> ");
}
//---
if (SELL)
{
if (OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),2,0,0,CommentOrder,Magic,0,clrNONE)==-1)
Print("Îøèáêà îòêðûòèÿ îðäåðà <<",GetLastError(),">> ");
}
//---
return;
}
//--------------------------------------------------------------------
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
if(id==CHARTEVENT_OBJECT_CLICK)
{
string clickedChartObject=sparam;
if(StringSubstr(clickedChartObject,0,3)=="cm-")
{
chekbuttom();
PlaySound("Ok.wav");
}
}
}
//--------------------------------------------------------------------
void chekbuttom()
{
int i,TF=1;
string name;
for (i=0; i<9; i++)
{
name = StringConcatenate("cm-S1.l",TF);
bool TF_ON = ObjectGetInteger(0,StringConcatenate("cm-TF",TF),OBJPROP_STATE);
if (ObjectGetInteger(0,name,OBJPROP_STATE) && ObjectGetInteger(0,"cm-S1.b",OBJPROP_STATE) && TF_ON)
{
double Z=0,Z1=0;
for (int j=0; j<100; j++)
{
if (Z==0) {Z = iCustom(NULL,TF,"ZigZag",Zigzag_Depth,Zigzag_Deviation,Zigzag_Backstep,0,j);continue;}
Z1 = iCustom(NULL,TF,"ZigZag",Zigzag_Depth,Zigzag_Deviation,Zigzag_Backstep,0,j);
if (Z1==0) continue;
if (Z>Z1) S[0][i]=-1;
else S[0][i]= 1;
//Comment(Z," ",Z1," ",S1," ");
ObjectSetInteger(0,name,OBJPROP_COLOR,Color(S[0][i]));
ObjectSetString(0,name,OBJPROP_TEXT,CharToStr(Char(S[0][i])));
break;
}
}
else
{
S[0][i]=0;
ObjectSetInteger(0,name,OBJPROP_COLOR,clrGray);
ObjectSetString(0,name,OBJPROP_TEXT,CharToStr(251));
}
//---
name = StringConcatenate("cm-S2.l",TF);
if (ObjectGetInteger(0,name,OBJPROP_STATE) && ObjectGetInteger(0,"cm-S2.b",OBJPROP_STATE) && TF_ON)
{
if (iMA(NULL,TF,Period_MA,0,MODE_EMA,PRICE_CLOSE,0)>iMA(NULL,TF,Period_MA,0,MODE_EMA,PRICE_CLOSE,1)) S[1][i]=1;
else S[1][i]=-1;
ObjectSetInteger(0,name,OBJPROP_COLOR,Color(S[1][i]));
ObjectSetString(0,name,OBJPROP_TEXT,CharToStr(Char(S[1][i])));
}
else
{
S[1][i]=0;
ObjectSetInteger(0,name,OBJPROP_COLOR,clrGray);
ObjectSetString(0,name,OBJPROP_TEXT,CharToStr(251));
}
//---
name = StringConcatenate("cm-S3.l",TF);
if (ObjectGetInteger(0,name,OBJPROP_STATE) && ObjectGetInteger(0,"cm-S3.b",OBJPROP_STATE) && TF_ON)
{
if (Bid>iSAR(NULL,TF,Step,Maximum,1)) S[2][i]=1;
else S[2][i]=-1;
ObjectSetInteger(0,name,OBJPROP_COLOR,Color(S[2][i]));
ObjectSetString(0,name,OBJPROP_TEXT,CharToStr(Char(S[2][i])));
}
else
{
S[2][i]=0;
ObjectSetInteger(0,name,OBJPROP_COLOR,clrGray);
ObjectSetString(0,name,OBJPROP_TEXT,CharToStr(251));
}
//---
name = StringConcatenate("cm-S4.l",TF);
if (ObjectGetInteger(0,name,OBJPROP_STATE) && ObjectGetInteger(0,"cm-S4.b",OBJPROP_STATE) && TF_ON)
{
if (iCCI(NULL,TF,Period_CCI,PRICE_CLOSE,0)<50) S[3][i]=1;
else S[3][i]=-1;
ObjectSetInteger(0,name,OBJPROP_COLOR,Color(S[3][i]));
ObjectSetString(0,name,OBJPROP_TEXT,CharToStr(Char(S[3][i])));
}
else
{
S[3][i]=0;
ObjectSetInteger(0,name,OBJPROP_COLOR,clrGray);
ObjectSetString(0,name,OBJPROP_TEXT,CharToStr(251));
}
//---
name = StringConcatenate("cm-S5.l",TF);
S[4][i]=0;
if (ObjectGetInteger(0,name,OBJPROP_STATE) && ObjectGetInteger(0,"cm-S5.b",OBJPROP_STATE) && TF_ON)
{
double StochasticMAIN = iStochastic(NULL,TF,Kperiod,Dperiod,slowing,MODE_SMA,0,MODE_MAIN,0);
double StochasticSIGNAL = iStochastic(NULL,TF,Kperiod,Dperiod,slowing,MODE_SMA,0,MODE_SIGNAL,0);
if (StochasticMAIN>StochasticSIGNAL) S[4][i]=1;
if (StochasticMAIN<StochasticSIGNAL) S[4][i]=-1;
if (S[4][i]==1 && StochasticMAIN<LevelBuy) S[4][i]=2;
if (S[4][i]==-1 && StochasticMAIN>LevelSell) S[4][i]=-2;
ObjectSetInteger(0,name,OBJPROP_COLOR,Color(S[4][i]));
ObjectSetString(0,name,OBJPROP_TEXT,CharToStr(Char(S[4][i])));
}
else
{
ObjectSetInteger(0,name,OBJPROP_COLOR,clrGray);
ObjectSetString(0,name,OBJPROP_TEXT,CharToStr(251));
}
//---
name = StringConcatenate("cm-S6.l",TF);
S[5][i]=0;
if (ObjectGetInteger(0,name,OBJPROP_STATE) && ObjectGetInteger(0,"cm-S6.b",OBJPROP_STATE) && TF_ON)
{
double MACDMAIN=iMACD(NULL,TF,fast_ema_period,slow_ema_period,signal_period,PRICE_CLOSE,MODE_MAIN,0);
double MACDSIGNAL=iMACD(NULL,TF,fast_ema_period,slow_ema_period,signal_period,PRICE_CLOSE,MODE_SIGNAL,0);
if (MACDMAIN>MACDSIGNAL) S[5][i]=1;
if (MACDMAIN<MACDSIGNAL) S[5][i]=-1;
if (S[5][i]==1 && MACDMAIN>0) S[5][i]=2;
if (S[5][i]==-1 && MACDMAIN<0) S[5][i]=-2;
ObjectSetInteger(0,name,OBJPROP_COLOR,Color(S[5][i]));
ObjectSetString(0,name,OBJPROP_TEXT,CharToStr(Char(S[5][i])));
}
else
{
ObjectSetInteger(0,name,OBJPROP_COLOR,clrGray);
ObjectSetString(0,name,OBJPROP_TEXT,CharToStr(251));
}
TF=next_period(TF+1);
}
//if (trade) Trade();
}
//--------------------------------------------------------------------
int next_period(int per)
{
if (per > 43200) return(0);
if (per > 10080) return(43200);
if (per > 1440) return(10080);
if (per > 240) return(1440);
if (per > 60) return(240);
if (per > 30) return(60);
if (per > 15) return(30);
if (per > 5) return(15);
if (per > 1) return(5);
if (per == 1) return(1);
return(Period());
}
//+------------------------------------------------------------------+
string string_per(int per)
{
if (per == 1) return("M1");
if (per == 5) return("M5");
if (per == 15) return("15");
if (per == 30) return("30");
if (per == 60) return("H1");
if (per == 240) return("H4");
if (per == 1440) return("D1");
if (per == 10080) return("W1");
if (per == 43200) return("MN");
return("îøèáêà ïåðèîäà");
}
//--------------------------------------------------------------------
bool ButtonCreate(const long chart_ID=0, // ID ãðàôèêà
const string name="Button", // èìÿ êíîïêè
const int sub_window=0, // íîìåð ïîäîêíà
const long x=0, // êîîðäèíàòà ïî îñè X
const long y=0, // êîîðäèíàòà ïî îñè Y
const int width=50, // øèðèíà êíîïêè
const int height=18, // âûñîòà êíîïêè
const string text="Button", // òåêñò
const string font="Arial", // øðèôò
const int font_size=10, // ðàçìåð øðèôòà
const color clr=clrNONE, // öâåò òåêñòà
const color clrON=clrNONE, // öâåò ôîíà
const color clrOFF=clrNONE, // öâåò ôîíà
const bool state=false) // íàæàòà/îòæàòà
{
if (ObjectFind(chart_ID,name)==-1)
{
ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0);
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,0);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,0);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,0);
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,1);
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,0);
ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,clrNONE);
}
color back_clr;
if (ObjectGetInteger(chart_ID,name,OBJPROP_STATE)) back_clr=clrON; else back_clr=clrOFF;
ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
return(true);
}
//--------------------------------------------------------------------
bool RectLabelCreate(const long chart_ID=0, // ID ãðàôèêà
const string name="RectLabel", // èìÿ ìåòêè
const int sub_window=0, // íîìåð ïîäîêíà
const long x=0, // êîîðäèíàòà ïî îñè X
const long y=0, // êîîðäèíàòà ïî îñè Y
const int width=50, // øèðèíà
const int height=18, // âûñîòà
const color back_clr=C'236,233,216', // öâåò ôîíà
const color clr=clrNONE, // öâåò ïëîñêîé ãðàíèöû (Flat)
const ENUM_LINE_STYLE style=STYLE_SOLID, // ñòèëü ïëîñêîé ãðàíèöû
const int line_width=1, // òîëùèíà ïëîñêîé ãðàíèöû
const bool back=false, // íà çàäíåì ïëàíå
const bool selection=false, // âûäåëèòü äëÿ ïåðåìåùåíèé
const bool hidden=true, // ñêðûò â ñïèñêå îáúåêòîâ
const long z_order=0) // ïðèîðèòåò íà íàæàòèå ìûøüþ
{
ResetLastError();
if (ObjectFind(chart_ID,name)==-1)
{
ObjectCreate(chart_ID,name,OBJ_RECTANGLE_LABEL,sub_window,0,0);
ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,BORDER_FLAT);
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width);
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
}
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
return(true);
}
//--------------------------------------------------------------------
bool LabelCreate(const long chart_ID=0, // ID ãðàôèêà
const string name="Label", // èìÿ ìåòêè
const int sub_window=0, // íîìåð ïîäîêíà
const long x=0, // êîîðäèíàòà ïî îñè X
const long y=0, // êîîðäèíàòà ïî îñè Y
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // óãîë ãðàôèêà äëÿ ïðèâÿçêè
const string text="Label", // òåêñò
const string font="Arial", // øðèôò
const int font_size=10, // ðàçìåð øðèôòà
const color clr=clrNONE, // öâåò
const double angle=0.0, // íàêëîí òåêñòà
const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // ñïîñîá ïðèâÿçêè
const bool back=false, // íà çàäíåì ïëàíå
const bool selection=false, // âûäåëèòü äëÿ ïåðåìåùåíèé
const bool hidden=true, // ñêðûò â ñïèñêå îáúåêòîâ
const long z_order=0) // ïðèîðèòåò íà íàæàòèå ìûøüþ
{
ResetLastError();
if (ObjectFind(chart_ID,name)==-1)
{
if(!ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0))
{
Print(__FUNCTION__,": íå óäàëîñü ñîçäàòü òåêñòîâóþ ìåòêó! Êîä îøèáêè = ",GetLastError());
return(false);
}
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
}
return(true);
}
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
---