//+------------------------------------------------------------------+ //| e-News-Lucky$.mq4 | //| Lucky$ & KimIV | //| http://www.kimiv.ru | //+------------------------------------------------------------------+ #property copyright "Lucky$ & KimIV" #property link "http://www.kimiv.ru" #define MAGIC 20051024 //------- Внешние параметры советника -------------------------------- //--- строгий режим компиляции #property strict //--- режим показа входных параметров //#property script_show_inputs extern string _Parameters_Trade="----- Параметры торговли"; extern double Lots = 1; // Размер торгуемого лота extern int StopLoss = 0; // Размер фиксированного стопа extern int TakeProfit = 0; // Размер фиксированного тэйка extern datetime TimeSetOrders = __DATETIME__+5*60; // Время установки ордеров //D'22.03.2010 13:00'; //extern datetime TimeDelOrders = __DATETIME__+14*60*60; // Время удаления ордеров //D'22.03.2010 22:30'; extern int TimeDelOrders = 5; //Часов до удаления ордеров с момента открытия //extern datetime TimeClosePos = __DATETIME__+12*60*60;// Время закрытия позиций //D'22.03.2010 22:30'; extern int TimeClosePos = 48; //Часов до закрытия ордеров extern int DistanceSet = 15; // Расстояние от рынка extern bool UseTrailing = True; // Использовать трал extern bool ProfitTrailing = True; // Тралить только профит extern int TrailingStop = 10; // Фиксированный размер трала extern int TrailingStep = 5; // Шаг трала extern int Slippage = 3; // Проскальзывание цены extern string _Parameters_Expert="----- Параметры советника"; extern string Name_Expert = "e-News-Lucky$"; extern bool UseSound = True; // Использовать звуковой сигнал extern string NameFileSound = "expert.wav"; // Наименование звукового файла extern color clOpenBuy = LightBlue; // Цвет открытия покупки extern color clOpenSell = LightCoral; // Цвет открытия продажи extern color clModifyBuy = Aqua; // Цвет модификации покупки extern color clModifySell = Tomato; // Цвет модификации продажи extern color clCloseBuy = Blue; // Цвет закрытия покупки extern color clCloseSell = Red; // Цвет закрытия продажи //---- Глобальные переменные советника ------------------------------- int prevBar; bool exP = true; //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ void deinit() { Comment(""); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ void start() { //текущее время по серверу // string tc=TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES); //текущее локальное время if ((TimeLocal()>TimeSetOrders) && exP) Print("Время упущено"); string tc=TimeToStr(TimeLocal(),TIME_DATE|TIME_MINUTES); //время открытия ордера string tso=TimeToStr(TimeSetOrders,TIME_DATE|TIME_MINUTES); if(tc==tso) SetOrders(); if(prevBar!=Bars && ExistOrder(1) && ExistOrder(2)) ModifyOrders(); //Время удаления ордера datetime TempDelTime = TimeSetOrders+(TimeDelOrders*3600); //время удаления string tdo=TimeToStr(TempDelTime,TIME_DATE|TIME_MINUTES); DeleteOppositeOrders(); TrailingPositions(); if(tc==tdo) DeleteAllOrders(); CloseAllPositions(tc); prevBar=Bars; exP=false; } //+------------------------------------------------------------------+ //| Установка ордеров | //+------------------------------------------------------------------+ void SetOrders() { double ldStop=0,ldTake=0; int spr=MarketInfo(Symbol(),MODE_SPREAD); double pAsk=Ask+(DistanceSet+spr)*Point; double pBid=Bid-DistanceSet*Point; if(!ExistOrder(1)) { if(StopLoss!=0) ldStop=pAsk-StopLoss*Point; if(TakeProfit!=0) ldTake=pAsk+TakeProfit*Point; SetOrder(OP_BUYSTOP,pAsk,ldStop,ldTake,1); } if(!ExistOrder(2)) { if(StopLoss!=0) ldStop=pBid+StopLoss*Point; if(TakeProfit!=0) ldTake=pBid-TakeProfit*Point; SetOrder(OP_SELLSTOP,pBid,ldStop,ldTake,2); } } //+------------------------------------------------------------------+ //| Модификация ордеров | //+------------------------------------------------------------------+ void ModifyOrders() { bool fm; double ldStop=0,ldTake=0; int spr=MarketInfo(Symbol(),MODE_SPREAD); double pAsk=Ask+(DistanceSet+spr)*Point; double pBid=Bid-DistanceSet*Point; for(int i=0; i=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderMagicNumber()>MAGIC && OrderMagicNumber()<=MAGIC+2) { if(OrderSymbol()==Symbol()) { if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP) { fd=OrderDelete(OrderTicket()); if(fd && UseSound) PlaySound(NameFileSound); } } } } } } //+------------------------------------------------------------------+ //| Закрытие всех позиций по рыночной цене | //+------------------------------------------------------------------+ void CloseAllPositions(string tc) { bool fc; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { //Время закрытия ордера datetime TempCloseTime = OrderOpenTime()+(TimeClosePos*3600);//время закрытия string tco=TimeToStr(TempCloseTime,TIME_DATE|TIME_MINUTES); if(OrderMagicNumber()>MAGIC && OrderMagicNumber()<=MAGIC+2 && tco==tc) { if(OrderSymbol()==Symbol()) { fc=False; if(OrderType()==OP_BUY) { fc=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,clCloseBuy); } if(OrderType()==OP_SELL) { fc=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,clCloseSell); } if(fc && UseSound) PlaySound(NameFileSound); } } } } } //+------------------------------------------------------------------+ //| Удаление противоположных ордеров | //+------------------------------------------------------------------+ void DeleteOppositeOrders() { bool fd,fep1,fep2; fep1=ExistPosition(1); fep2=ExistPosition(2); for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol()) { fd=False; if(OrderType()==OP_BUYSTOP && OrderMagicNumber()==MAGIC+1) { if(fep2) fd=OrderDelete(OrderTicket()); } if(OrderType()==OP_SELLSTOP && OrderMagicNumber()==MAGIC+2) { if(fep1) fd=OrderDelete(OrderTicket()); } if(fd && UseSound) PlaySound(NameFileSound); } } } } //+------------------------------------------------------------------+ //| Сопровождение позиции простым тралом | //+------------------------------------------------------------------+ void TrailingPositions() { for(int i=0; iMAGIC && OrderMagicNumber()<=MAGIC+2) { if(OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { if(!ProfitTrailing || (Bid-OrderOpenPrice())>TrailingStop*Point) { if(OrderStopLoss()TrailingStop*Point) { if(OrderStopLoss()>Ask+(TrailingStop+TrailingStep-1)*Point || OrderStopLoss()==0) { ModifyStopLoss(Ask+TrailingStop*Point,clModifySell); } } } } } } } } //+------------------------------------------------------------------+ //| Перенос уровня StopLoss | //| Параметры: | //| ldStopLoss - уровень StopLoss | //| clModify - цвет модификации | //+------------------------------------------------------------------+ void ModifyStopLoss(double ldStop,color clModify) { bool fm; double ldOpen=OrderOpenPrice(); double ldTake=OrderTakeProfit(); fm=OrderModify(OrderTicket(),ldOpen,ldStop,ldTake,0,clModify); if(fm && UseSound) PlaySound(NameFileSound); } //+------------------------------------------------------------------+