Сигнал входа на основе времени MT4 в MetaTrader4
-
22-09-2019 - |
Вопрос
Есть ли у кого-нибудь пример кода для генерации сигнала на вход на основе времени суток в Metatrader 4?например ,в определенный час и минуту каждого дня
Решение
Я работал как раз над такой функцией.Его нужно сильно настраивать — я работаю над созданием более общей версии, которая будет настолько большой и утомительной, что потребуется своя собственная include
файл.Но это будет стоить того, чтобы иметь возможность размещать его на разных графиках без изменения кода.По сути, это будет одно большое заявление по делу с тем, что я здесь уже настроил для каждого отдельного таймфрейма.
Над чем вы работали?Спасибо за ваш интерес к time и forex!
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);
}
Другие советы
TimeLocal()
указывает количество секунд, прошедших с полуночи 1 января 1970 года на вашем локальном компьютере (клиент терминала).
TimeCurrent()
показывает количество секунд, прошедших с полуночи 1 января 1970 года на компьютере (сервере) вашего Брокера.
Вы можете преобразовать любой из них в строку следующим образом:
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()));
Онлайн-руководство по программированию на MQL4 можно найти здесь.
Надеюсь, это поможет.
Ваше здоровье,
Отметка