Navigation:Home > Content >

p_s_3MA_Trall_NoLoss___Delta___.mq4

Time: 2014-09-06 | Download file:p_s_3MA_Trall_NoLoss___Delta___.mq4

//+------------------------------------------------------------------+
//|                                             простой советник.mq4 |
//|                               Copyright © 2011, Хлыстов Владимир |
//|                                                [email protected] |
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""
//--------------------------------------------------------------------
extern string  MA1="";     
extern int     period_1             = 5,           //Период усреднения для вычисления первой MA.
               ma_shift_1           = 0,           //Сдвиг индикатора относительно ценового графика.
               ma_method_1          = MODE_EMA,    //Метод усреднения. Может быть любым из значений методов скользящего среднего (Moving Average).
                                                   //MODE_SMA 0 Простое скользящее среднее 
                                                   //MODE_EMA 1 Экспоненциальное скользящее среднее 
                                                   //MODE_SMMA 2 Сглаженное скользящее среднее 
                                                   //MODE_LWMA 3 Линейно-взвешенное скользящее среднее 

               applied_price_1      = PRICE_OPEN,  //Используемая цена. Может быть любой из ценовых констант.
                                                   //PRICE_CLOSE 0 Цена закрытия 
                                                   //PRICE_OPEN 1 Цена открытия 
                                                   //PRICE_HIGH 2 Максимальная цена 
                                                   //PRICE_LOW 3 Минимальная цена 
                                                   //PRICE_MEDIAN 4 Средняя цена, (high+low)/2 
                                                   //PRICE_TYPICAL 5 Типичная цена, (high+low+close)/3 
                                                   //PRICE_WEIGHTED 6 Взвешенная цена закрытия, (high+low+close+close)/4 

               timeframe_1          = 0;           //Период. Может быть одним из периодов графика. 0 означает период текущего графика.
extern string  _____________ = "";
extern string  MA2="";     
extern int     period_2             = 30,          //Период усреднения для вычисления второй MA.
               ma_shift_2           = 0,           //Сдвиг индикатора относительно ценового графика.
               ma_method_2          = MODE_LWMA,   //Метод усреднения. Может быть любым из значений методов скользящего среднего (Moving Average).
               applied_price_2      = PRICE_OPEN,  //Используемая цена. Может быть любой из ценовых констант.
               timeframe_2          = 0;           //Период. Может быть одним из периодов графика. 0 означает период текущего графика.
extern string  ______________ = "";
extern string  MA3="";     
extern int     period_3             = 100,         //Период усреднения для вычисления фильтрующей MA.
               ma_shift_3           = 0,           //Сдвиг индикатора относительно ценового графика.
               ma_method_3          = MODE_LWMA,   //Метод усреднения. Может быть любым из значений методов скользящего среднего (Moving Average).
               applied_price_3      = PRICE_OPEN,  //Используемая цена. Может быть любой из ценовых констант.
               timeframe_3          = 0;           //Период. Может быть одним из периодов графика. 0 означает период текущего графика.
extern string  _______________ = "";
extern string  Settings="";     
extern int     stoploss             = 0,           //стоплосс
               takeprofit           = 0,           //тейкпрофит
               TrailingStop         = 0,           //трейлингстоп, если 0, то нет трейлинга
               NoLoss               = 0,           //перевод в безубыток, если 0, то нет перевода в безубыток
               MaxOrders            = 1;           //максимальное кол-во ордеров одновременно на счете
extern double  LOT                  = 0.1;         //объем ордера
extern bool    CloseRevers          = true;        //закрывать ордера при встречном сигнале
extern string  ________________ = "";
extern int     Delta                = 10;          //Выше или ниже екстремумов прошлого бара
extern string  _________________ = "";
extern int     TimeStart            = 0 ,          //ограничение времени работы советника
               TimeEnd              = 24;          
//--------------------------------------------------------------------
int TimeBar,STOPLEVEL,Magic=1234567890;
bool Trade;
//--------------------------------------------------------------------
int start()
{
   int TekHour = Hour();
   if ( TimeStart < TimeEnd && TekHour >= TimeStart && TekHour < TimeEnd ) Trade=true; 
   else 
   {
      if ( TimeStart > TimeEnd && (TekHour >= TimeStart || TekHour < TimeEnd)) //торговля ночью
      {
         Trade=true;
      }
      else 
      {
         Trade=false;Comment("Торговля запрещена по времени");
      }
   }
   STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
   if (TrailingStop>=STOPLEVEL) TrailingStop();
   if (NoLoss>=STOPLEVEL) NoLoss();
   if (TimeBar==Time[0]) return(0);

   double MA10 = NormalizeDouble(iMA(NULL,timeframe_1,period_1,ma_shift_1,ma_method_1,applied_price_1,1),Digits);
   double MA11 = NormalizeDouble(iMA(NULL,timeframe_1,period_1,ma_shift_1,ma_method_1,applied_price_1,2),Digits);
   double MA20 = NormalizeDouble(iMA(NULL,timeframe_2,period_2,ma_shift_2,ma_method_2,applied_price_2,1),Digits);
   double MA21 = NormalizeDouble(iMA(NULL,timeframe_2,period_2,ma_shift_2,ma_method_2,applied_price_2,2),Digits);
   double MA30 = NormalizeDouble(iMA(NULL,timeframe_3,period_3,ma_shift_3,ma_method_3,applied_price_3,1),Digits);
   double MA31 = NormalizeDouble(iMA(NULL,timeframe_3,period_3,ma_shift_3,ma_method_3,applied_price_3,2),Digits);

   ObjectDelete("MA10");
   ObjectCreate("MA10",OBJ_ARROW,0,Time[0],MA10,0,0,0,0);                     
   ObjectSet   ("MA10",OBJPROP_ARROWCODE,6);
   ObjectSet   ("MA10",OBJPROP_COLOR, Blue); 
   ObjectDelete("MA20");
   ObjectCreate("MA20",OBJ_ARROW,0,Time[0],MA20,0,0,0,0);                     
   ObjectSet   ("MA20",OBJPROP_ARROWCODE,6);
   ObjectSet   ("MA20",OBJPROP_COLOR, Blue); 
   
   double SL,TP;
   if ((MA11<=MA31 || MA21<=MA31) && MA10>MA30 && MA20>MA30 && MA10>MA20 && Ask>High[1]+Delta*Point && Trade)
   {
      if (CloseRevers) CLOSEORDER(OP_SELL);
      if (MaxOrders>OrdersTotal())       
      {
         if (takeprofit!=0) TP  = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP = 0;
         if (stoploss!=0)   SL  = NormalizeDouble(Bid - stoploss*Point,Digits); else SL = 0;
         if (OrderSend(Symbol(),OP_BUY, LOT,NormalizeDouble(Ask,Digits),2,SL,TP,"простой советник",Magic,3)!=-1) TimeBar=Time[0]; 
         else Print("OrderSend BUY Error ",GetLastError(),"  SL ",SL,"  TP ",TP);
      }
   }
   if ((MA11>=MA31 || MA21>=MA31) && MA10OrdersTotal()) 
      {
         if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP = 0;
         if (stoploss!=0)   SL = NormalizeDouble(Ask + stoploss*Point,Digits); else SL = 0;
         if (OrderSend(Symbol(),OP_SELL,LOT,NormalizeDouble(Bid,Digits),2,SL,TP,"простой советник",Magic,3)!=-1) TimeBar=Time[0]; 
         else Print("OrderSend SELL Error ",GetLastError(),"  SL ",SL,"  TP ",TP);
      }
   }
return(0);
}
//--------------------------------------------------------------------
void CLOSEORDER(int ord)
{
   for (int i=0; i OSL && StLo > OOP)
               {  if (!OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,White))
                     Print("TrailingStop Error ",GetLastError()," buy SL ",OSL,"->",StLo);
               }
            }                                         
            if (tip==OP_SELL)        
            {
               StLo = NormalizeDouble(Ask+TrailingStop*Point,Digits);
               if (StLo > OOP || StLo==0) continue;
               if (StLo < OSL || OSL==0 )
               {  if (!OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,White))
                     Print("TrailingStop Error ",GetLastError()," sell SL ",OSL,"->",StLo);
               }
            } 
         }
      }
   }
}
//--------------------------------------------------------------------
void NoLoss()
{
   int tip,Ticket;
   double StLo,OSL,OOP;
   for (int i=0; iOOP) continue;
               StLo = NormalizeDouble(OOP+Point,Digits);
               if (NormalizeDouble((Bid-OOP)/Point,0)>=NoLoss)
               {  if (!OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,White))
                     Print("NoLoss Error ",GetLastError()," buy SL ",OSL,"->",StLo);
               }
            }                                         
            if (tip==OP_SELL)        
            {
               if (OSL=NoLoss)
               {  if (!OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,White))
                     Print("NoLoss Error ",GetLastError()," sell SL ",OSL,"->",StLo);
               }
            } 
         }
      }
   }
}
//--------------------------------------------------------------------

Recommend