Создание ботов

Для того, чтобы создать бота (эксперт / индикатор), необходимо ознакомиться с языком программирования LCRYP (Language Cryptocurrency). Ниже будет рассмотрено создание бота на примере простого индикатора. В разделах справки собраны более сложные примеры реализации ботов.

Чтобы начать создавать индикатор или эксперт в среде TerminalCoin, нужно открыть вкладку Навигатор в левой части терминала. После этого выбрать нужный раздел из списка существующих экспертов или индикаторов и в контекстном меню выбрать пункт "Новый...":  

Создать бот

В появившемся окне необходимо ввести имя нового индикатора или эксперта: 

Ввести имя

В перечне экспертов появится название создаваемого бота и откроется окно редактора, в котором можно будет редактировать созданный бот для торговли криптовалютой: 

Окно редактора

Для редактирования уже существующего бота необходимо выбрать его из списка во вкладке Навигатор и в контекстном меню выбрать пункт "Правка...".Откроется окно редактирования бота: 

Окно редактирования бота

Основные принципы работы с редактором рассмотрены в статье "Редактор кода". 

Пример создания индикатора 

Каждая программа LCRYP имеет конструкцию, которая является общей для всех программ и состоит из 3-х функций:

  •   OnInit - функция работает в начале запуска бота;
  •   OnBar - функция работает на каждом баре;  
  •   OnTick - функция работает на новом тике. 

Эти три функции нужно рассматривать как независимые подпрограммы, объединенные в одну программу. Каждая из подпрограмм имеет отдельное адресное пространство и между ними нет никакой прямой связи. При этом глобальные переменные в данных процедурах будут отдельными копиями для каждой из них. Для связи между тремя основными функциями существует механизм регистров. Механизм регистров реализован в ядре и является механизмом обмена информацией между подпрограммами. Его нужно использовать при необходимости сохранить переменную, которая будет доступна в разных подпрограммах. Общая информация также может считываться с индикаторных буферов, поскольку они содержат рассчитанную в этих же функциях информацию. В языке LCRYP реализованы команды для доступа к данным рынка, что значительно облегчает работу программисту. Используя такие команды, можно без проблем получить доступ ко всем данным рынка: обработать их необходимым образом в коде бота и отобразить на графике или совершать  действия непосредственно в реальном времени (т.е. проводить алгоритмическую торговлю). Для вывода информации в виде текста существуют выделенные текстовые регистры, которые позволяют отображать текстовую информацию на экране чарта или в окне журнала.

В общем, LCRYP позволяет строить необходимые логические конструкции для взаимодействия с рынком, а именно для удобного отображения рыночной информации и взаимодействия с рынком с помощью ордеров*.

Детальное рассмотрение трех основных функций 

OnInit

Данная функция настраивает некоторые возможности работы с ботами. Боты имеют такие основные понятия как:

  • Буферы - отвечают за количество, тип и другие характеристики линий, помогающих отображать характеристики цены. С помощью буферов можно визуально отображать информацию для анализа и прогнозирования поведения цены. Графическая информация выводится в виде чарта непосредственно на ценовом графике или под ним.
  • Параметры - отвечают за количество, тип и другие характеристики входных параметров. Эти механизмы описываются в начале работы с ботом непосредственно в функции, которая рассматривается. Таким образом, в данной функции есть возможность задать параметры конфигурации бота.

OnBar

Данная функция дает возможность обработать все бары для расчета информации, которая отображается на каждом баре. Для защиты чарта от излишних вычислений (особенно в случае сложных расчетов) разумно ограничивать количество баров для расчета. Функция имеет две встроенных переменные ReCount и Count. ReCount - указывает, сколько появилось новых баров, которые нужно обработать. Count - указывает на общее количество доступных баров.

OnTick.

Функция создана для возможности оперативно реагировать на каждый тик. Также имеет две встроенных переменные ReCount и Count. ReCount - указывает, сколько появилось новых баров, которые нужно обработать. Count - указывает на общее количество доступных баров. Также нужно помнить:  всегда необходимо описывать все три базовые функции в тексте программы, даже если какая-либо из  функций не используется.

Элементарный индикатор Low. 

Этот индикатор выводит минимальное значение цены. В первой базовой функции OnInit использована команда s_buff, которая устанавливает один буфер для вывода информации на чарт. В данный буфер будет выводится минимальное значение цены.

 int OnInit()
  {
   s_buff(0,1,1,0,"Silver","Silver","Silver");
  }

Вторая базовая функция OnBar используется для того, чтобы провести расчет на каждом баре. Сначала вызывается пользовательская функция ShowName, которая отвечает за вывод информации на чарт с названием индикатора. Переменная ReCount содержит информацию про количество баров, которое необходимо обработать. Следующая строка проверяет значение переменной ReCount. Если количество баров для пересчета меньше единицы - работа функции завершается. Следующие две строки объявляют необходимые для работы переменные "p_low" и "i", где "i" - буфер для счетчика цикла; "p_low"  - удерживает текущее значение минимальной цены. В следующей строке построен цикл перерасчета индикатора на каждом баре. Цикл начинается с первого бара и заканчивается последним баром, который необходимо обработать. Бар с индексом 0 не обрабатывается, поскольку в нулевом баре ценовой минимум еще не сформирован.

Для получения минимальной цены бара используется команда low. Для того, чтобы отобразить цену на графике в заданном буфере, используется команда s_dbuff. На этом расчет завершается.

 int OnBar()
  {
   ShowName();
   if (ReCount<1){return -1;}
   double p_low;
   int i;
   for(i=1;i<=ReCount;i=i+1)
     {
      p_low=low(i);
      s_dbuff(0,i,p_low,0,0,"",0);
     }
  }

Третья базовая функция OnTick - не используется.

 int OnTick()
  {
  }

Пользовательская функция ShowName использует команды prt та prt_a для того, чтобы вывести название индикатора в окно чарта.

 int ShowName()
  {
   prt(0,"Low [");
   prt_a(0,"]");
  }

Более сложные примеры представлены в разделах справки

Общая информация о подходе к работе экспертов и их синхронизации 

Поскольку на рынке криптовалют непросто находить точку отсчета для определения прибыли (особенно если на одном счете происходят торги и ботами, и вручную, а также возможны пополнения от майнинга), становится сложно отфильтровать информацию, касающуюся работы, например, одного эксперта в массе другой информации. Однако, общую прибыль определить можно. Для того, чтобы эксперт мог нормально работать на рынке криптовалют, для него создана виртуальная линия расчетов, данные которой хранятся в буфере, схожим с индикаторным буфером. В итоге вся аналитика переносится на линию расчетов по данному буферу. А тот факт, что терминал всегда включен и находится на рынке, позволяет синхронизировать эти сигналы. Если все-таки по каким-либо причинам синхронизация не произошла, всегда есть возможность исправить ситуацию в ручном режиме. Также для синхронизации даты начала расчетов в сигнальном буфере в каждом эксперте или индикаторе есть дата начала расчетов. Данную дату необходимо установить именно на то время, когда вы начинаете торговлю. Она сохранится в настройках эксперта и после перезагрузки будет актуальной. 

Синхронизация даты

Непосредственное детальное рассмотрение исходного кода эксперта достаточно объемные и выделены в отдельную статью "Эксперт Bot Moving Fast-Slow".


Назад

TerminalCoin

2018-10-29 06:51:24