Эта стратегия использует индикаторы импульса цены для определения направления торговли. В частности, она рассчитывает скользящую среднюю и среднюю цену соответственно. Когда цена пересекает пересечение скользящей средней и средней цены, генерируется сигнал покупки. Чтобы отфильтровать ложные сигналы, он не требует аналогичных предыдущих сигналов. Затем он сохраняет статус сигнала и генерирует окончательный сигнал открытия позиции в сочетании с скользящей средней. Стратегия также содержит параметры остановки потери и получения прибыли.
Стратегия в основном опирается на индикаторы динамики цен для оценки направления тренда.
swmaClose = swma(close)
vwapClose = vwap(close)
Где?swma
является сглаженной скользящей средней, иvwap
обе могут отражать средний уровень цен.
Затем сравните цену со средней, чтобы увидеть, пересекает ли цена выше скользящей средней и средней цены, чтобы судить, является ли это бычьим сигналом:
swmaLong = close > swmaClose
vwapLong = close > vwapClose
Чтобы отфильтровать ложные сигналы, не требуется никаких предварительных сигналов от этих двух показателей:
triggerLong = vwapLong and not vwapLong[1] and not swmaLong and not swmaLong[1]
Далее, сохраните бычий сигнал:
saveLong = false, saveLong := triggerLong ? true : not vwapLong ? false : saveLong[1]
Наконец, когда сохраненный перекрестный сигнал и цена снова пересекают скользящую среднюю, генерируется сигнал открытия позиции:
startLong = saveLong and swmaLong
Это может отфильтровать некоторые ложные сигналы и сделать сигналы более надежными.
Стратегия также содержит параметры стоп-лосса и прибыли. Расстояние стоп-лосса настраивается, а прибыль устанавливается на определенное кратное стоп-лосса.
Стратегия имеет следующие преимущества:
Стратегия также сопряжена с некоторыми рисками:
Контрмеры:
Стратегия также может быть оптимизирована в следующих направлениях:
Эти оптимизации могут улучшить гибкость стратегии, надежность и рентабельность.
В целом, эта стратегия отслеживания динамики цены является простой, прямой и логической стратегией отслеживания тренда. Стратегия использует движущиеся средние цены и средние цены для определения направления динамики цены и разрабатывает многоступенчатый механизм проверки для улучшения качества сигнала. Стратегия также содержит разумные параметры стоп-лосса и прибыли. С точки зрения кода, логика стратегии очень лаконична, для реализации требуется всего 20+ строк сценария Пайна. Вкратце, эта стратегия является очень хорошим примером обучения, новички могут использовать ее в качестве очень хорошей отправной точки для понимания количественных торговых стратегий. Конечно, сама стратегия также имеет практическую торговую ценность. Благодаря оптимизации параметров и расширению функции, она может стать практической системой отслеживания торговли, чтобы избежать шума и тенденций.
/*backtest start: 2023-12-03 00:00:00 end: 2024-01-02 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title = "Simple Price Momentum", shorttitle = "SPM", overlay = true, initial_capital = 20000, default_qty_value = 100, default_qty_type = strategy.percent_of_equity, commission_value = 0.025) // How To Create A Simple Trading Strategy With TradingView // https://docs.google.com/document/d/1fXxCtPuGgTXb-RuBJNbwlfgkeiLTK5060LfTrzRlr5k/view swmaClose = swma(close) vwapClose = vwap(close) swmaLong = close > swmaClose vwapLong = close > vwapClose triggerLong = vwapLong and not vwapLong[1] and not swmaLong and not swmaLong[1] saveLong = false, saveLong := triggerLong ? true : not vwapLong ? false : saveLong[1] startLong = saveLong and swmaLong startLong := input(false, "Consecutive Orders") ? startLong : startLong and not startLong[1] stopLoss = input(250, "Stop Loss", step = 50) takeProfit = input(10, "Reward/Risk") * stopLoss strategy.entry("Open Long", strategy.long, when = startLong) strategy.exit("Exit Long", "Open Long", profit = stopLoss, loss = takeProfit) // bgcolor(swmaLong ? color.blue : na) // bgcolor(vwapLong ? color.orange : na) // bgcolor(triggerLong ? color.purple : na) // bgcolor(saveLong ? color.yellow : na) bgcolor(startLong[1] ? color.green : na)