Как написать стратегию в tradingview
Перейти к содержимому

Как написать стратегию в tradingview

  • автор:

Как создать простую торговую стратегию с помощью TradingView

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

Давайте погрузимся в процесс, для начала у вас должна быть учетная запись в TradingView. Затем создайте новый макет диаграммы. В этом проекте я буду использовать таймфрейм 2H и криптовалютную пару BITMEX: XBTUSD.

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

Если вы пытались кодировать стратегию, которую читали в Интернете, вы бы знали, что большую часть времени (если не все) тестирование на истории выглядит разочаровывающим. Однако все, что вы читаете, хранится в нашем мозгу, и однажды одна из этих вещей станет полезной. Затем добавьте код к тому, что вы читаете, и это укрепит полученные знания. Чем больше вы исследуете, тем больше ваш разум начинает связывать точки всего, что вы обработали, и тогда начинают течь оригинальные идеи. Это награда за долгие часы попыток создать окончательную стратегию.

Когда у нас появляется идея, мы открываем «Pine Editor». В моем случае я вспомнил, что это был термин с буквой «w», состоящий из 4 букв, и все, это была очень расплывчатая идея, и поиск решения стал очень интересным.

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

Там вы можете найти конкретный термин или прочитать все и поэкспериментировать. В этом случае я искал «w», а по нему нашел «SWMA». Прочитав, что это было, я понял, что это не тот, который я искал, но поскольку он использует короткий взгляд назад, длину или период (количество столбцов, которые вы хотите, чтобы индикатор заглядывал в прошлое, чем выше, тем меньше шум, но и еще больше лагов) Я подумал, что попробую. После кодирования он должен выглядеть, как показано ниже.

Обратите внимание, что я создал только переменную с именем «swmaClose» и присвоил ей значение «swma (close)». Для тех, кто новичок в программировании, я думаю, что одна из самых страшных вещей — это то, насколько подавляющим является кодирование в более широкой картине, когда весь код готов и остается много-много строк. Я усвоил одну вещь: какой бы сложной ни была программа, все начинается с одной строчки кода. Итак, когда дело доходит до программирования, все, на чем вы должны сосредоточиться, — это линия, на которую вы смотрите.

Чтобы увидеть, что код делает на диаграмме, нажмите «Добавить в диаграмму».

Там вы увидите, что делает приведенный выше код.

Не совсем то, что мы имели в виду, мы хотим, чтобы код в это время распечатал «swmaClose» рядом с ценой. Для этого мы должны внести несколько изменений. Помните «Справочное руководство по языку сценариев Pine»?

Чтобы скрипт отображался рядом с ценой, мы должны изменить значение «overlay» на значение «true».

Чтобы скрипт выводил значение «swmaClose», мы должны заменить на него «close» в функции «plot ()».

Теперь наш код выглядит так.

Итак, нам удалось достичь нашей первоначальной цели, однако мы замечаем, что едва ли можем увидеть значение «swmaClose». Если мы посмотрим на «plot ()», мы сможем понять, почему.

Таким образом, мы можем изменить «цвет», «ширину линии» и «прозрачность» в «Pine Editor», и мы получим лучшее представление о графике.

Несмотря на изменение, нам все еще нужно увеличить масштаб, чтобы видеть его более четко, это связано с тем, что SWMA использует только последние четыре бара в своих расчетах и ​​не слишком сильно отстает от фактической цены, в результате она следует за ценой. очень близко.

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

Прежде чем я вам это покажу, давайте добавим фактическую переменную, которую я хотел в начале этой идеи. Куда нам его найти?

Давайте объявим «vwapClose» и присвоим значение «vwap (close)».

Обратите внимание, что основной «VWAP» использует «HLC3» (максимум, минимум и закрытие, разделенные на три). Я выбрал серию источников «close», потому что она меньше лагает.

Давайте теперь погрузимся в подход к цветам. Я создал две новые переменные: «swmaLong» и «vwapLong». Оба сравнивают цену («закрытие») со своим значением, идея в том, что когда цена выше каждого из них, она будет иметь тенденцию к росту.

Чтобы доказать теорию, давайте воспользуемся функцией «bgcolor ()», чтобы запомнить, что она означает, попробуйте думать о ней как о цвете фона.

Мы хотим, чтобы если условие истинно, то отображать цвет X, иначе цвет Y.

Чтобы узнать больше о тернарном условном операторе (? 🙂

Итак, после удаления функции «plot ()» добавляем новые переменные «… Long» и добавляем «bgcolor ()». Наш скрипт пока должен выглядеть так.

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

Один будет показывать синий, когда «swmaLong» истинно, а другой оранжевый, когда «vwapLong» истинно. Поэтому нам не нужно удалять какой-либо код, мы можем просто закомментировать строку, как показано ниже. Это заставит скрипт пропустить эту строку и не запустить ее.

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

Решение состоит в том, чтобы изменить «оверлей» на «ложь» в обоих из них.

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

В этом примере, касающемся найденных мной шаблонов, это три простых сценария.

A: Синий / оранжевый появляются одновременно.
B: Только оранжевый.
C: Сначала появляется оранжевый, затем синий.

Я решил пойти по сценарию «С». Условия на данный момент:
1- Оранжевый должен появиться в полосе, но не синий.
2- Когда имеет место (1), ни Оранжевый, ни Синий не должны встречаться на панели раньше.

Затем я объявляю переменную с именем «triggerLong» и назначаю условия (1) и (2).

Затем мы проверяем, что он работает правильно, и получаем более четкое представление о правильности наших шаблонов, передавая это значение в новую функцию «bgcolor ()».

Прежде чем мы продолжим, я хочу коснуться темы того, сколько индикаторов нам следует использовать. Чтобы упростить задачу, назовем это «Правило никогда». Никогда не используйте только один, никогда не используйте слишком много. Одно плохо, потому что нам всегда нужно подтверждение, и слишком много, потому что чем больше индикаторов или логики вы используете, тем более строгой / жесткой становится ваша система, результатом этого является более короткий срок службы. Универсальная система является гибкой, что позволяет ей быть устойчивой к рыночным изменениям. Лично я использую два-три индикатора.

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

Итак, нам нужно создать новую переменную, которая может сохранять состояние в true, когда происходит «triggerLong» или Purple. Назовем его saveLong.

Что делает «saveLong» — это когда появляется Purple, он становится «true», в то время как Orange все еще происходит, но в тот момент, когда Orange не отображается, он меняется на «false».

Теперь посмотрим, что делает saveLong на графике. Вот как должен выглядеть наш код на данный момент.

Обратите внимание, что мы добавили новый «bgcolor ()» и передали значение «saveLong», поэтому, когда оно истинно, желтый цвет будет отображаться на диаграмме.

Наш длинный сигнал на вход почти готов, до сих пор мы работали с Orange, и особые условия, связанные с ним, закодированы в Purple. Оставшаяся часть головоломки добавляет к ней синий цвет. Итак, мы создаем еще одну переменную и называем ее startLong.

Что делает startLong, пока состояние Purple, сохраненное желтым, является истинным, а состояние Blue происходит; затем он, наконец, посылает сигнал на открытие длинной позиции.

Давайте сделаем наш последний «bgcolor ()» и присвоим значение «startLong».

Можете ли вы угадать, какого цвета он будет, если «startLong» верно?

Теперь наша диаграмма будет выглядеть так.

Обратите внимание, сколько шума снижается с добавлением каждой новой строки кода.

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

Следующая часть — как протестировать то, что мы построили. Помните, что наш сценарий во второй строке начинался с учебы (…). Что ж, TradingView предлагает два типа скриптов, изучение и стратегию. У них много различий, но главное из них заключается в том, что вы можете создавать предупреждения в рамках одного исследования, а вы можете тестировать на исторических данных в рамках другого исследования. Есть определенные параметры, которые работают только в рамках стратегии, но все функции исследования работают с первой. Итак, чтобы превратить исследование в стратегию, вы можете просто заменить слово «изучение» словом «стратегия» во второй строке.

Затем давайте добавим новую строку и воспользуемся функцией strategy.entry ().

Закончив с цветами, нам удалось добавить два новых изменения, преобразовав исследование в стратегию и добавив функцию «strategy.entry ()», чтобы TradingView мог принять наш входной сигнал и смоделировать, как он работал бы в прошлом. Ниже наш новый код.

Как только мы добавляем его в диаграммы, мы видим, что на самом деле ничего не происходит.

Если мы посмотрим на «Список сделок», мы увидим, что есть только одна сделка, и она все еще открыта.

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

Обратите внимание, что TradingView предлагает два варианта выхода по риску: указанную вами точную цену и количество тиков от цены входа, зарегистрированной в системе тестирования на исторических данных. Для кодирования рискованных выходов нам понадобится функция «strategy.exit ()».

Поскольку цель этой статьи — выразить простой способ, я выбрал галочки. Мы должны разместить функцию «strategy.exit ()» ниже функции «strategy.entry ()», в то время как нет правила, по которому функция стратегии должна идти первой, поскольку она будет вести себя так же, как я лично выбрал ниже.

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

К сожалению, мы забыли добавить эти переменные, поэтому давайте сделаем это ниже.

Там вы видите новую функцию «input ()».

Теперь вы знаете, что делает «input ()», обратите внимание на строку, в которой мы упоминаем «takeProfit»; как мы запрашиваем другой ввод и умножаем на значение «stopLoss». Мы делаем это, чтобы быть в курсе соотношения вознаграждения и риска, что является наиболее эффективным способом добиться успеха в торговле. Теперь наш скрипт должен работать. Если вы немного заблудились, наш код должен выглядеть так, как показано ниже.

Наконец-то у нас есть кое-что.

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

Ключ к нему находится во второй строке «strategy ()».

После того, как вы прочтете и усвоите основы, я хочу дать вам параметры, которые я лично использую каждый раз. Вы можете заменять значения внутри «title» и «shorttitle» своими новыми каждый раз, когда вы строите новую стратегию.

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

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

В основном, хотя зеленый цвет появляется раньше, сигнал на самом деле имеет место в конце бара. Помните, что «закрытый» источник — это текущая цена, пока свеча все еще формируется, потому что она может изменить свое состояние и может создать ситуацию, когда «A› B », а затем изменится на« A ‹B», поэтому мы не знаем, какой единица — это окончательное значение до тех пор, пока полоса не закончится официально. Вот почему система тестирования на истории открывает позицию в баре после.

Чтобы зеленый совпадал с тестированием на истории, мы можем добавить «[1]» к «startLong» внутри «bgcolor ()».

Тогда это будет выглядеть так, как показано ниже.

Чтобы узнать больше о том, как работают стратегии, прочтите это.

У нас еще осталось одно дело. Вы заметили, что происходит что-то странное?

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

Ниже приведен пример того, как это может быть плохо.

Я решаю эту проблему, вводя логику управления позицией или ордером. Самый простой способ представить это — создать условие, которое гласит: «Разрешить это, когда это верно сейчас, а не в полосе раньше». Мы можем закодировать это следующим образом.

Чтобы понять, что произошло, см. Ниже.

Теперь, прежде чем тестировать наш новый код, я хочу взять предыдущее правило управления порядком и превратить его во что-то необязательное, используя «input ()».

Теперь у нас больше гибкости в работе нашей торговой системы.

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

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

Наш окончательный сценарий должен быть похож на приведенный ниже.

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

Я рекомендую прочитать эти Соглашения о кодировании сосны. Я должен признать, что их не было в наличии, когда я начинал много лет назад, поэтому, хотя я осознаю, что рекомендую их, я должен сам последовать совету; как говорится: Не научишь старую собаку новым трюкам. В любом случае, чем раньше вы начнете правильно учиться, тем лучше. Вы можете посетить PineCoders, чтобы узнать больше и стать разработчиком 10x Pine Script.

Спасибо за чтение, надеюсь, вы не только преуспеете в своей торговой карьере, но и получите от нее удовольствие.

Что такое стратегии и тестирование?

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

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

Как начать работу?

С помощью языка Pine Script любой пользователь может создать стратегию. Основная разница между стратегией и обычным скриптом заключается в использовании функции strategy, а не study, и наличии специальных команд, которые начинаются со слова ‘strategy’, как например strategy.entry или strategy.exit. В документации языка Pine есть специальный раздел, посвященный написанию и работе со стратегиями.

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

Как анализировать результаты стратегии?

При добавлении стратегии на график во вкладке Тестер стратегий появляется дополнительная информация, демонстрирующая отчёт о результатах стратегии.

Тестер стратегий состоит из трёх разделов: Обзор, Сводка показателей, Список сделок. Подробнее об индикаторах для каждого из разделов можно прочитать в Справочном центре.

Исполненные заявки отображаются прямо на графике, они обозначены стрелочками и отличаются по цветам в зависимости от операции.

Как только данные на графике обновятся, отчёт также обновится. Так происходит тестирование в реальном времени.

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

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

Что делать, если остались вопросы?

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

How to write your own stock trading strategy / Indicator on TradingView

Sairav Dev

B eing a trader working with Technical Analysis , we all look at multiple indictors like RSI , MACD , Moving Averages , Bollinger Bands … and the list goes on . In order to confirm our trades , we check these indicators , and combine it with other strategies like support, resistance, volume etc. When they all give a definite signal , we take position.

There is a way we can script(automate) this logic using TradingView’s PineScript. With Pinescript ->

  • We can create a new strategy (combination of multiple indicators and logic)
  • An indicator for that strategy
  • Backtest it(test it against the previous time duration — past candles) — how well it could have performed .

And once the strategy gives us a signal , we can set alarms or in case you are making a trading bot , you can automate the process of taking positions as well.

Writing a simple strategy script (using sma crossover )

Let’s look at an easy example to get a better understanding. Suppose our strategy is -> we get confirmations from the values of SMA(Simple Moving Averages — SMA-9 and SMA-20) , whenever sma9 crosses up sma20 , we long or buy otherwise we sell or short when sma20 crosses up sma9.

  • point 1 -> sma20 has crossed up sma9 , hence short
  • point 2 -> sma9 has crossed up sma20 , hence long

Let’s begin :

Go to Pine Editor tab on any chart on tradingview ->

and start writing below code ->

  • strategy is a built-in funtion and we have given a name “sma-x” a name for it
  • sma9 and sma20 are variables to which we are assigning sma values , you can name it anything.
  • ta.sma , is a built-in function for simple moving average.

close,9 => it will calculate sma for values of candle closes for past 9 candles. (Instead of close , you can have high,low,open as well)

— close,20 => it will calculate sma for values of candle closes for past 20 candles.

  • plot is a built-in function , to plot your indicators (sma9 and sma20 in our case) on the chart. It’s arguments are self-explanatory ->

#1 — value to plot

#2 — name of the indictor line to plot

#3 — color of the line

At this point click on the “Add to Chart” and you will see lines plotted on chart.

Create a strategy entry condition and backtest time frame —

  • longcond — is true if “ta.crossover(sma9,sma20)” happens where ta.crossover is a built-in function , i.e sma9 crosses up sma20. Similar for shortcond.
  • start and end — are our start and end date of backtesting to test our indicator , where timestamp is a built-in function , date format here used is (yyyy,MM,dd,hh,mm,ss) .

Tip → all built-in functions will be blue in color and you can read the documentation (how to use them) by ctrl+click if using windows or command+click for mac.

Place orders (for backtesting or future signals)

  • time is a in-built keyword which will compare to our start and end , if time is in our provided range , we will take entry for long and short.
  • strategy.entry is a built-in funtion for taking position , arguments (id of the position , strategy direction (long or short ) , quantity , )
  • when , condition of the order , in our case if longcond or shortcond will be true corresponding entry will execute.
  • longExitPrice and shortExitPrice are the prices where we exit the market position. For both sides , when the price difference (profit) is 1% , we exit the trade.

Finally , exiting the position …

  • strategy.position_size, If the value is > 0, the market position is long, If the value is < 0, the market position is short. So if current position taken is Long , then exit “Long” and vice versa.
  • strategy.exit , is a built-in funtion to exit the position , where limit is the exit price.

The complete code (with stoploss price as well)->

* Be very careful if you’re copy pasting the code from here , as the characters might change when you paste in strategy editor of TradingView. If that happens , just write it from the scratch in the editor.

* Take notice of the spaces as well while typing/copying ,as pine script uses whitespace indentation to define scope similar to python.

T hat’s it , as soon as you save the script , you will be redirected to Strategy Tester, which will show you the backtesting results, how your strategy would have performed for the time period specified.

Pine Script v5 для TradingView: пошаговое руководство

Pine Script — это язык программирования, созданный TradingView для тестирования торговых стратегий и создания пользовательских индикаторов.

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

Он не основан на каком-либо конкретном языке, но если вы использовали Python, то быстро разберетесь и заметите сходство.

Код скрипта Pine можно писать в редакторе Pine, который является частью платформы онлайн-графиков TradingView.

Почему я должен использовать скрипт Pine?

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

Простота в освоении — синтаксис скрипта Pine удобочитаем и проще, чем в других языках программирования. Кроме того, вам не нужно тратить много времени на проверку и обработку ошибок, поскольку TradingView позаботится обо всем этом за вас.

Обширная пользовательская база и библиотека. Пользователи TradingView могут публиковать свои индикаторы и стратегии в библиотеке TradingView.

Доступ к открытому исходному коду — отличный способ учиться у других программистов. Кроме того, в некоторых случаях кто-то другой уже написал код для того, что вам нужно.

Почему я не должен использовать скрипт Pine?

Основная причина, по которой вы не захотите использовать скрипт Pine, заключается в том, что вы ограничены вселенной TradingView.

Вот некоторые конкретные ограничения:

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

Сервис выходит за рамки данных о ценах. Некоторые стратегии включают экономические или статистические данные. TradingView предлагает некоторые данные (в основном данные Quandl) в этой категории, но в настоящее время они ограничены.

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

Внешние библиотеки. Pine Script не подходит, если вы хотите использовать внешние библиотеки для выполнения таких задач, как машинное обучение. Есть лучшие альтернативы, если ваша стратегия основана на использовании науки о данных или других сторонних библиотек.

Какие есть альтернативы использованию скрипта Pine?

Thinkorswim от TD Ameritrade — эта платформа во многом похожа на Pine Script.

Она использует проприетарный язык thinkScript и хранит данные о ценах в массивах аналогично скрипту Pine. Данные встроены, и платформа предназначена для создания пользовательских индикаторов и стратегий.

Ninjatrader — эта платформа также использует собственный язык, который называется Ninjascript. Язык не является полностью проприетарным, поскольку основан на C#.

Ninjatrader обладает большей гибкостью, поскольку позволяет подключаться к пользовательским потокам данных. Если вы уже знакомы с C#, C или C++, это может оказаться подходящей альтернативой.

Как начать работу со скриптом Pine?

Начать работу со скриптом Pine очень просто, ничего скачивать и устанавливать не нужно.

Если у вас уже есть учетная запись в TradingView, просто перейдите на их страницу.

Если у вас нет учетной записи, перейдите на сайт www.tradingview.com. Оттуда вы увидите окно входа в верхний правый угол.

Существует несколько вариантов регистрации в один клик или использование традиционного метода электронной почты/пароля.

Наличие учетной записи позволяет вам сохранять свои скрипты в облаке TradingView и дает возможность добавлять пользовательские индикаторы на графики.

После регистрации запустите графическую платформу, щелкнув график в меню или перейдя на страницу www.tradingview.com/chart.

Первый взгляд на редактор Pine

В редакторе Pine мы будем создавать наш код. Чтобы запустить его, нажмите Pine Editor в самом низу экрана.

Должен появиться экран, похожий на изображение ниже.

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

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

Пробежимся по нему строчка за строчкой.

Первая строка — это просто комментарий. Комментарии в скрипте Pine начинаются с двух косых черт.

Вторая строка также является комментарием, она автоматически заполняется вашим именем пользователя TradingView.

В четвертой строке вы можете предположить, что у нас есть еще один комментарий. Однако эта линия немного отличается.

Это известно как директива компилятора. Это позволяет компилятору узнать, какую версию скрипта Pine мы хотим использовать.

Вы можете отказаться от первых двух строк комментария, если хотите, но директива компилятора требуется во всех скриптах.

Строка 5 является объявлением. Здесь указываете, создаете ли вы индикатор.

Альтернативой является создание стратегии, но мы начнем с индикатора.

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

Строка 6 содержит команду построения графика. Как вы уже, наверное, догадались, она приказывает TradingView построить график определенной переменной.

В этом случае переменная close будет построена. Это встроенная переменная, которая содержит цену закрытия последнего бара.

Давайте нажмем «Добавить в диаграмму» в правом верхнем углу редактора Pine.

Вам будет предложено сохранить сценарий.

После сохранения ваш график должен получить новое окно, содержащее график цен закрытия с вашего основного графика.

Это окно называется окном данных. На изображении выше это линейная диаграмма, нарисованная синим цветом.

Обратите внимание, что окно данных показывает «Мой сценарий» в верхнем левом углу. Это извлекает все, что введено в строку 5 нашего кода, где мы объявили имя для индикатора.

И вот он, наш первый индикатор, и нам даже не нужно было писать код!

Как узнать цену Apple?

В нашем первом примере мы построили цену закрытия. Скрипт Pine автоматически сделает это для любого открытого графика.

В данном случае у нас был открыт дневной график биткойна.

Но что, если вы хотите получить данные для другого актива? Давайте рассмотрим пример, в котором мы берем цену Apple, даже если у нас нет открытого графика.

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

В данном случае мы создаем индикатор. Название этого индикатора – «цена Apple».

Далее мы должны сообщить Pine Script, что нас интересует актив, отличный от того, что в данный момент отображается на графике.

Для этого мы можем использовать функцию request.security().

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

Например, мы можем навести курсор на нашу функцию, и она покажет краткое описание.

Для получения более подробной информации вы можете запустить окно справки. Для этого нажмите CTRL, щелкнув функцию на ПК. Или, на Mac, нажмите CMD, нажимая на функцию.

Функция справки разъясняет синтаксис и даже содержит полезные примеры.

Мы использовали синтаксис, аналогичный примеру в приведенном выше фрагменте кода. Первым значением в функции безопасности является тикер, который является AAPL.

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

Мы можем сохранить возврат функции в переменную.

Теперь переменная apple_price будет содержать последнее дневное закрытие акций Apple.

Исследования, созданные в скрипте Pine, должны иметь хотя бы один вывод, иначе скрипт выдаст ошибку компилятора.

Давайте построим нашу переменную так, чтобы она удовлетворяла правилу сценария Pine о наличии вывода.

После сохранения и добавления на график наш экран выглядит так.

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

Как получить SMA ( 20 ) Apple?

Теперь, когда мы можем получить доступ к цене акций Apple, давайте рассмотрим пример получения простой скользящей средней.

Тот же процесс можно использовать для применения любого индикатора.

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

Если вы не хотите получать 20 SMA специально для AAPL, вы можете пропустить определение безопасности и просто использовать встроенную переменную close .

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

В скрипт Pine встроена вспомогательная функция для индикатора SMA. Чтобы получить к нему доступ, мы просто используем функцию ta.sma().

Первый параметр, который нам нужно передать, — это значение цены. В этом случае мы используем цену закрытия для Apple, которую мы сохранили в нашей переменной apple_price .

Второй параметр — длина SMA. Мы ищем 20-периодную SMA.

Наконец, мы назначим данные SMA отдельной переменной, а затем построим ее.

Простая скользящая средняя для Apple теперь отображается в нашем окне данных.

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

Добавив в overlay=True объявление индикатора, мы можем отображать наши данные непосредственно в главном окне графика, а не в окне данных.

Как протестировать кросс-стратегию скользящих средних с помощью Pine Script?

Мы прошлись по индикаторам. Давайте посмотрим на стратегии в Pine Script.

В следующем примере мы создадим стратегию пересечения скользящих средних с несколькими дополнительными параметрами. Затем мы проверим стратегию на истории в TradingView.

Чтобы создать стратегию, мы заменяем объявление индикатора объявлением стратегии.

Первое, что нам нужно сделать, это создать две скользящие средние и присвоить данные переменным.

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

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

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

У нас есть два условия, первое — когда короткая SMA с периодом 10 пересекает более длинную SMA с периодом 30.

Второе условие является противоположным, поскольку мы использовали функцию crossunder, а не crossover.

Оба эти условия сохраняются в переменных. Поэтому, когда происходит пересечение (crossover или crossunder), эти переменные будут обновлены до True, что является логическим значением.

Мы можем использовать оператор if, чтобы проверить, изменилось ли условие на True, а затем выполнить сделку, если это так.

Встроенная strategy.entry функция используется для входа в сделки. Вот параметры, которые передаются в функцию.

  1. long — это идентификатор сделки. Мы не будем использовать его в этом примере. Но, если вы планируете закрыть или отменить сделку, это можно сделать с помощью этого идентификатора.
  2. Strategy.long — это встроенная переменная, которая сообщает скрипту Pine, что мы хотим открыть длинную позицию.
  3. 100 — количество акций, которыми мы хотим торговать
  4. when = rsi > 50 — это дополнительный параметр, который указывает скрипту pine выполнять сделку только в том случае, если RSI выше 50.

Синтаксис наших кратких записей будет очень похож на формат.

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

Но мы все равно это сделаем. Было бы неплохо увидеть SMA на графике, чтобы мы могли подтвердить, что сделки имели место, когда они должны были быть.

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

Вот так выглядит наш экран.

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

Стратегия будет работать на таймфрейме, который отображается на вашем графике.

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

Как установить тейк-профит и стоп-лосс?

В нашем последнем примере исполнение сделки определялось пересечением и пересечением скользящих средних.

Мы будем опираться на этот скрипт и установим конкретные стоп-лоссы и тейк-профиты. Мы можем использовать средний истинный диапазон (ATR) для расчета уровней для них.

Индикатор ATR рассчитывает среднее движение за последнее количество указанных баров. Это хороший способ учета изменений волатильности.

Мы уже объявили несколько индикаторов, добавим в список индикатор ATR.

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

В приведенном выше коде мы рассчитали стоп-лосс, взяв минимум бара во время входа и вычтя средний истинный диапазон, умноженный на два.

Таким образом, если акции двигаются в среднем на 5 долларов за бар, мы устанавливаем тейк-профит на 10 долларов ниже минимума.

Аналогичный расчет делается для тейк-профита.

Наконец, мы указываем условие выхода, используя функцию Strategy.exit(). Вот параметры, которые были переданы.

  1. exit — это идентификатор сделки для выхода из сделки.
  2. long — это идентификатор, который мы ранее установили при входе в сделку. Это позволит скрипту Pine узнать, из какой позиции мы пытаемся выйти.
  3. stop=stopLoss – указываем, что уровень, содержащийся в переменной stopLoss, должен использоваться как стоп-ордер на выход из сделки.
  4. limit=takeProfit = мы указываем, что уровень, содержащийся в переменной takeProfit, должен использоваться как лимитный ордер для выхода из сделки.

Синтаксис нашего короткого условия аналогичен, хотя некоторые вычисления немного отличаются.

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

Наши выходы работают и отображаются на нашем основном графике вместе с длинными и короткими входами.

Как запустить сделку с Apple, когда Google движется на 5%?

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

Мы будем использовать его для создания стратегии, которая будет выполнять сделку в Apple, если Google движется более чем на 5%.

Это стратегия возврата к среднему, поэтому, если Google вырастет более чем на 5%, мы продадим Apple. Если Google упадет более чем на 5%, мы сможем купить Apple.

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

Затем мы можем выполнить расчет, чтобы определить процентное изменение цены.

Теперь переменная price_change содержит вычисление. Так, например, если Google открылся на уровне 100 долларов и вырос на 5%, чтобы закрыться на уровне 105 долларов, переменная price_change будет равна 105/100, что равно 1,05.

Но если Google открылся на уровне 100 долларов и снизился на 5%, чтобы закрыться на уровне 95 долларов, переменная будет выглядеть как 95/100, что равно 0,95.

Итак, мы знаем, что если Google откажется на 5% или больше, переменная price_change будет равна 0,95 или меньше, и мы хотим открыть длинную позицию. Вот синтаксис для этого.

И синтаксис, чтобы получить короткий, если Google сплачивает более 5%.

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

Наконец, мы построим переменную price_change в окне данных. Это не обязательно, но приятно видеть, и мы можем подтвердить, что сделки выполняются должным образом.

И вот результаты нашей стратегии.

Только четыре сделки, так как 5% движения встречаются редко. Нам, вероятно, потребуется увидеть намного больше сделок, чтобы определить, является ли это хорошей стратегией.

Похоже, была проделана хорошая работа, чтобы выбрать этот минимум в марте!

Как модифицировать наши скрипты без кодирования?

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

Взгляните на стандартный индикатор ATR, предлагаемый в Tradingivew. Обратите внимание, как легко изменить длину и даже цвета на вкладке «Стиль».

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

Вот пример функции ввода, которая позволит пользователю настроить процентное изменение по сравнению с последним примером стратегии.

Давайте пройдемся по параметрам, которые передаются через функцию input().

  1. title — здесь мы указываем текст, который видит пользователь при попытке изменить значение этого конкретного параметра.
  2. defval — это значение по умолчанию.

Теперь мы можем получить значения от пользователя. Но они будут вводить значение, такое как 5 (%). Нам нужно преобразовать это в 1,05 для наших операторов if.

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

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

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

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

И окно стиля для настройки параметров печати.

Как построить сценарий с помощью Pine?

До сих пор мы использовали стандартную функцию plot() для вывода определенных элементов на экран. Сценарий Pine имеет несколько других команд, которые мы можем использовать для нашего вывода, и мы рассмотрим некоторые из них.

График работы рынка Форекс

Нужно помнить, когда рынки открываются и закрываются. Это может быть довольно сложно понять трейдерам Forex.

Форекс торгует 24 часа в сутки и 5 дней в неделю. Различные рынки по всему миру открываются и закрываются в течение дня, что влияет на волатильность валюты.

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

Большинство трейдеров Форекс обращают внимание на лондонскую и нью-йоркскую сессии. Мы начнем с указания времени для этих сессий.

Здесь мы использовали функцию time() для создания периода. В параметрах мы используем 07:00 UTC для времени начала лондонской сессии и 15:00 UTC для времени окончания.

Переменная London теперь будет содержать время бара, если бар попадает между этим периодом. В противном случае он покажет NaN ("не"-значение).

Мы можем использовать оператор if, чтобы проверить вывод переменной London .

В приведенном выше коде мы используем встроенную функцию na(). Это проверяет, имеет ли переменная значение NaN или нет.

если переменная London возвращает значение NaN, это означает, что бар находится вне лондонских торговых часов.

В этом случае вызываемой переменной val будет присвоено целое число 1. В противном случае переменной будет присвоено значение val 0.

Наконец, мы отрисуем только что созданную переменную val .

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

Это выглядит не слишком хорошо. Он правильно показывает, когда лондонский рынок открыт, но построение этих значений сделало наши свечи неразборчивыми.

Мы могли бы построить его в окне данных, чтобы свечи было лучше видно, но визуализировать открытие и закрытие рынка все равно было бы непросто.

Кроме того, код выглядит не слишком хорошо.

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

Этот код выполняет ту же функцию, что и предыдущий оператор if. В этом случае нам не нужно использовать переменную val . Разберем синтаксис.

Эта часть проверяет, содержит ли переменная London значение NaN.

Знак вопроса здесь — это краткая форма оператора if/else.

То, что следует за вопросительным знаком, является важной частью. Здесь два числа, разделенные двоеточием. Число перед двоеточием, в данном случае 1, — это то, что должно быть возвращено в случае, если оператор if верен.

Число после двоеточия, в данном случае 0, возвращается, когда оператор if возвращает false.

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

Итак, теперь мы превратили оператор if в однострочный фрагмент кода.

Чтобы сделать график более удобным для чтения, мы можем нанести другой цвет фона, если лондонский рынок открыт.

Для этого мы заменяем функцию plot() на функцию bgcolor(). Это позволяет нам изменить цвет фона.

Также мы укажем цвет, когда рынок открыт.

Наша диаграмма начинает выглядеть намного лучше!

Последнее, что мы сделаем, это добавим код, чтобы увидеть, открыт ли рынок в Нью-Йорке, и установим зеленый фон, если это так.

Вы заметите, что на приведенной ниже диаграмме есть три цвета.

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

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

Нанесение аннотаций

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

Существует функция plotchar(), которая позволяет отображать символы ASCII на графике. Это часто используется для построения заметки сверху или снизу ценового бара.

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

Полный список различных доступных аннотаций см. в разделе Обзор аннотаций в руководстве пользователя скрипта Pine.

Как я могу создать собственный индикатор в скрипте Pine?

Мы собираемся создать мультитаймфреймовый индикатор.

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

Стратегия использует полосы Боллинджера на 5-минутном графике и RSI на 1-минутном графике.

Идея состоит в том, чтобы искать расхождение rsi на 1-минутном графике, когда цена достигает верхней или нижней полосы Боллинджера на 5-минутном графике.

Потенциальной целью является средняя линия 5-минутной полосы Боллинджера или нижняя линия 1-минутной полосы Боллинджера.

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

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

Когда я торговал по этой стратегии, мне приходилось держать открытыми два графика: 1-минутный и 5-минутный.

Но в приведенном выше примере показаны 5-минутные полосы Боллинджера, нарисованные непосредственно на 1-минутном графике. Мы создадим этот индикатор в скрипте Pine.

Начнем с объявления имени скрипта и указания, что это индикатор. Также можно добавить более короткое название, это имя будет отображаться на диаграммах.

Затем мы устанавливаем некоторые пользовательские входы. Мы можем дублировать большинство входных данных из обычного индикатора полосы Боллинджера (как показано на изображении выше) для нашего пользовательского индикатора.

Мы можем создать индикатор полосы Боллинджера из встроенной вспомогательной функции.

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

Значения должны рассчитываться на другом таймфрейме. Мы можем использовать функцию security(), чтобы указать временной интервал, выбранный пользователем.

Это сохраняется в переменной tf, созданной предыдущим пользовательским вводом.

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

Вот и все, осталось построить новый индикатор.

Теперь мы можем видеть полосы Боллинджера на 5-минутном графике, отображаемом на 1-минутном графике.

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

Последние мысли

Если вы следили за примерами, у вас будет хорошее представление о том, на что способен скрипт Pine.

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

Оттуда всегда можно взять эту логику и запрограммировать ее на другом языке, если вы хотите использовать ее и сторонние библиотеки.

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

Полная статистика, предлагаемая для стратегий, также является большим плюсом скрипта Pine.

У TradingView есть несколько ресурсов, если вы хотите продвинуть свои навыки кодирования скриптов Pine на шаг дальше.

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

Вот еще несколько ресурсов —

    — здесь приводится пример индикатора и разбивается сценарий построчно. — Подробное руководство по скрипту Pine. – объявления о новых функциях, которые часто содержат примеры кода. — библиотека исследований и стратегий Pine с открытым исходным кодом.

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

Это также хороший источник идей для создания собственных индикаторов или стратегий.

Если вы хотите попробовать некоторые из примеров, загрузите весь код одним щелчком мыши на GitHub. Просто нажмите зеленую кнопку и выберите «Загрузить zip». Код будет в текстовых файлах, которые можно скопировать в редактор Pine Tradingview.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *