Стратегия количественной торговли с двойной скользящей средней

Автор:Чао Чжан, Дата: 2023-12-29 11:03:14
Тэги:

img

Обзор

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

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

Стратегия основывается главным образом на двух показателях оценки:

  1. Двойная скользящая средняя линия: Вычислить 20-дневную линию и 60-дневную линию. Когда 20-дневная линия пересекает 60-дневную линию, рынок считается восходящим. Когда 20-дневная линия пересекает 60-дневную линию, рынок считается понижающимся.

  2. Объем торговли: рассчитывается ежедневный объем покупок и объем продаж. Если объем покупок больше объема продаж и больше среднего объема торговли за последние n дней, определяется, что рынок быстрый. Если объем продаж больше объема покупок и больше среднего объема торговли за последние n дней, определяется, что рынок медвежий.

Конкретная стратегия и логика торговли следующие:

Если цена закрытия находится выше 20-дневной скользящей средней линии, а объем покупки за день больше объема продажи и среднего объема торговли за последние n дней, рынок считается бычьим.

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

Приобретение прибыли и остановка убытков: Установите разумные уровни получения прибыли и остановки убытков, чтобы зафиксировать прибыль или уменьшить убытки. Например, когда цена повышается на 5% выше входной цены, получайте прибыль; когда убыток достигает 10%, прекратите убыток; или когда цена достигает недавнего нового максимума, а затем в некоторой степени отступает, получайте прибыль.

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

Стратегия имеет следующие преимущества:

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

  2. Использование полос Боллинджера с различными параметрами определяет более точные входные цены.

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

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

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

Стратегия также сопряжена с некоторыми рисками:

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

  2. Неправильное настройка параметров Bollinger Bands может привести к чрезмерной частоте или редкости записей.

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

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

Направление оптимизации

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

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

  2. Оптимизировать параметры полос Боллинджера для более точного ввода.

  3. Динамически корректируйте точки получения прибыли и остановки потери в соответствии с рыночными условиями, чтобы установить разумные коэффициенты риска и прибыли.

  4. Повышение оценки других технических индикаторов, таких как MACD, KD и т. д., для повышения точности стратегии.

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

Резюме

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


/*backtest
start: 2023-12-21 00:00:00
end: 2023-12-28 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KAIST291

//@version=4
strategy("prototype",initial_capital=0.01,commission_type=strategy.commission.percent,commission_value=0.1, format=format.volume, precision=0,overlay=true)
// SETTING //
length1=input(1)
length3=input(3)
length7=input(7)
length14=input(14)
length20=input(20)
length60=input(60)
length120=input(120)
ma1= sma(close,length1)
ma3= sma(close,length3)
ma7= sma(close,length7)
ma14=sma(close,length14)
ma20=sma(close,length20)
ma60=sma(close,length60)
ma120=sma(close,length120)
rsi=rsi(close,14)
// BUYING VOLUME AND SELLING VOLUME //
BV = iff( (high==low), 0, volume*(close-low)/(high-low))
SV = iff( (high==low), 0, volume*(high-close)/(high-low))
vol = iff(volume > 0, volume, 1)
dailyLength = input(title = "Daily MA length", type = input.integer, defval = 50, minval = 1, maxval = 100)
weeklyLength = input(title = "Weekly MA length", type = input.integer, defval = 10, minval = 1, maxval = 100)
//-----------------------------------------------------------
Davgvol = sma(volume, dailyLength)
Wavgvol = sma(volume, weeklyLength)
//-----------------------------------------------------------
length = input(20, minval=1)
src = input(close, title="Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
mult2= input(1.5, minval=0.001, maxval=50, title="exp")
mult3= input(1.0, minval=0.001, maxval=50, title="exp1")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
dev2= mult2 * stdev(src, length)
Supper= basis + dev2
Slower= basis - dev2
dev3= mult3 * stdev(src, length)
upper1= basis + dev3
lower1= basis - dev3
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))
//----------------------------------------------------
exit=(close-strategy.position_avg_price / strategy.position_avg_price*100)
bull=(close>Supper and BV>SV and BV>Davgvol)
bull2=(close>ma20  and BV>SV and BV>Davgvol)
bux =(close<Supper and close>Slower and volume<Wavgvol)
bear=(close<Slower and close<lower and SV>BV and SV>Wavgvol)
hi=highest(exit,10)
imInATrade = strategy.position_size != 0
highestPriceAfterEntry = valuewhen(imInATrade, high, 0)
// STRATEGY LONG //
if (bull and close>ma3 and ma20>ma60 and rsi<70)
    strategy.entry("Long",strategy.long,0.1)

if (strategy.position_avg_price*1.05<close)
    strategy.close("Long",0.1)

else if (highestPriceAfterEntry*0.999<close and close>strategy.position_avg_price*1.002)
    strategy.close("Long",0.1)
else if (highestPriceAfterEntry*0.997<close and close>strategy.position_avg_price*1.002)
    strategy.close("Long",0.1)
else if (highestPriceAfterEntry*0.995<close and close>strategy.position_avg_price*1.002)
    strategy.close("Long",0.1)
else if (strategy.openprofit < strategy.position_avg_price*0.9-close)
    strategy.close("Long",0.1)
//////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////


Больше