Jump to content
Andrew777

Напишу индикатор, советника... (БЕСПЛАТНО)

Recommended Posts

alexvv
#property indicator_buffers N

.....

IndicatorBuffers(N);

 

Вместо N укажите число используемых буферов (не более 8 )

 

P.S.

В вашем случае их 5

Вроде получилось!

Надо было смотреть в буферах не нулевой бар, а предыдущий. (как бы не получить лишнее запаздывание).

Теперь кратковременно появляется цена. А остальное время число 2147483647.

 

Хотелось бы разобраться, что это за число, и почему не нуль. Ведь мы инициализируем нулями при каждом тике.

Просветите пожалуйста.

Share this post


Link to post
Share on other sites
Circle
Вроде получилось!

Надо было смотреть в буферах не нулевой бар, а предыдущий. (как бы не получить лишнее запаздывание).

Теперь кратковременно появляется цена. А остальное время число 2147483647.

 

Хотелось бы разобраться, что это за число, и почему не нуль. Ведь мы инициализируем нулями при каждом тике.

Просветите пожалуйста.

 

Тоже сталкивался с таким это говорит о том что массив не инициализирован.

...

У вас в функции старт написано buf3[0]=0; buf4[0]=0;

Вы инициализируете только нулевой индекс массива.

Попробуйте так:

после строк указанных ниже напишите buf3=0; buf4=0;

for(i=limit; i>=0; i--)

{

int y = iBarShift(NULL,timeFrame,Time);

rsi = iCustom(NULL,timeFrame,indicatorFileName,"calculate",RsiPeriod,MaType,MaPeriod,0,y);

ema = iCustom(NULL,timeFrame,indicatorFileName,"calculate",RsiPeriod,MaType,MaPeriod,1,y);

.....

 

Еще можно использовать функцию ArrayInitalize();


Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
alexvv
Тоже сталкивался с таким это говорит о том что массив не инициализирован.

...

У вас в функции старт написано buf3[0]=0; buf4[0]=0;

Вы инициализируете только нулевой индекс массива.

Попробуйте так:

после строк указанных ниже напишите buf3=0; buf4=0;

for(i=limit; i>=0; i--)

{

int y = iBarShift(NULL,timeFrame,Time);

rsi = iCustom(NULL,timeFrame,indicatorFileName,"calculate",RsiPeriod,MaType,MaPeriod,0,y);

ema = iCustom(NULL,timeFrame,indicatorFileName,"calculate",RsiPeriod,MaType,MaPeriod,1,y);

.....

 

Еще можно использовать функцию ArrayInitalize();

Спасибо.

Работают оба варианта.

С ArrayInitialize() мне показолось нагляднее.

Вот только нулевой индекс неизменно выдает "0". Пока трудно определить, дает это мне дополнительную задержку или нет, так как

при запущенном советнике на графике присутствует индикатор. Никто его туда не приглашал. И выглядит он криво - новые стрелки какое-то время то появляются, то исчезают. Хотя сигнал приходит нормально.

Не критично, но неприятно.

Пока не знаю, как от этого избавиться.

 

2 147 483 647 - это наибольшее число, которое вмещает 32-битный знаковый целый тип данных signed int32 (Википедия).

Share this post


Link to post
Share on other sites
Circle
Спасибо.

Работают оба варианта.

С ArrayInitialize() мне показолось нагляднее.

Вот только нулевой индекс неизменно выдает "0". Пока трудно определить, дает это мне дополнительную задержку или нет, так как

при запущенном советнике на графике присутствует индикатор. Никто его туда не приглашал. И выглядит он криво - новые стрелки какое-то время то появляются, то исчезают. Хотя сигнал приходит нормально.

Не критично, но неприятно.

Пока не знаю, как от этого избавиться.

 

2 147 483 647 - это наибольшее число, которое вмещает 32-битный знаковый целый тип данных signed int32 (Википедия).

 

Нулевой индекс это текущий бар который еще не закрыт.

То есть цена Close Это бара при поступлении нового тика постоянно меняется, и соответственно значение индикатора на этом баре постоянно пересчитывается.


Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
alexvv
Нулевой индекс это текущий бар который еще не закрыт.

То есть цена Close Это бара при поступлении нового тика постоянно меняется, и соответственно значение индикатора на этом баре постоянно пересчитывается.

Я это знаю.

 

Как-то наблюдал в этом индикаторе, как он ставит стрелку, а потом её передвигает, пока бар не закроется. (Возможно, тогда была немного другая версия индикатора)

Всё - же хотелось бы уловить момент первого появления стрелки.

 

Вот, не удается удалить индикатор с графика при запущенном советнике.

Как-то встречал заметку по этому поводу, но снова найти её не могу.

Share this post


Link to post
Share on other sites
Circle
Я это знаю.

 

Как-то наблюдал в этом индикаторе, как он ставит стрелку, а потом её передвигает, пока бар не закроется. (Возможно, тогда была немного другая версия индикатора)

Всё - же хотелось бы уловить момент первого появления стрелки.

 

Вот, не удается удалить индикатор с графика при запущенном советнике.

Как-то встречал заметку по этому поводу, но снова найти её не могу.

 

У mql есть функция которая запрещает от рисовку индикатора вызываемого функцией iCustom().

Название функции не помню, не пользовался ей, поковыряйте справку по mql.

...

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


Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
alexvv
У mql есть функция которая запрещает от рисовку индикатора вызываемого функцией iCustom().

Название функции не помню, не пользовался ей, поковыряйте справку по mql.

...

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

Сначала я так и пытался сделать. Не получилось. Опыта не хватило. Код для меня мудреный. Несколько дней ковырялся, весь Рунет перерыл. Встречал пару дельных статей - не помогли.

 

А вот функцию, запрещающую отрисовку индикатора, не нашел.

Share this post


Link to post
Share on other sites
alexvv
Сначала я так и пытался сделать. Не получилось. Опыта не хватило. Код для меня мудреный. Несколько дней ковырялся, весь Рунет перерыл. Встречал пару дельных статей - не помогли.

 

А вот функцию, запрещающую отрисовку индикатора, не нашел.

Есть, нашел. Работает.

Share this post


Link to post
Share on other sites
alexvv
Есть, нашел. Работает.

Скрывает график на реале и после остановки тестера.

А при тестировании всё-равно рисует.

Share this post


Link to post
Share on other sites
Circle
Сначала я так и пытался сделать. Не получилось. Опыта не хватило. Код для меня мудреный. Несколько дней ковырялся, весь Рунет перерыл. Встречал пару дельных статей - не помогли.

 

Тем не менее думаю, что именно для опыта вам стоит попробовать и далее пытаться внедрить код индикатора в советника.

...

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

 

А вот функцию, запрещающую отрисовку индикатора, не нашел.

Тут искали http://www.mql4.com/ru ?


Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
alexvv
Тем не менее думаю, что именно для опыта вам стоит попробовать и далее пытаться внедрить код индикатора в советника.

С простым индикатором получалось. А вот этот....

 

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

Оно и понятно.

Вот только я давно не студент. Мне 64. Мозги уже не те.

И программировать начал не так давно.

Share this post


Link to post
Share on other sites
Circle
С простым индикатором получалось. А вот этот....

 

Посмотрел повнимательнее код вашего индикатора и обнаружил,

что этот индикатор в процессе вычислений вызывает сам себя с помощью функции iCustom().

if (timeFrame > Period()) limit = MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period()));

и еще

rsi = iCustom(NULL,timeFrame,indicatorFileName,"calculate",RsiPeriod,MaType,MaPeriod,0,y);

ema = iCustom(NULL,timeFrame,indicatorFileName,"calculate",RsiPeriod,MaType,MaPeriod,1,y);

 

Где в качестве переменной indicatorFileName выступает имя индикатора (значение присваивается в функции init() )

 

Возможно поэтому вам и не удалось его интегрировать.

...

Вообщем хитрый индюк :) с ходу и не разберешься в его алгоритме.


Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
alexvv
Посмотрел повнимательнее код вашего индикатора и обнаружил,

что этот индикатор в процессе вычислений вызывает сам себя с помощью функции iCustom().

if (timeFrame > Period()) limit = MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period()));

и еще

rsi = iCustom(NULL,timeFrame,indicatorFileName,"calculate",RsiPeriod,MaType,MaPeriod,0,y);

ema = iCustom(NULL,timeFrame,indicatorFileName,"calculate",RsiPeriod,MaType,MaPeriod,1,y);

 

Где в качестве переменной indicatorFileName выступает имя индикатора (значение присваивается в функции init() )

 

Возможно поэтому вам и не удалось его интегрировать.

...

Вообщем хитрый индюк :) с ходу и не разберешься в его алгоритме.

Понятно. Поэтому он прилично нагружает терминал при старте.

 

У Вас случайно нет готовой функции открытия ордеров со всеми проверками?

А то ставить библиотеки от KimIV не хочется, так-же как и самому изобретать велосипед.

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

Share this post


Link to post
Share on other sites
Circle
Понятно. Поэтому он прилично нагружает терминал при старте.

 

У Вас случайно нет готовой функции открытия ордеров со всеми проверками?

А то ставить библиотеки от KimIV не хочется, так-же как и самому изобретать велосипед.

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

 

Вот что есть у меня выложено тут

https://forum.alpari.com/showpost.php?p=3251087&postcount=23


Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
alexvv
Вот что есть у меня выложено тут

https://forum.alpari.com/showpost.php?p=3251087&postcount=23

Спасибо, полезная коллекция. Должна пригодиться.

Но функцию открытия ордеров, видимо, придется изобретать, или вытащить цепочку функций из библиотек KimIV.

Это немного позже. Сейчас пишу в упрощенном виде, чтобы проверить перспективность моей стратегии. Надеюсь на грааль :)

Если интересует, готов поделиться и пообсуждать, но не публично.

Share this post


Link to post
Share on other sites
Circle
Спасибо, полезная коллекция. Должна пригодиться.

Но функцию открытия ордеров, видимо, придется изобретать, или вытащить цепочку функций из библиотек KimIV.

Это немного позже. Сейчас пишу в упрощенном виде, чтобы проверить перспективность моей стратегии. Надеюсь на грааль :)

Если интересует, готов поделиться и пообсуждать, но не публично.

 

В файле "FLibrary" есть функция OpenOrders().

Недостаток в ней есть: нет проверки на реквоты.

Но в своем советнике я использую отложенные ордера и для меня это не критично поэтому оставил как есть.

 

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

Мне бы в прибыль торговать научится :)


Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
alexvv
В файле "FLibrary" есть функция OpenOrders().

Недостаток в ней есть: нет проверки на реквоты.

Но в своем советнике я использую отложенные ордера и для меня это не критично поэтому оставил как есть.

 

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

Мне бы в прибыль торговать научится :)

Я сразу посмотрел эту функцию.

 

Торговать в прибыль, это и есть моя "конкретная задача".

Вдвоем выполнить быстрее. Значит и прибыль будет быстрее.

Но мое дело предложить...

Share this post


Link to post
Share on other sites
Circle
Я сразу посмотрел эту функцию.

 

Торговать в прибыль, это и есть моя "конкретная задача".

Вдвоем выполнить быстрее. Значит и прибыль будет быстрее.

Но мое дело предложить...

 

Я тут буквально вчера столкнулся с такой штукой.

В двух терминалах был один и тот же ТФ один и тот же счет но открыты были они на разных компьютерах.

В одном терминале МА и в другом МА с одинаковыми параметрами.

Но в одном терминале цена пересекает МА сверху вниз и после чего отскакивает от нее. А в другом терминале цена подходит к МА свеху вниз но буквально пару пунктов не достигает ее и откатываться так же вверх. То есть значения МА на этих терминалах были разные!

Долго чесал затылок и пытался понять в чем дело. Несколько раз проверял параметры МА. В конце концов загрузил заново историю на терминале где цена не доходила до МА. После чего показания МА в разных терминалах стали одинаковы!

...

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


Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
alexvv
Я тут буквально вчера столкнулся с такой штукой.

В двух терминалах был один и тот же ТФ один и тот же счет но открыты были они на разных компьютерах.

В одном терминале МА и в другом МА с одинаковыми параметрами.

Но в одном терминале цена пересекает МА сверху вниз и после чего отскакивает от нее. А в другом терминале цена подходит к МА свеху вниз но буквально пару пунктов не достигает ее и откатываться так же вверх. То есть значения МА на этих терминалах были разные!

Долго чесал затылок и пытался понять в чем дело. Несколько раз проверял параметры МА. В конце концов загрузил заново историю на терминале где цена не доходила до МА. После чего показания МА в разных терминалах стали одинаковы!

...

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

Да, с историей я тоже видел косяки.

 

А вот функция HideTestIndicators() оказалась с подвохом. Она мне не только отключила показ индикатора. Он вообще перестал работать в эксперте. Мало того, это состояние где-то запомнилось.

Пришлось переименовать индикатор, чтоб починить.

 

А в моей стратегии этот индикатор для вспомогательных целей и есть.

Share this post


Link to post
Share on other sites
Circle

...

А вот функция HideTestIndicators() оказалась с подвохом. Она мне не только отключила показ индикатора. Он вообще перестал работать в эксперте. Мало того, это состояние где-то запомнилось.

Пришлось переименовать индикатор, чтоб починить.

...

У меня нет опыта использования этой функции не чего сказать не могу. Думаю вам было вызвать еще раз эту функцию, в параметре передать ей вместо true значение false.

Например:

HideTestIndicators(True);

...=iCustom(...);

....

HideTestIndicators(False);


Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
alexvv
У меня нет опыта использования этой функции не чего сказать не могу. Думаю вам было вызвать еще раз эту функцию, в параметре передать ей вместо true значение false.

Например:

HideTestIndicators(True);

...=iCustom(...);

....

HideTestIndicators(False);

Уже делал. Сразу.

Share this post


Link to post
Share on other sites
Circle

...

А в моей стратегии этот индикатор для вспомогательных целей и есть.

 

Зачем тогда делать советника основанного на нем, если это вспомогательный индикатор.


Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
alexvv
Зачем тогда делать советника основанного на нем, если это вспомогательный индикатор.

Советник сложный.

Роль индикатара не основная, но важная.

Share this post


Link to post
Share on other sites
Circle
Советник сложный.

Роль индикатара не основная, но важная.

 

Понятно.

Мне как начинающему трейдеру чем проще тем лучше.

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

...

Успехов вам в вашей работе.


Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
alexvv
Понятно.

Мне как начинающему трейдеру чем проще тем лучше.

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

...

Успехов вам в вашей работе.

Потому вручную и не хочу торговать.

 

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

На графике смотрю - стрелка появляется, а сигнала нет еще бар или несколько.

 

Надо использовать ObjectCreate() из этой - же функции.

Вот только как - не соображу.

Где-то мы промахнулись.

Edited by alexvv

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

×