Navigation:Home > Content >

night.mq5

Time: 2015-04-05 | Download file:night.mq5

//+------------------------------------------------------------------+
//|                                                        Night.mq5 |
//|                                       Copyright 2010, AM2 Group. |
//|                                         http://www.am2_group.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, AM2 Group."
#property link      "http://www.am2_group.net"
#property version   "1.00"

//--- входные параметры

input int      StopLoss=40;        // Stop Loss
input int      TakeProfit=20;      // Take Profit  
input int      Stoch_OverSold=30;  // Уровень перепроданности Stochastic
input int      Stoch_OverBought=70;// Уровень перекупленности Stochastic
input double   Lot=1;              // Количество лотов для торговли
input int      EA_Magic=1072010;   // Magic Number советника

//--- глобальные переменные
int stochHandle;                   // хэндл индикатора Stochastic
double stochVal[5];                // статический массив для хранения значений индикатора Stochastic для каждого бара
int STP,TKP;                       // будут использованы для значений Stop Loss и Take Profit
double Lots=0.1;                   // количество лотов для торговли  
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Получить хэндл индикатора Stochastic
   stochHandle=iStochastic(NULL,PERIOD_M15,5,3,3,MODE_EMA,STO_CLOSECLOSE);
//--- Для работы с брокерами, использующими 3-х и 5-ти значные котировки,
//--- умножаем на 10 значения SL и TP
   STP = StopLoss;
   TKP = TakeProfit;
   if(_Digits==5 || _Digits==3)
     {
      STP = STP*10;
      TKP = TKP*10;
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- Освобождаем хэндлы индикаторов
   IndicatorRelease(stochHandle);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов  
   MqlDateTime dt;
   datetime t[];
   
   ZeroMemory(mrequest);
   ZeroMemory(mresult);
/*
     Установим индексацию в массивах котировок и индикаторов 
     как в таймсериях
*/

   ArraySetAsSeries(stochVal,true);
   ArraySetAsSeries(t,true);
   TimeCurrent(dt);

   int i=(dt.hour+1)*60;
   if(CopyTime(Symbol(),0,0,i,t)<0)
     {
      Print("Не удалось скопировать таймсерию!");
      return;
     }
//--- Получаем исторические данные последних 3-х баров 
   if(CopyBuffer(stochHandle,0,0,3,stochVal)<0)
     {
      Alert("Ошибка копирования буферов индикатора Stochastic - номер ошибки:",GetLastError(),"!!");
      return;
     }
/*
    1. Проверка условий для покупки :
    Stochastic упал ниже уровня перепроданности 
*/
   double Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK);            // лучшее предложение на покупку
   double Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);            // лучшее предложение на продажу

//--- объявляем переменные типа boolean, они будут использоваться при проверке условий для покупки

   bool Buy_Condition=(stochVal[1]=21 || dt.hour<6)
        {
         mrequest.action = TRADE_ACTION_DEAL;                       // немедленное исполнение
         mrequest.price = Ask;                                      // последняя цена ask
         mrequest.sl = NormalizeDouble(Ask - STP*_Point,_Digits);   // Stop Loss
         mrequest.tp = NormalizeDouble(Ask + TKP*_Point,_Digits);   // Take Profit
         mrequest.symbol = _Symbol;                                 // символ
         mrequest.volume = CalculateVolume();                       // количество лотов для торговли
         mrequest.magic = EA_Magic;                                 // Magic Number
         mrequest.type = ORDER_TYPE_BUY;                            // ордер на покупку
         mrequest.type_filling = ORDER_FILLING_FOK;                 // тип исполнения ордера - все или ничего
         mrequest.deviation=5;                                      // проскальзывание от текущей цены        
         OrderSend(mrequest,mresult);                               // отсылаем ордер
                                                                    // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008)
           {
            Alert("Ордер Sell успешно помещен, ордер №:",mresult.order);
           }
         else
           {
            Alert("Запрос на установку ордера Sell не выполнен - код ошибки:",GetLastError());
            return;
           }
        }
     }
/*
    2. Проверка условий для продажи : MACD падает на дневном графике, 
    Stochastic поднялся выше уровня перекупленности 80 и начинает падать на часовом графике
*/

//--- объявляем переменные типа boolean, они будут использоваться при проверке условий для продажи

   bool Sell_Condition=(stochVal[1]>Stoch_OverBought);            // Stochastic выше уровня перекупленности 

//--- собираем все вместе
   if(Sell_Condition && (!PositionSelect(_Symbol)))
     {
      if(dt.hour>=21 || dt.hour<6)
        {
         mrequest.action = TRADE_ACTION_DEAL;                      // немедленное исполнение
         mrequest.price = Bid;                                     // последняя цена Bid
         mrequest.sl = NormalizeDouble(Bid + STP*_Point,_Digits);  // Stop Loss
         mrequest.tp = NormalizeDouble(Bid - TKP*_Point,_Digits);  // Take Profit
         mrequest.symbol = _Symbol;                                // символ
         mrequest.volume = CalculateVolume();                      // количество лотов для торговли
         mrequest.magic = EA_Magic;                                // Magic Number
         mrequest.type= ORDER_TYPE_SELL;                           // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_FOK;                // тип исполнения ордера - все или ничего
         mrequest.deviation=5;                                     // проскальзывание от текущей цены        
         OrderSend(mrequest,mresult);                              // отсылаем ордер
                                                                   // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008)
           {
            Alert("Ордер Sell успешно помещен, ордер №:",mresult.order);
           }
         else
           {
            Alert("Запрос на установку ордера Sell не выполнен - код ошибки:",GetLastError());
            return;
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Вычисляем размер лота                                            |
//+------------------------------------------------------------------+
double CalculateVolume()
  {
   Lots=AccountInfoDouble(ACCOUNT_FREEMARGIN)/100000*10;
   Lots=MathMin(5,MathMax(0.1,Lots));
   if(Lots<0.1)
      Lots=NormalizeDouble(Lots,2);
   else
     {
      if(Lots<1) Lots=NormalizeDouble(Lots,1);
      else       Lots=NormalizeDouble(Lots,0);
     }
   return(Lots);
  }
//+------------------------------------------------------------------+

Recommend