Визуальное программирование всегда было желанной целью для разработчиков программного обеспечения, даже в области количественной торговли. Потому что подход визуализации «что видишь, то и получаешь» значительно снижает технический порог разработки программирования. Пользователям больше не придется иметь дело с кучей скучного кодирования. Им просто нужно использовать мозги, воображение и логическое мышление, и сосредоточиться на самом бизнесе. Вы можете реализовать любую программу, какую захотите, разве это не удивительно!
Тогда давайте вместе войдем в сферу визуального программирования количественных торговых стратегий!
После входа на https://www.fmz.com зарегистрируйте учетную запись (если вы уже зарегистрированы, войдите в систему напрямую) и нажмите: Центр управления->Библиотека политик->Новая политика.
Мы видим первоначальную стратегию визуализации. Он выводит только информацию об активах счета настроенной по умолчанию биржи (первый объект биржи, добавленный в бэктест или робот). (Как показано ниже)
## Прежде чем начать изучать, как использовать визуализацию, мы должны сначала понять некоторые концепции проектирования визуализации.
Внимательное наблюдение показывает, что все модули имеют шипы (вогнутые) и пазы (выпуклые), что означает, что модули можно «соединять» и «подсоединять». Если функциональные коды, представленные двумя модулями, можно соединить, то они защелкнутся, когда вы приблизите паз и шип двух модулей друг к другу.
Некоторые модули имеют специальные настройки, например:
Вы можете перетащить модуль «Проект» слева на модуль «Соединение», чтобы добавить позицию паза и шипа, тем самым добавив позицию для склеивания текста. Таким образом, вы можете внести некоторые изменения и настройки в модуль, нажав на маленькую шестеренку.
Некоторые модули требуют входных параметров, которые могут быть значениями, строками и т. д. Если вы не добавите переменные в качестве входных параметров модуля, модуль будет выполнен в соответствии с входными параметрами по умолчанию.
Такой вычислительный модуль для нахождения квадратных корней выводит результаты вычислений этого модуля.
Как видите, если входной параметр отсутствует, то для вычисления квадратного корня из 9 в качестве входного параметра используется значение по умолчанию 9.
Конечно, если вы хотите использовать переменный модуль в качестве входного параметра, вы можете напрямую подключить переменный модуль к положению паза и шипа (выемки).
Модуль можно щелкнуть и перетащить левой кнопкой мыши. Модули можно копировать с помощью ctrl + c и вставлять с помощью ctrl + v, так же удобно, как копировать и вставлять код или текст. Масштаб рабочей области можно увеличивать или уменьшать с помощью колесика мыши, при этом масштаб всех модулей будет увеличиваться или уменьшаться. Щелкните и удерживайте пустую область в области операции и перетащите ее, чтобы переместить. В корзине справа хранятся недавно удаленные модули. Самое главное, после сборки модульной стратегии не забудьте нажать «Сохранить».
Вы можете видеть, что в левой части области визуального редактирования имеется множество категорий модулей, и в каждой категории имеется множество доступных визуальных модулей.
Всего существует 11 категорий.
Этот модуль обычно используется в сочетании с текстовыми модулями, как показано ниже:
Вы можете ввести строку в модуль класса текста, чтобы при запуске модуля «выходная информация» было выведено содержимое строки в модуле текста.
Бэктестинг:
Как код языка JavaScript:
function main(){
Log("你好,可视化编程!")
}
Этот модуль выглядит так же, как «Вывод информации», за исключением того, что он выводит информацию и отправляет ее в учетную запись WeChat, привязанную к текущей учетной записи.
Как код языка JavaScript:
function main () {
Log("微信推送!@")
}
Модуль исключения throw позволяет программе вызвать ошибку, а затем остановить выполнение программы (без написания кода обработки исключений).
Это похоже на стратегию JavaScript, где функция throw «строка для вывода» выполняется непосредственно в основной функции.
function main () {
throw "第一句就抛出异常,让程序停止!"
}
Результаты бэктестинга:
Обычно он чаще используется во время отладки, например, когда вы хотите, чтобы программа остановилась при определенном условии и в этот момент вывела на экран некоторые данные для удобства наблюдения.
Или вы можете поместить модуль генерации исключений в поток кода, где могут возникнуть проблемы, чтобы программа могла сообщать об ошибках и обнаруживать некоторые ошибки.
Модуль гибернации
Как и в политике JavaScript:
function main () {
Sleep(1000 * 5)
}
Протестируйте модуль гибернации:
Результаты бэктестинга:
Этот модуль аналогичен функции LogProfit API платформы количественной торговли Inventor, он печатает журнал прибыли и автоматически рисует кривую прибыли на основе входных параметров.
Например:
Результаты бэктестинга показаны ниже:
Соответствующий код политики JavaScript выглядит следующим образом:
function main () {
LogProfit(1)
Sleep(1000 * 5)
LogProfit(2)
Sleep(1000 * 5)
LogProfit(3)
Sleep(1000 * 5)
LogProfit(2)
Sleep(1000 * 5)
LogProfit(5)
}
Его можно подключить в любом месте, где вы хотите вывести информацию о доходах.
Модуль цикла может охватывать ряд соединенных комбинаций модулей и позволять этой комбинации модулей выполняться в цикле.
тест:
Результаты бэктестинга:
Видно, что после того, как модуль цикла оборачивает комбинацию модулей, состоящую из Print Profit и Sleep, комбинация модулей будет выполняться непрерывно.
Использование этого модуля в основном такое же, как и у модуля loop, единственное отличие состоит в том, что этот модуль имеет встроенную функцию сна.
Этот модуль можно использовать, когда переменные модули или числовые значения должны контролировать точность. Числовое значение входного параметра будет выведено как числовое значение указанных десятичных знаков в соответствии с настройками.
Например, число 3,1415926535897 обрабатывается с точностью.
Бэктестинг показывает:
Используется для очистки журналов. В зависимости от входных параметров часть журналов может быть сохранена. Как указано в документации API:
LogReset()
Используется для очистки журнала доходов. В зависимости от входных параметров часть журнала может быть сохранена. Как указано в документации API:
LogProfitReset()
Этот модуль инструмента необходимо использовать совместно с рыночным модулем в «Типе торгового модуля», как показано на рисунке:
Используйте модуль выходной информации для вывода последней цены транзакции на последнем рынке тикеров:
Бэктестинг показывает:
Как и код стратегии JavaScript:
function main () {
Log(exchange.GetTicker().Last)
}
Этот модуль также необходимо использовать вместе с модулем сбора данных K-line в «Типе торгового модуля».
Сначала создайте переменный модуль и назовите его: K-line.
Затем получите данные K-line, используйте модуль данных K-line для их получения и назначьте их модулю переменных: «K-line».
Затем используйте модуль длины списка в «Типе модуля списка», чтобы получить длину модуля переменной K-линии, который используется для указания, из какой строки K-линии следует получать данные.
Сшейте, как показано на рисунке:
При запуске бэктеста распечатывается временная метка последнего бара K-линии.
Его также необходимо использовать вместе с модулем Get Depth Data в «Типе модуля транзакций».
Установите индекс на 0, установите ордер на продажу и получите информацию о ордере на продажу.
Как и код стратегии JavaScript:
function main () {
Log(exchange.GetDepth().Asks[0])
}
Этот модуль необходимо использовать вместе с модулем «Получить информацию об активах».
Например: вывести количество монет, имеющихся на текущем счете.
Бэктестинг показывает:
Как в стратегии JavaScript:
function main () {
Log(exchange.GetAccount().Stocks)
}
Этот модуль используется для получения значения определенного атрибута в данных заказа, например, цены или количества первой продажи в книге заказов (пример номер 13).
Результаты бэктестинга:
Как в стратегии JavaScript:
function main () {
Log(exchange.GetDepth().Asks[0].Price)
}
Его также можно использовать для получения определенного атрибута в информации о заказе, возвращаемой «Модулем запроса сведений о заказе» (который будет описан в расширенном разделе).
Аналогично, его следует использовать вместе с “Get Futures Position Module”. Следует отметить, что возвращаемые модулем Get Futures Position данные о позициях представляют собой массив (список), который представляет собой структуру данных, содержащую позиции различных контрактов и направлений. . Поэтому при его использовании необходимо указывать индекс.
Узнав так много, давайте объединим операцию хеджирования, то есть будем хеджировать как краткосрочные, так и срочные контракты одновременно. Мы делаем положительный арбитражный хедж, то есть открываем короткий форвардный контракт, 1 контракт, и открываем длинный контракт в ближайшей перспективе.
Результаты бэктестинга:
Пример стратегии визуализации:
Больше стратегий доступно на сайте: https://www.fmz.com/square
Другие статьи этой серии