Бета-тестирование MetaTrader 5 началось! - страница 103

 

MetaDriver писал(а) >>

Однако не работает. Знак процентов не выводится, а иногда и вся строка в которой есть "%%".

Так наверное: "\%"

 
//       FileWriteArray(h,toPlot,0,CalcWindow);                   //  НЕ  РАБОТАЕТ
   
for (long i=CalcWindow-1; i>=0; i--) { FileWriteDouble(h,toPlot[i]); }   //  Работает как часы

FileWriteArray(....) не работает. Файл пишется, но в нём нули.

 
TheXpert писал(а) >>

Так наверное: "\%"

Неа. Попробовано. Данная комбинация выводит пробел.

 
arbuz >>:

Почему я не могу получить значения индикатора ZigZag?


Вот так Ваш шедевр работать будет...

Файлы:
 
Щас порыпался ещё. printf(" %C ", char(37)) - такая же хрень как и при "%%", т.е. похоже парсер отрабатывает правильно, ошибка где то дальше, ближе к выводу на экран. Короче, вывод символа процента полностью подавлен, не помогают никакие заклинания. :)
 
betmen >>:

Вот так Ваш шедевр работать будет...

Про Sleep(10); даже и в мыслях не было, в справке не слова об этом, большое спасибо 

 
MetaDriver писал(а) >>

Неа. Попробовано. Данная комбинация выводит пробел.

Спасибо. Ошибку нашли. В следующем билде %% будет правильно выводиться

 
arbuz >>:

Про Sleep(10); даже и в мыслях не было, в справке не слова об этом, большое спасибо

Смотрите функцию BarsCalculated:

BarsCalculated

Возвращает количество рассчитанных данных для запрашиваемого индикатора.

int BarsCalculated(
int indicator_handle, // handle индикатора
);

Параметры

indicator_handle

[in] Хэндл индикатора, полученный соответствующей индикаторной функцией.

Возвращаемое значение

Возвращает количество рассчитанных данных в индикаторном буфере или -1 в случае ошибки (данные еще не рассчитаны).

Примечание

Функция полезна в тех случаях, когда необходимо получить данные индикатора сразу после его создания (получения хендла индикатора).

Пример:

void OnStart()
{
double Ups[];
//--- установим для массивов признак таймсерии
ArraySetAsSeries(Ups,true);
//--- создадим хэндл индикатора Fractals
int FractalsHandle=iFractals(NULL,0);
//--- сбросим код ошибки
ResetLastError();
//--- попытаемся скопировать значения индикатора
int i,copied=CopyBuffer(FractalsHandle,0,0,1000,Ups);
if(copied<=0)
{
Sleep(50);
for(i=0;i<100;i++)
{
if(BarsCalculated(FractalsHandle)>0)
break;
Sleep(50);
}
copied=CopyBuffer(FractalsHandle,0,0,1000,Ups);
if(copied<=0)
{
Print("Не удалось скопировать верхние фракталы. Error =",GetLastError(),
"i=",i," copied=",copied);
return;
}
else
Print("Удалось скопировать верхние фракталы.",
"i=",i," copied=",copied);
}
else Print("Удалось скопировать верхние фракталы. ArraySize =",ArraySize(Ups));
}

 
arbuz >>:

Про Sleep(10); даже и в мыслях не было, в справке не слова об этом, большое спасибо

Более того время задержки варьируется в зависимости от быстродействия компьютера... :-)

Рашид писал как корректно обращаться к данным индикаторов и проверять доступное число баров в истории для инструментов.

здесь и здесь.

 
stringo писал(а) >>

Спасибо. Ошибку нашли. В следующем билде %% будет правильно выводиться

Ок!!

Причина обращения: