Funciones útiles de KimIV - página 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);
}
Esto hará....
 
kharko >> :

Esta variante se ajustará a ....

Ponga OpenHour y CloseHour en los parámetros y los que quieran tener varios intervalos estarán satisfechos:

Hacer TimeTrade(OpenHour1, CloseHour1), TimeTrade(OpenHour2, CloseHour2), ......

y los combinarán como quieran.

 
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);
}
No hay problema...
 

publicado una vez antes

//-----------------------------------------------------------------------------+
// Функция контроля времени торговли                                           |
//-----------------------------------------------------------------------------+
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);
}
 

también

//-----------------------------------------------------------------------------+
// Определяет дату конца торговли                                              |
//-----------------------------------------------------------------------------+
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);
}
y lo dejamos por hoy.
 
xrust >> :
...y eso es todo.

"No te apresures a enterrarnos, todavía tenemos cosas que hacer aquí..." :))

 
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);
}
Si además necesita minutos para un intervalo de tiempo más preciso, por ejemplo para un scalper nocturno.
 
khorosh >>:
Если нужны ещё и минуты для более точного определения временного интервала, например для ночного скальпера.

Por supuesto, necesitas al menos decenas de minutos.

También se necesitan los días de la semana y la posibilidad de establecer horarios individuales para cada día de la semana y

Seleccionar/pujar un día determinado.

La práctica demuestra que los patrones funcionan de forma diferente en los distintos días de la semana.

 
Buenas tardes, KimIV. Necesito tu consejo, o mejor dicho, tu ayuda. Encontrado en la base de datos e-Smart_Tralling.mq4, autor desconocido ... pero como se aclara en la rama el autor tomó en base - arrastrando asesor-asistente I.Kim aka KimIV. He intentado cambiar en el código de este EA: 1.para que no se cierren todas las operaciones rentables, por ejemplo, al ejecutar una orden, si pongo un objetivo y mi take profit, el asesor no cierra esta operación; 2.para que funcione con todos los pares de divisas y con stoploss. Todavía no tengo mucha experiencia en programación, tal vez puedas sugerirme qué cambiar. Se lo agradezco de antemano.
Archivos adjuntos:
 

Se me ocurrió una fórmula sencilla para la generación automática de un magik para los EAs que trabajan simultáneamente en diferentes instrumentos en la misma cuenta.

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);
}
Razón de la queja: