ForTorg:
Приветствую. Требуется помощ. Пытаюсь написать подпрограмму чтоб она записывала в массив цену и номер бара первых 10 фракталов.
Что бросилось в глаза:
- нумерация в массивах - с нуля. Т.е. "int l=0;" и "int h=0;", соответственно, "if(hk[0]<lk[0])"
- количество элементов - 10. Почему тогда используем count = 9?
- распечатайте, что получается в результате выполнения этой операции: "h=h++;". Из-за этого и не записывается ничего, кроме первого элемента массива (и последним туда записывается последний найденный фрактал на баре №147)
- если l и h стали = 9, цикл нужно прервать.
Как-то так. В остальном, должно работать ;)
komposter:
Что бросилось в глаза:
- нумерация в массивах - с нуля. Т.е. "int l=0;" и "int h=0;", соответственно, "if(hk[0]<lk[0])"
- количество элементов - 10. Почему тогда используем count = 9?
- распечатайте, что получается в результате выполнения этой операции: "h=h++;". Из-за этого и не записывается ничего, кроме первого элемента массива (и последним туда записывается последний найденный фрактал на баре №147)
- если l и h стали = 9, цикл нужно прервать.
Как-то так. В остальном, должно работать ;)
по первым двум пунктам... у меня int l=1; int h=1; запись начинается с 1 ячейки в массиве. Вот и выходит что 0 свободна. с 1 по 9 пишем. hk[1]<lk[1] так мне проще воспринимать код. Как то не очень звучит "нулевой фрактал", а вот "первый фрактал" самое то :-) И того сохраняем 9 нижних и 9 верхних фракталов.
"h=h++;" А тут я протупил... должно быть h++;
цикл остановил так if ( l==count && h==count) break;
Спасибо за помощ. Все работает.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Приветствую. Требуется помощ. Пытаюсь написать подпрограмму чтоб она записывала в массив цену и номер бара первых 10 фракталов.
Чтоб потом с ними можно было работать типа так:
{
A=hi[1]; B=lo[1];
Ak=hk[1];Bk=lk[1];
}
Вот код MT4.. работает неправильно. я читал что в массиве первый записанный элемент хранится в конце. Вот у меня и получается что в hk[1] значение 147 а должно быть 3. При этом он даже сигналы рисует на графике с отстованием около 147 баров. Как сделать правильно?
// Определяем наличие фракталов на 3 свече
double fractalUp = iCustom( _Symbol, _Period, globIndName, 0, 3 ); // Значение фрактала вверх на 3 свече
double fractalDn = iCustom( _Symbol, _Period, globIndName, 1, 3 ); // Значение фрактала вниз на 3 свече
if(fractalUp==EMPTY_VALUE && fractalDn==EMPTY_VALUE) // Если оба фрактала отсутствуют
return(-1); // возвр. -1
double lo[10]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; // Массив - буфер фракталов вниз
double hi[10]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; // Массив - буфер фракталов вверх
int lk[10]={0,0,0,0,0,0,0,0,0,0}; // Массив - буфер фракталов вниз
int hk[10]={0,0,0,0,0,0,0,0,0,0}; // Массив - буфер фракталов вверх
if(fractalUp!=EMPTY_VALUE || fractalDn!=EMPTY_VALUE)
CheckFractal( PERIOD_CURRENT,9,lo,hi,lk,hk);
Print(__FUNCTION__," hk1 = ",hk[1],", hi1 = ",hi[1],", lk1 = ",lk[1],
", lo1 = ",lo[1]);
//+------------------------------------------------------------------+
//| Ищем и заносим в массив данные по фракталам |
//+------------------------------------------------------------------+
void CheckFractal(const ENUM_TIMEFRAMES period,// Используемый ТФ
const int count,// Сколько копировать элементов
double &lo[],// Массив - буфер фракталов вниз (цены)
double &hi[], // Массив - буфер фракталов вверх (цены)
int &lk[], // Массив - буфер фракталов вниз (бары)
int &hk[] // Массив - буфер фракталов вверх (бары)
)
{
const int stop=150;
int l=1;
int h=1;
for(int i=3; i<stop; i++) // Цикл поиска фрактала (начиная с 3 свечи)
{
double fractalUp=iCustom(_Symbol,_Period,globIndName,0,i); // Значение фрактала верх на i свече
double fractalDn=iCustom(_Symbol,_Period,globIndName,1,i); // Значение фрактала вниз на i свече
if(fractalUp==EMPTY_VALUE && fractalDn==EMPTY_VALUE) continue; // Если фрактал не найден - переход. к след. свече
if(fractalUp!=EMPTY_VALUE && h<count)
{
hi[h]=NormalizeDouble( fractalUp,_Digits);
hk[h]=i;
h=h++;
}
if(fractalDn!=EMPTY_VALUE && l<count)
{
lo[l]=NormalizeDouble( fractalDn,_Digits);
lk[l]=i;
l=l++;
}
}
}