iVolume и Volume

Сообщайте о возможных ошибках в программе.
Ответить
Сообщение
Автор
Rmax
Сообщения: 29
Зарегистрирован: Пт июл 27, 2007 4:05 pm

iVolume и Volume

#1 Сообщение Rmax » Вс ноя 25, 2007 11:15 pm

вызов Volume() и Symbol() в теле индикатора вызывает exception. Вызов iVolume("EURUSD", Timeframe(), index) - всегда возвращает 0. В чем проблема?

Аватара пользователя
Terranin
Site Admin
Сообщения: 846
Зарегистрирован: Вс июл 23, 2006 12:01 pm

Re: iVolume и Volume

#2 Сообщение Terranin » Пн ноя 26, 2007 3:52 am

Rmax писал(а):вызов Volume() и Symbol() в теле индикатора вызывает exception. Вызов iVolume("EURUSD", Timeframe(), index) - всегда возвращает 0. В чем проблема?
Код надо посмотреть.
Asta la vista
Mike

Rmax
Сообщения: 29
Зарегистрирован: Пт июл 27, 2007 4:05 pm

#3 Сообщение Rmax » Пн ноя 26, 2007 7:20 pm

Код: Выделить всё

EXPORT void __stdcall Calculate(int index)
{
	//SetCurrencyAndTimeframe("EURUSD", Timeframe());
	int    i,j,nCountedBars;
    double dPositiveMF,dNegativeMF,dCurrentTP,dPreviousTP;
	//---- insufficient data
    if(Bars()<=ExtMFIPeriod) return;
	
	if (index < Bars() - ExtMFIPeriod-1)
	{
		dPositiveMF=0.0;
		dNegativeMF=0.0;
		dCurrentTP=(High(index)+Low(index)+Close(index))/3;
		for(j=0; j<ExtMFIPeriod; j++)
		{
			char buffer[100];
			sprintf(buffer, "index: %d, j: %d, Bars: %d, Volume: %d, Symbol: , Timeframe:%d ", index, j, Bars(), iVolume("EURUSD", Timeframe(), index), (int)Timeframe());
			Print(buffer);
		    dPreviousTP=(High(index+j+1)+Low(index+j+1)+Close(index+j+1))/3;
			/*Print("1");*/
			 if(dCurrentTP>dPreviousTP)
			 
				dPositiveMF+=iVolume(Symbol(), Timeframe(), index+j)*dCurrentTP;
			 else
			   {
				if(dCurrentTP<dPreviousTP)
					dNegativeMF+=iVolume(Symbol(), Timeframe(), index+j)*dCurrentTP;
			   }
			 //Print("2");
			  dCurrentTP=dPreviousTP;      
		     //Print("3");
		}
		//----
		if(dNegativeMF!=0.0)      
		 ExtMFIBuffer[index]=100-100/(1+dPositiveMF/dNegativeMF);
		else
		 ExtMFIBuffer[index]=100;
	}

	
}

Аватара пользователя
Terranin
Site Admin
Сообщения: 846
Зарегистрирован: Вс июл 23, 2006 12:01 pm

#4 Сообщение Terranin » Пн ноя 26, 2007 7:57 pm

Скинь плиз откомпиллированный длл чтобы я посмотрел где в программе возникают проблемы.

Я проверил, под Дельфи этот код отлично работает:

procedure Calculate(index: integer); stdcall;
begin
Print(Symbol + ', ' + FloatToStrF(iVolume(Symbol, Timeframe, 0), ffFixed, 10, 0));
vol[index] := volume(index);
end;
Asta la vista
Mike

Rmax
Сообщения: 29
Зарегистрирован: Пт июл 27, 2007 4:05 pm

#5 Сообщение Rmax » Вт ноя 27, 2007 1:29 am

В аттаче - индюк
Вложения
MFI.rar
(39.75 КБ) 1083 скачивания

Rmax
Сообщения: 29
Зарегистрирован: Пт июл 27, 2007 4:05 pm

#6 Сообщение Rmax » Ср ноя 28, 2007 8:03 pm

Нет новостей?
А то у меня кастомер копытом бьет, индюк хочет

Аватара пользователя
Terranin
Site Admin
Сообщения: 846
Зарегистрирован: Вс июл 23, 2006 12:01 pm

#7 Сообщение Terranin » Ср ноя 28, 2007 10:10 pm

iVolume как и Volume возвращает результат double а не int. У тебя процедура печати не то выдает а может и глючит. За что я и ненавижу С++ так за такое западло с типами которое потом долго искать приходится. Сами процедуры отработали корректно.
Asta la vista
Mike

Rmax
Сообщения: 29
Зарегистрирован: Пт июл 27, 2007 4:05 pm

#8 Сообщение Rmax » Чт ноя 29, 2007 4:19 am

Вот это я знатно затупил :)
Спасибо!

C# форева!

Ответить