//+------------------------------------------------------------------+ //| 20/200 expert.mq4 | //| 1H EUR/USD | //| Smirnov Pavel | //| www.autoforex.ru | //+------------------------------------------------------------------+ #property copyright "Smirnov Pavel" #property link "www.autoforex.ru" extern int TakeProfit = 20; // Уровень тейкпрофит в пунктах extern int StopLoss = 200; // уровень стоплосс в пунктах extern int TradeTime=18; extern int t1=7; extern int t2=2; extern int delta=7; extern int dayout=1; extern double lot = 0.1; int ticket; bool cantrade=true; int OpenLong(double volume=0.1) { int slippage=10; string comment="20/200 expert (Long)"; color arrow_color=Red; int magic=0; ticket=OrderSend(Symbol(),OP_BUY,volume,Ask,slippage,Ask-StopLoss*Point, Ask+TakeProfit*Point,comment,magic,0,arrow_color); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { Print("Buy order opened : ",OrderOpenPrice()); return(0); } } else { Print("Error opening Buy order : ",GetLastError()); return(-1); } } int OpenShort(double volume=0.1) { int slippage=10; string comment="20/200 expert (Short)"; color arrow_color=Red; int magic=0; ticket=OrderSend(Symbol(),OP_SELL,volume,Bid,slippage,Bid+StopLoss*Point, Bid-TakeProfit*Point,comment,magic,0,arrow_color); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { Print("Sell order opened : ",OrderOpenPrice()); return(0); } } else { Print("Error opening Sell order : ",GetLastError()); return(-1); } } int init() { return(0); } int deinit() { return(0); } int start() { if((TimeHour(TimeCurrent())>TradeTime)) cantrade=true; // проверяем есть ли открытые ордера ... if(OrdersTotal()<1) { // ... если нет ни одного открытого ордера, то идем дальше // проверяем настало ли время для торговли if((TimeHour(TimeCurrent())==TradeTime)&&(cantrade)&&(TimeDayOfWeek(TimeCurrent())!=dayout)) { // ... если настало время, то if ((Open[t1]-Open[t2])>delta*Point) //Если цена изменилась на величину delta { //условие выполнено значит входим в короткую позицию: // проверяем есть ли свободные деньги для открытия короткой позиции if(AccountFreeMarginCheck(Symbol(),OP_SELL,lot)<=0 || GetLastError()==134) { Print("Not enough money"); return(0); } OpenShort(lot); cantrade=false; //запрещаем торговать повторно до следующего бара return(0); } if ((Open[t2]-Open[t1])>delta*Point) //Если цена изменилась на величину delta { // условие выполнено значит входим в длинную позицию // проверяем есть ли свободные деньги на счету if(AccountFreeMarginCheck(Symbol(),OP_BUY,lot)<=0 || GetLastError()==134) { Print("Not enough money"); return(0); } OpenLong(lot); cantrade=false; return(0); } } } return(0); }