В данной статье подробно рассматривается количественная стратегия, основанная на коэффициенте сделки для определения направления тренда. Эта стратегия генерирует сигнал покупки и продажи путем вычисления средней линии сделки.
Принципы стратегии
Основным показателем стратегии является объем перевозки воздуха. Конкретные расчетные шаги следующие:
Вычислите объем торгов в день (Volume).
Если считать, что K-линия является многоголовой, то объем сделки записывается как объем сделки с несколькими сторонами.
Когда K-линия считается пустой, объем сделки записывается как объем сделки в пустой части (Bear Volume).
Вычислить подвижную среднюю по количеству транзакций в многоугольниках и в пустых.
Когда многосторонние скользящие средние проходят по пустой стороне скользящей средней, образуются сигналы покупки; наоборот, образуются сигналы продажи.
Также используются индикаторы изменения цены для фильтрации и торговли только при наличии четкой тенденции.
Стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп
Таким образом, можно определить направление тренда с помощью свободного пропорционального количества сделок, а также фильтровать его по показателям изменения цены, что позволяет улучшить качество сигнала. Установка стоп-стоп также позволяет контролировать убытки на каждую сделку.
Второе: стратегические преимущества
Самым большим преимуществом этой стратегии является использование объема сделок для определения направления тенденции, что является одним из основных методов определения тенденции. Объем сделок может отражать поведение участников рынка.
Кроме того, индикатор объема сделок может заранее отражать сигналы прорыва, более чувствительные. По сравнению с использованием только индикатора цены, он может раньше запечатлеть переход тренда.
В конце концов, фильтрация в сочетании с показателем изменения цены также улучшает качество сигнала.
Третье, потенциальные риски
Несмотря на определенные преимущества этой стратегии, следует также обратить внимание на следующие риски в реальной жизни:
Во-первых, необходимо тщательно настроить параметры показателя загрузки, чтобы избежать ложных сигналов.
Во-вторых, цена, которая может быть взломана только одним показателем, должна быть проверена в комбинации с несколькими показателями.
Наконец, слишком близкая стоп-установка может привести к риску прорыва стоп-ущерба.
Четвертое содержание.
В этой статье подробно описывается количественная стратегия, использующая тенденции определения коэффициента обработки. Она может генерировать торговые сигналы путем вычисления многомерной средней линии обработки. Эта стратегия имеет определенный приоритет, но также требует проверки в сочетании с другими показателями.
/*backtest
start: 2023-08-14 00:00:00
end: 2023-09-13 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// Based on Volume Flow v3 indicator by oh92
strategy("Volume Flow BF", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)
/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)
testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)
testPeriod() => true
maType = input(title="Moving Average Type", options=["Simple", "Exponential", "Double Exponential"], defval="Simple")
length = input(6, title="MA Length")
x = input(3.1, title="Factor For Breakout Candle")
// Basic Volume Calcs //
vol = volume
bull = close>open?vol:0
bear = open>close?vol:0
// Double EMA Function //
dema(src, len) => (2 * ema(src, len) - ema(ema(src, len), len))
// BULL Moving Average Calculation
bullma = maType == "Exponential" ? ema(bull, length) :
maType == "Double Exponential" ? dema(bull, length) :
sma(bull, length)
// BEAR Moving Average Calculation //
bearma = maType == "Exponential" ? ema(bear, length) :
maType == "Double Exponential" ? dema(bear, length) :
sma(bear, length)
///////////// Rate Of Change /////////////
source = close
roclength = input(12, minval=1)
pcntChange = input(2, minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))
/////////////// Strategy ///////////////
long = bullma > bearma and isMoving()
short = bullma < bearma and isMoving()
last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])
long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)
last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])
last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])
in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal
last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])
sl_inp = input(2.0, title='Stop Loss %') / 100
tp_inp = input(900.0, title='Take Profit %') / 100
take_level_l = strategy.position_avg_price * (1 + tp_inp)
take_level_s = strategy.position_avg_price * (1 - tp_inp)
since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1])
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1])
slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na
/////////////// Execution ///////////////
if testPeriod()
strategy.entry("Long", strategy.long, when=long)
strategy.entry("Short", strategy.short, when=short)
strategy.exit("Long Ex", "Long", stop=long_sl, limit=take_level_l, when=since_longEntry > 0)
strategy.exit("Short Ex", "Short", stop=short_sl, limit=take_level_s, when=since_shortEntry > 0)
///////////// Plotting /////////////
bgcolor(isMoving() ? long ? color.green : short ? color.red : na : color.white, transp=80)
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=30)
plot(bullma, color=color.lime, linewidth=1, transp=0, title="Bull MA", transp=10)
plot(bearma, color=color.red, linewidth=1, transp=0, title="Bear MA", transp=10)