Безобразнейшая бажина с передачей NULL в пользовательскую функцию

 
Если NULL передавать в свою функцию, он перестает быть NULL и становится неизвестно чем, что в проявляется в невосприятии этого неизвестно чего функциями типа Lowest. В итоге все вроде бы нормально, но ничего не работает - 1 час убитого времени.

void testSeek() {
	int lowI = Lowest(Symbol(), Period(), MODE_LOW, 10, 0);
	double lowP = iLow(Symbol(), Period(), lowI);
	
	int lowI2 = Lowest(NULL, 0, MODE_LOW, 10, 0);
	double lowP2 = iLow(NULL, 0, lowI2);
	
	double lowP3 = lowestLowTest(Symbol(), 0, 0, 10);
	double lowP4 = lowestLowTest(NULL, 0, 0, 10);

	string strNull = NULL;			
	Print("lowI=" + lowI + " lowP="+ lowP + " lowI2=" + lowI2 + 
	" lowP2=" + lowP2 + " lowP3=" + lowP3 + " lowP4=" + lowP4);
}

double lowestLowTest(string symbol, int period, int offset, int len) {
	int index = Lowest(symbol, period, MODE_LOW, len, offset);
	if (index < 0)
		Print("!!! index=" + index + " symbol=" + symbol + " period=" + period + 
		" offset=" + offset + " len=" + len);
	return (iLow(symbol, period, index));
}



Вставляем в любой скрипт и имеем вывод:

Test GBPUSD,M15: lowI=9 lowP=1.75270000 lowI2=9 lowP2=1.75270000 lowP3=1.75270000 lowP4=0.00000000
Test GBPUSD,M15: !!! index=-1 symbol=0 period=0 offset=0 len=10



Доколе?

 
обсуждали уже, что NULL это всего лишь 0. и если он будет передан в качестве строкового параметра, то перед этим будет преобразован в строку "0". не используйте NULL вместо строки в своих функциях. почему бы Вам не передать Symbol(), ведь Вы хотите передать текущий символ?
 
обсуждали уже, что NULL это всего лишь 0.

Может и обсуждали, в документации я этого не видел и считал, что вправе передавать NULL, как обычный параметр.

почему бы Вам не передать Symbol(), ведь Вы хотите передать текущий символ

Я раньше всегда передавал Symbol(), но думаю в целях снижения нагрузки на процессор и память при отптимизации, где каждая секунда важна, попробую передавать NULL. Я даже не мог предположить, что NULL у вас в строку конвертируется, я привык что null специальное значение, ссылка в никуда, как в java. Такие особенности реализации надо обязательно в документации крупным шрифтом на первой странице печатать IMHO.
 
NULL - это всегда 0 (я даже где-то на форуме приводил цитату из стандартного AFX.H) . в старых 16-битных компиляторах это был 0L (то есть 32-битный 0)
а у нас нет адресной арифметики, зато есть неявные преобразования типов.
 
В большинстве примеров вместо Symbol() в индикаторы и функции у вас передается NULL. И все работает. Поэтому проблема IMHO не в том, что NULL это 0, а в том что с вашими функциями этот подход работает, а с функциями экспертов - нет. Интуитивно непонятно => неудобно.
Причина обращения: