Вкратце поискал похожую тему, не нашел
Понадобилось вычислить множитель при переходе от одного ТФ к другому. Распечатал значения, еще раз удивился, под какой травой задавались эти константы? Или, может быть, я своим слабым умишком не догоняю скрытый смысл? А он есть?
{
Print(PERIOD_CURRENT," ",PERIOD_M1," ",PERIOD_M2," ",PERIOD_M3," ",PERIOD_M4," ",PERIOD_M5," ",PERIOD_M6," ",PERIOD_M10," ",PERIOD_M12," ",PERIOD_M15," ",PERIOD_M20," ",PERIOD_M30,
IntegerToString(PERIOD_H1)," ",IntegerToString(PERIOD_H2)," ",PERIOD_H3," ",PERIOD_H4," ",PERIOD_H6," ",PERIOD_H8," ",PERIOD_H12," ",PERIOD_D1," ",PERIOD_W1," ",PERIOD_MN1);
}
2017.02.26 23:45:48.984 EnumTF (EURUSD,M15) 0 1 2 3 4 5 6 10 12 15 20 3016385 16386 16387 16388 16390 16392 16396 16408 32769 49153
Надо писать длинный case с реальными значениями в минутах...
Кстати, в MQL4 тот же скрипт выдает другие значения, опять, в чем смысл???
2017.02.26 23:33:13.330 EnumTF EURUSD.e,M15: 0 1 2 3 4 5 6 10 12 15 20 3060 120 180 240 360 480 720 1440 10080 43200
Вкратце поискал похожую тему, не нашел
Понадобилось вычислить множитель при переходе от одного ТФ к другому. Распечатал значения, еще раз удивился, под какой травой задавались эти константы? Или, может быть, я своим слабым умишком не догоняю скрытый смысл? А он есть?
{
Print(PERIOD_CURRENT," ",PERIOD_M1," ",PERIOD_M2," ",PERIOD_M3," ",PERIOD_M4," ",PERIOD_M5," ",PERIOD_M6," ",PERIOD_M10," ",PERIOD_M12," ",PERIOD_M15," ",PERIOD_M20," ",PERIOD_M30,
IntegerToString(PERIOD_H1)," ",IntegerToString(PERIOD_H2)," ",PERIOD_H3," ",PERIOD_H4," ",PERIOD_H6," ",PERIOD_H8," ",PERIOD_H12," ",PERIOD_D1," ",PERIOD_W1," ",PERIOD_MN1);
}
2017.02.26 23:45:48.984 EnumTF (EURUSD,M15) 0 1 2 3 4 5 6 10 12 15 20 3016385 16386 16387 16388 16390 16392 16396 16408 32769 49153
Надо писать длинный case с реальными значениями в минутах...
Очевидно же, что для H1...D1 считается как 0x4000 + количество часов. Неделя и месяц - нужно смотреть...
Месяцы: 0xC000 + кол-во месяцев.
Итого, вместо длинного case можно обойтись четырьмя if-ами.
Serhii Shevchuk:
Очевидно же, что для H1...D1 считается как 0x4000 + количество часов. Неделя и месяц - нужно смотреть...Во первых, вы неправильно посчитали
1. PERIOD_H1 == 16386; // 0x4000 + 2 == 16384 + 2
2. Между PERIOD_H3 и PERIOD_H4 разрыв 2
ну и так далее, например почему-то равен PERIOD_M30 == 3016385
Очевидным было бы оставить значения в минутах, а на прибавлять непонятную зашифровку без каких-либо четких правил
Во первых, вы неправильно посчитали
1. PERIOD_H1 == 16386; // 0x4000 + 2 == 16384 + 2
2. Между PERIOD_H3 и PERIOD_H4 разрыв 2
ну и так далее, например почему-то равен PERIOD_M30 == 3016385
Очевидным было бы оставить значения в минутах, а на прибавлять непонятную зашифровку без каких-либо четких правил
Внимательнее, пожалуйста. И тогда всё становится на свои места. Ни разрывов, ни загадок.
можно использовать
можно использовать
Спасибо, что напомнили, а то уже сгоряча case собрался писать ))
можно использовать
input long InpCycles=1000000000;
ENUM_TIMEFRAMES TF_list[32]={
PERIOD_MN1, PERIOD_W1, PERIOD_D1, PERIOD_H12,
PERIOD_H8, PERIOD_H6, PERIOD_H4, PERIOD_H3,
PERIOD_H2, PERIOD_H1, PERIOD_M30, PERIOD_M20,
PERIOD_M15, PERIOD_M12, PERIOD_M10, PERIOD_M6,
PERIOD_M5, PERIOD_M4, PERIOD_M3, PERIOD_M2,
PERIOD_M1, PERIOD_MN1, PERIOD_W1, PERIOD_D1,
PERIOD_M5, PERIOD_M4, PERIOD_M3, PERIOD_M2,
PERIOD_H2, PERIOD_H1, PERIOD_M30, PERIOD_M20
};
int PeriodMinutes(ENUM_TIMEFRAMES tf)
{
uint t = uint(tf);
uint f = 0xc000&t;
uint min = 0x00FF&t;
if(f==0x4000) min*= 60;
else if(f==0x8000) min*= 10080;
else if(f==0xc000) min*= 43200;
return(int(min));
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
ulong tmp = 0;
//
uint idx = 0;
ulong t0 = GetMicrosecondCount();
for(long i=0;i<InpCycles;i++)
tmp+= PeriodMinutes(TF_list[0x1f&(idx++)]);
ulong t1 = GetMicrosecondCount();
Print("1) tmp = ",tmp,"... dT = ",t1-t0);
//---
tmp = 0;
idx = 0;
t0 = GetMicrosecondCount();
for(long i=0;i<InpCycles;i++)
tmp+= PeriodSeconds(TF_list[0x1f&(idx++)])/60;
t1 = GetMicrosecondCount();
Print("2) tmp = ",tmp,"... dT = ",t1-t0);
//---
}
//+------------------------------------------------------------------+
Кстати, в MQL4 тот же скрипт выдает другие значения, опять, в чем смысл???
2017.02.26 23:33:13.330 EnumTF EURUSD.e,M15: 0 1 2 3 4 5 6 10 12 15 20 3060 30 60 120 180 240 360 480 720 1440 10080 43200
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Вкратце поискал похожую тему, не нашел
Понадобилось вычислить множитель при переходе от одного ТФ к другому. Распечатал значения, еще раз удивился, под какой травой задавались эти константы? Или, может быть, я своим слабым умишком не догоняю скрытый смысл? А он есть?
{
Print(PERIOD_CURRENT," ",PERIOD_M1," ",PERIOD_M2," ",PERIOD_M3," ",PERIOD_M4," ",PERIOD_M5," ",PERIOD_M6," ",PERIOD_M10," ",PERIOD_M12," ",PERIOD_M15," ",PERIOD_M20," ",PERIOD_M30,
IntegerToString(PERIOD_H1)," ",IntegerToString(PERIOD_H2)," ",PERIOD_H3," ",PERIOD_H4," ",PERIOD_H6," ",PERIOD_H8," ",PERIOD_H12," ",PERIOD_D1," ",PERIOD_W1," ",PERIOD_MN1);
}
2017.02.26 23:45:48.984 EnumTF (EURUSD,M15) 0 1 2 3 4 5 6 10 12 15 20 3016385 16386 16387 16388 16390 16392 16396 16408 32769 49153
Надо писать длинный case с реальными значениями в минутах...