[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 270

 
1Rakso >>:

почему сигнал не работает?

хотел задать зону фильтра в пунктах от наибольшего хая, и наименьшего лоу... сигнал не работает что я не так делаю?

Не совсем понял, что вы здесь ищите...

double hi_100 = iHigh(Symbol(),tf_100,iHighest(NULL,tf_100,MODE_HIGH,hibar,n_bar)); //поиск хая наибольшего значения
double lo_100 = iLow (Symbol(),tf_100,iLowest (NULL,tf_100,MODE_LOW,lobar,n_bar)); //поиск лоу наименьшего значения

если максимум и минимум за N-баров, то это ищется вот так

double hi_100 = High[iHighest(Symbol(), tf_100, MODE_HIGH, hibar, 1)];
double lo_100 = Low [iLowest (Symbol(), tf_100, MODE_LOW, lobar, 1)];

где hibar и lobar - количество баров, на которых ищутся максимум и минимум.

     tf_100 - ТаймФрэйм, на котором ищутся макс и мин. 

     1 - поиск начинается с 1 бара, если хотите чтоб и на нулевом баре искалось нужно 0 поставить.

 
Swan >>:


оооой, я дебииил, стыдно до безобразия
 
Dimi >>:

Теперь сам вопрос; Как мне вынести в переменные значение 20 из этого массива?

обявить double Max_array[20]; вне функции (на глобальном уровне), если нужно - то и static

 
alsu >>:

для начала приведите код в логический порядок.

ArraySetAsSeries(Max_array,true) - зачем???

for(c=1; c <= total_c; c++) - массивы индексируются от 0 до total_c-1.

Честно говоря не понял, почему вам логика не понравилась... Здесь ArraySetAsSeries(Max_array,true) Устанавил направление индексирования в массиве. Или что-то не правильно???

 
Dimi >>:

Честно говоря не понял, почему вам логика не понравилась... Здесь ArraySetAsSeries(Max_array,true) Устанавил направление индексирования в массиве. Или что-то не правильно???


это конечно не ошибка, просто с точки зрения логики ненужная строка. ArraySetAsSeries имеет смысл, когда в дальнейшем увеличивается размерность массива (например, на каждам новом баре), тогда новый элемент будет иметь индекс 0. В статическом же случае никакой разницы, в каком порядке в памяти расположены элементы, нет. По поводу второго замечания - в массиве размерности N последний элемент имеет индекс N-1. Правильный код for(c=0; c < total_c; c++)

 
alsu >>:

это конечно не ошибка, просто с точки зрения логики ненужная строка. ArraySetAsSeries имеет смысл, когда в дальнейшем увеличивается размерность массива (например, на каждам новом баре), тогда новый элемент будет иметь индекс 0. В статическом же случае никакой разницы, в каком порядке в памяти расположены элементы, нет. По поводу второго замечания - в массиве размерности N последний элемент имеет индекс N-1. Правильный код for(c=0; c < total_c; c++)

Спасибо теперь понял ошибку. Но вот с этим double Max_array[20]; пока не доходит до меня... Объясню не много по другому. В данной функции ищется максимальное значение РСИ на последних 20 барах. Мне надо, чтоб это максимальное значение искалось на том количестве баров, которое будет рассчитываться другой функцией. То есть на каждом новом баре это количество расчётных баров будет меняться. Может быть 10, может стать 20 или 30.... Вот как это в коде реализовать??? Функция по расчёту баров готова, как её теперь вставить вместо этого числа 20 в этом массиве double Max_array[20]; ????

 
Dimi >>:

Спасибо теперь понял ошибку. Но вот с этим double Max_array[20]; пока не доходит до меня... Объясню не много по другому. В данной функции ищется максимальное значение РСИ на последних 20 барах. Мне надо, чтоб это максимальное значение искалось на том количестве баров, которое будет рассчитываться другой функцией. То есть на каждом новом баре это количество расчётных баров будет меняться. Может быть 10, может стать 20 или 30.... Вот как это в коде реализовать??? Функция по расчёту баров готова, как её теперь вставить вместо этого числа 20 в этом массиве double Max_array[20]; ????


очень просто:

double IsMaxRSI(int total_c) {
   ...
   double Max_array[];  
   ArrayResize(Max_array, total_c);
   ...
}
виноват, код куда-то выпал
 
Dimi >>:

Не совсем понял, что вы здесь ищите...

double hi_100 = iHigh(Symbol(),tf_100,iHighest(NULL,tf_100,MODE_HIGH,hibar,n_bar)); //поиск хая наибольшего значения
double lo_100 = iLow (Symbol(),tf_100,iLowest (NULL,tf_100,MODE_LOW,lobar,n_bar)); //поиск лоу наименьшего значения

если максимум и минимум за N-баров, то это ищется вот так

double hi_100 = High[iHighest(Symbol(), tf_100, MODE_HIGH, hibar, 1)];
double lo_100 = Low [iLowest (Symbol(), tf_100, MODE_LOW, lobar, 1)];

где hibar и lobar - количество баров, на которых ищутся максимум и минимум.

tf_100 - ТаймФрэйм, на котором ищутся макс и мин.

1 - поиск начинается с 1 бара, если хотите чтоб и на нулевом баре искалось нужно 0 поставить.

спасибо попробую Ваш вариант, насчет баров я искал от 50 до 100 баров уровень, вот и вывел их во внешние для оптимизации.

спасибо нашел где ошибка я масив тф в глобальные переменные не вставил, и в расчете тф во внешних переменных ставил значение по очередности тф))))

extern int tf_100  =   3; //)))

int tf[10]={0,1,5,15,30,60,240,1440,10080,43200};//массив таймфрейма забыл его вставить)))

double hi_100 = High[iHighest(Symbol(), tf[tf_100], MODE_HIGH, hibar, 1)];
double lo_100 = Low [iLowest (Symbol(), tf[tf_100], MODE_LOW, lobar, 1)];

да туплю не по детски, элементарные вещи вроде......

 
alsu >>:

очень просто:

Огромное спасибо!!! Вроде заработало!!! 

Прям как часики работает, ещё раз спасибо!!! Действительно просто было.
 

Друзья, добрый день.


Если Вам будет несложно, подскажите, как решать подобные сложности:


Пишу одного из первых советников, и столкнулся с такими затруднениями:


1) Можно ли "различать ордера" на одну и ту же валюту, но совершенные на разных TF?

(например, я торгую советником на одной и той же валютной паре, на H4 и M30... Совершил сделку на H4, и индикаторы показывают продолжение движения на данном TF, но данная сделка закрылась из-за появления сигнала на закрытие на M30. причем в советнике "использование данных с нескольких TF" не предусмотрено...)

тоесть, можно ли мне было как-то программно различить эти сделки на H4 и M30?


2) При написании советника, посетила очевидная мысль :) "Сигналы на закрытие позиции, и сигналы на открытие противоположной позиции реверсом" - не всегда хороши....

зачастую, значительная часть прибыли теряется до формирования противоположного сигнала...

поэтому решил использовать трейлинг-стоп, а цель формировать по фибоначчи.


Подскажите пожалуйста, как можно программно (в советнике) задать цель - ориентир на определенный уровень фибоначчи при выставлении ордеров на сделку?


3) есть такой индикатор: BrainTrend1StopN. Подскажите, пожалуйста, как "подтягивать" стопы на уровень "точек" продуцируемых этим индикатором.


Заранее огромное спасибо.
Файлы:
Причина обращения: