Язык программирования pine script + видео обзор

Quickstart guide¶

A script written in Pine is composed of functions and variables. Functions contain instructions that describe the required calculations. Variables save the values used or created during those calculations.

A script must contain a study or strategy annotation which defines the script’s name and other properties. The script’s body contains the functions and variables necessary to calculate results which will be rendered on a chart with a plot function, or some other function that plots the script’s output.

Example of a Pine script¶

Let’s look at the implementation of the MACD indicator in Pine:

After adding the “MACD” script to the chart you will see the following:

Язык программирования pine script

Pine contains a variety of built-in functions for the most popular algorithms (SMA, EMA, WMA, etc.). You can also define your custom functions. You will find a description of all available built-in functions here.

“study” vs “strategy”¶

Pine studies, as the one in the previous example, also contain calculations, but cannot be used in backtesting. Because they do not make use of the broker emulator, they use less resources and will run faster.

Execution model of Pine scripts¶

A Pine script is not like many normal programs that execute once and then stop. In the Pine runtime environment, a script runs in the equivalent of an invisible loop where it is executed once on each historical bar. When execution reaches the last, real-time bar, the script executes once every time a price or volume change is detected, then one final time when the real-time bar closes and becomes a historical bar.

Series¶

Understanding scripts¶

If you intend to write Pine scripts of any reasonable complexity, a good comprehension of both the Pine execution model and series is essential in understanding how Pine scripts work. If you have never worked with data organized in series before, you will need practice in putting them to work for you. When you familiarize yourself with Pine’s fundamental concepts, you will discover that by combining the use of series with our built-in functions designed to efficiently process series information, much can be accomplished in very few lines of Pine code.

Pine Editor¶

The Pine Editor is where you will be working on your scripts. To open it, click on the Pine Editor tab at the bottom of your TradingView chart. This will open up the editor’s window. We will create our first working Pine script. Start by bringing up the “New” dropdown menu at the top right of the editor and choose Blank indicator script. Then copy the previous example script, select all code already in the editor and replace it with the example script. Click Save, choose a name and then click Add to Chart. The MACD indicator will appear in a separate Pane under the chart.

Where to go from here?В¶

This documentation contains numerous examples of code used to illustrate how functions, variables and operators are used in Pine. By going through it, you will be able to both learn the foundations of Pine and study the example scripts.

The fastest way to learn a programming language is to read about key concepts and try them out with real code. As we’ve just done, copy this documentation’s examples in the editor and play with them. Explore! You won’t break anything.

You will also find examples of Pine scripts in the editor’s New dropdown menu and in TradingView’s extensive Public Library of scripts which contains thousands of open source Pine scripts. Enjoy and welcome to Pine!

Источник

Как и зачем я писал парсер для сайта Tradingview. Автоматизация торговли своими руками

Проблема: На текущий момент наиболее удобным и полноценным программным обеспечением (далее ПО) для автоматизации торговли на российском биржевом рынке является небезызвестный ТСЛАБ.

Несмотря на несомненные плюсы в виде удобного визуального редактора для написания торговых скриптов, который позволяет писать роботов даже без знания языков программирования, есть ряд недостатков, которые делают использование данного ПО для меня крайне не практичным. И думаю не только для меня, учитывая, что средний размер счёта на Мосбирже как правило не превышает 500 тыс.р.

1. Стоимость: Абонентская плата 4500р./мес+аренда виртуального сервера (1000 р./мес.)
Это постоянная издержка ложится очень сильным бременем на финансовый результат моей торговли. Поэтому имея размер счёт в размере 500 тыс.р. и надеясь с него получить хотя бы 20% годовых, с существующими издержками вам нужно зарабатывать порядка 32-35%, чтобы выйти на плановую доходность.

2. Нестабильность работы: Несмотря на то, что мои алгоритмы работают преимущественно с рыночными заявками (тип заявок, который предполагает 100% исполнение), мои позиции часто удваивались, либо не исполнялись вовсе.

Задача:Написать ПО для автоматизации торговли для минимизации постоянных издержек с удобным интерфейсом для создания торговых скриптов, позволяющим писать торговых роботов без наличия глубоких знаний в области программирования.

Архитектура всего проекта с текущим и функционалом и планируемыми доработками представлен на рисунке ниже.

Язык программирования pine script

Самым главным звеном в программе несомненно является сайт Tradingview (далее TV). Он как раз и представляет нам удобный функционал для написания своих торговых скриптов за счёт встроенного языка Pine_Script.

Язык к слову сказать не требует специфических знаний и в своей основе похож на язык Easy Language пакета Metastock, а наличие интерактивной справки на русском языке делает написания кода максимально приятным.

Пример стратегии пробитие скользящей средней (буквально в три строчки кода):

Теперь имея удобный интерфейс для написания торговых скриптов, собственно осталось наладить процесс отправки заявок из TV непосредственно в торговую систему (в моём случае это программа Quik), либо напрямую на сервер брокера. Проблема лишь в том, что у TV нет открытого API для реализации данного функционала.

В попытках решить данную проблему первое, что мне пришло в голову это использовать плагин для тестирования WebSelenium и путём поиска XPath локаторов находить нужные нам элементы, которые отвечают за сигналы покупки-продажи.

Сами сигналы при этом отображаются в таблице и проблем вроде не должно было бы возникнуть. Но для поиска крайнего сигнала таблица требовала скроллинга, а элемент скроллинга мне найти так и не удалось (см. рисунок ниже).

Язык программирования pine script

Поэтому пришлось искать другое решение.

Визуально сигналы TV у нас отображается в элементе сanvas. Цвет сигнала при необходимости можно менять (ex: красный-продажа, зелёный-покупка).

Цвета заданные в TV мы задаём в нашем приложении. Само приложение написано на Java, графический интерфейс реализован с помощью библиотеки Swing
Далее в самой программе нам нужно выделить область canvas (либо просто сканируемую область), в которой мы будем искать контрольные цвета.

На рисунке ниже представлен сайт tradingview c тремя выбранными инструментами, по каждому из них задан цвет торгового сигнала. Эти цвета продублированы в мою программу Parse_Signal.

Язык программирования pine script.

Работает она в двух потоках.

1 первый поток:

Сканирует выделенную область (в данном случае canvas).
Скан делаем классически используя функционал класса Robot:

Далее разбивает полученный скан на массив пискелей:

Ищет в массиве пикселей контрольные цвета торговых сигналов. Поиск осуществляется слева направо. Т.е. именно цвет крайнего правого пикселя является актуальным для программы:

Язык программирования pine script

2 поток программы осуществляет запрос цены торгуемого инструмента посредством парсинга html страницы сайта Финам. Используется плагин JSOUP. Здесь всё просто выгружаю html страницы и осуществляю поиск кода необходимого мне торгуемого инструмента (ex: Si, Sber и т.п.).

Стоить отметить, что фактически у нас получается довольно громоздкая связка TV+Парсер+Quik. И несмотря на стабильность данного решения в будущем планируется отправлять заявки не в Quik, а напрямую на сервер брокера (ex: используя как вариант интерфейс Atlentis от Алора). Библиотека правда опять реализована на С#, поэтому придётся что-то придумывать.

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

Код программы выложен в открытом доступе.

Если кто-то готов поделится своими идеями взаимодействия с TV буду очень рад увидеть это в комментариях.

Источник

Как создать торгового бота для крипторынка с использованием TradingView (PineScript)

Прежде всего, давайте определимся с основным термином этой статьи. Что такое торговый бот? Торговый бот — это использование компьютерной программы или системы для торговли на рынке в соответствии с заранее определенным и указанным набором правил. Другими словами, трейдер строит определенный алгоритм для своей торговой стратегии, который будет автоматически выполняться на рынке при выполнении всех условий. Это также причина, почему мы также будем использовать термин алгоритмическая торговля.

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

Торговый бот может торговать в соответствии с техническими индикаторами, импульсом и основами. Или вы можете создать гораздо более продвинутый торговый алгоритм, который поможет вам более эффективно выполнять ордера, от маршрутизации ордеров через различные биржи (арбитражная торговля) до нарезки большого ордера на более мелкие части (автоматические Айсберг ордера).

3 наиболее популярных крипто-торговых стратегий: Создание рынка (Market Making), Арбитраж, Стратегии следования за трендом.

Это стратегия, в которой происходит непрерывная покупка и продажа, для того чтобы отразить разницу между ценой покупки и продажи. Чтобы сделать это, трейдер должен разместить лимитные ордера по обе стороны от книги заявок (order book), чтобы получить прибыль от спреда (spread). Тем не менее, эта стратегия будет иметь свои ограничения в условиях низкой ликвидности или во время предыдущей экстремальной конкуренции.

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

Целью этой стратегии является выявление тренда актива и выполнение сделок на основе базового тренда. Стратегия следования за трендом пытается получить прибыль путем анализа импульса актива в заданном направлении. Трейдеры, которые выполняют эту стратегию, войдут в длинную позицию, когда криптовалюта торгуется вверх (long position), и продают позицию (short position), когда тренд разворачивается.

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

А пока давайте приведем пример торгового бота, который может быть построен с использованием TradingView (TV). Прежде всего, важно создать сценарий стратегии, потому что сценарий стратегии может быть протестирован, и TV предоставит подробные результаты вашей стратегии.

Код ниже, представляет простую стратегию EMA (exponential moving average), в которой вход и выход происходят при пересечении быстрой и медленной экспоненциальной скользящей средней (EMA). Это можно вставить в Pine Editor TV.

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

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

Теперь вы можете создавать оповещения (alerts) для вашего торгового актива и выбирать условия оповещения и действия.

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

Источник

Краткое руководство

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

Пример скрипта Pine

Давайте посмотрим на реализацию индикатора MACD в Pine:

Это комментарий, содержащий описание версии компилятора, которая сообщает компилятору, что скрипт будет использовать 4-ую версию языка Pine.

Определяет имя скрипта, который будет отображаться на графике как «MACD».

Определяет переменную macd как разницу между двумя EMA.

Определяет переменную signal как сглаженное значение macd, с и спользованием алгоритма SMA (Simple Moving Average, простое скользящее среднее) с длинной 9.

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

После добавления скрипта «MACD» на график вы увидите следующее:

Язык программирования pine script

Индикаторы и стратегии

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

Pine индикаторы, как и в предыдущем примере, также содержат расчеты и могут отображать информацию на графиках, но не могут использоваться при тестировании на истории. Индикаторы, содержащие alertcondition вызовы, могут использоваться для создания оповещений с помощью диалогового окна « Создать оповещение TradingView».

Модель исполнения скриптов Pine

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

Серии

Понимание сценариев

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

Редактор Pine

Что дальше?

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

Самый быстрый способ выучить язык программирования — прочитать ключевые понятия и опробовать их на реальном коде. Как мы только что сделали, скопируйте примеры этой документации в редактор и поиграйте с ними. Проводите исследования! Вы ничего не испортите.

Также вы найдете примеры скриптов Pine в выпадающем меню редактора Новый и в обширной публичной библиотеке скриптов TradingView, которая содержит тысячи скриптов Pine с открытым исходным кодом. Наслаждайтесь и добро пожаловать в Pine!

Источник

Кодинг PineScript. Часть 2.

Продолжим от простого к сложному, теперь в скрипте уже 12 строк и больше команд. Кстати, правильно это называть не командами, а различными там операторами, литералами, функциями, но этим пусть матёрые погромисты занимаются, а у нас всё будет называться «командами» для простоты.

Кстати, хинт

Индусский код

В прошлом примере у нас был «Индусский код», то есть нечто, что рассчитывалось 2 или более раза, хотя по правильному надо бы сделать чтобы всё рассчитывалось только 1 раз, если такое возможно. Там у на SMA высчитывалась 2 раза, а в примере скрипта из второго урока я это убрал. Но пойдем по порядку.

Задачка

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

Строка 2. Пирамидинг

В строке 2 добавилось объявление пирамидинга, но стоит 0. Там можете ставить, скажем, пять, и тогда скрипт при запуске будет с выбранными пирамидингом на 5 заявок. А остальное как было, без нового.

Строка 4. Переменная

Специально пропустил пока строку 3. В строке 4 мы объявляем переменную, она называется «sma1». Причем название мы придумываем какое угодно сами. Можно было назвать «line1», например. Но в ниже эта переменная используется в других строках. То есть SMA рассчитывается только 1 раз, а потом используется, а не рассчитывает повторно. Так мы избегаем «Индусский код».

Строка 3. Другой таймфрейм

Далее указано W, что означает смотреть недельный таймфрейм. Туда же можно поставить другие значения, типа:

Строка 5-6. Рисовалка

Строка 7. Двойное условие

Тут мы снова создаем новую переменную и называем её up. В результате расчета переменная up будет означать либо true (если условия выполняются), либо false (если не выполняются). Тут третьего точно не дано.

Но условия у нас теперь уже два. И они оба обязательные. Потому что используется оператор and. То есть наша переменная up будет истинной только если окажутся верными оба условия, а одного недостаточно.

Первое условие: цена закрытия свечи выше sma1 (то есть выше SMA с недельного таймфрейма)
Второе условия: цена закрытия свечи выше sma2 (то есть выше SMA с текущего таймфрейма)

Обратите внимание, в обоих случаях используется цена закрытия свечи close с ТЕКУЩЕГО таймфрейма. То есть цена close с недельного не используется. А то тут легко ошибиться.

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

Строка 8. Или-или

Кроме оператора and есть еще оператор or. Тут мы объявляем еще одну новую переменную sell, и она тоже будет либо истиной (true) либо ложью (false). Но для того чтобы она стала истиной, достаточно выполнения одного из двух условий, не обязательно обоих. Потому что тут or.

Строка 12. Закрыть всё

Пропускаю строки 9-10-11, так как там ничего нового (после первого урока).

В прошлый раз мы кривовато закрывали наш лонг. А именно, открывали шорт с нулевым капиталом. Напомню, что нам надо чтобы работало, а то что кривовато нас не волнует, так как мы на работу программистами устраиваться не планируем. Мы хотим ничего не делать, смотреть на график и получать денег. А они пусть работают 🙂

Это команда означает просто закрыть все позиции. И длинные, и короткие, вообще все.

Перевод

Строка 1. Версия языка третья.
Строка 2. Это стратегия, а не индикатор. Называется она «Coding lesson 2». Будет поверх графика. Учёт вести будет в процентах капитала. Сделки на 100% капитала. Пирамидинг нам не надо.
Строка 3. sma1 будет означать простую скользящую среднюю на 7 свечек с недельного таймфрейма по ценам закрытия свечи, с той же пары
Строка 4. sma2 будет означать простую скользящую среднюю на 7 свечек с выбранного юзером на графике таймфрейма по ценам закрытия свечи
Строка 5. Нарисовать sma1
Строка 6. Нарисовать sma2
Строка 7. up будет верной переменной если цена закрытия свечи выше чем sma1 и выше чем sma2, обо условия обязательные
Строка 8. sell будет верной переменной если цена закрытия свечи ниже чем sma1 или ниже чем sma2, достаточно одного условия из двух
Строка 9. Если переменная up верна, то.
Строка 10. Открыть длинную позицию на всю котлету
Строка 11. Если переменная sell верна, то.
Строка 12. Закрыть вообще все позиции

Результаты

Стала ли стратегия лучше по сравнению с предыдущем вариантом? Смотря что считать «лучше». Я бы сказал стратегия стала надежнее. Теперь больше % верных прогнозов: было 37,55%, стало 41,94%. Теперь меньше максимальная просадка: было 45%, стало 25%. Улучшился косвенный показатель эффективности торговой стратегии профит-фактор: было 2,3, стало 3,5.

Мульти-таймфреймовый подход можно использовать не только для скользящих средних, а вообще для всего.

Источник

Видео

PINE SCRIPT #1 — ВВЕДЕНИЕ. Системный Трейдинг

PINE SCRIPT #1 — ВВЕДЕНИЕ. Системный Трейдинг

Pine Script программирование для чайников #1 Начало

Pine Script  программирование для чайников #1 Начало

TradingView + PineScript = Мечта айтишника-инвестора, дилетантский обзор, программирование стратегий

TradingView + PineScript = Мечта айтишника-инвестора, дилетантский обзор, программирование стратегий

PineScript ч1 Как работает? Индикатор или стратегия? Редактор Pine.

PineScript  ч1 Как работает? Индикатор или стратегия? Редактор Pine.

Программирование на Pine Script #1

Программирование на Pine Script #1

Pine Script 🔥 Стратегия 402{bb1f2bf0e2be7ba962b09d3168c98697d7d19453339619b8e3ff7f7b4ec92b81} Net Profit 🔥 Бесплатно! Исходники!

Pine Script 🔥 Стратегия 402{bb1f2bf0e2be7ba962b09d3168c98697d7d19453339619b8e3ff7f7b4ec92b81} Net Profit 🔥 Бесплатно! Исходники!

PineScript. Программирование Индикаторов в TradingView. Начало.

PineScript. Программирование Индикаторов в TradingView. Начало.

Pine Script программирование для чайников #4 Как сделать стратегию

Pine Script  программирование для чайников #4 Как сделать стратегию

5 ХУДШИХ языков программирования, которые не стоит учить!

5 ХУДШИХ языков программирования, которые не стоит учить!

PINE SCRIPT #2 — ОСНОВЫ ЯЗЫКА. Системный Трейдинг

PINE SCRIPT #2 — ОСНОВЫ ЯЗЫКА. Системный Трейдинг
Поделиться или сохранить к себе:
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных, принимаю Политику конфиденциальности и условия Пользовательского соглашения.