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

 

Пару дней назад скачал советник "e-MoveSLTPbyMouse" (спасибо Granit) и опробывал его на торговой платформе Broco, работает прекрасно. Сегодня решил применить советник с IBFX и увидел, что эксперт не работает...???... Появилась какая-то дополнительная линия, которая "отскакивала " от цены, потом рынок успешно прошёл Стоп-лосс линию и мне пришлось вручную закрыть позицию с небольшим убытком. Может есть какие - нибудь мысли по этому поводу? Что можно сделать, что бы советник работал с IBFX? Или возможно есть, что-то подобное у кого-нибудь в арсенале?

Ещё один вопрос. У меня есть советник, который открывает позиции с помощью горизонтальных линий, но к сожалению, открывает только 3-4 пипса от назначеной цены. Например, я ставлю линию на SELL по цене 1.4018 с 1 пипсом на пробой (EUR), а позиция окрылась по цене 1.4015, т.е. проскочил на 2 пипса. На GBP проскакивает 3 пипса. Возможно у кого - нибудь есть подобный советник, но который бы работал нормально. Буду очень благодарен.

Выкладываю этот советник, может кому и пригодиться.

Файлы:
 

Господа эксперты, хочу использовать в советнике скользящую по скользящей.

при наложении скользящей на график вручную параметр применить к можно прописать как previous indicator's data, а как в советнике это сделать?

вроде логично функцию OnArray применить, только непонятно где взять массив с данными первой МА, просвятите плииз, или киньте ссылку на подобную конструкцию, или саму конструкцию, если есть.

Например надо так: если первая МА(21) выше второй МА(21)(построеной на первой МА) то..................

и еще такой вопрос: если в советнике присутствует вызов функции: iMA(0,0,250,0,1,0,0), то он каждый тик будет у этих 250 баров брать close, складывать их и делить на 250?! НАКЛАДНО однако, наверно не так. А если по не еще одну скользящую считать то цена уже уйдет... Просвятите пожалуйста.



 
mukata писал(а) >>

Господа эксперты, хочу использовать в советнике скользящую по скользящей.

при наложении скользящей на график вручную параметр применить к можно прописать как previous indicator's data, а как в советнике это сделать?

вроде логично функцию iMAOnArray применить, только непонятно где взять массив с данными первой МА, просвятите плииз, или киньте ссылку на подобную конструкцию, или саму конструкцию, если есть.

Например надо так: если первая МА(21) выше второй МА(21)(построеной на первой МА) то..................

и еще такой вопрос: если в советнике присутствует вызов функции: iMA(0,0,250,0,1,0,0), то он каждый тик будет у этих 250 баров брать close, складывать их и делить на 250?! НАКЛАДНО однако, наверно не так. А если по не еще одну скользящую считать то цена уже уйдет... Просвятите пожалуйста.

Проще всего индикатор сделать.

 
Vinin >>:

Проще всего индикатор сделать.

Пусть индикатор, где массив данных взять? Конструкцию намекните пожалуйста, в учебнике нет...

А второй вопрос?

 
mukata писал(а) >>

Пусть индикатор, где массив данных взять? Конструкцию намекните пожалуйста, в учебнике нет...

А второй вопрос?

По второму вопросу. Все зависит только от реализации. Можно самому машку считать оптимизируя код. МОжно делать расчет только по открытию бара. Вариантов много.

Но оптимальный вариант - использовать индикатор. В котором производятся все расчеты, а советник только уже считывает их (расчетные значения).

Во вложении пример индикатора

Индикатор поменял

Файлы:
 
Vinin >>:

По второму вопросу. Все зависит только от реализации. Можно самому машку считать оптимизируя код. МОжно делать расчет только по открытию бара. Вариантов много.

Но оптимальный вариант - использовать индикатор. В котором производятся все расчеты, а советник только уже считывает их (расчетные значения).

1) "Можно самому машку считать оптимизируя код" - эту строку я не понял. Я так понимаю: на каждом тике вызывается start, и если есть вызов функции iMA(0,0,250,0,1,0,0), то он каждый раз будет эти 250 баров складывать и делить. А если создать индикатор правильно то будет считать только последний бар, а последний параметр shift,будет из массива считывать. Правильно?

2) А где массив то взять для создания второй МА?

 
mukata >>:

2) А где массив то взять для создания второй МА?


Ну точно! Я стормозил, в индикаторе массив со значениями МА создается же...

Огромное спасибо.

 
mukata писал(а) >>

1) "Можно самому машку считать оптимизируя код" - эту строку я не понял. Я так понимаю: на каждом тике вызывается start, и если есть вызов функции iMA(0,0,250,0,1,0,0), то он каждый раз будет эти 250 баров складывать и делить. А если создать индикатор правильно то будет считать только последний бар, а последний параметр shift,будет из массива считывать. Правильно?

2) А где массив то взять для создания второй МА?

1. Все зависит от реализации. Существуют оптимальные методы расчета. iMa() использует свой алгоритм расчета. В CodeBase они есть. Поэтому при использовании работает механизм расчета, который от тебя скрыт. Ты получаешь только результат. И расчет будет производиться каждый тик.

2. Я индикатор выложил специально, что бы можно было можно разобраться с массивами.

 
Vinin >>:

1. Все зависит от реализации. Существуют оптимальные методы расчета. iMa() использует свой алгоритм расчета. В CodeBase они есть. Поэтому при использовании работает механизм расчета, который от тебя скрыт. Ты получаешь только результат. И расчет будет производиться каждый тик.

2. Я индикатор выложил специально, что бы можно было можно разобраться с массивами.

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

на счет первого вопроса:

У меня в советнике к примеру (не МА, но тоже встроенная функция):

//пересекла ли главная линия стохастика сигнальную линию сверху вниз
if(iStochastic(Symbol(),0,KperiodF,DperiodF,SlowlingF,methodF,PriceFieldF,0,shiftF)>
iStochastic(Symbol(),0,KperiodF,DperiodF,SlowlingF,methodF,PriceFieldF,1,shiftF)&&
iStochastic(Symbol(),0,KperiodF,DperiodF,SlowlingF,methodF,PriceFieldF,0,0)<
iStochastic(Symbol(),0,KperiodF,DperiodF,SlowlingF,methodF,PriceFieldF,1,0)
){
//и обе линии ниже 90
if(iStochastic(Symbol(),0,KperiodF,DperiodF,SlowlingF,methodF,PriceFieldF,0,0)<90&&
iStochastic(Symbol(),0,KperiodF,DperiodF,SlowlingF,methodF,PriceFieldF,1,0)<90
){
//и выше 50
if(iStochastic(Symbol(),0,KperiodF,DperiodF,SlowlingF,methodF,PriceFieldF,0,0)>50&&
iStochastic(Symbol(),0,KperiodF,DperiodF,SlowlingF,methodF,PriceFieldF,1,0)>50
)
fl=1;return(fl);//продать
}
}

это он на каждой строке считать его будет?

Или надо написать индикатор, и из его массивов значения брать и сравнивать, или как-то еще. Чтоб быстрей работал.

 
mukata писал(а) >>

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

на счет первого вопроса:

У меня в советнике к примеру (не МА, но тоже встроенная функция):

//пересекла ли главная линия стохастика сигнальную линию сверху вниз
if(iStochastic(Symbol(),0,KperiodF,DperiodF,SlowlingF,methodF,PriceFieldF,0,shiftF)>
iStochastic(Symbol(),0,KperiodF,DperiodF,SlowlingF,methodF,PriceFieldF,1,shiftF)&&
iStochastic(Symbol(),0,KperiodF,DperiodF,SlowlingF,methodF,PriceFieldF,0,0)<
iStochastic(Symbol(),0,KperiodF,DperiodF,SlowlingF,methodF,PriceFieldF,1,0)
)

это он на каждой строке считать его будет?

Или надо написать индикатор, и из его массивов значения брать и сравнивать, или как-то еще. Чтоб быстрей работал.

Сперва лучше рассчитать значения стохастика и сигнальной линии. А потом уже сравнивать. Мне просто такой стиль не нравится. Слепой какой-то получается. Да и ошибиться легче.

if() в варианте метаквотов делает полный расчет логического выражения. Желательно его делать максимально простым. Просто if() - одна из медленных операций.

Еще есть такое понятие как "дребезг" на нулевом баре. Возможны случаи, когда сигнал будет повторяться на одном баре не один раз. И даже может не закрепиться. Был ложный. Поэтому стараются брать значения со сформированных баров. Но тогда просится работа по ценам открытия. Хотя варианты могут быть и другие.

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