Как получить значения буферов индикатора установленного на график. - страница 2

 
Ihor Herasko #:

В чем именно это проявляется? Надеюсь, в вызывающем эксперте/индикаторе разрешен вызов DLL-функций?

Да, конечно разрешен. Проявляется в том что вылетает ошибка доступа к массиву внутри индикатора.
 
Denis Bogdanov #:
Да, конечно разрешен. Проявляется в том что вылетает ошибка доступа к массиву внутри индикатора.

Тогда нужно разбираться с самим индикатором. Если исходника нет, то, действительно, никак.

 
Ihor Herasko #:

Не нужен iCustom

Просветите, как без iCustom получить хэндл индикатора в МТ4. Или о чем-то другом речь (типа только о парсинге шаблона)?

 
Stanislav Korotky #:

Просветите, как без iCustom получить хэндл индикатора в МТ4. Или о чем-то другом речь (типа только о парсинге шаблона)?

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

Я такое делал очень давно (на каждый стандартный индикатор написал свой собственный индикатор, а советник получал от них данные через глобальные переменные терминала, тогда не было других путей). Но решение так себе, неповоротливое. Хотя даже при автоматическом чтении данных с чарта (как в МТ5), все равно упираемся в то, что нужно знать суть прикрепленных к чарту индикаторов, чтобы с их значениями что-то делать. Если, конечно, задача не сводится к простому выводу списка присоединенных индикаторов.

 
Denis Bogdanov #:
Да, конечно разрешен. Проявляется в том что вылетает ошибка доступа к массиву внутри индикатора.

редко, но конечно бывает что индикатор физически не может работать без чарта и не может быть вызван как iCustom. Сильно сомневаюсь что у вас именно такой случай, скорее косяки в вашем советнике или производном индикаторе 

для 5-ки и для 4-ки, во первых: несколько раз проверьте, правильно ли вы передаёте параметры в iCustom. Самая частая ошибка - передаются не все параметры или не той размерности или не в том порядке.

Можете тут опубликовать скриншоты с параметрами вызываемого индикатора и фрагмент кода с вашим iCustom(...); И шаблон с индикатором (чистый график с единственным индикатором, клик правой кнопки мыши, "сохранить шаблон").
Если косяк там, а он скорее всего там - вам подскажут.

ещё в 5-ке можно без iCustom использовать тот индикатор который уже запущен юзером. Найти хендл через ChartIndicatorGet и не забыть потом отдать его через Release

 

   double buffer_0;
   buffer_0 = iCustom(_Symbol,
                       PERIOD_CURRENT,
                       "FXSSI.com\\FXSSI.TradingActivity.ex4",
                       "",
                       0,
                       1,
                       0,
                       "",
                       0,
                       0,
                       1,
                       1,
                       2,
                       0,
                       0,
                       0,
                       1                     
                       );
   Comment("buffer_0: "+DoubleToString(buffer_0));
Файлы:
 
Denis Bogdanov #:

вот смотри, в tpl:

<indicator>
name=Custom Indicator
<expert>
name=FXSSI.com\FXSSI.TradingActivity
flags=339
window_num=1
<inputs>
sssssC5=---------------
InputFramePosition=0
InputFrameSize=1
InputWindowSize=0
sssssC2=---------------
InputHistoryLength=0
InputColorScheme=0
InputLineWidth=1
InputDeltaSignal=1.0
InputPercentSignal=2.0
InputDefaultData=0
InputDefaultType=0
</inputs>
</expert>

InputDeltaSignal и InputPercentSignal - double. То есть в параметрах iCustom уже 1.0 и 2.0 соответсвенно. 

странный параметр ColorScheme - вместо Auto задайте что-нить более определённое. Может цветовую схему не может определить без чарта 

он у вас какую-то панель рисует - должны быть сочетания параметров, чтобы панели не было. При вызове через iCustom кое-чего не доступно индикаторам, WINDOW_HANDLE и OnChartEvent как минимум. 

Ещё - обращение к индикаторному буферу в OnInit - очень вероятный крах. Индикатор ещё не начал работать и буферы не распределены не инициализированы, то есть буферы пусты а вы обращаетесь к 1-му элементу.
Тем паче у вас там DLL ещё что-то делает. Сам по себе Comment уберите в OnTick или OnTimer. 

 
Дело в том что к коду индикатора доступа нет.
Вызываю я его не с OnInit а с OnCalculate (это просто кусок кода из индикатора который будет обрабатывать сигналы.
Спасибо, попробую.