Galim_V: Подскажите, как получить донные индикатора с таймфрейма, отличного от того, на котором висит сова?
1. Вы зачем птичку повесили? Не жалко?
2. Справку хоть раз открывали? Получить данные индикатора в советнике с любого таймфрейма не представляет никакой проблемы, так как первые два параметра функций получения данных индикатора как раз и служат для указания символа и периода графика, с которых необходимо получать значения.
Ведь даже когда вы набираете код в редакторе, то вам весьма навязчиво открывается список формальных переменных функции - и там во всплывающей подсказке видно - символ и таймфрейм. Странно, что вы не обратили на них внимания.
Вам нужно время? Время можете получить либо последнего тика: TimeCurrent(), либо последнее локальное время: TimeLocal()
Если будете получать время последнего тика в выходные, то таймер тут не поможет - время будет последнего тика пятницы, ну или последнего тика последнего рабочего дня. А TimeLocal() не даст вам время сервера - нужно пересчитывать со смещением.
Впрочем, я не знаю что именно вы хотите получить в итоге.
2. Справку хоть раз открывали? Получить данные индикатора в советнике с любого таймфрейма не представляет никакой проблемы, так как первые два параметра функций получения данных индикатора как раз и служат для указания символа и периода графика, с которых необходимо получать значения.
Ведь даже когда вы набираете код в редакторе, то вам весьма навязчиво открывается список формальных переменных функции - и там во всплывающей подсказке видно - символ и таймфрейм. Странно, что вы не обратили на них внимания.
2018.07.04 22:17:38.3982016.11.10 13:00:00 Arap01 EURUSD,H1: Округляем 44.53781512605145 45.0 Это данные стохастика в "нормальном" режиме. т.е так:
Так мне без тика нужен алерт за две секунды до закрытия бара.
Это не сделать просто, нужно запускать более точный таймер (хотя бы 500 мс) и предварительно делать синхронизацию локального времени и серверного. Вот я вам уже рассказывал:
в момент прихода тика считаем разницу TimeCurrent()-TimeLocal() (это делается один раз для синхронизации времени локального и серверного) - это смещение относительно брокера, если это смещение в дальнейшем изменится, значит нужно пересчитывать время заново; - при старте советника, (илипоявлении бараД1) пересчитываем все нужные времена заново, в локальное время, учитывая смещение; - ждём то что "насчитали" в таймере, попутно проверяя рассинхронизацию, пропадание связи с брокером, перевод локальных стрелок.
Это не сделать просто, нужно запускать более точный таймер (хотя бы 500 мс) и предварительно делать синхронизацию локального времени и серверного. Вот я вам уже рассказывал:
при этом можно ловить +/- 1 секунду
Спасибо. Как сделать чтобы время было в секундах, до закрытия бара М5. Сейчас отображает Н1.
#property strict#property indicator_chart_window//--- input parameters#define MILLISEC_TIMER_INTERVAL 500int timeOffset;
datetime ServerLocalOffset;
datetime prevTime,myTime,localtime;
bool newBar = false;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- indicator buffers mappingEventSetMillisecondTimer(MILLISEC_TIMER_INTERVAL);
datetime srvtime,tmpOffset;
RefreshRates();
srvtime = TimeCurrent();
// Modified
localtime = TimeLocal()+TimeGMTOffset();
if(TimeHour(srvtime)>TimeHour(localtime)){
// Server Time is still ahead of usint newOffset = TimeHour(srvtime)-TimeHour(localtime);
ServerLocalOffset = (newOffset*60*60);
}elseif(TimeHour(srvtime)<TimeHour(localtime)){
// Server Time is Behind usint newOffset = TimeHour(localtime)-TimeHour(srvtime);
ServerLocalOffset = (newOffset*60*60);
}else{
// No modification required
ServerLocalOffset = srvtime;
}
localtime = TimeLocal()-ServerLocalOffset;
tmpOffset = TimeSeconds(srvtime) - TimeSeconds(localtime);
if(tmpOffset < 30 && tmpOffset >= 0){
timeOffset = TimeSeconds(srvtime) - TimeSeconds(localtime);
}
return(INIT_SUCCEEDED);
}
voidOnDeinit(constint reason)
{
EventKillTimer();
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
//---datetime sec;
datetime localtime;
localtime = TimeLocal()+(TimeGMTOffset()+(60*60));
sec=Time[0]-localtime-timeOffset;
if(sec<=2){Alert("время откр. бара ",Time[0]);}
Comment(TimeToStr(sec,TIME_SECONDS ));
}
//+------------------------------------------------------------------+
Не сам придумал "Только обязательно в OnTimer() делай обновление данных чтобы работал ваш код."
Как нужно?
У вас оффлайн-график?
Подскажите, как получить донные индикатора с таймфрейма, отличного от того, на котором висит сова?
1. Вы зачем птичку повесили? Не жалко?
2. Справку хоть раз открывали? Получить данные индикатора в советнике с любого таймфрейма не представляет никакой проблемы, так как первые два параметра функций получения данных индикатора как раз и служат для указания символа и периода графика, с которых необходимо получать значения.
Ведь даже когда вы набираете код в редакторе, то вам весьма навязчиво открывается список формальных переменных функции - и там во всплывающей подсказке видно - символ и таймфрейм. Странно, что вы не обратили на них внимания.
У вас оффлайн-график?
Нет.
Нет.
Для чего тогда постоянный рефреш без надобности?
Вам нужно время? Время можете получить либо последнего тика: TimeCurrent(), либо последнее локальное время: TimeLocal()
Если будете получать время последнего тика в выходные, то таймер тут не поможет - время будет последнего тика пятницы, ну или последнего тика последнего рабочего дня. А TimeLocal() не даст вам время сервера - нужно пересчитывать со смещением.
Впрочем, я не знаю что именно вы хотите получить в итоге.
1. Вы зачем птичку повесили? Не жалко?
2. Справку хоть раз открывали? Получить данные индикатора в советнике с любого таймфрейма не представляет никакой проблемы, так как первые два параметра функций получения данных индикатора как раз и служат для указания символа и периода графика, с которых необходимо получать значения.
Ведь даже когда вы набираете код в редакторе, то вам весьма навязчиво открывается список формальных переменных функции - и там во всплывающей подсказке видно - символ и таймфрейм. Странно, что вы не обратили на них внимания.
2018.07.04 22:17:38.398 2016.11.10 13:00:00 Arap01 EURUSD,H1: Округляем 44.53781512605145 45.0 Это данные стохастика в "нормальном" режиме. т.е так:
2=iStochastic(NULL,0,K,D,slowing,Average_method,price_field,MODE_MAIN,2);
здесь я прошу М5 2=iStochastic(NULL,5,K,D,slowing,Average_method,price_field,MODE_MAIN,2);
получаю 2018.07.04 22:23:05.680 2016.11.10 13:00:00 Arap01 EURUSD,H1: Округляем 0.0 0.0
Впрочем, я не знаю что именно вы хотите получить в итоге.
Алерт, хочу, за две секунды до закрытия бара. Выходные не буду работать.
Так мне без тика нужен алерт за две секунды до закрытия бара.
Это не сделать просто, нужно запускать более точный таймер (хотя бы 500 мс) и предварительно делать синхронизацию локального времени и серверного.
Вот я вам уже рассказывал:
в момент прихода тика считаем разницу TimeCurrent()-TimeLocal()
(это делается один раз для синхронизации времени локального и серверного)
- это смещение относительно брокера, если это смещение в дальнейшем изменится, значит нужно пересчитывать время заново;
- при старте советника, (или появлении бара Д1) пересчитываем все нужные времена заново, в локальное время, учитывая смещение;
- ждём то что "насчитали" в таймере, попутно проверяя рассинхронизацию, пропадание связи с брокером, перевод локальных стрелок.
Это не сделать просто, нужно запускать более точный таймер (хотя бы 500 мс) и предварительно делать синхронизацию локального времени и серверного.
при этом можно ловить +/- 1 секундуВот я вам уже рассказывал:
Спасибо. Как сделать чтобы время было в секундах, до закрытия бара М5. Сейчас отображает Н1.