Miscellaneous
2
Views
0
Downloads
0
Favorites
TPEHEP_MM
//+------------------------------------------------------------------+
//| TPEHEP_MM.mq4 |
//| Copyright 2016.|
//+------------------------------------------------------------------+
#property link "Fedor10_10@mail.ru"
#property version "1.02"
#property strict
#property indicator_chart_window
#property description "Èíäèêàòîð TPEHEP_MM ïðåäíàçíà÷åí äëÿ òåñòèðîâàíèÿ ñòðàòåãèè"
#property description "íà èñòîðèè â ïîøàãîâîì ðåæèìå ñ àâòîìàòè÷åñêèì êîíòðîëåì"
#property description "èñïîëíåíèÿ ïðèêàçîâ, îøèáîê, è ñîçäàíèåì îò÷åòà äëÿ Excel."
#property description " Ãîðÿ÷èå êëàâèøè: 'B'- BUY, 'S'- SELL, 'C'- CLOSE"
#property description " F12 èëè Step- ñäâèã ãðàôèêà íà 1 øàã"
#property description " '<'- Îáëàñòü âëåâî, '>'- Îáëàñòü âïðàâî"
#property description " 'P'- ñîõðàíåíèå ôàéëà îò÷åòà"
extern string K="+:+:+:+"; //Ïàðàìåòðû èñïîëíåíèÿ ïðèêàçîâ
input bool Traid=true; //Òîðãîâëÿ/Ðàçìåòêà
input double Lots=0.01; //Ëîò Ôèêñèðîâàííûé èëè Ìèíèìàëüíûé
extern double Risk=0.0; //ÌÌ %Ðèñêà îò StopLoss. 0- Ôèêñèðîâàííûé Ëîò
input double LotsMax=10.0; //ìàêñèìàëüíûé Ëîò
extern double StopLoss=100.0; //StopLoss (â 5-çíà÷íîì)
extern double TakeProfit=100.0;//TakeProfit (â 5-çíà÷íîì)
extern double Money=100.0; //Íà÷àëüíûå ñðåäñòâà
extern double Spread=0.0; //Ñïðåä (â 5-çíà÷íîì) 0 - èç èñòîðèè
extern double Freeze=0.0; //Çàìîðîçêà (â 5-çíà÷íîì) 0 - èç èñòîðèè
extern string M="+:+:+:+"; //ðàçíîå
input bool Color=true; //ôîí áåëûé/÷åðíûé
input bool Vertical=true; //ðèñîâàíèå/íåò âåðòèêàëüíûõ ëèíèé
input bool Alerts=false; //çàïðåò ïðåäóïðåæäåíèé
input bool Gluk=false; //óñòðàíåíèå êîíôëèêòà ñ Exel
input int Step=46; //Êëàâèøà ñäâèãà ãðàôèêà íà 1 øàã
color Zone,OpBUY,OpSELL,ClsAll,TakePr,StopLs;
int tik,bar0,Ordr,Tr,SH,file;
double Ask0,Ask1,Bid0,Bid1,Lev,LevOrd,LevUp,LevDn,lott,MaxLot,MinLot;
string FileName,FileNamo,Namo,Uplev,Oplev,Dnlev;
long result,resold;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if(Color)//ôîí áåëûé
{
Zone=clrSilver; //öâåò âûäåëåíèÿ ðàññìàòðèâàåìîãî áàðà
OpBUY=clrSteelBlue; //öâåò ëèíèè BUY
OpSELL=clrPlum; //öâåò ëèíèè SELL
ClsAll=clrDarkOrange;//öâåò ëèíèè çàêðûòèÿ ðó÷íîãî
TakePr=clrLimeGreen; //öâåò ëèíèè çàêðûòèÿ ïî TakeProfit
StopLs=clrYellow; //öâåò ëèíèè çàêðûòèÿ ïî StopLoss
}else{//ôîí ÷åðíûé
Zone=clrDimGray; //öâåò âûäåëåíèÿ ðàññìàòðèâàåìîãî áàðà
OpBUY=clrLightSkyBlue;//öâåò ëèíèè BUY
OpSELL=clrLightPink; //öâåò ëèíèè SELL
ClsAll=clrKhaki; //öâåò ëèíèè çàêðûòèÿ ðó÷íîãî
TakePr=clrPaleGreen; //öâåò ëèíèè çàêðûòèÿ ïî TakeProfit
StopLs=clrYellow; //öâåò ëèíèè çàêðûòèÿ ïî StopLoss
}
FileName=Symbol()+"."+IntegerToString(Period())+" ";//âðåìåííûé ôàéë äëÿ çàïèñè ñäåëîê
if(Traid)//ïðîïóñê ïðè îòêàçå îò ðàñ÷åòà
{
if(Spread==0.0) Spread=MarketInfo(Symbol(),MODE_SPREAD);//Ñïðåä
if(Spread==0.0) Alert("Spread ","íå îïðåäåëåí");
Spread=NormalizeDouble((Spread*Point),Digits);//ñïðåä
if(Freeze==0.0) Freeze=MarketInfo(Symbol(),MODE_FREEZELEVEL);//óðîâåíü çàìîðîçêè
if(Freeze==0.0) Alert("Óðîâåíü çàìîðîçêè ","íå îïðåäåëåí");
Freeze=NormalizeDouble((Freeze*Point),Digits);//óðîâåíü çàìîðîçêè
Lev=NormalizeDouble((MarketInfo(Symbol(),MODE_STOPLEVEL)*Point),Digits);//ìèíèìàëüíûé ñòîï
if(Lev==0.0) Alert("STOPLEVEL ","íå îïðåäåëåí");
else
{
if(StopLoss<Lev) {StopLoss=Lev; Alert("StopLoss=",StopLoss/Point);}
if(TakeProfit<Lev) {TakeProfit=Lev; Alert("TakeProfit=",TakeProfit/Point);}
}
TakeProfit=NormalizeDouble((TakeProfit*Point),Digits);//TakeProfit
StopLoss=NormalizeDouble((StopLoss*Point),Digits);//StopLoss
Risk=(Risk/100)/(StopLoss/Point);//ïåðåâîä â êîýôôèöèåíò MM
MinLot=NormalizeDouble((MarketInfo(Symbol(),MODE_MINLOT)),Digits);//ìèíèìàëüíûé ñòîï
if(MinLot>0.0) MinLot=fmax(Lots,MinLot); else MinLot=Lots;
MaxLot=NormalizeDouble((MarketInfo(Symbol(),MODE_MAXLOT)),Digits);//ìèíèìàëüíûé ñòîï
if(MaxLot>0.0) MaxLot=fmin(LotsMax,MaxLot); else MaxLot=LotsMax;
lott=Lot();
Comment("Spread=",IntegerToString(int(Spread/Point)),"\n","Freeze=",IntegerToString(int(Freeze)),"\n",
"StopLoss=",IntegerToString(int(StopLoss/Point)),"\n","TakeProfit=",
IntegerToString(int(TakeProfit/Point)),"\n","MINLOT=",MinLot,"\n","MAXLOT=",MaxLot);
ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,result);//êîëè÷åñòâî ïèêñåëåé ïî Õ
ObjectCreate("Show1",OBJ_LABEL,0,0,0); //ìåñòî îòðèñîâêè íà ýêðàíå
ObjectSet("Show1",OBJPROP_XDISTANCE,result/2-200);
ObjectSet("Show1",OBJPROP_YDISTANCE,0);
ObjectSet("Show1",OBJPROP_CORNER,0);
ObjectSetText("Show1","ËÎÒ: ÏÐÎÔÈÒ: ÁÀËÀÍÑ: ",14,"Arial",clrDarkGray);//íàäïèñü
ObjectCreate("Show2",OBJ_LABEL,0,0,0); //ìåñòî îòðèñîâêè íà ýêðàíå
ObjectSet("Show2",OBJPROP_XDISTANCE,result/2-155);
ObjectSet("Show2",OBJPROP_YDISTANCE,0);
ObjectSet("Show2",OBJPROP_CORNER,0);
ObjectSetText("Show2",DoubleToString(lott,2),14,"Arial",clrBlueViolet);//ËÎÒ
ObjectCreate("Show3",OBJ_LABEL,0,0,0); //ìåñòî îòðèñîâêè íà ýêðàíå
ObjectSet("Show3",OBJPROP_XDISTANCE,result/2-15);
ObjectSet("Show3",OBJPROP_YDISTANCE,0);
ObjectSet("Show3",OBJPROP_CORNER,0);
ObjectSetText("Show3",DoubleToString(0.0,2),14,"Arial",clrBlueViolet);//ÏÐÎÔÈÒ
ObjectCreate("Show4",OBJ_LABEL,0,0,0); //ìåñòî îòðèñîâêè íà ýêðàíå
ObjectSet("Show4",OBJPROP_XDISTANCE,result/2+140);
ObjectSet("Show4",OBJPROP_YDISTANCE,0);
ObjectSet("Show4",OBJPROP_CORNER,0);
ObjectSetText("Show4",DoubleToString(Money,2),14,"Arial",clrBlueViolet);//ÁÀËÀÍÑ
resold=result;
file=FileOpen(FileName,FILE_WRITE|FILE_SHARE_READ|FILE_TXT);
FileWrite(file," Ticket\tOpnDate\tOpnTime\t Type\t Size\t Item\t Price\tClsDate\tClsTime\t Price\tTradeP/L\t Equity");
}
ObjectCreate("Zona",OBJ_TREND,0,Time[0],(Close[0]-StopLoss),Time[0],(Close[0]+StopLoss));//âûäåëÿåì îáëàñòü ðàññìàòðèâàåìîãî áàðà
ObjectSet("Zona",OBJPROP_STYLE,DRAW_LINE);
ObjectSet("Zona",OBJPROP_WIDTH,8);
ObjectSet("Zona",OBJPROP_COLOR,Zone);
ObjectSet("Zona",OBJPROP_BACK,true);
ObjectSet("Zona",OBJPROP_RAY_RIGHT,false);
ObjectSet("Zona",OBJPROP_TIME1,Time[0]);//óòî÷íèì
ObjectSet("Zona",OBJPROP_PRICE1,(Close[0]-StopLoss));//óòî÷íèì
ObjectSet("Zona",OBJPROP_TIME2,Time[0]);//óòî÷íèì
ObjectSet("Zona",OBJPROP_PRICE2,(Close[0]+StopLoss));//óòî÷íèì
ChartRedraw(); //ïåðåðèñóåì
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
if(Traid) FileClose(file);//ñîõðàíåíèå ïîñëå ðàñ÷åòà
ObjectDel();
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
return(rates_total);//ïóñòûøêà
}
//+------------------------------------------------------------------+
//| ChartEvent function |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, // èäåíòèôèêàòîð ñîáûòèÿ
const long& lparam, // ïàðàìåòð ñîáûòèÿ òèïà long
const double& dparam, // ïàðàìåòð ñîáûòèÿ òèïà double
const string& sparam) // ïàðàìåòð ñîáûòèÿ òèïà string
{
//+------------------------------------------------------------------+
//| ïðîâåðêà íàæàòèÿ êëàâèøè èëè ìûøêè |
//+------------------------------------------------------------------+
if(CHARTEVENT_CHART_CHANGE)
{
ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,result);//êîíòðîëü çà ðàçìåðîì ýêðàíà
if(result!=resold) Show(result);
}
if(Traid && Ordr!=0)
{
if(id==CHARTEVENT_OBJECT_DRAG)
{
if(sparam==Uplev)//ïðîâåðêà âåðõíåãî óðîâíÿ
if(LevUp!=ObjectGet(Uplev,OBJPROP_PRICE1))
LevUp=MouseUp();//ïðè èçìåíåíèè óðîâíÿ
if(sparam==Dnlev)//ïðîâåðêà íèæíåãî óðîâíÿ
if(LevDn!=ObjectGet(Dnlev,OBJPROP_PRICE1))
LevDn=MouseDn();//ïðè èçìåíåíèè óðîâíÿ
}
}
if(id==CHARTEVENT_KEYDOWN)
{
switch(int(lparam))
{
case 37: Alert("Ïîïûòêà ïîâòîðèòü èñòîðèþ"); break;//KEY_LEFT_ARROW
case 39: Alert("Ïîøàãîâàÿ ïðîêðóòêà ïî F12"); break;//KEY_RIGHT_ARROW ïî F12
case 66: if(Traid)
{
if(Ordr==0)//KEY_BUY
{
Ordr=bar0;
Levl("BUY");//ðèñóåì ëèíèè îòêðûòèÿ è ñòîïû
if(Vertical) Vert("BUY",OpBUY);//ðèñóåì âåðòèêàëüíóþ ëèíèþ BUY
}
else Alert("Ñäåëêà óæå îòêðûòà");
}
else if(Tr!=1){Tr=1; Vert("BUY",OpBUY);}//ðèñóåì âåðòèêàëüíóþ ëèíèþ BUY
else Alert("Òðåíä ââåðõ óæå îòìå÷åí");
tik++; if(tik==1) {Namo=TimeToString(Time[Bar()],TIME_DATE); Comment("");}
break;
case 67: if(Traid)
{
if(Ordr!=0)//KEY_CLOSE
{
if(Freez()) break;//ïðîâåðêà íà çàìîðîçêó
if(Vertical) Vert("CL",ClsAll);//ðèñóåì âåðòèêàëüíóþ ëèíèþ Clîså
Profit("CL",Ordr);//ïîäñ÷èòàåì èòîã
Ordr=0; if(Traid) Delet();//óäàëåíèå óðîâíåé
}
else Alert("Íåò ñäåëêè");
}
else if(Tr!=0) {Tr=0; Vert("CL",ClsAll);}//ðèñóåì âåðòèêàëüíóþ ëèíèþ Clîså
else Alert("Òðåíä íå îòìå÷åí");
break;
case 80:
if(tik<1)//÷èñòûé øàáëîí
{
ObjectsDeleteAll(); Comment("");
if(ChartSaveTemplate(0,FileName+"."))
Alert("øàáëîí ",FileName," ñîõðàíåí"); break;
}
else
{
ObjectDel();
FileNamo=FileName+Namo+"-"+TimeToString(Time[Bar()],TIME_DATE);
if(Traid)//ñîõðàíåíèå ôàéëà îò÷åòà
{
FileFlush(file); FileClose(file);
if(FileMove(FileName,0,FileNamo+".xls",FILE_REWRITE))
Alert("îò÷åò ",FileNamo," ñîõðàíåí");
if(ChartSaveTemplate(0,FileNamo+"."))//øàáëîí ñ ðàçìåòêîé
Alert("ðàçìåòêà ",FileNamo," ñîõðàíåíà"); break;
}
else//øàáëîí ñ ðàçìåòêîé
{
if(ChartSaveTemplate(0,FileNamo+"."))
Alert("ðàçìåòêà ",FileNamo," ñîõðàíåíà"); break;
}
}
case 83: if(Traid)
{
if(Ordr==0)//KEY_SELL
{
Ordr=-bar0;
Levl("SEL");//ðèñóåì ëèíèè îòêðûòèÿ è ñòîïû
if(Vertical) Vert("SEL",OpSELL);//ðèñóåì âåðòèêàëüíóþ ëèíèþ SELL
}
else Alert("Ñäåëêà óæå îòêðûòà");
}
else if(Tr!=-1) {Tr=-1; Vert("SEL",OpSELL);}//ðèñóåì âåðòèêàëüíóþ ëèíèþ SELL
else Alert("Òðåíä âíèç óæå îòìå÷åí");
tik++; if(tik==1) {Namo=TimeToString(Time[Bar()],TIME_DATE); Comment("");}
break;
case 188: SH++;//KEY_LEFT
if(SH>WindowBarsPerChart()){Alert("Îáëàñòü íà ãðàíèöå ñëåâà"); SH=WindowBarsPerChart();}
break;//óâåëè÷èì íîìåð ðàññìàòðèâàåìîãî áàðà
case 190: SH--;//KEY_RIGHT
if(SH<0){Alert("Îáëàñòü íà ãðàíèöå ñïðàâà"); SH=0;}
break;//óìåíüøèì íîìåð ðàññìàòðèâàåìîãî áàðà
default: if(lparam==Step) {ChartNavigate(0,CHART_CURRENT_POS,1); break;}//KEY_Shift
else Alert("Íàæàòà íå òà êëàâèøà",(lparam));
}
}
if(Bar()<=0) {if(tik>0) Alert("Ïðîðèñîâàí ïîñëåäíèé áàð"); return;}//êîíòðîëü îêîí÷àíèÿ èñòîðèè
bar0=Bar()+SH;//íîìåð íóæíîãî áàðà íà ãðàôèêå
if(Time[bar0]!=ObjectGet("Zona",OBJPROP_TIME1))//ïðîâåðèì ðàññìàòðèâàåìûé áàð
{
Bid0=Close[bar0]; Ask0=Close[bar0]+Spread;//öåíà çàêðûòèÿ ðàññìàòðèâàåìîãî áàðà
Bid1=Open[bar0-1]; Ask1=Open[bar0-1]+Spread;//öåíà îòêðûòèÿ áóäóùåãî áàðà
LevStop();//ïðîâåðêà àâòîìàòè÷åñêîãî ñðàáàòûâàíèÿ óðîâíåé
Prof();//ïðîâåðêà ñðåäñòâ
ObjectSet("Zona",OBJPROP_TIME1,Time[bar0]);//èçìåíåíèå ïðèâÿçêè ðàññìàòðèâàåìîãî áàðà
ObjectSet("Zona",OBJPROP_PRICE1,(Close[bar0]-StopLoss+Spread));//èçìåíåíèå íèæíåãî óðîâíÿ ðàññìàòðèâàåìîãî áàðà
ObjectSet("Zona",OBJPROP_TIME2,Time[bar0]);//èçìåíåíèå ïðèâÿçêè ðàññìàòðèâàåìîãî áàðà
ObjectSet("Zona",OBJPROP_PRICE2,(Close[bar0]+StopLoss-Spread));//èçìåíåíèå âåðõíåãî óðîâíÿ ðàññìàòðèâàåìîãî áàðà
ChartRedraw();//ïåðåðèñóåì
}
}
//+------------------------------------------------------------------+
//| ïðèëîæåíèÿ |
//+------------------------------------------------------------------+
void LevStop()//ïðîâåðêà àâòîìàòè÷åñêîãî ñðàáàòûâàíèÿ ïðèêàçîâ
{
if(Ordr>0)//êîíòðîëü BUY
{
if(Low[bar0]<=LevDn)//ïðè ïðîáèòèè íèæíåãî óðîâíÿ
{
if(Vertical) Vert("SL",StopLs);
if(Traid) {Profit("SL",Ordr); Delet();}
if(Alerts) Alert("Ñðàáîòàë StopLoss");
Ordr=0;
}
if(High[bar0]>=LevUp)//ïðè ïðîáèòèè âåðõíåãî óðîâíÿ
{
if(Vertical) Vert("TP",TakePr);
if(Traid) {Profit("TP",Ordr); Delet();}
if(Alerts) Alert("ñðàáîòàë TakeProfit");
Ordr=0;
}
}
if(Ordr<0)//êîíòðîëü SELL
{
if(High[bar0]+Spread>=LevUp)//ïðè ïðîáèòèè âåðõíåãî óðîâíÿ
{
if(Vertical) Vert("SL",StopLs);
if(Traid) {Profit("SL",Ordr); Delet();}
if(Alerts) Alert("Ñðàáîòàë StopLoss");
Ordr=0;
}
if(Low[bar0]+Spread<=LevDn)//ïðè ïðîáèòèè íèæíåãî óðîâíÿ
{
if(Vertical) Vert("TP",TakePr);
if(Traid) {Profit("TP",Ordr); Delet();}
if(Alerts) Alert("ñðàáîòàë TakeProfit");
Ordr=0;
}
}
}
//+------------------------------------------------------------------+
double Lot()//MoneyManagement
{
if(Risk>0.0)
{
double LotResult=Money*Risk;//ðàñ÷åò ëîòà
LotResult=fmax(LotResult,MinLot);//íå ìåíüøå
LotResult=fmin(LotResult,MaxLot);//è íå áîëüøå
return(LotResult);//×òî ïîëó÷èëîñü
}
else return(MinLot);
}
//+------------------------------------------------------------------+
void Profit(string cmd,int ord)//áóõãàëòåðèÿ
{
if(ord>0)//áûë BUY Bid-Ask
{
if(cmd=="CL") Write("CL_BUY",ord,Time[bar0-1],Bid1,NormalizeDouble(Bid1-LevOrd,Digits));//Man
if(cmd=="SL") Write("SL_BUY",ord,Time[bar0],LevDn,NormalizeDouble(LevDn-LevOrd,Digits));//SL
if(cmd=="TP") Write("TP_BUY",ord,Time[bar0],LevUp,NormalizeDouble(LevUp-LevOrd,Digits));//TP
}
if(ord<0)//áûë SELL Ask-Bid
{
if(cmd=="CL") Write("CL_SEL",ord,Time[bar0-1],Ask1,NormalizeDouble(LevOrd-Ask1,Digits));//Man
if(cmd=="SL") Write("SL_SEL",ord,Time[bar0],LevUp,NormalizeDouble(LevOrd-LevUp,Digits));//SL
if(cmd=="TP") Write("TP_SEL",ord,Time[bar0],LevDn,NormalizeDouble(LevOrd-LevDn,Digits));//TP
}
}
//+------------------------------------------------------------------+
void Write(string cmd,int ord,datetime tm,double cls,double pip)//çàïèñü â ôàéë
{
Money+=NormalizeDouble(lott*(pip/Point),2);//îáùèé èòîã â öåíòàõ
FileWrite(file,tik,"\t",Dat(TimeToStr(Time[fabs(ord)],TIME_DATE)),"\t",TimeToStr(Time[fabs(ord)],TIME_SECONDS),
"\t",cmd,"\t",Rus(DoubleToString(lott,2)),"\t",Symbol(),"\t",Rus(DoubleToString(LevOrd,Digits)),
"\t",Dat(TimeToStr(tm,TIME_DATE)),"\t",TimeToStr(tm,TIME_SECONDS),"\t",Rus(DoubleToString(cls,Digits)),
"\t",Rus(DoubleToString(lott*(pip/Point),2)),"\t",Rus(DoubleToString(Money,2)));
lott=Lot();//íîâûé ËÎÒ
ObjectSetText("Show2",DoubleToString(lott,2),14,"Arial",clrBlueViolet);
Trend(cmd,ord,pip); Metca(cmd,ord);//ðèñóåì ðåçóëüòàò
}
//+------------------------------------------------------------------+
void Trend(string cmd,int ord,double pip)//ðèñóåì ëèíèþ îò îòêðûòèÿ äî çàêðûòèÿ
{
string name="Trl"+IntegerToString(tik);
color clr=clrBlue; if(pip<0) clr=clrRed;
if(cmd=="CL_BUY") Tr(name, ord,Bid1,Time[bar0-1],clr);//Man
if(cmd=="SL_BUY") Tr(name, ord,LevDn,Time[bar0], clr);//SL
if(cmd=="TP_BUY") Tr(name, ord,LevUp,Time[bar0], clr);//TP
if(cmd=="CL_SEL") Tr(name,-ord,Ask1,Time[bar0-1],clr);//Man
if(cmd=="SL_SEL") Tr(name,-ord,LevUp,Time[bar0], clr);//SL
if(cmd=="TP_SEL") Tr(name,-ord,LevDn,Time[bar0], clr);//TP
}
//+------------------------------------------------------------------+
void Tr(string cmd,int ord,double pr,datetime tm,color clr)//ðèñóåì ëèíèþ îò îòêðûòèÿ äî çàêðûòèÿ
{
ObjectCreate(cmd,OBJ_TREND,0,Time[ord-1],LevOrd,tm,pr);
ObjectSetInteger(0,cmd,OBJPROP_RAY_RIGHT,false);//îòêëþ÷èì (false) îòîáðàæåíèå ëèíèè âïðàâî
ObjectSet(cmd,OBJPROP_STYLE,STYLE_DOT);
ObjectSet(cmd,OBJPROP_COLOR,clr);
ChartRedraw();//ïåðåðèñóåì
}
//+------------------------------------------------------------------+
void Metca(string cmd,int ord)//ðèñóåì öåíîâóþ ìåòêó
{
if(cmd=="CL_BUY")
{
Met("OP_BUY"+IntegerToString(tik),LevOrd+5*Point,Time[ord-1],OpBUY);//Open BUY
Met("CL_BUY"+IntegerToString(tik),Bid1+5*Point,Time[bar0-1],ClsAll);//Man BUY
}
if(cmd=="SL_BUY")
{
Met("OP_BUY"+IntegerToString(tik),LevOrd+5*Point,Time[ord-1],OpBUY);//Open BUY
Met("SL_BUY"+IntegerToString(tik),LevDn+5*Point,Time[bar0],StopLs);//SL BUY
}
if(cmd=="TP_BUY")
{
Met("OP_BUY"+IntegerToString(tik),LevOrd+5*Point,Time[ord-1],OpBUY);//Open BUY
Met("TP_BUY"+IntegerToString(tik),LevUp+5*Point,Time[bar0],TakePr);//TP BUY
}
if(cmd=="CL_SEL")
{
Met("OP_SELL"+IntegerToString(tik),LevOrd+5*Point,Time[-ord-1],OpSELL);//Open SELL
Met("CL_SELL"+IntegerToString(tik),Ask1+5*Point,Time[bar0-1],ClsAll);//Man SELL
}
if(cmd=="SL_SEL")
{
Met("OP_SELL"+IntegerToString(tik),LevOrd+5*Point,Time[-ord-1],OpSELL);//Open SELL
Met("SL_SELL"+IntegerToString(tik),LevUp+5*Point,Time[bar0],StopLs);//SL SELL
}
if(cmd=="TP_SEL")
{
Met("OP_SELL"+IntegerToString(tik),LevOrd+5*Point,Time[-ord-1],OpSELL);//Open SELL
Met("TP_SELL"+IntegerToString(tik),LevDn+5*Point,Time[bar0],TakePr);//TP SELL
}
}
//+------------------------------------------------------------------+
void Met(string cmd,double pr,datetime tm,color clr)//ðèñóåì öåíîâóþ ìåòêó
{
ObjectCreate(cmd,OBJ_ARROW_LEFT_PRICE,0,tm,pr);
ObjectSet(cmd,OBJPROP_ARROWCODE,119);
ObjectSet(cmd,OBJPROP_STYLE,STYLE_SOLID);
ObjectSet(cmd,OBJPROP_COLOR,clr);
ChartRedraw();//ïåðåðèñóåì
}
//+------------------------------------------------------------------+
void Vert(string cmd,color clr)//ðèñóåì âåðòèêàëüíóþ ëèíèþ
{
cmd+=IntegerToString(tik);
ObjectCreate(cmd,OBJ_VLINE,0,Time[bar0],0);
ObjectSet(cmd,OBJPROP_STYLE,STYLE_DASH);
ObjectSet(cmd,OBJPROP_COLOR,clr);
ObjectSet(cmd,OBJPROP_BACK,true);
ChartRedraw();//ïåðåðèñóåì
}
//+------------------------------------------------------------------+
void Levl(string cmd)//ðèñóåì ãîðèçîíòàëüíûå ëèíèè ïðèêàçîâ
{
Oplev=cmd;
if(cmd=="BUY")
{
LevOrd=Ask1;//óðîâåíü Ask îòêðûòèÿ
Uplev="TakeProfit"; LevUp=LevOrd+TakeProfit;//óðîâåíü Bid StopLoss îò îòêðûòèÿ
Dnlev="StopLoss"; LevDn=LevOrd-StopLoss;//óðîâåíü Bid TakeProfit îò îòêðûòèÿ
}
if(cmd=="SEL")
{
LevOrd=Bid1;//óðîâåíü Bid îòêðûòèÿ
Uplev="StopLoss"; LevUp=LevOrd+StopLoss;//óðîâåíü Ask TakeProfit îò îòêðûòèÿ
Dnlev="TakeProfit"; LevDn=LevOrd-TakeProfit;//óðîâåíü Ask StopLoss îò îòêðûòèÿ
}
ObjectCreate(Uplev,OBJ_HLINE,0,0,LevUp);
ObjectSet(Uplev,OBJPROP_STYLE,STYLE_DASHDOT);
ObjectSet(Uplev,OBJPROP_COLOR,clrOrangeRed);
ObjectSetInteger(0,Uplev,OBJPROP_BACK,true);
ObjectCreate(Oplev,OBJ_HLINE,0,0,LevOrd);
ObjectSet(Oplev,OBJPROP_STYLE,STYLE_DASHDOT);
ObjectSet(Oplev,OBJPROP_COLOR,clrLimeGreen);
ObjectSetInteger(0,Oplev,OBJPROP_BACK,true);
ObjectCreate(Dnlev,OBJ_HLINE,0,0,LevDn);
ObjectSet(Dnlev,OBJPROP_STYLE,STYLE_DASHDOT);
ObjectSet(Dnlev,OBJPROP_COLOR,clrOrangeRed);
ObjectSetInteger(0,Dnlev,OBJPROP_BACK,true);
ChartRedraw();//ïåðåðèñóåì
}
//+------------------------------------------------------------------+
string Rus(string ru)//Ôóíêöèÿ çàìåíÿåò(.)íà(,)äëÿ ðóññêîé Excel
{
if(Gluk) StringReplace(ru,".",",");
return ru;
}
//+------------------------------------------------------------------+
string Dat(string dt)//Ôóíêöèÿ çàìåíÿåò(.)íà(,)äëÿ ðóññêîé Excel
{
if(Gluk) StringReplace(dt,"."," ");
return dt;
}
//+------------------------------------------------------------------+
void Prof()//ïðîðèñîâêà ïðîôèòà
{
double rezalt;
if(Ordr>0)
{
rezalt=lott*(Bid1-LevOrd)/Point;//ïðè âîçìîæíîì çàêðûòèè ôèêñàöèÿ íà ýòîì óðîâíå
if(Money+rezalt<0.0 || Money+lott*(Low[bar0]-LevOrd)/Point<0.0) End();//êîí÷èëèñü ñðåäñòâà
}
else if(Ordr<0)
{
rezalt=lott*(LevOrd-Ask1)/Point;//ïðè âîçìîæíîì çàêðûòèè ôèêñàöèÿ íà ýòîì óðîâíå
if(Money+rezalt<0.0 || Money+lott*(LevOrd-High[bar0]+Spread)/Point<0.0) End();//êîí÷èëèñü ñðåäñòâà
}
else rezalt=0.0;
color Cl=clrBlueViolet; if(rezalt<0.0) Cl=clrCrimson;//öâåò ÏÐÎÔÈÒÀ
ObjectSetText("Show3",DoubleToString(rezalt,2),14,"Arial",Cl);//ÏÐÎÔÈÒ
ObjectSetText("Show4",DoubleToString((Money+rezalt),2),14,"Arial",clrBlueViolet);//èçìåíåíèå ðåçóëüòàòà
}
//+------------------------------------------------------------------+
bool Freez()//çàìîðîçêà
{
if(Ordr>0)
{
if(LevUp<=Bid0+Freeze)
{
Alert("TakeProfit â çîíå çàìîðîçêè");
return(true);
}
if(LevDn>=Bid0-Freeze)
{
Alert("StopLoss â çîíå çàìîðîçêè");
return(true);
}
}
if(Ordr<0)
{
if(LevUp<=Ask0+Freeze)
{
Alert("StopLoss â çîíå çàìîðîçêè");
return(true);
}
if(LevDn>=Ask0-Freeze)
{
Alert("TakeProfit â çîíå çàìîðîçêè");
return(true);
}
}
return(false);
}
//+------------------------------------------------------------------+
int Bar()//íîìåð ïåðâîãî âèäèìîãî áàðà íà ãðàôèêå.
{
long res=0;// ïîäãîòîâèì ïåðåìåííóþ
res+=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0,res);//çàïðîñèì íîìåð ëåâîãî áàðà
res-=WindowBarsPerChart()+1;//íàéäåì íîìåð ïðàâîãî áàðà
return(int(res));//--- âåðíåì íîìåð íóæíîãî áàðà
}
//+------------------------------------------------------------------+
void Delet()//ïðîâåðêà óðîâíåé
{
ObjectDelete(Uplev);//óäàëåíèå âåðõíåãî óðîâíÿ
ObjectDelete(Oplev);//óäàëåíèå óðîâíÿ îòêðûòèÿ
ObjectDelete(Dnlev);//óäàëåíèå íèæíåãî óðîâíÿ
ChartRedraw();//ïåðåðèñóåì
}
//+------------------------------------------------------------------+
double MouseUp()
{
if(Freez()) ObjectSet(Uplev,OBJPROP_PRICE1,LevUp);//âîçâðàùàåì ëèíèþ íà ñòàðîå ìåñòî
else
{
if(Ordr>0 && ObjectGet(Uplev,OBJPROP_PRICE1)<=Ask0+Lev)//åñëè ëèíèÿ â çîíå ìèíèìóìà
{
Alert("TakeProfit= ",Lev,"+1");
ObjectSet(Uplev,OBJPROP_PRICE1,(Ask0+Lev+Point));//îòâîäèì TakeProfit çà ìèíèìóì
}
if(Ordr<0 && ObjectGet(Uplev,OBJPROP_PRICE1)<=Bid0+Lev)//åñëè ëèíèÿ â çîíå ìèíèìóìà
{
Alert("StopLoss= ",Lev,"+1");
ObjectSet(Uplev,OBJPROP_PRICE1,(Bid0+Lev+Point));//îòâîäèì StopLoss çà ìèíèìóì
}
}
// ObjectSetInteger(0,Uplev,OBJPROP_SELECTED,false);//çàêðîåì
ChartRedraw();//ïåðåðèñóåì
return(ObjectGet(Uplev,OBJPROP_PRICE1));//âîçâðàùàåì âåðõíèé âûñòàâëåííûé óðîâåíü
}
//+------------------------------------------------------------------+
double MouseDn()
{
if(Freez()) ObjectSet(Dnlev,OBJPROP_PRICE1,LevDn);//âîçâðàùàåì ëèíèþ íà ñòàðîå ìåñòî
else
{
if(Ordr>0 && ObjectGet(Dnlev,OBJPROP_PRICE1)>=Ask0-Lev)//åñëè ëèíèÿ â çîíå ìèíèìóìà
{
Alert("StopLoss= ",Lev,"+1");
ObjectSet(Dnlev,OBJPROP_PRICE1,(Ask0-Lev-Point));//îòâîäèì StopLoss çà ìèíèìóì
}
if(Ordr<0 && ObjectGet(Dnlev,OBJPROP_PRICE1)>=Bid0-Lev)//åñëè ëèíèÿ â çîíå ìèíèìóìà
{
Alert("StopLoss= ",Lev,"+1");
ObjectSet(Dnlev,OBJPROP_PRICE1,(Bid0-Lev-Point));//îòâîäèì TakeProfit çà ìèíèìóì
}
}
//ObjectSetInteger(0,Dnlev,OBJPROP_SELECTED,false);//çàêðîåì
ChartRedraw();//ïåðåðèñóåì
return(ObjectGet(Dnlev,OBJPROP_PRICE1));//âîçâðàùàåì íèæíèé âûñòàâëåííûé óðîâåíü
}
//+------------------------------------------------------------------+
void Show(long res)//êîíòðîëü çà ðàçìåðîì ýêðàíà
{
ObjectSet("Show1",OBJPROP_XDISTANCE,res/2-200);
ObjectSet("Show2",OBJPROP_XDISTANCE,res/2-155);
ObjectSet("Show3",OBJPROP_XDISTANCE,res/2-15);
ObjectSet("Show4",OBJPROP_XDISTANCE,res/2+140);
ChartRedraw();//ïåðåðèñóåì
resold=result;
}
//+------------------------------------------------------------------+
void End()//êîíåö
{
ObjectDel();
ObjectCreate("Show7",OBJ_LABEL,0,0,0); //ìåñòî îòðèñîâêè íà ýêðàíå
ObjectSet("Show7",OBJPROP_XDISTANCE,result/2-275);
ObjectSet("Show7",OBJPROP_YDISTANCE,350);
ObjectSet("Show7",OBJPROP_CORNER,0);
ObjectSetText("Show7","ÑÎÕÐÀÍÈÒÅ ÎÒ×ÅÒ (Ð) È ÏÅÐÅÓÑÒÀÍÎÂÈÒÅ ÑÒÐÀÒÅÃÈÞ!",14,"Arial",clrDarkGray);//íàäïèñü GAME OVER
ObjectCreate("Show8",OBJ_LABEL,0,0,0); //ìåñòî îòðèñîâêè íà ýêðàíå
ObjectSet("Show8",OBJPROP_XDISTANCE,result/2-500);
ObjectSet("Show8",OBJPROP_YDISTANCE,50);
ObjectSet("Show8",OBJPROP_CORNER,0);
ObjectSetText("Show8","GAME OVER",125,"Arial",clrBrown);//íàäïèñü GAME OVER
}
//+------------------------------------------------------------------+
void ObjectDel()
{
ObjectDelete("Zona");
ObjectDelete("Show1");
ObjectDelete("Show2");
ObjectDelete("Show3");
ObjectDelete("Show4");
ObjectDelete("Show5");
ObjectDelete("Show6");
ChartRedraw();//ïåðåðèñóåì
}
//+------------------------------------------------------------------+
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
---