Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
investigator
7 лет назад

Создаём аналитический инструмент | #1

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

Идея

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

  • Отследить взаимные комбинации наименьшего количества баров. Можно ли эти комбинации использовать в качестве точек для совершения сделок.

Что это будет?

В анализе и принятии решений в торговом процессе участвуют разные виды приложений. Их можно разделить на три большие группы:

  1. Индикаторы
  2. Роботы
  3. Утилиты

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

Я решил, что это будет комбинация утилиты и индикатора, не автомат.

Логика процесса

В программировании изначально принято рисовать блок-схему логики работы приложения. Каюсь, я этого не делаю. Иногда пишу отправные моменты, которые надо облечь в код. Например, для вышеозвученной идеи надо выполнить следующие пункты:

  1. Найти на графике метку, установленную встроенными средствами торгового терминала. Берём в качестве метки - вертикальную линию.
  2. Сигнализировать о том, что линия (метка) найдена.
  3. Идентифицировать бар, который совмещается с установленной меткой.
  4. Сравнить параметры идентифицированного бара с параметрами предыдущего бара.
  5. Найти на графике другие бары соответствующие параметрам определёнными в п.4.
  6. Нарисовать на графике сигналы, где встречаются подобные комбинации.
  7. Предусмотреть функцию перерисовки сигналов при перемещении вертикальной линии на другой бар.
  8. Убрать все графические элементы, относящиеся к приложению, при выгрузке его из памяти терминала.

Кодописание и предпочтения

(Облекаем пункты 1 и 2 в код)

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

Для нашего приложения найти метку (вертикальную линию) также можно двумя путями:

  • Когда устанавливаем линию на график, сразу прописываем ей имя, и по этому имени её будет находить приложение.
  • Устанавливаем линию без предварительного присваивания имени, но на чистый график (т.е. на нём нет никаких других вертикальных линий). В этом случае, приложение будет искать единственную вертикальную линию.

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

Во втором - открывать окно нового чистого чарта, либо удалять уже имеющиеся вертикальные линии.

Я пошел вторым путём. В конце-концов, открыть новый чарт - это просто один клик мышки.

Пишем:

//----
int start() {
//---Объявляем и выводим в отдельную переменную общее количество объектов чарта
int obj_total=ObjectsTotal();
//---Объявляем переменную для приёма имени найденных объектов
string name;
//---
for(int p=0;p<obj_total+1;p++){ //Цикл перебора всех объектов чарта
name=ObjectName(p);// Приём имен объектов в переменную name
if(ObjectType(name)==OBJ_VLINE) // Если находим вертикальную линию,то
ObjectSetString(0,name,OBJPROP_NAME,"Initial Period"); //назначаем ей имя: "Initial Period"
ObjectSetInteger(0,"Initial Period",OBJPROP_COLOR,ColPeriodInitial);//перекрашиваем цвет
ObjectSetInteger(0,"Initial Period",OBJPROP_STYLE,StylePeriodInitial);//устанавливаем стиль
ObjectSetInteger(0,"Initial Period",OBJPROP_WIDTH,WidthPeriodInitial);//устанавливаем толщину
ChartRedraw();//перерисовываем чарт
}
return(0); }
//---


Модификация найденной линии по цвету, стилю и толщине, введена для визуального подтверждения, что приложение нашло её.  Перед запуском функции start(), вставляем пользовательские настройки этих параметров. Их можно оперативно менять без переписки самого тела приложения:

//---Настройки пользователя при старте приложения
input color ColPeriodInitial=clrSteelBlue;//Цвет линии
input int StylePeriodInitial= 0;//Стиль линии
input int WidthPeriodInitial =0;//Толщина линии
//---


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


А вот так работает наш код написанный выше:

Рисуем вручную линию, приложение её находит, присваивает имя, меняет параметры. (В свойствах объекта можно наблюдать эти изменения)

Пункт 1 и 2 из "Логики процесса" написан и работоспособен.

Продолжение следует


* * *

Исходный код разобранный в этом посте лежит здесь: https://ru.files.fm/f/gf73xxut

(Для использования на чарте, его надо прежде скомпилировать средствами Language Editor MT4)


@investigator

0
7.899 GOLOS
На Golos с January 2017
Комментарии (5)
Сортировать по:
Сначала старые