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


Дата создания: 2023-10-24 11:21:57 Последнее изменение: 2023-10-24 11:21:57
Копировать: 0 Количество просмотров: 699
1
Подписаться
1617
Подписчики

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

Обзор

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

Стратегический принцип

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

  2. Пользователям необходимо установить длину циклов для скользящих средних. Как правило, в средне- и коротколинейных сделках скользящие средние циклы варьируются от 20 до 60 лет.

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

  4. Стратегия использует механизм отслеживания стоп-убытков. После открытия позиции стратегия будет постоянно контролировать связь между движущейся средней и ценой, динамически корректируя положение стоп-линий. В частности, положение стоп-линий равно проценту стоп-убытков, установленному пользователем, плюс / минус движущаяся средняя.

  5. Пользователь может установить процент стоп-лосса. Чем больше значение, тем шире диапазон стоп-лосса, чтобы избежать слишком чувствительного стоп-лосса; чем меньше значение, тем строже стоп-лосса, чтобы снизить риск. Стоп-лосса обычно устанавливается в пределах 2% -5%.

  6. После открытия позиции, если цена вновь нарушит движущуюся среднюю, то позиция будет остановлена.

Стратегические преимущества

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

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

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

Оптимизировать и контролировать риски можно следующими способами:

  • Использование этой стратегии в разновидностях и временных периодах с заметной тенденцией
  • Периодическая скорректировка скользящих средних с использованием средне- и долголинейных
  • Минимизируйте процент убытков и строго контролируйте риски
  • Тестирование различных сортов для поиска оптимальных параметров
  • Приостановка торговли до важных новостей

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

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

  1. Добавление подтверждения других индикаторов, чтобы избежать частых сделок при сворачивании. Можно добавить такие показатели, как MACD, KD, и открывать позиции только тогда, когда они появляются одновременно.

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

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

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

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

  6. Добавление алгоритмов машинного обучения для динамической оптимизации параметров на основе исторических данных.

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

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2023-01-01 00:00:00
end: 2023-03-23 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//attoCryp, @HikmetSezen58
strategy("MOST Multi MAs", overlay=true, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
sx=input(defval = "close" ,title="Fiyat sec", options=[ "close", "high", "low", "open", "hl2", "hlc3", "hlco4", "hlcc4", "hlccc5"])
smox=input(defval = "HulleMA", title = "Hareketli Ortalama: ", options=["T3", "SMA", "EMA", "DEMA", "TEMA", "WMA", "VWMA", "SMMA", "EVWMA", "HullMA", "HulleMA", "LSMA", "ALMA", "TMA", "SSMA"])
timeFramemost = input(title="++++++++++++++++++++++++++++++++++++", defval="MOST Ayarlari:")
yuzde=input(defval=3.8, minval=0, step=0.1, title="Yuzde Oran")/100
ortalamauzunluk=input(defval=28, title="Periyot Uzunlugu", minval=1)
f=input(defval=0.4, step=0.1, title="T3 icin Factor", minval=0.01)
timeFrameadd=input(title="++++++++++++++++++++++++++++++++++++", defval="Diger Orta.Ayar:")
offsig=input(defval=4, title="LSMA icin Offset veya ALMA icin Sigma", minval=0)
offalma=input(defval=0.6, title="ALMA icin Offset", minval=0, step=0.01)
timeFramess=input(title="++++++++++++++++++++++++++++++++++++", defval="Baslangic-Bitis:")
gun_baslangic=input(defval=1, title="Baslangic Gunu", minval=1, maxval=31)
ay_baslangic=input(defval=1, title="Baslangic Ayi", minval=1, maxval=12)
yil_baslangic=input(defval=2017, title="Baslangic Yili", minval=2010)
gun_bitis=input(defval=1, title="Bitis Gunu", minval=1, maxval=31)
ay_bitis=input(defval=1, title="Bitis Ayi", minval=1, maxval=12)
yil_bitis = input(defval=2019, title="Bitis Yili", minval=2010)

// backtest icin baslangic ve bitis zamanlarini belirleme
baslangic=timestamp(yil_baslangic, ay_baslangic, gun_baslangic, 00, 00)
bitis=timestamp(yil_bitis, ay_bitis, gun_bitis, 23, 59) 
zamanaraligi() => true

//guncel fiyatti belirleme
guncelfiyat=sx=="high"?high : sx=="close"?close : sx=="low"?low : sx=="open"?open : sx=="hl2"?(high+low)/2 : sx=="hlc3"?(high+low+close)/3 : sx=="hlco4"?(high+low+close+open)/4 : sx=="hlcc4"?(high+low+close+close)/4 : sx=="hlccc5"?(high+low+close+close+close)/5 : close 

/////Ortalama Hesaplamalari/////
// Tillson T3
sm0(guncelfiyat,ortalamauzunluk,f) =>
    t3e1=ema(guncelfiyat, ortalamauzunluk)
    t3e2=ema(t3e1, ortalamauzunluk)
    t3e3=ema(t3e2, ortalamauzunluk)
    t3e4=ema(t3e3, ortalamauzunluk)
    t3e5=ema(t3e4, ortalamauzunluk)
    t3e6=ema(t3e5, ortalamauzunluk)
    c1=-f*f*f
    c2=3*f*f+3*f*f*f
    c3=-6*f*f-3*f-3*f*f*f
    c4=1+3*f+f*f*f+3*f*f
    s0=c1 * t3e6 + c2 * t3e5 + c3 * t3e4 + c4 * t3e3

// Basit ortalama
sm1(guncelfiyat,ortalamauzunluk) =>
    s1=sma(guncelfiyat, ortalamauzunluk)

// Ustel ortalama
sm2(guncelfiyat,ortalamauzunluk) =>
    s2=ema(guncelfiyat, ortalamauzunluk)

// Cift Ustel ortalama
sm3(guncelfiyat,ortalamauzunluk) =>
    s3=2*ema(guncelfiyat, ortalamauzunluk) - ema(ema(guncelfiyat, ortalamauzunluk), ortalamauzunluk)

// Uclu Ustel ortalama
sm4(guncelfiyat,ortalamauzunluk) =>
    s4=3*(ema(guncelfiyat, ortalamauzunluk) - ema(ema(guncelfiyat, ortalamauzunluk), ortalamauzunluk)) + ema(ema(ema(guncelfiyat, ortalamauzunluk), ortalamauzunluk), ortalamauzunluk)

// Agirlikli Ortalama  
sm5(guncelfiyat,ortalamauzunluk) =>
    s5=wma(guncelfiyat, ortalamauzunluk)

// Hacim Agirlikli Ortalama
sm6(guncelfiyat,ortalamauzunluk) =>
    s6=vwma(guncelfiyat, ortalamauzunluk)

// Smoothed
sm7(guncelfiyat,ortalamauzunluk) =>
    s7=0.0
    s7:=na(s7[1]) ? sma(guncelfiyat, ortalamauzunluk) : (s7[1] * (ortalamauzunluk - 1) + guncelfiyat) / ortalamauzunluk

// Hull Ortalama
sm8(guncelfiyat,ortalamauzunluk) =>
    s8=wma(2 * wma(guncelfiyat, ortalamauzunluk / 2) - wma(guncelfiyat, ortalamauzunluk), round(sqrt(ortalamauzunluk)))
    
// Hull Ustel Ortalama
sm81(guncelfiyat,ortalamauzunluk) =>
    s8=ema(2 * ema(guncelfiyat, ortalamauzunluk / 2) - ema(guncelfiyat, ortalamauzunluk), round(sqrt(ortalamauzunluk)))

// Least Square
sm9(guncelfiyat,ortalamauzunluk,offsig) =>
    s9=linreg(guncelfiyat, ortalamauzunluk, offsig)

// Arnaud Legoux
sm10(guncelfiyat, ortalamauzunluk, offalma, offsig) =>
    s10=alma(guncelfiyat, ortalamauzunluk, offalma, offsig)

// Triangular
sm11(guncelfiyat, ortalamauzunluk) =>
    s11=sma(sma(guncelfiyat, ortalamauzunluk),ortalamauzunluk)

// SuperSmoother filter
sm12(guncelfiyat,ortalamauzunluk) =>
    a1=exp(-1.414*3.14159 / ortalamauzunluk)
    b1=2*a1*cos(1.414*3.14159 / ortalamauzunluk)
    c2=b1
    c3=(-a1)*a1
    c1=1 - c2 - c3
    s12=0.0
    s12:=c1*(guncelfiyat + nz(guncelfiyat[1])) / 2 + c2*nz(s12[1]) + c3*nz(s12[2])
    
//Elastic Volume Weighted Moving Average
sm13(guncelfiyat,ortalamauzunluk) =>
    hacimtoplam=sum(volume, ortalamauzunluk)
    s13=0.0
    s13:=(nz(s13[1]) * (hacimtoplam - volume)/hacimtoplam) + (volume*guncelfiyat/hacimtoplam)

ortalamafiyat=smox=="T3"?sm0(guncelfiyat,ortalamauzunluk,f) : smox=="SMA"?sm2(guncelfiyat,ortalamauzunluk) : smox=="EMA"?sm2(guncelfiyat,ortalamauzunluk) : smox=="DEMA"?sm3(guncelfiyat,ortalamauzunluk) : smox=="TEMA"?sm4(guncelfiyat,ortalamauzunluk) : smox=="WMA"?sm5(guncelfiyat,ortalamauzunluk) : smox=="VWMA"?sm6(guncelfiyat,ortalamauzunluk) : smox=="SMMA"?sm7(guncelfiyat,ortalamauzunluk) : smox=="HullMA"?sm8(guncelfiyat,ortalamauzunluk) : smox=="HulleMA"?sm81(guncelfiyat,ortalamauzunluk) : smox=="LSMA"?sm9(guncelfiyat,ortalamauzunluk,offsig) : smox=="ALMA"?sm10(guncelfiyat, ortalamauzunluk, offalma, offsig) : smox=="TMA"?sm11(guncelfiyat,ortalamauzunluk) : smox=="SSMA"?sm12(guncelfiyat,ortalamauzunluk) : smox=="EVWMA"?sm13(guncelfiyat,ortalamauzunluk) : guncelfiyat

/////MOST'u hesaplama/////
stopfiyat=ortalamafiyat*yuzde
mostfiyat=0.0
mostfiyat:=iff(ortalamafiyat>nz(mostfiyat[1],0) and ortalamafiyat[1]>nz(mostfiyat[1],0),max(nz(mostfiyat[1],0),ortalamafiyat-stopfiyat),iff(ortalamafiyat<nz(mostfiyat[1],0) and ortalamafiyat[1]<nz(mostfiyat[1],0),min(nz(mostfiyat[1],0),ortalamafiyat+stopfiyat),iff(ortalamafiyat>nz(mostfiyat[1],0),ortalamafiyat-stopfiyat,ortalamafiyat+stopfiyat)))

mostcolor=ortalamafiyat>mostfiyat?lime:fuchsia
plot(mostfiyat, color=mostcolor, linewidth=4, title="Most-fiyat")

/////AL-SAT LONG-SHORT girislerini belirleme/////
long=ortalamafiyat>mostfiyat and ortalamafiyat[1]<mostfiyat[1]
short=ortalamafiyat<mostfiyat and ortalamafiyat[1]>mostfiyat[1]
if (long) 
    strategy.entry("AL-Long", strategy.long, when = zamanaraligi())
if (short) 
    strategy.entry("SAT-Short", strategy.short, when = zamanaraligi())