Функция ICustom - страница 15

 

есть ли пример использования функции icustom для получения двух одинаковых таймфреймов в одном буфере?

поскольку два таймфрейма имеют одинаковые имена, как я могу определить разные таймфреймы?

текущий таймфрейм

double trend = iCustom(NULL, 1, "HA01", 0, 1500, 0, 0);

старший таймфрейм

double trend = iCustom(NULL, 5, "HA01", 0, 1500, 0, 1);

 
Попробуйте вот так:
double trend1minute = iCustom(NULL, 1, "HA01", 0, 1500, 0, 0); double trend5minute = iCustom(NULL, 5, "HA01", 0, 1500, 0, 1);

А затем используйте эти 2 переменные по своему усмотрению (например, if (trend1minute == ... && trend5minute ==... ) сделайте что-нибудь).

mtuppers:
есть ли какой-нибудь пример использования функции icustom для получения двух одинаковых буферов таймфреймов?

поскольку 2 tf-буфера имеют одинаковые имена, как я могу определить разные таймфреймы?

текущий таймфрейм

double trend = iCustom(NULL, 1, "HA01", 0, 1500, 0, 0);

старший таймфрейм

double trend = iCustom(NULL, 5, "HA01", 0, 1500, 0, 1);
 

Использование iCustom в советнике, один экземпляр

Привет всем,

Я работаю над написанием эксперта для использования пользовательского индикатора, при бэктесте я заметил, что он, похоже, загружает новый экземпляр индикатора каждый раз, когда вызывается функция iCustom. Кто-нибудь знает способ загрузить пользовательский индикатор один раз и ссылаться на него при каждом последующем вызове?

void OnBar()

{

RSIPL = iCustom(NULL,0,"NCH_DI",0,4,BarIndex);

TSL = iCustom(NULL,0,"NCH_DI",0,5,BarIndex);

HAOpen = iCustom(NULL,0,"HeikenAshi",0,2,BarIndex);

HAClose = iCustom(NULL,0,"HeikenAshi",0,3,BarIndex);

PACHigh = iMA(NULL,0,5,0,MODE_SMMA,PRICE_HIGH,BarIndex);

PACLow = iMA(NULL,0,5,0,MODE_SMMA,PRICE_LOW,BarIndex);

// DO MY OTHER STUFF HERE

}

Приведенный выше код загружает новый экземпляр NCH_DI при каждом вызове.........

Спасибо

 

Невозможно сделать

Таков принцип работы MT4. Лучшее решение - минимизировать количество вызовов iCustom() в вашем коде. Обычно HA нужно вызывать только при формировании нового бара. Вызов его каждый тик не является оптимальным.

 
CodeMeister:
Так работает MT4. Лучшее решение - минимизировать количество вызовов iCustom() в вашем коде. Обычно HA нужно вызывать только при формировании нового бара. Вызов его каждый тик не является оптимальным.

У меня действительно все мои вызовы находятся на новой барной формации. NCH_DI, к сожалению, относительно требовательный к памяти кусок кода. Не могли бы вы предложить способ, с помощью которого я могу удалить старые экземпляры?

 

Попробуйте это

Тестер стратегий не является конечной целью этого советника. Запуск его в реальном времени на графике - вот что это такое. Я полагаю, что загрузка iCustom() происходит один раз на графике при условии, что у вас достаточно памяти, поэтому я бы не стал тратить много времени на то, чтобы что-то подстроить под особенности Strategy Tester. Единственной альтернативой iCustom() является кодирование индикатора непосредственно в советнике.

 

Я думал о том, чтобы перекодировать его в EA..... Но решил, что в данном случае это нецелесообразно. Я обнаружил, что если я закомментирую #property indicator_separate_window в индикаторе, он будет загружаться и выгружаться после завершения вызова. Я собираюсь закончить основное кодирование и продемонстрировать его в течение недели или около того и следить за использованием памяти. Спасибо, ребята, я дам вам знать, как все идет.

 

Проблемы с индикатором iCustom

Здравствуйте,

Мой советник использует собственный индикатор с iCustom.

При открытии новой свечи индикатор вызывается iCustom.

Теперь я понял, что значение iCustom[1] не равно iCustom[0] предыдущего бара.

Значение похоже, но не совсем то, что должно быть и что я проверил на RSI, например.

Есть идеи, на чем может быть основана проблема?

Спасибо за любую подсказку.

Камило

 

Это зависит от цены, которая используется пользовательским индикатором. Если ваш пользовательский индикатор использует цену закрытия, high, low или любую другую цену, которая меняется во время развития текущей свечи, то значение индекса [0] будет изменено.

Например, если вы вызовете индикатор, использующий пользовательскую цену, и сравните значение [0], а после закрытия бара сравните его с результатом на [1], то почти наверняка, как яйцо с яйцом, значение будет другим. Но, если вы настроите пользовательский индикатор на использование цены OPEN, а не close, то значение будет одинаковым (просто потому, что цена open не меняется во время развития свечи).

 

Спасибо за быстрый ответ, Калензо.

Я проверил значения для [2] и понял, что для [1] -> [2] все выглядит нормально.

Вот пример значений моего индикатора

.... [0]..........[1].........[2]

t4 31,8711 42,6700 52,1915

t3 44,6881 52,1915 60,3014

t2 53,0572 60,3014 67,6553

t1 59,8860 67,6553 74,5797

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

Я просто использую предыдущую проверку:

if(Volume[0]>1) return;

Разве это не нормально?

Причина обращения: