Динамическая стратегия отслеживания средней цены

Автор:Чао Чжан, Дата: 2024-01-29 15:28:53
Тэги:

img

Обзор

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

Принцип стратегии

Когда цена акции впервые пересекает 20-дневную простую скользящую среднюю, займите длинный курс, чтобы открыть позицию. Если акция затем падает на целевой процент потери, например, 10%, добавьте к позиции определенный процент, например, 50% от текущей позиции. Это снижает среднюю стоимость держательной позиции. Когда цена акции достигает установленной точки получения прибыли, например, 10% выше средней стоимости держания, закрывайте все позиции, чтобы получить прибыль.

В частности, функция стратегии устанавливает такие параметры, как возможность до 4 дополнительных покупок, при этом размер позиции устанавливается в процентах от капитала и начальный размер позиции составляет 10% от капитала. Она получает 20-дневную простую скользящую среднюю линию. Когда цена закрытия пересекает этот средний показатель, и нет текущей позиции, она открывает длинную позицию. Затем она вычисляет плавающий процент прибыли / убытка позиции. Если она достигает целевого процента потери, она продолжает пирамидировать на целевом проценте дополнительной покупки, пока акции не восстанут, чтобы достичь целевой прибыли.

Анализ преимуществ

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

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

Анализ рисков

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

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

Руководство по оптимизации

Эта стратегия может быть оптимизирована несколькими способами:

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

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

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

Резюме

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


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3

// ########################################################################## // 
//
// This scipt is intended to demonstrate how pyramiding can be used to average
// down a position.
//
// We will buy when a stock closes above its 20 day MA and Average down if
// the trade does not go in our favor. We will hold until a profit is made. 
// (which could mean we hold forever)
//
// ########################################################################## //

strategy("Average Down", overlay=true )

// Date Ranges
from_month = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
from_day   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
from_year  = input(defval = 2010, title = "From Year")
to_month   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
to_day     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
to_year    = input(defval = 9999, title = "To Year")
start  = timestamp(from_year, from_month, from_day, 00, 00)  // backtest start window
finish = timestamp(to_year, to_month, to_day, 23, 59)        // backtest finish window
window = true
// Strategy Inputs
target_perc = input(-10, title='Target Loss to Average Down (%)', maxval=0)/100
take_profit = input(10, title='Target Take Profit', minval=0)/100
target_qty  = input(50, title='% Of Current Holdings to Buy', minval=0)/100 
sma_period  = input(20, title='SMA Period') 

// Get our SMA, this will be used for our first entry 
ma = sma(close,sma_period)

// Calculate our key levels
pnl = (close - strategy.position_avg_price) / strategy.position_avg_price
take_profit_level = strategy.position_avg_price * (1 + take_profit)

// First Position
first_long = crossover(close, ma) and strategy.position_size == 0 and window
if (first_long)
    strategy.entry("Long", strategy.long)

// Average Down!
if (pnl <= target_perc)
    qty = floor(strategy.position_size * target_qty)
    strategy.entry("Long", strategy.long, qty=qty)

// Take Profit!
strategy.exit("Take Profit", "Long", limit=take_profit_level)

// Plotting
plot(ma, color=blue, linewidth=2, title='SMA')
plot(strategy.position_avg_price, style=linebr, color=red, title='Average Price')

Больше