KimIV的有用功能 - 页 75

 

你好,亲爱的伊戈尔!我的系统使用趋势抑制器。而穿越的时间和价格在其中都很重要。
一连串的小节并不总是有一个 "连续 "的时间。出口、洞口等。
使用CrossPointOfLines( 在test_CrossPointOfLines.mq4中)来计算自然形式的时间,可以得到以下结果

在零条的左边

(图表上趋势线的位置与系统没有关系--随机选择。趋势线的参考点可以

是一个在零条的左边,另一个在右边)。


并向右转

计算不应以小时为单位,而应根据情况进行:既要以条为单位,也要以小时为单位。左边的时间单位是条。 而对于右侧,在零条之后,应该以小时为单位进行测量。

寻找现成的解决方案还没有任何结果。到目前为止, CrossPointOfLines 函数是网站上唯一的一个。这需要一个完美的历史 :(

 

日安,伊戈尔!

请帮助我提供建议或解决方案。我试图让专家顾问在前一个条形图 "吸收 "前一个条形图时发出信号。

1 - 如果吸收是向上的
2 - 如果吸收是向下的。

我以为这很简单,只要比较开盘价收盘价 就可以了......但事实并非如此。当我把鼠标悬停在前两根柱子上时,很明显最后一根柱子是在吃倒数第二根。

非常希望得到帮助,并预先感谢您。


以下是这段文字。

int start()
{
//----
if (SShort()==1)
Alert("1");
}
如果(SLong()==1)
Alert("2");
}
//----
return(0);
}
//+------------------------------------------------------------------+
int SShort()
{int MS=0;
if (Open[1]>Close[2] && Close[1]<Open[2] && Open[1]>Close[1] &&Open[2]<Close[2])
MS=1;
return(MS);
}
//+------------------------------------------------------------------+
int SLong()
{
int ML=0;
if(Open[1]<Close[2] && Close[1]>Open[2] && Open[1]<Close[1] && Open[2]>Close[2] )
ML=1;
return(ML);
}
//+------------------------------------------------------------------+
 

时间过滤器组:CPO

(以及更多......)。

一问是什么事,这是我自己想出来的结果。


1.禁止或允许日常活动。


选项1。

// Закрыть все позиции в конце дня в указанное время
if (Hour()==23 && Minute()>=45) 
{ ЗакрытьДень();}


// Запретить эксперту торговать С и ПО
if ( (Hour()==22 && Minute()>=00) && (Hour()==23 && Minute()>=59) ) return;

请注意,这些选项中的 "到期时间 "延伸至分钟数的小时末和59秒。

即表示为23:59的事件的结束时间实际上是23:59:59

而到小时末,因为分钟使用比较运算符">=",然而这并不是一个问题,你可以指定"=="。

但在任何情况下,将时间抹去到59秒仍会有效......


选项2。

从设定条件的角度来看,更精确的是...

// Выборка ОТ и ДО
if( OtTime(2,15,21) < OrderCloseTime() && OrderCloseTime() < DoTime(4,58,33) )
{ Действия;}

// Функции преобразования 
datetime OtTime(int h=0, int m=0, int s=0) {datetime ot;
ot=( h*3600)+( m*60)+ s+StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));
return ( ot);}
//--------------
datetime DoTime(int h=0, int m=0, int s=0) { datetime dt;
//if(h>23||h<0) Alert("Должно быть от 0 до 23"); h=0; 
//if(m>59||m<0) Alert("Должно быть от 0 до 59"); m=0;
dt=( h*3600)+( m*60)+ s+StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));
return ( dt);}

时间是通过向函数传递参数来设置的,例如21:15:23为(21,15,23)。

很显然,这并不酷,但这是很可行的代码......

SZY:输入参数的有效性检查不是偶然的。

因为如果你输入错误的,就会让你大跌眼镜。我找不到其他方法,所以我把它注释出来了。

因此,如果有办法解决这个问题,我将非常感激 ......


3号变体。

事实证明,这是最简单和最准确的。

// Внешние параметры, могут быть экстернами
string ВН="02:15"; // начало события
string ВК="04:58"; // конец события

int start()
{
int m;
datetime vn=StrToTime( ВН);
datetime vk=StrToTime( ВК);
// либо напрямую указывать время по типу:
//  datetime vn=StrToTime("02:15");
//  datetime vk=StrToTime("04:58");

for (int m=0; m < OrdersHistoryTotal() ; m++) 
{
OrderSelect( m, SELECT_BY_POS, MODE_HISTORY);
if( (OrderCloseTime()> vn) && (OrderCloseTime()< vk) )
{ Действия;}
}

return()
}

关于简单的事情,似乎是在由函数StrToTime()传递给它的参数的转变的特殊性。

例如,如果你只输入时间 "HH:MM:SS",那么输出的将是当前每一天的时间...。


顺便说一下...

// можно написать и так:
if( (OrderCloseTime()>StrToTime( ВН)) && (OrderCloseTime()<StrToTime( ВК)) )
// или даже так:
if( (OrderCloseTime()>StrToTime("02:15")) && (OrderCloseTime()<StrToTime("04:58")) )

通过将按小时和按天取样结合起来,你可以按类型过滤。

- 每天18:00时的情况,或从C开始的指定时间段内每天的情况,小时:分钟:秒

然而,日子的范围也可以 挤在一起。


2.函数 DateFirstDayMonday()

(基于DateOfMonday() )

datetime DateFirstDayMonday() 
{ 
datetime dfdm;
dfdm=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE))-((Day()-1)*86400);
return ( dfdm);
}

返回当前月的第一天的日期为00:00:00。

需要过滤本月开始前的事件...

// выборка закрытых ордеров с начала месяца:
if( DateFirstDayMonday() < OrderCloseTime() )
{ Действия;}

// выборка ДО начала месяца (с начала истории счёта):
if( DateFirstDayMonday()-1 > OrderCloseTime() )
{ Действия;}

第二个例子中的DateFirstDayMonday()-1打印出 "上个月的最后一天23:59:59"。


...

请不要提前踢我,因为我是个哑巴。

:)))

 
伊戈尔,请帮助为该指标附加一个警报
附加的文件:
 
kombat >> :

请不要提前踢我,因为我是个傻子。:)))

Chyneg不是Chyneg,但如果你已经拿起了灌木丛,就跟着它走到尽头。我们想把允许的操作时间和关闭时间移到这种类型的独立布尔函数中。

bool TradeTime(交易开始时间, 交易结束时间)

那么使用起来就非常方便了,如果(TradeTime(.,...))和工作!

 
granit77 >> :

糜烂不是糜烂,但如果你已经拿起了方向盘,那就贯彻执行。它要求把允许的操作时间、关闭时间放入单独的布尔函数中。

bool TradeTime(交易开始时间, 交易结束时间)

这将是非常方便的使用,如果(TradeTime(.,.))和工作!



嗯,已经...;)

对于一个银行,我做了两个同时计时的变体。

- 在22:00翻转前关闭所有订单和头寸

- 从22:00开始滚动交易到23:59结束的交易暂停

(没有额外检查的原始版本)

//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH>
//HHHHH Стартуем... HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH>
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH>
int start() {
//--- Общая проверка --------------------------------------------------------+
if(! IsCondition()) {Print("Низззяяя..."); return;}
//--- Задание неторгового времени (паузы) -----------------------------------+
ObjectDelete("НЕТОРГВРЕМЯ");
if((TimeCurrent()>StrToTime("22:00"))&&(TimeCurrent()<StrToTime("23:59:59"))) 
{ NoTradeTime(); return;}
//--- Принудительное закрытие всех ордеров и позиций в конце дня ------------+
if(Hour()==21 && Minute()>=45) { ЗакрытьДень(); return;}
//*метод имеет недостаток: он будет закрывать до конца указаного часа...
//*например время 21:45, закрывать будет до 21:59:59 а с 22:00 прекратит.
//*впринципе это нам не повредит...
//--- Конец условий ---------------------------------------------------------+
// бла-бла-бла...
return(0);
}
 
kombat >> :

...(没有额外检查的原始版本)

Vinin有单独的功能,用于计时,非常详细,也很有效果。在他的网站上查看电子表格或敲他的门。

 
granit77 >> :

维宁有单独的功能来处理时间问题,它们非常详细和彻底。在他的网站上查看专家顾问,或在他的网站上敲打。

谢谢,但还不需要......。

我只是目前没有太多的时间给这个顾问。

我知道在那里写什么,我也知道怎么写......。

我将在银行的论坛上发布主要内容,以便不在这个话题上添乱。

当然,在他的时代。;)

 
granit77 >> :

bool TradeTime(交易开始时间, 交易结束时间)

那么使用起来就非常方便了,如果(TradeTime(.,.))和工作!

有必要为伊戈尔-金订购这样一个功能。

 
goldtrader писал(а)>>

伊戈尔-金应该订购这样一个功能。

我也加入了这个请求!这将是一个非常有用和需要的功能。鉴于目前的贸易现实....。

甚至可以在那里提供两个时间间隔。