Есть ли у кого-нибудь пример кода для генерации сигнала входа на основе времени суток в Metatrader 4? например в определенный час и минуту каждого дня
Сигнал входа в MT4 на основе времени в MetaTrader4
Ответы (2)
Я работал именно над такой функцией. Его нужно много настраивать — я работаю над созданием более общей версии, которая будет настолько большой и утомительной, что ей понадобится собственный 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);
}
Time[iShift(...)]
и других основных элементов, которые выходят за рамки не столь четкого определения вопроса, на который нужно ответить. Кодовый блок ничего не делает в направлении исходного вопроса, а довольно интенсивно перечитывает dbPOOL (не заботясь о результате .Select()
)
- person user3666197; 14.06.2014
if
, не является стандартным ни в одном руководстве по стилю или IDE, которые я когда-либо видел, — он также заставляет боковую прокрутку увидеть весь код. Во всяком случае, это просто интервал и не влияет на выполнение, поэтому я не уверен, к чему вы клоните.
- person nbrooks; 14.06.2014
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 можно найти здесь.
Надеюсь это поможет.
Ваше здоровье,
Отметка