Полезные функции от KimIV - страница 76

 
bool TimeTrade()
{
//----
   datetime current=TimeCurrent();
   if (((TimeHour(current) >= OpenHour || TimeHour(current) < CloseHour) && CloseHour<OpenHour) ||
      (TimeHour(current) >= OpenHour && TimeHour(current) < CloseHour && CloseHour>OpenHour)) 
      return(true);
   else
      return(false);
}
Такой вариант подойдет....
 
kharko >>:

Такой вариант подойдет....

А вынесите-ка OpenHour и CloseHour в параметры, и те, кто хочет иметь несколько интервалов будут удовлетворены:

сделают себе TimeTrade(OpenHour1, CloseHour1), TimeTrade(OpenHour2, CloseHour2), ......

и будут их комбинировать, как захотят.

 
bool TimeTrade(int OpenHour,int CloseHour)
{
//----
   datetime current=TimeCurrent();
   if (((TimeHour(current) >= OpenHour || TimeHour(current) < CloseHour) && CloseHour<OpenHour) ||
      (TimeHour(current) >= OpenHour && TimeHour(current) < CloseHour && CloseHour>OpenHour)) 
      return(true);
   else
      return(false);
}
Не проблема...
 

когда то уже выкладывал

//-----------------------------------------------------------------------------+
// Функция контроля времени торговли                                           |
//-----------------------------------------------------------------------------+
bool TradeTime(int StartTradeHour,int EndTradeHour){
if(!TradeOfTime){
if(DayOfWeek()==6||DayOfWeek()==0){
gTimeEngl="Start trade in  01:00 am";
gTimeRus="Начало торговли в понедельник в 01:00";
return(false);}
return(true);}
if(DayOfWeek()==6||DayOfWeek()==0){
gTimeEngl="Start trade in  01:00 am";
gTimeRus="Начало торговли в понедельник в 01:00";
return(false);}
if(StartTradeHour<EndTradeHour){
  if(TimeHour(TimeCurrent())>=StartTradeHour&&TimeHour(TimeCurrent())<EndTradeHour
    ||(CountOpOrd("0")>0)){
    gTimeEngl=StringConcatenate("By the end of trading session :",DoubleToStr((EndTradeHour-TimeHour(TimeCurrent())),0)," hours");
    gTimeRus=StringConcatenate("До конца торговой сессии :",DoubleToStr((EndTradeHour-TimeHour(TimeCurrent())),0)," часов");
    return(true);}}
if(StartTradeHour>EndTradeHour){
  if(TimeHour(TimeCurrent())>=StartTradeHour||TimeHour(TimeCurrent())<EndTradeHour
    ||(CountOpOrd("0")>0)){
    gTimeEngl=StringConcatenate("By the end of trading session :",DoubleToStr((EndTradeHour-TimeHour(TimeCurrent())),0)," hours");
    gTimeRus=StringConcatenate("До конца торговой сессии :",DoubleToStr((EndTradeHour-TimeHour(TimeCurrent())),0)," часов");
    return(true);}}    
gTimeEngl=StringConcatenate("resting to : ",StartTradeHour,": 00");   
gTimeRus=StringConcatenate("отдыхаем до : ",StartTradeHour,": 00");  
return(false);
}
 

и еще

//-----------------------------------------------------------------------------+
// Определяет дату конца торговли                                              |
//-----------------------------------------------------------------------------+
bool EndTradeForDateTime(string EndTradeData){//"Enterting Date of End trading in eeee.mm.dd";
if(EndTradeData==""){
gInf1rus="Дата конца торговли не определена ";
gInf1engl="Date of the end of trading is not defined ";
gColor1=LimeGreen;
return(false);
}
int EndData=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));
int DataEnd=StrToTime(EndTradeData);
if(EndData>=DataEnd){
gInf1rus="Торговля остановленна "+EndTradeData;
gInf1engl="Trading stopped "+EndTradeData;
gColor1=Red;
return(true);
}
gInf1rus="Торговля будет остановленна "+EndTradeData;
gInf1engl="Trading will be stopped "+EndTradeData;
gColor1=LimeGreen;
return(false);
}
и закончим на этом
 
xrust >>:
..и закончим на этом

"Не спешите нас хоронить, есть у нас еще здесь дела.." :))

 
bool IsTradeTime()
{
if(Hour()>Hour_Stop_Trade  && Hour()<Hour_Start_Trade)
	return(false);
 if(Hour()==Hour_Stop_Trade && Minute()>=Minute_Stop_Trade)
	return(false);  
 if(Hour()==Hour_Start_Trade && Minute()<Minute_Start_Trade)
	return(false);
return(true);
}
Если нужны ещё и минуты для более точного определения временного интервала, например для ночного скальпера.
 
khorosh >>:
Если нужны ещё и минуты для более точного определения временного интервала, например для ночного скальпера.

Конечно нужны, как минимум десятки минут.

Нужны также дни недели и возможность задания инидивидуального времени в каждый день недели и

выбора / запрета определённого дня.

Практика показывает что в разные дни недели закономерности работают по-разному.

 
Доброе время суток, KimIV. Мне нужен Ваш совет, а точнее помощь. Нашел в базе данных советник e-Smart_Tralling.mq4, автор неизвестен…но как уточнили в ветке автор взял в основу - трейлинговый советник-помощник И.Кима aka KimIV. Попытался изменить в коде этого советника: 1.чтобы он закрывал не все прибыльные сделки, допустим при исполнении заявки если я в комментарий добавил цель и свой тейк профит-советник не закрывает эту сделку, 2. чтобы он работал со всеми валютными парами и был со stoploss. Но опыта программирование особо еще нет, может подскажете что нужно изменить. Заранее благодарен
 

Пришла в голову простая формула автоматической генерации магика для советников, одновременно работающих на разных инструментах одного счета.

int Magic=GetMagic(ExpertName+Symbol(),Period());
//-----------------------------------------+

//+----------------------------------------------------------------------------+
//|  Автор    :  KimIV style,  http://www.kimiv.ru                             |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.04.2009                                                     |
//|  Описание : Возвращает сумму символьных кодов всех символов входной строки |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    simbolstring - строка для расчета                                       |
//|    multiplier   - дополнительный множитель                                 |
//+----------------------------------------------------------------------------+

int GetMagic(string simbolstring, int multiplier){
   int res=0;
   int len=StringLen(simbolstring);
   for(int i=0; i<len; i++)
       res+=StringGetChar(simbolstring,i);      
   return(res*multiplier);
}