Общие вопросы по разработке > Опять про вызов индикатора от индикатора

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
Аватара пользователя
evge
Администратор
Сообщения: 1812
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 367 раз
Контактная информация:

Re: Опять про вызов индикатора от индикатора

Непрочитанное сообщение evge » 19 мар 2021, 21:11

Код: Выделить всё

function Initialize()
{
IndicatorName = "IndexDemo";
PriceStudy = false;
AddInput("Input", Inputs.Candle);
AddSeries("CurrentIndex_", DrawAs.Line, Color.Green);
AddSeries("MaxIndex_", DrawAs.Line, Color.Red);
AddParameter("Period", 2500, 2);
}

function Evaluate()
{

CurrentIndex_ = CurrentIndex;
MaxIndex_ = MaxIndex;

}


IndexDemo-01.png
IndexDemo-01.png (39.01 КБ) 15229 просмотров
никогда такого не было и вот опять

alex_m
Сообщения: 10
Зарегистрирован: 18 мар 2021, 21:30
Благодарил (а): 6 раз

Re: Опять про вызов индикатора от индикатора

Непрочитанное сообщение alex_m » 19 мар 2021, 23:50

Господа, это просто фантастика, спасибо огромное за пояснения!

alex_m
Сообщения: 10
Зарегистрирован: 18 мар 2021, 21:30
Благодарил (а): 6 раз

Re: Опять про вызов индикатора от индикатора

Непрочитанное сообщение alex_m » 20 мар 2021, 10:07

Итак, поменял название параметров, добавил еще на всякий случай проверку

Код: Выделить всё

if (CurrentIndex < MACD_sign_period) return;

в _my_MA_MA_MACD, вроде - работает!
Это я так понимаю как я то специфика АД4, с пересечением имен параметров в разных индикаторах? В стратегиях тоже таког нужно избегать? Потому что есть у меня одна стратегия, которая просто перестала даже тестироваться, после окна Тестирование ничего не происходит. Не пойму почему и не пойму где рантайм логи, связанные с выполнением стратегий искать.

alex_m
Сообщения: 10
Зарегистрирован: 18 мар 2021, 21:30
Благодарил (а): 6 раз

Re: Опять про вызов индикатора от индикатора

Непрочитанное сообщение alex_m » 20 мар 2021, 10:16

И еще один вопрос общего характера, на примере кода из обсуждаемого тут индикатора.

Код: Выделить всё

function Evaluate()
{
   if (CurrentIndex < MACD_sign_period) return;
 
     var MA_diff = MY._my_MA_MA_diff(Input,MA_fast_type,MA_fast_period,MA_slow_type,MA_slow_period);
   var sign_line = SMA(MA_diff, MACD_sign_period);
   
   if (MACD_sign_type == 1)
   {
      sign_line = SMA(MA_diff, MACD_sign_period);
   }
   else if (MACD_sign_type == 2)
   {
      sign_line = EMA(MA_diff, MACD_sign_period);
   }
   else if (MACD_sign_type == 3)
   {
      sign_line = WMA(MA_diff, MACD_sign_period);
   }
   else
   {
      sign_line = SMA(MA_diff, MACD_sign_period);
   }
   
   MACD_Line = MA_diff[0];
   MACD_Sign = sign_line[0];
}


При объявлении переменных без явного типа, с помощью var я вызываю

Код: Выделить всё

var sign_line = SMA(MA_diff, MACD_sign_period);

Делаю это потому, что компилятор просит типизирвоать переменную при ее инициализации. Логично. Типизирую я с помощью вызова SMA, так же предполагая, что возвращаемый тим EMA и WMA такой же. В результате это так и есть, так как код работает.

Вопрос, а где посмотреть, какой тип возвращают эти функции, чтобы при объявлении переменных в явном виде его задавть? Мне не очень нравится такой подход с неявной типизацией. В доке есть только такое описание вызова встроенных индикаторов, но оно ответа не дает. Или дает, я просто не пониманию?

screen5.jpg
screen5.jpg (53.97 КБ) 15114 просмотров

BugsDigger
Сообщения: 535
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 92 раза

Re: Опять про вызов индикатора от индикатора

Непрочитанное сообщение BugsDigger » 20 мар 2021, 16:30

Документация явных типов не приводит.
Можно смотреть дизассемблером ILspy, если квалификация позволяет.
Для C# автоматическая типизация - абсолютно нормальное явление.
Типы рядов вы можете также увидеть в каком-то моем коде (я как раз чарез дизассемблер смотрел), например:

viewtopic.php?t=903

Входные данные (Input) TA.Script.AdsInput
Выходная серия TA.Script.XSeries

Насчет имен параметров - тоже сталкивался иногда; очевидно, какие-то конфликты с глобальными символами самого терминала.

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

alex_m
Сообщения: 10
Зарегистрирован: 18 мар 2021, 21:30
Благодарил (а): 6 раз

Re: Опять про вызов индикатора от индикатора

Непрочитанное сообщение alex_m » 21 мар 2021, 21:58

Большое спасибо за помощь, разбираюсь дальше.

Аватара пользователя
evge
Администратор
Сообщения: 1812
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 367 раз
Контактная информация:

Re: Опять про вызов индикатора от индикатора

Непрочитанное сообщение evge » 28 мар 2021, 17:57

BugsDigger писал(а):Понятно, что работа с такими объемами данных с практической точки зрения бессмысленна. Поэтому для счета индикатора в буфер данных берется некоторое ограниченное количество точек, а именно MaxIndex+1 (MaxIndex - некоторое предопределенное "разумно-достаточное" число, что-то вроде ~5000).


Протестировал одну стратегию на 20 тысяч баров и вывел её график отчета и что-то он подтормаживал хорошо.
Вывел на него IndexDemo индикатор, а там:

IndexDemo-02.png
IndexDemo-02.png (27.02 КБ) 14537 просмотров


т.е. что-то поменяли в плане лимитов подгружаемых баров графика.
никогда такого не было и вот опять

BugsDigger
Сообщения: 535
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 92 раза

Re: Опять про вызов индикатора от индикатора

Непрочитанное сообщение BugsDigger » 29 мар 2021, 06:42

В режиме тестирования индикаторы вначале вычисляются, затем по ним идет имитация деятельности (именно поэтому индикаторы, которые меняют свои прошлые значения тестировать не получится.), так что для теста возможны другие лимиты (если они вообще есть) на "глубину" данных.

Что будет, если период тестирования весьма велик? Ясное дело, посчитанные индикаторы будут занимать много памяти (посмотрите в диспетчере задач), и, соответственно, система может начать тормозить из-за свопа.

Аватара пользователя
evge
Администратор
Сообщения: 1812
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 367 раз
Контактная информация:

Re: Опять про вызов индикатора от индикатора

Непрочитанное сообщение evge » 29 мар 2021, 07:11

при 64 гб оперативной памяти свопить?

ранее он тестируемую историю на график не выдавал, здесь именно обработка выводимой информации подтормаживает.

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

не стал бы смотреть какие индексы у баров, если бы не заметил что АД4 прилично по времени стал "задумываться" при выводе графика после тестирования большого периода.

Возможно, снято ограничение на 5000 баров. Даже выше тест индикатора на графике выдал больше 5000, хотя через параметры я запросил 5000. Но не стал проверять больше тогда.
никогда такого не было и вот опять

BugsDigger
Сообщения: 535
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 92 раза

Re: Опять про вызов индикатора от индикатора

Непрочитанное сообщение BugsDigger » 29 мар 2021, 07:29

У меня всего 8 Гб, хотя и 64 забить, наверное, нетрудно.
Насчет медленного отображения можно предположить, что м.б. что-то порушилось в логике проверки ДО рисования (если таковая логика вообще есть), т.е. стоит ли делать отрисовку (за пределами окна или если окна нет в принципе, как в тестировании)... Темна вода...


Вернуться в «Общие вопросы по разработке»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 8 гостей