Добрый день.
Некоторое время назад сделал для себя индикатор на пересечение средней (100). Вот код:
Я сразу уточню: я - не профи какой-нибудь. Мой пытливый мозг с трудом делает такие штуки :)
Но, вот незадача - последние несколько дней не могу изменить этот индикатор, чтобы получить такой результат - при пересечении средней хочу, чтобы индюк показывал ещё, например, 5 баров значение "1" (или "-1" в случае пересечения сверху вниз), если нет обратного пересечения. Например, график цены пересёк среднюю cнизу вверх и дальше пошёл вверх. Первый индюк (см.выше) показал бы в момент пересечения 1, а потом опять стал равным нулю. А мне надо, чтобы мой второй индюк показывал бы "1"ещё 5 баров и только потом стал равным нулю. Если бы до того как пройдёт эти 5 баров было бы обратное пересечение, то индюк бы показал бы "-1" и т.д. Надеюсь я смог пояснить, что я хочу сделать:) Вот как выглядит моя последняя попытка добиться нужного результата:
Не получается. Пожалуйста, подскажите - что надо поправит в коде?
Заранее благодарен за помощь.
Используйте кнопку SRC для вставки кода, если конечно хотите получить ответ.
Править чужие посты удовольствия не доставляет
#property copyright "Copyright © 2010, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Blue extern int Per=100; int History=100000; double MA_1[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { SetIndexBuffer(0,MA_1); SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,3,Blue); return; } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int i,Counted_bars; int qb; double My_24EMA; double My_24EMA1; Counted_bars=IndicatorCounted(); i=Bars-Counted_bars-1; if (i>History-1) i=History-1; while (i>=0) { for (qb=0; qb>5;qb++) { MA_1[i+1]=0; My_24EMA=iMA(NULL,0,Per,0,MODE_EMA,PRICE_CLOSE,i+1+qb); My_24EMA1=iMA(NULL,0,Per,0,MODE_EMA,PRICE_CLOSE,i+2+qb); if (Close[i+1+qb]>My_24EMA && Close[i+2+qb]<My_24EMA1) { MA_1[i+1]=1;break; } if (Close[i+1+qb]<My_24EMA && Close[i+2+qb]>My_24EMA1) { MA_1[i+1]=-1;break; } } i--; } return; } //+------------------------------------------------------------------+
Последние несколько дней не могу изменить этот индикатор, чтобы получить такой результат - при пересечении средней я хочу, чтобы индюк показывал ещё, например, 5 баров значение "1" (или "-1" в случае пересечения сверху вниз), если нет обратного пересечения. Например, график цены пересёк среднюю cнизу вверх и дальше пошёл вверх. Первый индюк (см.выше) показал бы в момент пересечения 1, а потом опять стал равным нулю. А мне надо, чтобы мой второй индюк показывал бы "1"ещё 5 баров и только потом стал равным нулю. Если бы до того как пройдёт эти 5 баров было бы обратное пересечение, то индюк бы показал бы "-1" и т.д. Надеюсь я смог пояснить, что я хочу сделать:)
Вероятно, я не правильно использую внутренний цикл. Если возможно, подскажите, пожалуйста, что поправить надо?
Пожалуйста, помогите кто-нибудь найти ошибку в коде ...)
Как понял, так сделал.
Благодаря Вашей помощи я наконец-то внёс необходимые изменения в свой код (если кому-то потребуется :)):
#property copyright "Copyright © 2010, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Blue extern int Per=100; int History=100000; double MA_1[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { SetIndexBuffer(0,MA_1); SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,3,Blue); return; } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int i,Counted_bars; int qb; double My_24EMA; double My_24EMA1; Counted_bars=IndicatorCounted(); i=Bars-Counted_bars-1; if (i>History-1) i=History-1; while (i>=0) { for (qb=i; qb<=i+5;qb++) { MA_1[i+1]=0; My_24EMA=iMA(NULL,0,Per,0,MODE_EMA,PRICE_CLOSE,1+qb); My_24EMA1=iMA(NULL,0,Per,0,MODE_EMA,PRICE_CLOSE,2+qb); if (Close[1+qb]>My_24EMA && Close[2+qb]<My_24EMA1) { MA_1[i+1]=1; break; } if (Close[1+qb]<My_24EMA && Close[2+qb]>My_24EMA1) { MA_1[i+1]=-1; break; } } i--; } return; } //+------------------------------------------------------------------+
Ещё раз спасибо Вам.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день.
Некоторое время назад сделал для себя индикатор на пересечение средней (100). Вот код:
Я сразу уточню: я - не профи какой-нибудь. Мой пытливый мозг с трудом делает такие штуки :)
Но, вот незадача - последние несколько дней не могу изменить этот индикатор, чтобы получить такой результат - при пересечении средней хочу, чтобы индюк показывал ещё, например, 5 баров значение "1" (или "-1" в случае пересечения сверху вниз), если нет обратного пересечения. Например, график цены пересёк среднюю cнизу вверх и дальше пошёл вверх. Первый индюк (см.выше) показал бы в момент пересечения 1, а потом опять стал равным нулю. А мне надо, чтобы мой второй индюк показывал бы "1"ещё 5 баров и только потом стал равным нулю. Если бы до того как пройдёт эти 5 баров было бы обратное пересечение, то индюк бы показал бы "-1" и т.д. Надеюсь я смог пояснить, что я хочу сделать:) Вот как выглядит моя последняя попытка добиться нужного результата:
Не получается. Пожалуйста, подскажите - что надо поправит в коде?
Заранее благодарен за помощь.