//+------------------------------------------------------------------+ //| FT_MADEV_2.mq4.mq4 //| Copyright © 2010, FORTRADER.RU. Отклонение от средней //| http://www.fortrader.ru Исследование для 63 выпуска журнала FORTRADER.RU //+------------------------------------------------------------------+ #property copyright "Copyright © 2010, FORTRADER.RU. Отклонение от средней" #property link "http://www.fortrader.ru Исследование для 63 выпуска журнала FORTRADER.RU" //---- parameters extern int InpMaDevPeriod=20; //extern int timestart=1; //extern int timestop=1; extern int NumBarsSerach=100; extern int EA_Magic=12354; extern double InpLots =0.1; extern int InpTakeProfit=0; extern int InpStopLoss =0; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- double maxdevbuy; double maxdevsell; double STP = InpTakeProfit; double TKP = InpStopLoss; if(Digits==5 || Digits==3) { STP = STP*10; TKP = TKP*10; } double madev = iCustom(NULL, 0, "madev",InpMaDevPeriod,0,1); double madevsearch; //Ищем максимальные отклонения вверх и вниз от средней for(int i=5;imaxdevsell){maxdevsell=madevsearch;} if(madevsearchmaxdevsell && !ChPos(1)){OpenOrderOnMarket(1,TKP,STP);} if(madev=0 && ChPos(0)){_OrderClose(1);} //---- return(0); } //проверяет есть ли открытые ордера int ChPos(int type) {//подробное описание: http://fxnow.ru/blog.php?user=Yuriy&blogentry_id=100 int i;bool col=false; for( i=1; i<=OrdersTotal(); i++) { if(OrderSelect(i-1,SELECT_BY_POS)==true) { if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && type==0&& OrderMagicNumber()==EA_Magic){col=true;} if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && type==1&& OrderMagicNumber()==EA_Magic){col=true;} } } return(col); } int OpenOrderOnMarket(int type,int slpips,int tppips) {double op,sl,tp;int err; if(type==0) { op=Ask;if(slpips>0){sl=op-slpips*Point;}if(tppips>0){tp=op+tppips*Point;} err=OrderSend(Symbol(),OP_BUY,InpLots,NormalizeDouble(op,Digits),3,NormalizeDouble(sl,Digits),NormalizeDouble(tp,Digits),"56 FORTRADER.RU",EA_Magic,0,Red); if(err<0){Print("OrderSend()- Ошибка OP_BUY. op "+op+" sl "+sl+" tp "+tp+" "+GetLastError());return(-1);} } if(type==1) { op=Bid;if(slpips>0){sl=op+slpips*Point;}if(tppips>0){tp=op-tppips*Point;} err=OrderSend(Symbol(),OP_SELL,InpLots,NormalizeDouble(op,Digits),3,NormalizeDouble(sl,Digits),NormalizeDouble(tp,Digits),"56 FORTRADER.RU",EA_Magic,0,Red); if(err<0){Print("OrderSend()- Ошибка OP_SELL. op "+op+" sl "+sl+" tp "+tp+" "+GetLastError());return(-1);} } return(0); } //Закрывает позицю по типу int _OrderClose(int type) {//http://fxnow.ru/blog.php?user=Yuriy&blogentry_id=99 int err; for(int i=1; i<=OrdersTotal(); i++) { if (OrderSelect(i-1,SELECT_BY_POS)==true) { if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && type==1 && OrderMagicNumber()==EA_Magic) { err=OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); if(err<0){Print("OrderClose()- Ошибка закрытия OP_BUY. OrderTicket "+OrderTicket()+" OrderLots() "+OrderLots()+" Bid "+Bid+" "+GetLastError());return(-1);} } if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && type==0 && OrderMagicNumber()==EA_Magic) { err=OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); if(err<0){Print("OrderClose()- Ошибка закрытия OP_SELL. OrderTicket "+OrderTicket()+" OrderLots() "+OrderLots()+" Ask "+Ask+" "+GetLastError());return(-1);} } } } return(0); }