Необходимо на графике вывести горизонтально или вертикально (слева/спарва/сверху/снизу, должно задаваться через параметр) последние N (задается через параметр) изменений цены в пунктах (то есть текущая-предыдущая/минимальное изменение (так называемый "пункт")). То есть вывод будет +5 -7 -1 +2 и  т.д.

====

Есть платформа для торговли на Forex - FXCM TradeStation. В ней на графики можно накладывать индикаторы технического анализа (к примеру - скользящая средняя, регрессия и т.д.). Эти индикаторы можно писать самому на языке Lua или Javascript (примеры привожу на Lua).

Если вкратце о структуре скрипка на Lua под эту платформу (чтобы примерно понимать, сколько работы там): есть несколько обязательных функций которые надо написать, это:

1) function Init() - выполняется один раз при старте платформы, в этой функции по сути составляется описание индикатора:

    indicator:name("Figurelli Series indicator");

    indicator:description("Figurelli Series indicator"); -- как называется,

    indicator:requiredSource(core.Bar); -- тип принимаемых данных (один потом core.Tick или core.Bar, то есть несколько потомков со значениями за определенный промежуток времени (значения на начало и конец периода, минимум и максимум в течении этого промежутка времени)

    indicator:type(core.Oscillator); -- тип выдаваемых значений (core.Indicator, то есть диапазон значений совпадает с источником, core.Oscillator, то есть у него свой диапазон выдаваемых значений)

    indicator.parameters:addInteger("series", "series", "series", 36);

    indicator.parameters:addColor("clr", "Color", "Color", core.rgb(0, 0, 255)); -- парамиетры которые пользователь может задавать

2) function Prepare() -- функция вызывается когда пользователь накладывает индикатор на график. Тут мы должны инициализировать все что нам нужно для работы. Тут у нас имеются

    source = instance.source; --источник данных на основе которого мы должны считать. Зависит от того что мы указали в indicator:type.

    series=instance.parameters.series; --указанные пользователем параметры

    local name = profile:id() .. "(" .. source:name() .. ", " .. instance.parameters.series .. ")";

    instance:name(name); --указываем имя для легенды на графике

    FS = instance:addStream("FS", core.Bar, name .. ".FS", "FS", instance.parameters.clr, first); -- создаем выходные потоки (результат того что мы посчитаем

3) function Update(period, mode) --эта функция при старте вызывается для каждого значения которое нам надо посчитать (по индексу period). То есть period будет 0, 1... и до source:size() - 1. Потом он также будет вызываться при каждом изменении source 

     FS[period]=457348957;--и мы должны произвести какие-нибудь манипуляции и записать результат.

Также в prepare мы можем сказать что сами себя будем отрисовывать (добавить строчку instance.ownerDrawn(true);)

Тогда будет вызываться опциональная функция 

4) function Draw(stage, context)

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

Вся документация для разработки есть (на английском), примеров тоже куча (гуглите fxcodebase). Зачастую можно найти похожий каркас и подправить внутрянку (но наверное в этом случае проще с нуля). Дебаггера для платформы толкового нет (проще дебажить трейсами: core.host:trace("ырпвоап");

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

Оптимальным кандидатом будет какой-нибудь студент который хочет попробовать пописать торговых роботов (автоматизация торговли на биржах)

8 лет назад
SibVic
19 лет в сервисе
Был
8 лет назад

Заявки фрилансеров

Нет заявок фрилансеров