Краткосрочные торговые стратегии, следующие за трендом


Дата создания: 2024-01-04 17:52:21 Последнее изменение: 2024-01-04 17:52:21
Копировать: 0 Количество просмотров: 588
1
Подписаться
1621
Подписчики

Краткосрочные торговые стратегии, следующие за трендом

Обзор

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

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

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

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

  1. Показатели, используемые для оценки тенденций, позволяют точно определить тенденции.
  2. VWAP является важной отправной точкой, чтобы избежать торговли в недействительных зонах.
  3. ADX определяет, что существуют тенденции, а затем совершает операции, чтобы уменьшить количество недействительных сделок.
  4. В результате, в стране наблюдается высокий уровень успешности прорыва, что соответствует тенденции.

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

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

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

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

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

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

Исходный код стратегии
/*backtest
start: 2023-12-27 00:00:00
end: 2023-12-29 23:00:00
period: 3m
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/
// © mariocastel

//@version=5
strategy("Wave Rider", overlay=true, initial_capital = 100000)

session = input(defval = "1400-1500", title = "Session Time")
t = not na(time(timeframe.period,session))
RR = input.float(1.5, "Risk to reward", step=0.5)
var bool movetoBE = input(false, "Move to Break Even")
BE = input.float(1, "Break Even at", step=0.5)

vwap_mult = 0.001 * input(3, "VWAP Multiplier")
aboveVWAP = ta.vwap(close) * (1 + vwap_mult)
belowVWAP = ta.vwap(close) * (1 - vwap_mult)
sym = input("BTC_USDT:swap", "VWAP Source")

QQQaboveVWAP = request.security(sym, "3", aboveVWAP)
QQQbelowVWAP = request.security(sym, "3", belowVWAP)
QQQclose = request.security(sym, "3", close)

ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema60 = ta.ema(close, 60)
ema9 = ta.ema(close, 9)

opentrades = strategy.opentrades > 0

aboveEMA = close > ema60
belowEMA = close < ema60

uptrend = aboveEMA and aboveEMA[1] and aboveEMA[2] and aboveEMA[3] and aboveEMA[4] and aboveEMA[5] and aboveEMA[6] and aboveEMA[7] and aboveEMA[8] and aboveEMA[9] and aboveEMA[10] and aboveEMA[11] and aboveEMA[12] and aboveEMA[13] and aboveEMA[14] and aboveEMA[15] and aboveEMA[16] and aboveEMA[17] and aboveEMA[18] and aboveEMA[19] and aboveEMA[20] and aboveEMA[21] and aboveEMA[22] and aboveEMA[23] and aboveEMA[24] and aboveEMA[25] and aboveEMA[26] and aboveEMA[27] and aboveEMA[28] and aboveEMA[29]
downtrend = belowEMA and belowEMA[1] and belowEMA[2] and belowEMA[3] and belowEMA[4] and belowEMA[5] and belowEMA[6] and belowEMA[7] and belowEMA[8] and belowEMA[9] and belowEMA[10] and belowEMA[11] and belowEMA[12] and belowEMA[13] and belowEMA[14] and belowEMA[15] and belowEMA[16] and belowEMA[17] and belowEMA[18] and belowEMA[19] and belowEMA[20] and belowEMA[21] and belowEMA[22] and belowEMA[23] and belowEMA[24] and belowEMA[25] and belowEMA[26] and belowEMA[27] and belowEMA[28] and belowEMA[29]

buy = (low < ema20 and low > ema50 and close > ema9) and QQQclose > QQQaboveVWAP  or (low[1] < ema20 and low[1] > ema50 and close > ema9) and QQQclose > QQQaboveVWAP and uptrend
sell = (high > ema20 and high < ema50 and close < ema9) and QQQclose < QQQbelowVWAP  or (high[1] > ema20 and high[1] < ema50 and close < ema9) and QQQclose < QQQbelowVWAP and downtrend

var float entry = na
var float sl = na
var float qty = na
var float tp = na
var float be = na

if ema20 > ema50 and ema9 > ema20 
    if buy and not opentrades and t and uptrend
        alert("Wave Rider Setup")
        entry := close
        sl := ema50
        qty := 1000/(close - sl) * 1
        if close - sl > syminfo.mintick*300
            tp := close + ((close - sl)*1)
        else 
            tp := close + ((close - sl)*RR)
        be := close + ((close - sl)*BE)
        strategy.entry("Buy", strategy.long, qty=qty)
        strategy.exit("Close Buy", "Buy",qty=qty, stop=sl, limit=tp)

if ema20 < ema50 and ema9 < ema20 
    if sell and not opentrades and t and downtrend
        alert("Wave Rider Setup")
        entry := close
        sl := ema50
        qty := 1000/(sl - close) * 1
        if sl - close > syminfo.mintick*300
            tp := close - ((sl - close)*1)
        else
            tp := close - ((sl - close)*RR)
        be := close - ((sl - close)*BE)
        strategy.entry("Sell", strategy.short, qty=qty)
        strategy.exit("Close Sell", "Sell", qty=qty, stop=sl, limit=tp)

// Adjust BEs
if movetoBE == true
    if strategy.position_size > 0
        if high >= be
            sl := entry
            strategy.cancel("Close Buy")
            strategy.exit("Close Buy", "Buy", qty=qty, stop=sl, limit=tp)   
    if strategy.position_size < 0
        if low <= be
            sl := entry
            strategy.cancel("Close Sell")  
            strategy.exit("Close Sell", "Sell", qty=qty, stop=sl, limit=tp)  


EoD_time = timestamp(year, month, dayofmonth, 15, 58, 00)
EoD = time == EoD_time
if EoD
    strategy.close_all()

barcolor(color=buy ? color.rgb(191, 255, 131): na)
barcolor(color=sell ? color.rgb(255, 149, 149): na)
ema20plot = plot(ema20, color=color.rgb(168, 131, 131, 55))
ema50plot = plot(ema50, color=color.black)
fill(ema20plot, ema50plot, color=color.rgb(168, 131, 131, 85))
plot(ema9, color=color.red)
plot(ema60, color=color.purple)
plot(QQQaboveVWAP)
plot(QQQbelowVWAP)
plotshape(uptrend, style=shape.triangleup, location=location.belowbar, color=color.black)
plotshape(downtrend, style=shape.triangledown, location=location.abovebar, color=color.black)