![]() |
Внимание !!!
Нельзя использовать этого эксперта, в том виде в котором он дан ниже, для торговли на реальном счету. Для этого в нем не хватает дополнительных функций обработки ошибок и защиты от сбоев в работе. Его работа на реальном счету может привести к недовольству со стороны ДЦ, вплоть до блокирования счета.
//+------------------------------------------------------------------+ //| 20/200 expert v3.mq4 | //| 1H EUR/USD | //| Smirnov Pavel | //| www.autoforex.ru | //+------------------------------------------------------------------+ #property copyright "Smirnov Pavel" #property link "www.autoforex.ru" extern int TakeProfit_L = 40; // Уровень тейкпрофит в пунктах extern int StopLoss_L = 133; // уровень стоплосс в пунктах extern int TakeProfit_S = 27; // Уровень тейкпрофит в пунктах extern int StopLoss_S = 200; // уровень стоплосс в пунктах extern int TradeTime=18; // Время входа в рынок extern int t1=7; extern int t2=2; extern int delta_L=9; extern int delta_S=10; extern double lot = 0.1; // Размер лота extern int Orders=1; // максимальное количество одновременно открытых позиций extern int MaxOpenTime=138; int ticket,total,cnt; bool cantrade=true; double closeprice; double tmp; int OpenLong(double volume=0.1) // функция открывает длинную позицию размером лота=volume { int slippage=10; string comment="20/200 expert v2 (Long)"; color arrow_color=Red; int magic=0; ticket=OrderSend(Symbol(),OP_BUY,volume,Ask,slippage,Ask-StopLoss_L*Point, Ask+TakeProfit_L*Point,comment,magic,0,arrow_color); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { return(0); } else { Print("OpenLong(),OrderSelect() - выдал ошибку : ",GetLastError()); return(-1); } } else { Print("Error opening Buy order : ",GetLastError()); return(-1); } } int OpenShort(double volume=0.1) // функция открывает короткую позицию размером лота=volume { int slippage=10; string comment="20/200 expert v2 (Short)"; color arrow_color=Red; int magic=0; ticket=OrderSend(Symbol(),OP_SELL,volume,Bid,slippage,Bid+StopLoss_S*Point, Bid-TakeProfit_S*Point,comment,magic,0,arrow_color); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { return(0); } else { Print("OpenShort(),OrderSelect() - выдал ошибку : ",GetLastError()); return(-1); } } 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; // проверяем есть ли открытые ордера ... total=OrdersTotal(); if(total<Orders) { // ... если нет ни одного открытого ордера, то идем дальше // проверяем настало ли время для торговли if((TimeHour(TimeCurrent())==TradeTime)&&(cantrade)) { // ... если настало время, то if (((Open[t1]-Open[t2])>delta_S*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_L*Point)) //Если цена изменилась на величину delta { // условие выполнено значит входим в длинную позицию // проверяем есть ли свободные деньги на счету if(AccountFreeMarginCheck(Symbol(),OP_BUY,lot)<=0 || GetLastError()==134) { Print("Not enough money"); return(0); } OpenLong(lot); cantrade=false; return(0); } } } // блок проверки времени жизни сделки, если MaxOpenTime=0, то проверку не проводим. if(MaxOpenTime>0) { for(cnt=0;cnt<total;cnt++) { if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { tmp = (TimeCurrent()-OrderOpenTime())/3600.0; if (((NormalizeDouble(tmp,8)-MaxOpenTime)>=0)) { RefreshRates(); if (OrderType()==OP_BUY) closeprice=Bid; else closeprice=Ask; if (OrderClose(OrderTicket(),OrderLots(),closeprice,10,Green)) { Print("Принудительное закрытие сделки - №",OrderTicket()); OrderPrint(); } else Print("OrderClose() в блоке проверки времени жизни сделки вернул ошибку - ",GetLastError()); } } else Print("OrderSelect() в блоке проверки времени жизни сделки вернул ошибку - ",GetLastError()); } } return(0); } |
  |
Copyright © 2007-2017 Павел Смирнов При использовании материалов сайта ссылка на www.autoforex.ru обязательна. |
  |
  |   |