有没有人有关于如何在Metatrader 4中生成基于时间的入口信号的示例代码?例如,在每天的特定小时和分钟
发布于 2011-12-09 11:50:10
我一直在研究这样一个函数。它必须进行大量定制--我正在制作一个更通用的版本,它将变得如此庞大和繁琐,以至于需要自己的include文件。但是,如果能够在不更改代码的情况下将其粘贴到不同的图表上,这将是值得的。这基本上是一个很大的案例陈述,我在这里已经对每个单独的时间框架进行了定制。
你一直在做什么?感谢您对《时代》和《外汇》的关注!
bool existordertime( datetime time, int otype = -37 ) {
// +---------------------------------------------------------------+
// | this function is intended for use inside of if() and other conditionals
// | usually called with TimeCurrent() example:
// |
// | if ( !existordertime( TimeCurrent() ) )
// |
// | it accepts a datetime. A datetime is:
// | a number of seconds elapsed from 00:00 January 1, 1970
// | they can be treated as integers as such or accessed with other functions
// | so that if statements can be commented in and out easily based on what
// | timeframe we plan on looking at.
// | there is an optional parameter for an order type if you need it.
// |
// | KEEP IN MIND if you want to use this to trade something like a 5min 15min
// | or 4hr your gonna need a lot of if statements like:
// |
// | if ( MathMod( Minute() + 5, 5 ) == 0 )
// |
// +------------------------------------------------------------------+
for (int cnt = 0; cnt < OrdersTotal(); cnt++) {
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderType() == otype || -37 == otype)
// COMMENT OUT THE if()S YOU DON'T NEED HERE:
// also add new lines as needed
// if ( MathMod( TimeMinute( time ) + 5, 5 ) == 0 ) // 5min chart
// if ( MathMod( TimeMinute( time ) + 15, 15 ) == 0 ) // 15min chart
// if ( MathMod( TimeMinute( time ) + 30, 30 ) == 0 ) // 30min chart
// if ( MathMod( TimeHour( time ) + 4, 4 ) == 0 ) // 4hour chart
int dbOrderOpenTime = OrderOpenTime(); // re-use SAVEs dbPOOL-access time ...
if ( TimeSeconds( time ) == TimeSeconds( dbOrderOpenTime ) )
if ( TimeMinute( time ) == TimeMinute( dbOrderOpenTime ) )
if ( TimeHour( time ) == TimeHour( dbOrderOpenTime ) )
if ( TimeDay( time ) == TimeDay( dbOrderOpenTime ) )
if ( TimeMonth( time ) == TimeMonth( dbOrderOpenTime ) )
if ( TimeYear( time ) == TimeYear( dbOrderOpenTime ) )
return (TRUE);
}
for (cnt = 0; cnt < OrdersHistoryTotal(); cnt++) {
OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY);
if (OrderType() == otype || -37 == otype)
// COMMENT OUT THE if()S YOU DON'T NEED HERE:
// also add new lines as needed
// if ( MathMod( TimeMinute( time ) + 5, 5 ) == 0 ) // 5min chart
// if ( MathMod( TimeMinute( time ) + 15, 15 ) == 0 ) // 15min chart
// if ( MathMod( TimeMinute( time ) + 30, 30 ) == 0 ) // 30min chart
// if ( MathMod( TimeHour( time ) + 4, 4 ) == 0 ) // 4hour chart
int dbOrderOpenTime = OrderOpenTime(); // re-use SAVEs dbPOOL-access time ...
if ( TimeSeconds( time ) == TimeSeconds( dbOrderOpenTime ) )
if ( TimeMinute( time ) == TimeMinute( dbOrderOpenTime ) )
if ( TimeHour( time ) == TimeHour( dbOrderOpenTime ) )
if ( TimeDay( time ) == TimeDay( dbOrderOpenTime ) )
if ( TimeMonth( time ) == TimeMonth( dbOrderOpenTime ) )
if ( TimeYear( time ) == TimeYear( dbOrderOpenTime ) )
return (TRUE);
}
return (FALSE);
}发布于 2011-02-24 17:35:59
TimeLocal()提供了您的本地计算机(终端客户端)自1970年1月1日午夜以来的秒数。
TimeCurrent()为您提供了自1970年1月1日午夜起您的经纪人计算机(服务器)的秒数。
您可以将其中任何一个转换为字符串,如下所示:
string ct = TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS);
Print("Client Time: ", ct);
string st = TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);
Print("Server Time: ", st);您还可以获取日期编号的各个元素,如下所示:
Print("Year:",TimeYear(TimeCurrent())," Month:",TimeMonth(TimeCurrent()));可以在here上找到MQL4在线程序员指南。
希望这能有所帮助。
干杯,
标记
https://stackoverflow.com/questions/2117306
复制相似问题