Двунаправленная стратегия трансковантальной торговли EMA

Автор:Чао Чжан, Дата: 2024-01-24 17:31:41
Тэги:

img

Обзор

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

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

  1. Вычислить несколько групп EMA с различными циклами для определения основного направления тренда рынка в трех измерениях: краткосрочный, среднесрочный и долгосрочный
  2. Когда краткосрочная EMA пересекает средне-долгосрочную EMA, определяется, что сформировалась бычья тенденция.
  3. Когда краткосрочная EMA пересекается ниже средне-длинной EMA, определяется, что сформировалась медвежий тренд.
  4. Индикатор RSI может быть использован для определения перекупленных и перепроданных зон.
  5. В восходящем тренде идти длинный, когда индикатор RSI находится на низких уровнях; в нисходящем тренде идти короткий, когда индикатор RSI находится на высоких уровнях

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

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

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

  1. Использовать несколько наборов EMA для определения основного направления тренда рынка в нескольких временных измерениях
  2. Расчет показателя EMA прост, с меньшим количеством шума, и он точно и надежно определяет основную тенденцию рынка
  3. Индикатор RSI может эффективно определить точки входа и остановки потери для значительной оптимизации доходности
  4. Структура алгоритма ясна и легко понять и изменить.
  5. Он может быть гибко комбинирован с другими техническими показателями для дальнейшего повышения эффективности стратегии

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

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

  1. Когда тенденция меняется, точка остановки может быть слишком идеализирована, что увеличивает потери
  2. Невозможно эффективно определить точку перелома тренда, возможно, упустить возможность вовремя остановить потерю
  3. Параметры EMA и RSI требуют повторного тестирования и оптимизации, иначе это может вызвать нестабильность
  4. Не может гарантировать, что каждая запись является идеальным временем, может быть ненужное множество повторений
  5. Трудно эффективно избежать больших пробелов под влиянием внезапных событий

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

  1. Разумно устанавливать точки остановки потерь для предотвращения чрезмерных потерь
  2. Увеличить другие показатели для определения обратной тенденции, чтобы обеспечить своевременную остановку потерь
  3. Оптимизация комбинаций параметров для адаптации к более широким условиям рынка
  4. Изменить логику входа и остановки потери, чтобы уменьшить количество повторений
  5. Увеличить количество исключений, чтобы избежать негативных последствий рыночных пробелов

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

Из преимуществ и рисков этой стратегии мы можем получить следующие оптимизируемые направления:

  1. На существующей двунаправленной схеме EMA, внедрить такие индикаторы, как MACD и BOLL для оценки точек переворота тренда, тем самым оптимизируя стратегии получения прибыли и остановки потерь
  2. Внедрение моделей машинного обучения для прогнозирования вероятности изменения тренда и дальнейшего улучшения эффективности стратегии
  3. Применение передовых фильтров для автоматического выявления ненормальных рыночных условий и эффективного предотвращения потерь
  4. Использование генетических алгоритмов, глубокого обучения усилению и других методов для автоматической оптимизации параметров, чтобы стратегии могли адаптироваться к большему количеству типов рынков
  5. Добавьте автоматический модуль остановки потери, может динамически регулировать точки остановки потери в соответствии с фактической ситуацией

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

Заключение

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


/*backtest
start: 2023-01-23 00:00:00
end: 2024-01-23 00:00:00
period: 4h
basePeriod: 15m
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/
// © Investoz
// Indikatorn är byggd som ett utbildningsyfte och är därför ingen rekommendation för köp/sälj av aktier. Tanken är att skapa en visuell form i en graf
// som visar om det finns någon trend såväl positiv som negativ. En dialogruta med en varning talar om vilken trend som råder. I koden finns en möjlighet
// att ta position eller gå ur position om man vill skapa en startegi kring denna trendindikator. Rekommenderar dock starkt att inte enbart förlita sig på denna
// indikator som beslut för köp/sälj då resultaten blir negativa om man köper på psoitiv trend och säljer på negativ trend. Det måste kombineras med andra idéer
// och därför fungerar denna skript mer som ett komplement till sin egen strategi.
// Det är fritt fram för vem som helst att använda sig av denna indikator.  
//@version=4
//Skapar en strategiskript med 5 % av eget kapital som ett exempel. Detta går att ändra i skriptets inställningar, välj egenskaper och sedan ändra orderstorlek
//till ett annat värde av % på eget kapital.
strategy("© Investoz trendvarningar", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=5)
//Lägger till inmatningar till skriptindikatorn. Användaren kan se och redigera inmatningar i objektdialogen efter eget val.
ema1 = input(21, minval=1, maxval=500, title="Lila linje")
valema1=input(true, title="Visa lila linje")
ema2 = input(34, minval=1, maxval=500, title="Blå linje")
valema2=input(true, title="Visa blå linje")
ema3 = input(55, minval=1, maxval=500, title="Grön linje")
valema3=input(true, title="Visa grön linje")
ema4 = input(89, minval=1, maxval=500, title="Gul linje")
valema4=input(true, title="Visa gul linje")
ema5 = input(141, minval=1, maxval=500, title="Orange linje")
valema5=input(true, title="Visa orange linje")
ema6 = input(230, minval=1, maxval=500, title="Röd linje")
valema6=input(true, title="Visa röd linje")
ema7 = input(371, minval=1, maxval=500, title="Röd linje")
valema7=input(true, title="Visa röd linje")
//Inmatningar för antal staplar
startbar = input(1, minval=1, maxval=1, title="Första stapeln")
Endbar = bar_index
//Källa input, stängning. Användaren kan själv byta till vilken källa som önskas.
src = input(close, title="Source")
//Antal staplar sedan den längsta ema började och framåt. 
tid=Endbar + startbar - 371
//EMA loop
aema1 = ema(src, ema1)
bema2 = ema(src, ema2)
cema3 = ema(src, ema3)
dema4 = ema(src, ema4)
eema5 = ema(src, ema5)
fema6 = ema(src, ema6)
gema7 = ema(src, ema7)
//Skriver ut linjer i diagrammet om förhållandet är sant, annars falskt.
h=plot(valema1 ? aema1 : na, title="Lila linje", style=plot.style_line, linewidth=1, color=color.purple)
i=plot(valema2 ? bema2 : na, title="Blå linje", style=plot.style_line, linewidth=1, color=color.blue)
j=plot(valema3 ? cema3 : na, title="Grön linje", style=plot.style_line, linewidth=1, color=color.green)
k=plot(valema4 ? dema4 : na, title="Gul linje", style=plot.style_line, linewidth=1, color=color.yellow)
l=plot(valema5 ? eema5 : na, title="Orange linje", style=plot.style_line, linewidth=1, color=color.orange)
m=plot(valema6 ? fema6 : na, title="Röd linje", style=plot.style_line, linewidth=1, color=color.red)
n=plot(valema7 ? gema7 : na, title="Brun linje", style=plot.style_line, linewidth=1, color=color.maroon)
//Fyller bakgrunden mellan två linjer med en viss färg.
fill(h, i, color = color.purple,transp=34)
fill(i, j, color = color.blue,transp=34)
fill(j, k, color = color.green,transp=34)
fill(k, l, color = color.yellow,transp=34)
fill(l, m, color = color.orange,transp=34)
fill(m, n, color = color.red,transp=34)
//Skapa en algoritm för positiv trend
PositivTrend = crossover(aema1,gema7)?1:0
TrendPositiv = ema(close,1) > aema1 and aema1 > bema2?1:0
//Skapa en algoritm för negativ trend
NegativTrend = crossunder(aema1,gema7)?1:0
TrendNegativ = ema(close,1) < aema1 and aema1 < bema2?1:0
//Skapar en textruta med varningstext för positiv trend
varningtextpositiv = "Varning för positiv trend."+"\n" + "Leta efter att ta position!"
// if PositivTrend
//     varningpositiv=label.new(
//      bar_index, 
//      low,  
//      xloc=xloc.bar_index, 
//      yloc=yloc.price,
//      color=color.black, 
//      textcolor=color.green,
//      text=varningtextpositiv,
//      style=label.style_label_down,
//      textalign=text.align_left)
//Skapar en textruta med varningstext för negativ trend
varningtextnegativ = "Varning för negativ trend."+"\n" + "Leta efter utgången!"
// if NegativTrend
//     varningnegativ=label.new(
//      bar_index, 
//      low,  
//      xloc=xloc.bar_index, 
//      yloc=yloc.price,
//      color=color.black, 
//      textcolor=color.red,
//      text=varningtextnegativ,
//      style=label.style_label_up,
//      textalign=text.align_left)
//Köp om positiv trend
if (PositivTrend) 
    strategy.entry("Ta position", strategy.long, when = PositivTrend)
//Sälj om negativ trend
if (NegativTrend)
    strategy.close("Ta position", when = NegativTrend, comment="Gå ur position")
//Beräkning av positiv trend
vspositiv(positiv)=>valuewhen(Endbar==startbar,positiv,0)
vepositiv(positiv)=>valuewhen(Endbar==Endbar,positiv,0)
positivmean(TrendPositiv)=>
    csumpositiv = cum(TrendPositiv)
//Slut//   
    a = vepositiv(csumpositiv)
//Start//
    b = vspositiv(csumpositiv)
//Slut - Start// 
    (a - b)/(tid)
positivmeanpositiv = positivmean(TrendPositiv) 
//Beräkning av negativ trend
vsnegativ(negativ)=>valuewhen(Endbar==startbar,negativ,0)
venegativ(negativ)=>valuewhen(Endbar==Endbar,negativ,0)
negativmean(TrendNegativ)=>
    csumnegativ = cum(TrendNegativ)
//Slut//   
    a = venegativ(csumnegativ)
//Start//
    b = vsnegativ(csumnegativ)
//Slut - Start// 
    (a - b)/(tid)
negativmeannegativ = negativmean(TrendNegativ) 
//Inmatning av text som ska in i texruta som visar antal staplar i trend
logga = "© Investoz: Trend i tid"+ "\n"
streck = "--------------------------------------------------------"
totalastaplar = "\n" + "Dagar totalt: " + tostring(tid)+ " dagar "+"\n"+ streck + "\n"
totalpositiv = "Dagar totalt i positiv trend "+" 📈 : "  +tostring(positivmeanpositiv*tid, "##.##") +" dagar " + "\n"
totalnegativ = "\n" + "Dagar totalt i negativ trend" + " 📉 : "  +tostring(negativmeannegativ*tid, "##.##") +" dagar " 
//Textruta för antal staplar i trend
// if barstate.ishistory
//     barcountlbl=label.new(
//      bar_index, 
//      low,  
//      xloc=xloc.bar_index, 
//      yloc=yloc.price,
//      color=color.black, 
//      textcolor=color.yellow,
//      text=logga+streck+totalastaplar+totalpositiv+streck+totalnegativ,
//      style=label.style_label_lower_left,
//      textalign=text.align_left)
//     label.delete(barcountlbl[1])
////////////////////////////////// 

Больше