Забыл упомянуть об етом - в самом начале задано:
// --------------------------------
double MacdBuffer[200];
double SignalBuffer[200];
. . .
// --------------------------------
Oleg
Зачем указывать размер массива. Зачем делать ArraySetAsSeries(MacdBuffer,true); в старте.
И почему не делать в инит нормально
В init-e:
// ------------------------------------
SetIndexBuffer(0,MacdBuffer);
SetIndexBuffer(1,SignalBuffer);
. . .
// ------------------------------------
А обрабатывать ты можешь столько элементов, сколько нужно.
За размером массивов будет сделить МТ.
Только не забудь указать количество используемых буферов.
Что типа
#property indicator_buffers 2 double MacdBuffer[]; double SignalBuffer[]; int init() { SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexBuffer(0,MacdBuffer); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(0,SignalBuffer); return(0); } int start() { .......... for (......) MacdBuffer[i]=.....................; for (......) SignalBuffer[i]=.....................; return(0); }Только получается полный аналог MACD. Особого смысла нет.
Зачем указывать размер массива. Зачем делать ArraySetAsSeries(MacdBuffer,true); в старте.
И почему не делать в инит нормально
В init-e:
// ------------------------------------
SetIndexBuffer(0,MacdBuffer);
SetIndexBuffer(1,SignalBuffer);
. . .
// ------------------------------------
А обрабатывать ты можешь столько элементов, сколько нужно.
За размером массивов будет сделить МТ.
Только не забудь указать количество используемых буферов.
Что типа
Только получается полный аналог MACD. Особого смысла нет.----------------------------------------------------------------------------------------------------------------------------------
Я пробовал и не задавать 200, т.е.
double MacdBuffer[];
double SignalBuffer[];
Результат был тот же.
Кроме того у меня задеиствованы все 8 бафферов, poetomu v SetIndexBuffer не 0 и 1 (0 и 1 заняты другими).
MACD график я запускау извне, не из скрипта (что и позволило мне обнаружить где проблема, иначе бы неверные вычисления
были бы идентичны MACD графику).
- Может есть еще что-нибудь что следует проверить/изменить?
- В результате чего значения могут обнуляться?
- Насколько сложно запустить MACD при помощи iCustom и можно ли таким образом считывать результаты в скрипт?
Спасибо!
----------------------------------------------------------------------------------------------------------------------------------
Я пробовал и не задавать 200, т.е.
double MacdBuffer[];
double SignalBuffer[];
Результат был тот же.
Кроме того у меня задеиствованы все 8 бафферов, poetomu v SetIndexBuffer не 0 и 1 (0 и 1 заняты другими).
MACD график я запускау извне, не из скрипта (что и позволило мне обнаружить где проблема, иначе бы неверные вычисления
были бы идентичны MACD графику).
- Может есть еще что-нибудь что следует проверить/изменить?
- В результате чего значения могут обнуляться?
- Насколько сложно запустить MACD при помощи iCustom и можно ли таким образом считывать результаты в скрипт?
Спасибо!
Тогда надо весь код смотреть. Если что, то контакты в профиле.
Сеичас попытаусь переписать проблемную часть удалив все лисхнее. Но сомневаусь что ето поможет, т.к.
MacdBuffer вычисляется верно, а следом за ним SignalBuffer делает ошибку.
- Можно ли
SignalBuffer[i]=iMAOnArray(MacdBuffer,limit,SignalSMA,0,MODE_EMA,i);
переписать при помощи другои функцзии??
Спасибо!
Олег
Сеичас попытаусь переписать проблемную часть удалив все лисхнее. Но сомневаусь что ето поможет, т.к.
MacdBuffer вычисляется верно, а следом за ним SignalBuffer делает ошибку.
- Можно ли
SignalBuffer[i]=iMAOnArray(MacdBuffer,limit,SignalSMA,0,MODE_EMA,i);
переписать при помощи другои функцзии??
Спасибо!
Олег
Давай завтра в аську или скапи постучишься. А сегодня я уже не хочу думать ни о чем.
Давай завтра в аську или скапи постучишься. А сегодня я уже не хочу думать ни о чем.
Похоже - [int limit = 200;] - создавал проблему (надо будет хорошенько все протестировать).
С другои стороны, [int limit=ArraySize(MacdBuffer);] - не приемлем, т.к. ето перегружает систему (PC с 4GB памятью
и приличным процессором начинает страшно тормозить в моменты смены валют и т.д.). При зтом limit может равняться
500 000, тогда как меня интересуют лишь последние 200 - 300 значении массива. Попытка ограничить MacdBuffer
способом ниже не помогла (зто тот случаи когда limit = 500 000 ... в зависимости от количества баров на графике(?)):
=======================
double MacdBuffer[200];
int limit=ArraySize(MacdBuffer);
=======================
- Есть ли способ ограничить MacdBuffer и SignalBuffer заданным мною значением? (использовать только последние х-значении)
Спасибо!
Олег
Похоже - [int limit = 200;] - создавал проблему (надо будет хорошенько все протестировать).
С другои стороны, [int limit=ArraySize(MacdBuffer);] - не приемлем, т.к. ето перегружает систему (PC с 4GB памятью
и приличным процессором начинает страшно тормозить в моменты смены валют и т.д.). При зтом limit может равняться
500 000, тогда как меня интересуют лишь последние 200 - 300 значении массива. Попытка ограничить MacdBuffer
способом ниже не помогла (зто тот случаи когда limit = 500 000 ... в зависимости от количества баров на графике(?)):
=======================
double MacdBuffer[200];
int limit=ArraySize(MacdBuffer);
=======================
- Есть ли способ ограничить MacdBuffer и SignalBuffer заданным мною значением? (использовать только последние х-значении)
Спасибо!
Олег
Если нет необходимости отрисовывать МАКД на графике, а используется только для расчетов, то есть смысл перейти на встроенные функции iMACD()
или же на вызов индикатора через iCustom(). Предпочтительный вариант сможешь выбрать сам.
В таком случае можно использовать готовые значения.
...
- Есть ли способ ограничить MacdBuffer и SignalBuffer заданным мною значением? (использовать только последние х-значении)
Спасибо!
Олег
extern int NBars = 200; // количество обсчитыаемых баров int start() { int limit; int counted_bars=IndicatorCounted(); if(counted_bars>0) { counted_bars--; limit=Bars-counted_bars; } else limit=NBars-1; for(int i=0; i<limit; i++) { ... } ... }Можно как выше, а можно просто задать
SetIndexDrawBegin( | int index, int begin) но я не уверен |
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Привет Всем!
Пол-дня убил и не нашел решения - я пользуюсь MACD в качестве одного из критериев купли-продажи.
В init-e:
// ------------------------------------
SetIndexBuffer(2,MacdBuffer);
SetIndexBuffer(3,SignalBuffer);
. . .
// ------------------------------------
В start-e:
// --------------------------------------------------------------------------------------------------------------------------------------------
int limit = 200;
ArraySetAsSeries(MacdBuffer,true);
for(i=0; i<limit; i++)
MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
for(i=0; i<limit; i++)
SignalBuffer[i]=iMAOnArray(MacdBuffer,limit,SignalSMA,0,MODE_EMA,i);
// --------------------------------------------------------------------------------------------------------------------------------------------
Параллельно у меня запущен график с MACD линиями. Заметил расхождения (иногда! - по большеи части работает нормально)
между сигналами покупки/продажи и MACD графиком.
В результате добавил comment в свои script:
// --------------------------------------------------------------------------------------------------------------------------------------------
Comment("PERIOD = ", Period(), " minutes",
"\n", "Bars = ", Bars,
"\n", "limit = ", limit,
"\n", "MacdBuffer[", i, "] = ", MacdBuffer[i]*10, " / 10", " SignalBuffer[", i, "] = ", SignalBuffer[i]*10, " / 10",
"\n" );
// --------------------------------------------------------------------------------------------------------------------------------------------
Обнаружилась странная вещь - в отдельных случаях (обычно) SignalBuffer = 0. Нет никакои связи между валютнои парои
или периодом и етим явлением. Т.е. запускаешь script, все ок, а через какое-то время обнаруживешь что коммент выдает 0.
Переключаусь на другую пару валют - все в норме. Возвращаусь назад к проблемнои - может остаться в нуле (при том что
на графике MACD ненулевое значение), а может вернуться к нормальнои работе с верными результатами (так как на MACD
графике). Если оставить то так в нуле и остаеся.
Подскажите если кто знает в чем тут дело. Если есть другие варианты решения (через iCustom или еще что) - готов рассмотреть.
Спасибо!
Олег