0
Это я привел общий пример! Если относительно Вашего случая, то картинка будет выглядеть так:
extern int StartHour1 = 19; //Первый час начала торговли
extern int StopHour1 = 24; //Первый час окончания торговли
extern int StartHour2 = 0; //Второй час начала торговли
extern int StopHour2 = 5; //Второй час окончания торговли

if((Hour()>=StartHour1 && Hour()<StopHour1) || 
(Hour()>=StartHour2 && Hour()<StopHour2))

Если нужно, можно еще добавить!?.. Или Вы со мной не согласны?!..
avatar

Andrju81

  • 2 июня 2015, 13:56
0
Можно проще —
extern int StartHour = 0; //Час начала торговли(терминальное время)
extern int StopHour = 24; //Час окончания торговли(терминальное время)

if(Hour()>=StartHour && Hour()<StopHour)

, тоже работает!...*good* 
Если нужно два или более промежутков времени, добавляем в параметры, тогда должно получиться примерно так:
if((Hour()>=StartHour && Hour()<=StopHour) || 
(Hour()>=StartHour1 && Hour()<StopHour1))

Я надеюсь Вы меня поняли!?...*think* 
avatar

Andrju81

  • 2 июня 2015, 12:15
0
Лень-Матушка переносить все в iCustom <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/017.gif' alt=' ;) '>&nbsp; , но все же сделал!...*good* 
avatar

Andrju81

  • 2 июня 2015, 01:07
+2
Если Вам это чем-то поможет — пожалуйста www.opentraders.ru/downloads/763/
avatar

Andrju81

  • 2 июня 2015, 01:03
0
В принципе, ничего сложного для написания советника нет! Можно уточнить:
1. Настройки индикаторов по умолчанию?!..
2. Время торговли не ограничивать?!..
avatar

Andrju81

  • 1 июня 2015, 19:38
0
Если в настройках советника есть первый пункт StopLoss, то перекачайте заново, не обратил внимания, он там по сути и не нужен!?...*yes* 
avatar

Andrju81

  • 23 мая 2015, 23:09
0
Скачайте заново советник по той же ссылке выше, я его исправил и перезалил на ЯД…
avatar

Andrju81

  • 23 мая 2015, 22:47
0
Сейчас сделаю с включенными индикаторами в сам советник, без необходимости копировать индикаторы отдельно в папку…
avatar

Andrju81

  • 23 мая 2015, 22:29
0
Если Вам это чем-то поможет — пожалуйста — yadi.sk/d/A5I0bNsagpnug
avatar

Andrju81

  • 23 мая 2015, 20:59
0
*good* Только не забывайте, что эта картинка сохраняется в компилированном файле .ex4!?..
avatar

Andrju81

  • 22 мая 2015, 23:54
+1
Держите, думаю разберетесь, что к чему — yadi.sk/d/disgLUIwgpBhK
avatar

Andrju81

  • 22 мая 2015, 23:38
+1
Есть бесплатные программы конверторы в .ico, например я пользуюсь AveIconifier2, она портативная и простая в использовании…
avatar

Andrju81

  • 22 мая 2015, 23:07
+2
Пожалуйста! Не вопрос:
<code>//+------------------------------------------------------------------+
//|                                        Laguerre+Alerts+Arrow.mq4 |
//|                     Copyright © 2015, Андрей Владимирович Носарь |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright   "Copyright © 2015, Андрей Владимирович Носарь"
#property version     "1.00"
#property description "Помните!!! Торговля на финансовых рынках связана с высоким уровнем риска."
#property description "Клиент принимает на себя риски, связанные с неисправностями программного"
#property description "обеспечения,телекоммуникационного оборудования и иными техническими проблемами."
#property description "Разработчик не несет ответственности за убытки, понесенные Клиентом вследствие незнания."
#property strict
#property indicator_chart_window
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
#property indicator_level2 0.75
#property indicator_level3 0.45
#property indicator_level4 0.15

extern string _1_Levels      = " Настройки уровней для сигналов ";
extern double  Level_Up          = 0.15;       // Уровень покупки
extern double  Level_Down        = 0.75;       // Уровень продажи

extern string _P_WhereOutput = " Куда выводить сообщения";
extern bool    UseAlert          = True;       // Использовать диалоговое окно
extern bool    UseSendMail       = True;       // Посылать электронное письмо
extern bool    UseSendPush       = False;      // Посылать сообщение на мобильные терминалы
extern bool    UseSound          = False;      // Использовать звук
extern string  BvUpSound         = "news.wav"; // Звук бычьего тренда
extern string  BvDownSound       = "email.wav";// Звук медвежьего тренда
extern bool    Arrow             = True;       // Ставить стрелки на сигналах
 int     shift             = 0;          // Cигналный бар: 0 - на текущем 1 - на закрытом

int timeee;                                    // Внутренняя переменная
string nameInd;
//---- input parameters
extern double gamma=0.7;
extern int CountBars=950;

double L0 = 0;
double L1 = 0;
double L2 = 0;
double L3 = 0;
double L0A = 0;
double L1A = 0;
double L2A = 0;
double L3A = 0;
double LRSI = 0;
double CU = 0;
double CD = 0;

double val1[];

void SetArrow(int cd, color cl, string nm=" ", datetime t1=0, double p1=0, int sz=3) 
{
  if (nm==" ") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[0];
  if (p1<=0) p1=Bid;
  nameInd=WindowExpertName( );
int wind=WindowFind(nameInd);
if (wind==-1)wind=0;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_ARROW, wind, 0,0);
  ObjectSet(nm, OBJPROP_TIME1    , t1);
  ObjectSet(nm, OBJPROP_PRICE1   , p1);
  ObjectSet(nm, OBJPROP_ARROWCODE, cd);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_WIDTH    , sz);
}
 
void AlertArrow(string text=" ",int arrowdir=0)
{
nameInd=WindowExpertName( );
int wind=WindowFind(nameInd);
if (wind==-1)wind=0;
   ObjectCreate("",OBJ_LABEL,wind,0,0);
   ObjectSetText("","",10,"Arial Bold",Red);
   ObjectSet("",OBJPROP_CORNER,2);
   ObjectSet("",OBJPROP_XDISTANCE,200);
   ObjectSet("",OBJPROP_YDISTANCE,10);
   
                if(UseAlert) Alert(text);
                if(Arrow) if (arrowdir==1) SetArrow(241,Blue,nameInd+DoubleToStr(Time[shift],0),Time[shift],Low[shift]);
                if(Arrow) if (arrowdir==2) SetArrow(242,Red,nameInd+DoubleToStr(Time[shift],0),Time[shift],High[shift]);
                if (!IsTesting())if(UseSendMail)  SendMail(text, text);
                if (!IsTesting())if(UseSendPush)  SendNotification(text);
 
}
 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
      
int init()
  {
//---- indicators
//----
   SetIndexBuffer(0,val1);
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
void deinit() 
{
   Comment(" ");
     nameInd=WindowExpertName( );
     int obj_total=ObjectsTotal();
     for(int i=0;i<obj_total;i++) 
     {
      string name=nameInd+DoubleToStr(Time[i],0);
      ObjectDelete(name);
     }
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   if (CountBars>Bars) CountBars=Bars;
   SetIndexDrawBegin(0,Bars-CountBars);
   
   int i;
   int    counted_bars=IndicatorCounted();

   //if(CountBars<=Lookback) return(0);
   //---- initial zero
   //if(counted_bars<1)
   //{
   //   for(i=1;i<=Lookback;i++) val1[CountBars-i]=0.0;
   //}

   i=CountBars-1;
   while(i>=0)
   {
      L0A = L0;
      L1A = L1;
      L2A = L2;
      L3A = L3;
      L0 = (1 - gamma)*Close[i] + gamma*L0A;
      L1 = - gamma *L0 + L0A + gamma *L1A;
      L2 = - gamma *L1 + L1A + gamma *L2A;
      L3 = - gamma *L2 + L2A + gamma *L3A;

      CU = 0;
      CD = 0;
      
      if (L0 >= L1) CU = L0 - L1; else CD = L1 - L0;
      if (L1 >= L2) CU = CU + L1 - L2; else CD = CD + L2 - L1;
      if (L2 >= L3) CU = CU + L2 - L3; else CD = CD + L3 - L2;

      if (CU + CD != 0) LRSI = CU / (CU + CD);
      val1[i] = LRSI;
          i--;
        }
               if(timeee!=Time[0] && val1[2] < Level_Up && val1[1] >= Level_Up)
                  {
                     AlertArrow(Symbol()+" "+IntegerToString(Period())+" "+ nameInd+" UP Trend ",1);
                     timeee=(int)Time[0];    
                     if (!IsTesting()) if (UseSound)    PlaySound(BvUpSound);       
                  }
               if(timeee!=Time[0] && val1[2] > Level_Down && val1[1] <= Level_Down)
                  {
                     AlertArrow(Symbol()+" "+IntegerToString(Period())+" "+ nameInd+" Down Trend ",2);
                     timeee=(int)Time[0];    
                     if (!IsTesting()) if (UseSound)    PlaySound(BvDownSound);       
                  }
   return(0);
 }
//+------------------------------------------------------------------+</code>
avatar

Andrju81

  • 22 мая 2015, 22:55
0
Бывает!:)  Отдыхать тоже надо, а то мозги закипят, как у меня иногда бывает!?...:D 
avatar

Andrju81

  • 22 мая 2015, 17:12
0
Держите , добавил алерты, сообщения на почту, мобилный терминал, плюс стрелки на сигналах — yadi.sk/d/fKL93RFAgomuk
avatar

Andrju81

  • 22 мая 2015, 16:50
0
Добавил сопровождение открытых ордеров простым тралом. Пробуйте — yadi.sk/d/0vtz70eogocjP
avatar

Andrju81

  • 22 мая 2015, 14:54
0
Просто надо отключит отображения нулевого и первого буфера(линии) как на скрине выше, оставить бесцветными, тогда получается как надо!?...*good* 
avatar

Andrju81

  • 5 мая 2015, 15:33
0
Я тут немного исправил критические ошибки индикатора, если это Вам поможет:
//------------------------------------------------------------------
#property copyright "mladen"
#property link      "mladenfx@gmail.com"
#property strict
//------------------------------------------------------------------
#property indicator_separate_window
#property indicator_buffers    5
#property indicator_color1     Green
#property indicator_color2     DarkOrange
#property indicator_color3     LimeGreen
#property indicator_color4     Orange
#property indicator_color5     Orange
#property indicator_width1     2
#property indicator_width2     2
#property indicator_width3     2
#property indicator_width4     2
#property indicator_width5     2

//
//
//
//
//

extern string TimeFrame   = "Current time frame";
extern int    Length      = 32;
extern int    Price       = PRICE_TYPICAL;
extern double HighLowStep = 0.5;

//
//
//
//
//

double rsx[];
double rsxDa[];
double rsxDb[];
double slope[];
double max[];
double min[];

//
//
//
//
//

string indicatorFileName;
int    timeFrame;
bool   returnBars;
bool   calculateValue;

//-------------------------------------------------------------------
//
//-------------------------------------------------------------------
//
//
//
//
//

int init()
{
   IndicatorBuffers(6);
      SetIndexBuffer(0,max); SetIndexEmptyValue(0,0);
      SetIndexBuffer(1,min);
      SetIndexBuffer(2,rsx);
      SetIndexBuffer(3,rsxDa);
      SetIndexBuffer(4,rsxDb);
      SetIndexBuffer(5,slope);
      
       //
       //
       //
       //
       //
     
        indicatorFileName = WindowExpertName();
        calculateValue    = (TimeFrame=="calculateValue"); if (calculateValue) return(0);
        returnBars        = (TimeFrame=="returnBars");     if (returnBars)     return(0);
        timeFrame         = stringToTimeFrame(TimeFrame); 
        
      //
      //
      //
      //
      // 
     
   IndicatorShortName(timeFrameToString(timeFrame)+"  Rsx ("+IntegerToString(Length)+")");
return(0);
}

//
//
//
//
//

int deinit() { return(0); }

//-------------------------------------------------------------------
//
//-------------------------------------------------------------------
//
//
//
//
//

double wrkBuffer[][13];

int start()
{
   int i,r,counted_bars=IndicatorCounted();
      if(counted_bars<0) return(-1);
      if(counted_bars>0) counted_bars--;
         int limit = MathMin(Bars-counted_bars,Bars-1);
         if (returnBars) { rsx[0] = limit+1; return(0); }
         
   //
   //
   //
   //
   //
   
   if (calculateValue || timeFrame==Period())
   {
     double Kg = (3.0)/(2.0+Length); 
     double Hg = 1.0-Kg;
     if (slope[limit]==-1) CleanPoint(limit,rsxDa,rsxDb);
     if (ArrayRange(wrkBuffer,0) != Bars) ArrayResize(wrkBuffer,Bars);
     for(i=limit, r=Bars-i-1; i>=0; i--, r++)
     {
        wrkBuffer[r][12] = iMA(NULL,0,1,0,MODE_SMA,Price,i);
        if (i==(Bars-1)) { for (int c=0; c<12; c++) wrkBuffer[r][c] = 0; continue; }  

        //
        //
        //
        //
        //
      
        double mom = wrkBuffer[r][12]-wrkBuffer[r-1][12];
        double moa = MathAbs(mom);
        for (int k=0; k<3; k++)
        {
           int kk = k*2;
              wrkBuffer[r][kk+0] = Kg*mom                + Hg*wrkBuffer[r-1][kk+0];
              wrkBuffer[r][kk+1] = Kg*wrkBuffer[r][kk+0] + Hg*wrkBuffer[r-1][kk+1]; mom = 1.5*wrkBuffer[r][kk+0] - 0.5 * wrkBuffer[r][kk+1];
              wrkBuffer[r][kk+6] = Kg*moa                + Hg*wrkBuffer[r-1][kk+6];
              wrkBuffer[r][kk+7] = Kg*wrkBuffer[r][kk+6] + Hg*wrkBuffer[r-1][kk+7]; moa = 1.5*wrkBuffer[r][kk+6] - 0.5 * wrkBuffer[r][kk+7];
        }
        if (moa != 0)
             rsx[i] = MathMax(MathMin((mom/moa+1.0)*50.0,100.00),0.00); 
        else rsx[i] = 50;
        max[i] = MathMax(rsx[i],max[i+1]-HighLowStep);
        min[i] = MathMin(rsx[i],min[i+1]+HighLowStep);
      
        //
        //
        //
        //
        //
      
        rsxDa[i] = EMPTY_VALUE;
        rsxDb[i] = EMPTY_VALUE;
        slope[i] = slope[i+1];
            if (rsx[i]>rsx[i+1])  slope[i] = 1;
            if (rsx[i]<rsx[i+1])  slope[i] =-1;
            if (slope[i]==-1) PlotPoint(i,rsxDa,rsxDb,rsx); 
     }      
     return(0);
     }
     
     //
     //
     //
     //
     //
   
     limit =(int) MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period()));
     if (slope[limit]==-1) CleanPoint(limit,rsxDa,rsxDb);
     for (i=limit;i>=0; i--)
     {
        int y = iBarShift(NULL,timeFrame,Time[i]);
           min[i]   = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",Length,Price,HighLowStep,0,y);
           max[i]   = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",Length,Price,HighLowStep,1,y);
           rsx[i]   = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",Length,Price,HighLowStep,2,y);
           slope[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",Length,Price,HighLowStep,5,y);
           rsxDa[i] = EMPTY_VALUE;
           rsxDb[i] = EMPTY_VALUE;
           if (slope[i]==-1) PlotPoint(i,rsxDa,rsxDb,rsx);
     }
return(0);
}

//-------------------------------------------------------------------
//
//-------------------------------------------------------------------
//
//
//
//
//

void CleanPoint(int i,double& first[],double& second[])
{
   if ((second[i]  != EMPTY_VALUE) && (second[i+1] != EMPTY_VALUE))
        second[i+1] = EMPTY_VALUE;
   else
      if ((first[i] != EMPTY_VALUE) && (first[i+1] != EMPTY_VALUE) && (first[i+2] == EMPTY_VALUE))
          first[i+1] = EMPTY_VALUE;
}

//
//
//
//
//

void PlotPoint(int i,double& first[],double& second[],double& from[])
{
   if (first[i+1] == EMPTY_VALUE)
      {
         if (first[i+1] == EMPTY_VALUE) {
                first[i]   = from[i];
                first[i+1] = from[i+1];
                second[i]  = EMPTY_VALUE;
            }
         else {
                second[i]   =  from[i];
                second[i+1] =  from[i+1];
                first[i]    = EMPTY_VALUE;
            }
      }
   else
      {
         first[i]  = from[i];
         second[i] = EMPTY_VALUE;
      }
}

//-------------------------------------------------------------------
//
//-------------------------------------------------------------------
//
//
//
//
//

string sTfTable[] = {"M1","M5","M15","M30","H1","H4","D1","W1","MN"};
int    iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};

//
//
//
//
//

int stringToTimeFrame(string tfs)
{
   tfs = stringUpperCase(tfs);
   for (int i=ArraySize(iTfTable)-1; i>=0; i--)
         if (tfs==sTfTable[i] || tfs==""+IntegerToString(iTfTable[i])) return(MathMax(iTfTable[i],Period()));
                                                      return(Period());
}
string timeFrameToString(int tf)
{
   for (int i=ArraySize(iTfTable)-1; i>=0; i--) 
         if (tf==iTfTable[i]) return(sTfTable[i]);
                              return("");
}

//
//
//
//
//

string stringUpperCase(string str)
{
   string   s = str;

   for (int length=StringLen(str)-1; length>=0; length--)
   {
      int char1 = StringGetChar(s, length);
         if((char1 > 96 && char1 < 123) || (char1 > 223 && char1 < 256))
                     s = StringSetChar(s, length, char1 - 32);
         else if(char1 > -33 && char1 < 0)
                     s = StringSetChar(s, length, char1 + 224);
   }
   return(s);
}
avatar

Andrju81

  • 5 мая 2015, 15:23