Перерисовка стандартных индикаторов?! - страница 4

 
конечно...
вот данные из файлов


а вот этот бар на графике


причем это не единственный случай, это всего лишь один пример из множества.
все эти бары имеют отношение к "воскресным" барам.
 
а вот он же в архиве котировок
 
А Вам не показалось странным, что на четрыехчасовках присутствует бар со временем открытия 23-00?
 
причем он явно лишний, так как есть 20:00 и 00:00, все как я и предполагал в своем первом посте в этой ветке,
но вот то , что на нем нельзя спозиционировать объект (построить линию), наверное еще что-то с базой котировок, если считаешь что она нужна, попробуй сначала ее прибить, а потом ручками добавить
 
Прочитал про восресные бары. Возможно (для индикатора), дело в функции iBarShift()

int iBarShift( string symbol, int timeframe, datetime time, bool exact=false)
Поиск бара по времени. Функция возвращает смещение бара, которому принадлежит указанное время. Если для указанного времени бар отсутствует ("дыра" в истории), то функция возвращает, в зависимости от параметра exact, -1 или смещение ближайшего бара.

Параметры:
symbol - Символьное имя инструмента. NULL означает текущий символ.
timeframe - Период. Может быть одним из периодов графика. 0 означает период текущего графика.
time - Значение времени для поиска.
exact - Возвращаемое значение если бар не найден. FALSE - iBarShift возвращает ближайший. TRUE - iBarShift возвращает -1.

Пример:
datetime some_time=D'2004.03.21 12:00';
int shift=iBarShift("EUROUSD",PERIOD_M1,some_time);
Print("shift of bar with open time ",TimeToStr(some_time)," is ",shift);




Я постараюсь глянуть на котировках MiG, попозже.
 
На предыдущей странице мне этот вопрос уже задавали. :о)
Нет, не показалось.
Это обычный "воскресный" бар, и он действительно открывается в 23:00. А например, у FIBO "воскресные" бары начинаются в 22:00.
 
Проверил, все подтвердилось.Правда, мне все же удалось установить линию в нужном месте. Для этого я сначала переключился на часовки. Думаю, при установке объекта всегда ищется ближайший бар с точностью до Period() минут.

 
Окончательный вариант индикатора, использующего вторую валюту.
Учтены как разное время прихода баров, так и пропуски в истории.
Критика приветствуется.

#property copyright "Copyright Quark"
#property link      ""

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Lime

// indicator parameters
extern int nPeriod = 6;

double arrOpen[];

int nExtCountedBars = 0;

int nBars;
int nBarsUsdChf;

////////////////////////
int init()
{
	nBars = 0;
	nBarsUsdChf = 0;

	string strIndicatorShortName = "Test_1(" + Symbol() + " " + nPeriod + ")";  
	IndicatorShortName(strIndicatorShortName);

	// drawing settings
	SetIndexStyle(0, DRAW_LINE);
	SetIndexShift(0, 0);

	IndicatorDigits(4);
		
	// indicator buffers mapping
	SetIndexBuffer(0, arrOpen);
		
	return(0);
}
///////////////////////////
int start()
{
	if(Bars <= nPeriod) 
		return(0);
		
	if(nBars == Bars || nBarsUsdChf == iBars("USDCHF", 0))
		return(-1);

	int nPos = Bars - nBars;
	
	int nPosUsdChf = nPos;
	
	nBars = Bars;
	nBarsUsdChf = iBars("USDCHF", 0);
		
	while(nPos >= 0)
	{
		// Adjust nPosUsdChf, so that time is the same as in EURUSD
		// If Time(USDCHF) < Time(EURUSD), decrease nPosUsdChf
		while(nPosUsdChf > 0 &&
			TimeDay(Time[nPosUsdChf]) < TimeDay(Time[nPos]) ||		// Yerterday vs. Today
			(TimeDay(Time[nPosUsdChf]) == TimeDay(Time[nPos]) &&		// Same day
				TimeHour(Time[nPosUsdChf]) < TimeHour(Time[nPos])))
			nPosUsdChf--;

		// Now, if Time(USDCHF) > Time(EURUSD), increase nPosUsdChf
		while(nPosUsdChf < Bars &&
			TimeDay(Time[nPosUsdChf]) > TimeDay(Time[nPos]) ||		// Yerterday vs. Today
			(TimeDay(Time[nPosUsdChf]) == TimeDay(Time[nPos]) &&		// Same day
				TimeHour(Time[nPosUsdChf]) > TimeHour(Time[nPos])))
			nPosUsdChf++;

		arrOpen[nPos] = iOpen("USDCHF", 0, nPosUsdChf);

		nPos--;
		nPosUsdChf--;
	}

	return(0);
}


 
Дурацкий вопрос: а для чего нужна переменная "nPeriod" кроме как красоваться в названии? ;о)
 
Дурацкий вопрос: а для чего нужна переменная "nPeriod" кроме как красоваться в названии? ;о)


Э... Просто там была МА, а потом я ее убрал. Но не до конца :)
Причина обращения: