Блог им. raxat

Торговая система Golden Cross на PineScript

    • 20 ноября 2022, 14:52
    • |
    • Diamond
  • Еще
Торговая система Golden Cross на PineScript

Этот пост носит исключительно обучающий характер. Ранее я уже публиковал эту систему для Python и теперь её можно повторить на PineScript для TradingView.

GoldenCross это самая простая торговая система, которая закрывает позицию на «кресте смерти» и открывает её снова на «золотом кресте» — так называется пересечение 50-дневной и 200-дневной скользящих средних на таймфрейме D. Такая система иногда может обгонять рынок, но главное её преимущество в том, что вы меньше находитесь в рынке и можете парковать средства в консервативных инструментах, когда происходят коррекции.

По умолчанию система предполагает использование 100% депозита и комиссию 0.04% от сделки:

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// This strategy has been created for illustration purposes only and should not be relied upon as a basis for buying, selling, or holding any asset or security.
// © Diamond

//@version=4
strategy("SMA Golden Cross Strategy", overlay = true, calc_on_every_tick = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_value = 0.04, commission_type = strategy.commission.percent)
Доступно редактирование 4 переменных: период быстрой средней, период медленной средней, даты начала и конца бэктеста:

//Inputs
smaFast = input(title = "Fast SMA", type = input.integer, defval = 50, minval = 1)
smaSlow = input(title = "Slow SMA", type = input.integer, defval = 200, minval = 1)

//Options to configure backtest trade range
startDate = input(title = "Start Date", type=input.time, defval=timestamp("01 Jan 1998 00:00"))
endDate = input(title = "End Date", type=input.time, defval=timestamp("31 Dec 2070 23:59"))
SMA вычисляется по цене закрытия:

//Calculations
fastSMA = sma(close, smaFast)
slowSMA = sma(close, smaSlow)
Затем они отображаются на графике с помощью Plot(), где можно задать цвет (Color) и толщину линии (linewidth):

//Plot
plot(series = fastSMA, color = color.orange, linewidth = 2)
plot(series = slowSMA, color = color.blue, linewidth = 3)
У торговой системы всего 3 условия для работы.

1. Она работает только в пределах диапазона для бэктеста:

inDateRange = (time >= startDate) and (time < endDate)
2. Позиция открывается в тот момент, когда быстрая средняя fastSMA пересекает медленную slowSMA снизу вверх:

longOpenCondition = crossover(fastSMA, slowSMA)
3. Позиция закрывается при обратном условии:

longCloseCondition = crossunder(fastSMA, slowSMA)
Эта логика отражена в коде для трейдинга. Для открытия позиции используется strategy.entry(), а для закрытия strategy.exit()

//Trading
if(longOpenCondition and inDateRange)
    strategy.entry(id = "long", long = true, comment = "Long Open")

if(strategy.position_size > 0 and longCloseCondition)
    strategy.exit(id = "long", stop = close, comment = "Long Close")
Стоп-лосса и тейк-профита нет, это ваша первая торговая система и она должна быть максимально простой для понимания.

Если провести бэктест на SBER (акции Сбербанк обыкновенные), то с 1998 года по текущую дату получим всего 12 трейдов:

Торговая система Golden Cross на PineScript

Результат бэктеста:

Максимальная просадка 35.15%
Прибыльных сделок 66.67%
Профит фактор 5.063
Общий профит 25206.33%

Торговая система Golden Cross на PineScript

В моменте вы будете обгонять Buy&Hold, но конечный результат примерно одинаковый. Это нормально для системы, которая просто снижает вашу просадку на счёте.

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

Полный код системы:

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// This strategy has been created for illustration purposes only and should not be relied upon as a basis for buying, selling, or holding any asset or security.
// © Diamond

//@version=4
strategy("SMA Golden Cross Strategy", overlay = true, calc_on_every_tick = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_value = 0.04, commission_type = strategy.commission.percent)

//Inputs
smaFast = input(title = "Fast SMA", type = input.integer, defval = 50, minval = 1)
smaSlow = input(title = "Slow SMA", type = input.integer, defval = 200, minval = 1)

//Options to configure backtest trade range
startDate = input(title = "Start Date", type=input.time, defval=timestamp("01 Jan 1998 00:00"))
endDate = input(title = "End Date", type=input.time, defval=timestamp("31 Dec 2070 23:59"))

//Calculations
fastSMA = sma(close, smaFast)
slowSMA = sma(close, smaSlow)

//Plot
plot(series = fastSMA, color = color.orange, linewidth = 2)
plot(series = slowSMA, color = color.blue, linewidth = 3)

//Conditions
inDateRange = (time >= startDate) and (time < endDate)
longOpenCondition = crossover(fastSMA, slowSMA)
longCloseCondition = crossunder(fastSMA, slowSMA)

//Trading
if(longOpenCondition and inDateRange)
    strategy.entry(id = "long", long = true, comment = "Long Open")

if(strategy.position_size > 0 and longCloseCondition)
    strategy.exit(id = "long", stop = close, comment = "Long Close")
★7
11 комментариев
оооо прикольную обложку нарисовал!
для сравнения надо было рядом результаты по торговле по 200дневной МА поставить, выше-ниже
avatar
Если добавить запрет лишних сигналов, то идеально просто.Важно 200\50 =4.С коэффициентом 4 работают любые средние.
avatar
ezomm, интересное наблюдение. А почему именно 4? Есть какое-то исследование?
avatar
Бэктест карашо, но в рил-тайме будет по сотне сделок в моменты СМА200=СМА50. Убыточных.
Переставьте калк_он_еври_тик в фальс и добавьте условие проверки, что случилось реальное пересечение, а не «переплетение». Уверен, результат теста будет иным. И скорее с минусом…
avatar
Я Я, calc_on_every_tick на результат никак не повлиял. Насчёт пересечений, это в смысле чтобы на боковиках ложные сигналы фильтровались?
avatar
Diamond, на бэктесте не повлияет. Это для реального времени.
Да, для фильтрации. Не совсем боковики, а когда СМА совпадают.
avatar
И при расчете количества прибыльных сделок добавьте комиссию брокера. Для полноты картины.
avatar
Я Я, добавил, спасибо!
avatar
всего 12
Как насчет 100000 на минутках?
avatar
22022022, на минутках будет убыток :)
avatar

теги блога Diamond

....все тэги



UPDONW
Новый дизайн