Форум » Индикаторы » Индикатор стохастик Ди Наполи » Ответить

Индикатор стохастик Ди Наполи

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

Ответов - 38, стр: 1 2 3 All

Scriptong: tench72 пишет: Я подставил индекс в код стохастика: В этом коде Вы получили только два правильных значения: low и high. Все остальные - неправильные. Так, при расчете значения переменной Fast Вы использовали таймсерию, обращающуюся к текущему таймфрейму: Close. При работе с другим таймфреймом/графиком необходимо использовать функцию iClose. Ну и со значением буфера StoBuffer Вы вновь допускаете ошибку - оперируете индексом текущего таймфрейма при расчете значения. Хотя сохранять значение, конечно же, нужно по индексу текущего таймфрейма. Разберитесь с тем, в каких местах нужно использовать индекс текущего таймфрейма, а в каких - другого. Так, при расчетах всегда нужно использовать индекс бара другого ТФ, а при визуализации значения (сохранении результата в буфер индикатора) используется индекс бара текущего ТФ.

tench72: Scriptong пишет: Ну и со значением буфера StoBuffer Вы вновь допускаете ошибку - оперируете индексом текущего таймфрейма при расчете значения. Хотя сохранять значение, конечно же, нужно по индексу текущего таймфрейма. Разберитесь с тем, в каких местах нужно использовать индекс текущего таймфрейма, а в каких - другого. я изменил код: while(i>=0) { 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=(iClose(NULL,tf,in)-low)/(high-low)*100; //расчёт первичной быстрой линии %К StoBuffer[in]=StoBuffer[in+1]+(Fast-StoBuffer[in+1])/SlowK; все равно ни чего не изменилось на другом таймфрейме индикатор и исчезает

Scriptong: tench72 пишет: все равно ни чего не изменилось на другом таймфрейме индикатор и исчезает Странно. У меня не исчезает. Просто показывает неправильные значения. Ну да ладно, с этим разберемся потом, когда код доведем до нужной кондиции. Итак, Вы уже сделали определенные успехи - использовали функцию iClose, т. к. необходимо было получить цену закрытия бара другого таймфрейма. Но при этом почему-то забыли, что при расчете минимума и максимума тоже нужно оперировать данными другого таймфрейма. Low и High - это массивы таймсерии, при помощи которых можно получить минимум и максимум указанного бара, но на текущем таймфрейме. Если же необходимо получить максимум и минимум бара другого таймфрейма, то следует использовать функции iLow и iHigh. Когда исправите эту ошибку, получите следующий вид индикатора на М5 при использовании данных М15: Правда, и этот вариант не является полностью правильным. Попробуйте по виду показаний определить, как проявляется следующая ошибка. Путь ее устранения я подскажу.


tench72: а как же функции iLowest(NULL,tf,MODE_LOW,FastK,in) и iHighest(NULL,tf,MODE_HIGH,FastK,in) они вообще не нужны???? Ни чего не пойму... как использовать функции iLow и iHigh, совместно с ними???!!!!

Scriptong: tench72 пишет: а как же функции iLowest(NULL,tf,MODE_LOW,FastK,in) и iHighest(NULL,tf,MODE_HIGH,FastK,in) они вообще не нужны???? Нужны. Функция iLowest определяет индекс минимального бара на заданном интервале. Нам же требуется получить значение минимума бара. Для текущего таймфрейма это делается при помощи обращения к массиву-таймсерии Low, а для таймфрейма, отличного от текущего, при помощи функции iLow. Аналогично с iHighest, High и iHigh. Для лучшего понимания прочтите документацию по этим функциям. По таймсериям документация здесь.

tench72: Добрый вечер Scriptong. Спасибо за консультации, но честное слово, я не иогу понять что делать... В принципе я получил три стохастика Ди Наполи по разным тайм фреймам, я воспользовался функцией iCustom() ввел функции iLowest и iHighest, их значения ввел в функцию iCustom() с соответствующим таймфреймом. Вроде как получилось, правда ступенчатые они какие то но деваться не куда, что получилось то получилось. Еще раз спасибо!

Scriptong: tench72 пишет: Спасибо за консультации, но честное слово, я не иогу понять что делать... Ну как что - разбираться, если хочется создавать программы лично Здесь можете задавать любые глупые вопросы по теме MQL4/MQL5. Никто их тут тролить не будет. tench72 пишет: В принципе я получил три стохастика Ди Наполи по разным тайм фреймам, я воспользовался функцией iCustom() ввел функции iLowest и iHighest При чем тут функция iCustom? tench72 пишет: Вроде как получилось, правда ступенчатые они какие то На графике М5 показания с М15 обязательно будут ступеньками, т. к. каждый бар М15 - это 3 бара М5. То есть три подряд бара М5 будут отображать одинаковые показания. Покажите тот код, который у Вас получился. Скорее всего, там еще есть несколько неучтенных моментов. Я то уже сделал для проверки "правильный вариант", в котором все подводные камни обнаружены.

tench72: Код получился таким: int start() { int i,limit,y=0; limit= ColBar-1; for(i=0,y=0;i<limit;i++) { y=iBarShift(NULL, TimeFrame, Time); ExtMapBuffer=iCustom(NULL,TimeFrame,"StochasticDN",FastK,0,y) ; { я позаимствовал его у индикатора MTF RSI в параметрах самого стохастика я убрал сигнальную линию и уровни чтобы не усложнять функцию iCustom().

Scriptong: tench72 пишет: Код получился таким: Вас занесло не в ту степь Использование функции iCustom в данном случае не нужно. Это какой-то другой индикатор, который мы с Вами не обсуждали. Предлагаю вернуться к прошлому обсуждению. Итак, у Вас должно было получиться что-то типа такого: while (index >= 0) { int in = iBarShift(NULL, tf, Time[index]); low = iLow(NULL, tf, iLowest(NULL, tf, MODE_LOW, FastK, in)); //минимум high = iHigh(NULL, tf, iHighest(NULL, tf, MODE_HIGH, FastK, in)); //максимум double diff = (high - low) * 100; if (diff != 0 && SlowK != 0 && SlowD != 0) { double Fast = (iClose(NULL, tf, in) - low) / (high - low) * 100; //расчёт первичной быстрой линии %К StoBuffer[index] = StoBuffer[index + 1] + (Fast - StoBuffer[index + 1]) / SlowK; //расчёт стохастической линии SigBuffer[index] = SigBuffer[index + 1] + (StoBuffer[index] - SigBuffer[index + 1]) / SlowD; //расчёт сигнальной линии } index--; } Но это еще не совсем правильный код, хотя и рабочий.

tench72: Здравствуйте Сэнсэй! А почему не совсем правильный вроде как гладкий и похож на тот который установлен на своем таймфрейме!

Scriptong: tench72 пишет: А почему не совсем правильный вроде как гладкий и похож на тот который установлен на своем таймфрейме! Вот именно поэтому он и неправильный. Показания старшего таймфрейма на младшем таймфрейме должны быть ступеньками.

tench72: Ну вот те на.... А я так обрадовался Ноя сравнивал значения перегибов стохастиков мультитаймфрейного наМ15 установленного на М5, и обыкновенного на М15, они вроде как совпадают

Scriptong: tench72 пишет: Ноя сравнивал значения перегибов стохастиков мультитаймфрейного наМ15 установленного на М5, и обыкновенного на М15, они вроде как совпадают Если брать первую свечу М5, то, конечно, совпадают. Если брать следующие две - не совпадут. Также в динамике будет идти накопление ошибки расчетов тем большее, чем дольше работает индикатор без перезапуска. Но решение есть. Попробуйте подумать именно в этом направлении.

tench72: Здравствуйте Scriptong, я бы с удовольствием подумал в направлении в котором Вы указали... Но увы я не программист, и даже не подозреваю в каком направлении думать, мой опыт программирования ограничен начальными курсоми Бейсика и Си в даааалеком 1995 году, когда я заканчивал универ. В учебнике MQL4 очень скудно описано про функции, да и мОзги уже не те что раньше

Scriptong: tench72 пишет: Но увы я не программист, и даже не подозреваю в каком направлении думать, мой опыт программирования ограничен начальными курсоми Бейсика и Си в даааалеком 1995 году, когда я заканчивал универ. В учебнике MQL4 очень скудно описано про функции, да и мОзги уже не те что раньше Вы же вроде изъявили желание учить MQL4. Из этих соображений я и даю вводные. Если же намерений учить язык нет, то, конечно, все эти наши разговоры не имеют никакой перспективы. Итак, продолжаю, исходя из предположения, что учиться Вы, все-таки, намерены. Простой пример, для которого не нужно быть программистом. Достаточно знать математику на уровне 5-ого класса средней школы. Есть линия. При текущем масштабе эта линия кажется монотонно восходящей. Но стоит лишь увеличить масштаб, как мы увидим, что линия состоит из ступенек. Так и в рассматриваемом индикаторе. Мы берем данные с таймфрейма М15. Это "текущий масштаб линии". Отображаем мы эти данные на таймфрейме М5 - это "увеличенный масштаб". Вопрос: что мы должны увидеть на графике М5?



полная версия страницы