АвторСообщение



Сообщение: 2
Зарегистрирован: 24.03.14
Репутация: 0
ссылка на сообщение  Отправлено: 14.07.14 18:23. Заголовок: Индикатор стохастик Ди Наполи


Здравствуйте, Scriptong. Помогите пожалуйста сделать стохастик Ди Наполи мультитаймфреймным, я всю голову поломал уже не могу ни как сделать
код индюка прилагаю: Стохастик Ди Наполи
Заранее благодарен!!!!

Спасибо: 0 
ПрофильЦитата Ответить
Новых ответов нет , стр: 1 2 3 All [см. все]







Сообщение: 614
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 14.07.14 20:49. Заголовок: tench72 пишет: код ..


tench72 пишет:

 цитата:
код индюка прилагаю: Стохастик Ди Наполи


Странно. Несколько раз пробовал скачать, а результат один и тот же - файл нулевого размера. Попробуйте закачать файл еще раз.

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 3
Зарегистрирован: 24.03.14
Репутация: 0
ссылка на сообщение  Отправлено: 15.07.14 00:21. Заголовок: Закачал на Яндекс ди..


Закачал на Яндекс диск вот ссылочка: _https://yadi.sk/d/wXbLBMehWcMLD

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 617
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 15.07.14 13:31. Заголовок: tench72 пишет: Зака..


tench72 пишет:

 цитата:
Закачал на Яндекс диск вот ссылочка: _https://yadi.sk/d/wXbLBMehWcMLD


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

И еще - имеется грубая ошибка:

 цитата:
double Fast=(Close-low)/(high-low)*100; //расчёт первичной быстрой линии %К
StoBuffer=StoBuffer[i+1]+(Fast-StoBuffer[i+1])/SlowK; //расчёт стохастической линии
SigBuffer=SigBuffer[i+1]+(StoBuffer-SigBuffer[i+1])/SlowD; //расчёт сигнальной линии


Во всех приведенных строках используется операция деления. Причем ни в одном из случаев корректность знаменателя перед делением не проверяется. Это приводит к частым появлениям фатальной ошибки - деления на 0. По крайней мере, у меня при первом запуске именно так и произошло.

Эту ошибку легко исправить:

 цитата:
if (diff != 0 && SlowK != 0 && SlowD != 0)
{
double Fast = (Close - low) / diff; //расчёт первичной быстрой линии %К
StoBuffer = StoBuffer[i + 1] + (Fast - StoBuffer[i + 1]) / SlowK; //расчёт стохастической линии
SigBuffer = SigBuffer[i + 1] + (StoBuffer - SigBuffer[i + 1]) / SlowD; //расчёт сигнальной линии
}



Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 4
Зарегистрирован: 24.03.14
Репутация: 0
ссылка на сообщение  Отправлено: 15.07.14 14:14. Заголовок: Здравствуйте Scripto..


Здравствуйте Scriptong. Я не представил свои наработки, так как они все равно не работают, и приложил код индикатора как он есть в интернете то есть оригинал. Ошибку учту, спасибо! Да Вы правы индикатор должен отображать данные только того таймфрейма, который указан пользователем, например если значение 0, то отображаются данные того таймфрейма на котором установлен индикатор а если значение 15 например, а сам индикатор стоит на 5-ти минутном графике, то индикатор показывает значения 15-ти минутного графика, в подвале окна 5-ти минутного.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 618
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 15.07.14 17:28. Заголовок: tench72 пишет: Я не..


tench72 пишет:

 цитата:
Я не представил свои наработки, так как они все равно не работают, и приложил код индикатора как он есть в интернете то есть оригинал.


Покажите их и я помогу разобрать ошибки. Дело в том, что если я просто дам готовый вариант, то это никому в плане обучения не поможет. А вот при разборе ошибок процесс обучения идет намного эффективнее.

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 5
Зарегистрирован: 24.03.14
Репутация: 0
ссылка на сообщение  Отправлено: 15.07.14 22:33. Заголовок: В программе индикато..


В программе индикатора я ввел дополнительную внешнюю переменную, которая отвечает за выбор таймфрейма, далее я в программе вычисления
максимума и минимума значения цены за определенное количество баров, ввел эту переменную в функцию индекса наибольшего найденного значения.
Так вот если TimeFrame=0 то есть по умолчанию текущий таймфрейм, то индикатор показывается как обычно в отдельном окне, но стоит выставить
например на пятиминутном графике значение TimeFrame=15, чтобы индикатор отображал данные с 15-ти минутного графика, как он сразу же исчезает! Окно есть, но оно пустое без индикатора вот в чем проблема я не знаю!

extern int TimeFrame=0; //по умолчанию текущий таймфрейм
.........................................................................................
low=Low[Lowest(NULL,TimeFrame,MODE_LOW,FastK,i)]; //минимум
high=High[Highest(NULL,TimeFrame,MODE_HIGH,FastK,i)]; //максимум

Вот все на что я был способен

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 619
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 16.07.14 12:32. Заголовок: tench72 пишет: low=..


tench72 пишет:

 цитата:
low=Low[Lowest(NULL,TimeFrame,MODE_LOW,FastK,i)]; //минимум
high=High[Highest(NULL,TimeFrame,MODE_HIGH,FastK,i)]; //максимум

Вот все на что я был способен


Ну вот, теперь хотя бы понятно, с чего нужно начинать пояснения.

Итак, при разработке мультитаймфреймного индикатора необходимо учитывать тот факт, что нумерация баров на различных таймфреймах разная. Так, один бар М15 состоит из трех баров М5. Это значит, что на графике М5 мы имеем бары с индексами 0, 1 и 2, а для графика М15 это, вполне возможно, только бар с индексом 0. Поэтому первое, что нужно делать в мультитаймфреймном индикаторе, это находить соответствия между индексами баров.

В указанном участке кода переменная цикла i указывает индексы баров текущего таймфрейма. Для того чтобы получить данные с ТФ М15, нужно сначала найти бар, которому соответствует бар №i на ТФ М15. Делается это при помощи функции iBarShift. Ей передается время открытия бара, для которого необходимо найти соответствующий бар указанного таймфрейма:

 цитата:
int indexM15 = iBarShift(NULL, PERIOD_M15, Time);


Код отображается немного неправильно. После слова "Time" следует открывающая квадратная скобка, затем символ "i", а после - закрывающая квадратная скобка. Движок форума воспринимает такую комбинацию за BB-код, указывающий на шрифт в виде курсива.

И вот этот найденный индекс уже можно использовать при нахождении минимума/максимума цены.

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


Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 6
Зарегистрирован: 24.03.14
Репутация: 0
ссылка на сообщение  Отправлено: 16.07.14 22:31. Заголовок: Прошу прощения, но я..


Прошу прощения, но я ни чего не понял в какую часть кода вставлять этот индекс
из меня программист как из черепахи спринтер!

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 624
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 17.07.14 13:54. Заголовок: tench72 пишет: Прош..


tench72 пишет:

 цитата:
Прошу прощения, но я ни чего не понял в какую часть кода вставлять этот индекс
из меня программист как из черепахи спринтер!


К сожалению, на этом ресурсе я не выполняю заказы на создание или модификацию программ. Помочь, подсказать, направить, указать на ошибку - могу.
Если есть желание, давайте начнем с азов. Я с этим тоже могу помочь. Но писать все будете Вы лично с полным пониманием того, что Вы делаете.

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 7
Зарегистрирован: 24.03.14
Репутация: 0
ссылка на сообщение  Отправлено: 21.07.14 19:17. Заголовок: Желание есть. Но как..


Желание есть. Но как и с чего начнем?

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 634
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 21.07.14 19:29. Заголовок: tench72 пишет: Жела..


tench72 пишет:

 цитата:
Желание есть. Но как и с чего начнем?


Давайте начнем.
Начнем с того, что попробуйте осмыслить хотя бы что-то из того, что я описал в посте 16.07.14. Как только запнетесь, задавайте вопрос применительно к тому предложению, которое Вы не поняли.

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 8
Зарегистрирован: 24.03.14
Репутация: 0
ссылка на сообщение  Отправлено: 23.07.14 17:04. Заголовок: Все равно мне не пон..


Все равно мне не понятно что возвращает функция iBarShift(NULL, PERIOD_M15, Time) ?

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 643
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 23.07.14 18:04. Заголовок: tench72 пишет: Все ..


tench72 пишет:

 цитата:
Все равно мне не понятно что возвращает функция iBarShift(NULL, PERIOD_M15, Time) ?


Индекс i в цикле указывает на индекс обрабатываемого бара текущего таймфрейма. На другом таймфрейме этому бару соответствует бар с другим индексом. Как нам определить соответствие между этими барами? Ответ: по времени открытия баров - один бар по времени будет вложен в другой.
К примеру, бар М5 со временем открытия 18:25 вложен в бар М15 со временем открытия 18:15. Оперируя этими данными, можно найти индекс бара на указанном таймфрейме, в который вложен бар с указанным временем открытия.
Это и делает функция iBarShift - возвращает индекс бара, которому принадлежит время time на таймфрейме tf. Мы ей передаем время открытия текущего обрабатываемого бара (Time[ i ]) и указываем, на каком таймфрейме нужно найти индекс бара (PERIOD_M15).

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 9
Зарегистрирован: 24.03.14
Репутация: 0
ссылка на сообщение  Отправлено: 23.07.14 18:35. Заголовок: получается что если ..


получается что если мы на пятиминутном таймфрейме, то функция iBarShift с параметрами iBarShift(NULL, 15, Time) будет возвращать индекс равный нулю пока на пятиминутке не отрисуется три бара?

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 10
Зарегистрирован: 24.03.14
Репутация: 0
ссылка на сообщение  Отправлено: 23.07.14 19:17. Заголовок: Я подставил индекс ..


Я подставил индекс в код стохастика:
int in= iBarShift(NULL, tf, Time);
low=Low[iLowest(NULL,tf,MODE_LOW,FastK,in)]; //минимум
high=High[iHighest(NULL,tf,MODE_HIGH,FastK,in)]; //максимум
double Fast=(Close[in]-low)/(high-low)*100; //расчёт первичной быстрой линии %К
StoBuffer=StoBuffer[i+1]+(Fast-StoBuffer[i+1])/SlowK; //расчёт стохастической линии
и опять та же картина если параметр таймфрейма tf=0 индикатор рисуется в окне, а если изменить например на tf=15 а индикатор на 5-ти минутном графике, то он исчезает т.е не рисуется???!!!


Спасибо: 0 
ПрофильЦитата Ответить
Новых ответов нет , стр: 1 2 3 All [см. все]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  2 час. Хитов сегодня: 0
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет