비트코인 다중 요인 거래 전략

저자:차오장, 날짜: 2023-09-25 18:24:02
태그:

전반적인 설명

이것은 비트코인과 다른 암호화폐의 15분 시간 프레임 거래를 위해 설계된 포괄적인 거래 전략이다. 이 전략은 트리플 익스포넌셜 이동 평균 (TEMA), 평균 참 범위 (ATR), 하이킨-아시 촛불 등 여러 지표를 결합하여 구매 및 판매 신호를 생성하며 리스크 관리 기능과 함께 수익을 취하고 손실을 중지합니다.

전략 논리

이 전략은 다음의 지표를 이용합니다.

  • 트리플 기하급수적 이동 평균 (TEMA): 각각 높은 가격, 낮은 가격 및 가까운 가격에 기초한 다른 길이와 출처의 세 가지 TEMA 라인.

  • 평균 실제 범위 (ATR): 변동성을 측정하기 위해 EMA 평형화로 사용자 정의 ATR 계산.

  • 슈퍼트렌드: 트렌드 방향을 결정하기 위해 ATR와 곱셈자를 사용하여 계산됩니다.

  • 단순 이동 평균 (SMA): 짧은 TEMA 선에 적용하여 값을 부드럽게합니다.

  • 하이킨-아시 클로즈: 추세 확인을 위해 사용된다.

긴 엔트리 신호는 짧은 TEMA가 두 긴 TEMA 라인 이상, 슈퍼 트렌드가 상승하고, 짧은 TEMA가 SMA 이상, 하킨-아시 클로즈가 이전 클로즈보다 높을 때 발생합니다.

반대 조건이 충족되면 단기 입력 신호가 발사됩니다.

이윤 및 스톱 손실은 입시 가격의 1% 및 3%로 설정됩니다. 수수료도 고려됩니다.

이점 분석

  • 여러 가지 요인이 정확성 을 향상 시킨다 트렌드, 변동성, 패턴 지표를 결합하면 정확도를 높이고 잘못된 신호를 피할 수 있습니다.

  • 적당한 스톱 로스/익스피스 통제 위험 잘 설정된 스톱 로즈와 취득 레벨은 수익을 차단하고 손실을 제한합니다.

  • 큰 매개 변수 최적화 공간 지표 매개 변수는 변화하는 시장에 적응하도록 유연하게 조정할 수 있습니다.

  • 수수료를 고려하면 더 현실적입니다. 이 실험 결과, 실제 공연에 더 가깝습니다.

위험 분석

  • 과도한 최적화로 인한 잘못된 판단의 위험 너무 많은 조합된 지표도 잘못된 판단으로 이어질 수 있습니다. 효과는 평가되어야합니다.

  • 단기 거래의 위험이 높습니다. 더 긴 시간 프레임과 비교하면 15분이 갑작스러운 사건과 위험에 더 취약합니다.

  • 전략 안정성 확인이 필요 신뢰성을 보장하기 위해 오랜 역사와 시장에 걸쳐 더 광범위한 테스트가 필요합니다.

  • 여러 매개 변수와 함께 긴 최적화 많은 매개 변수가 도입되어 모든 매개 변수 조합을 최적화하기 위한 긴 과정으로 이어집니다.

개선 방향

  • 각 지표의 실제 효과를 평가 각 지표의 실제 추가 이익을 확인하는 백테스트, 과잉을 피합니다.

  • 안정성 최적화 및 테스트 테스트 최적화 결과는 더 많은 시장에서 안정성을 보장합니다.

  • 스톱 로스 전략 트레일링 스톱, 브래킷 오더 스톱 등으로 위험을 통제합니다.

  • 더 많은 비용 요인을 고려 예를 들어, 실사 테스트를 라이브 공연에 가깝게 만들기 위해 미끄러짐과 같이요.

요약

이 전략은 15분 비트코인 거래에 맞춘 여러 지표와 위험 관리 기술을 결합한다. 매개 변수 최적화, 지표 효과 평가, 광범위한 시장 안정성 테스트, 그리고 다중 요소 접근법 내에서 최적의 조합을 찾기 위해 더 많은 실제 요소를 도입하는 데 큰 공간이 남아 있다. 지속적인 최적화와 검증으로, 이는 암호화 고주파 거래에 효과적인 도구가 될 수 있다.


/*backtest
start: 2023-08-25 00:00:00
end: 2023-09-09 00:00:00
period: 10m
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/
// © deperp
//@version=5
strategy('3kilos', shorttitle='3kilos BTC 15m', overlay=true, initial_capital=100000, max_bars_back=5000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.07, pyramiding=0)

short = input.int(50, minval=1)
srcShort = input(high, title='TEMA short')

long = input.int(100, minval=1)
srcLong = input(low, title='TEMA long 2')

long2 = input.int(350, minval=1)
srcLong2 = input(close, title='TEMA long 3')

atrLength = input.int(550, title='ATR Length', minval=1)
mult = input.float(3, title="Multiplier", minval=0.5, step=1)

smaPeriod = input.int(100, title="SMA Period", minval=1)

takeProfitPercent = input.float(1, title="Take Profit (%)", minval=0.1) / 100
stopLossPercent = input.float(3, title="Stop Loss (%)", minval=0.1) / 100


tema(src, length) =>
    ema1 = ta.ema(src, length)
    ema2 = ta.ema(ema1, length)
    ema3 = ta.ema(ema2, length)
    3 * (ema1 - ema2) + ema3

tema1 = tema(srcShort, short)
plot(tema1, color=color.new(color.red, 0), linewidth=2)

tema2 = tema(srcLong, long)
plot(tema2, color=color.new(color.blue, 0), linewidth=2)

tema3 = tema(srcLong2, long2)
plot(tema3, color=color.new(color.green, 0), linewidth=2)

// Custom ATR calculation with EMA smoothing
atr_ema(src, length) =>
    trueRange = math.max(math.max(high - low, math.abs(high - close[1])), math.abs(low - close[1]))
    emaTrueRange = ta.ema(trueRange, length)
    emaTrueRange

// Calculate ATR with EMA smoothing
atr = atr_ema(close, atrLength)

// Calculate Supertrend
var float up = na
var float dn = na
var bool uptrend = na
up := na(up[1]) ? hl2 - (mult * atr) : uptrend[1] ? math.max(hl2 - (mult * atr), up[1]) : hl2 - (mult * atr)
dn := na(dn[1]) ? hl2 + (mult * atr) : uptrend[1] ? hl2 + (mult * atr) : math.min(hl2 + (mult * atr), dn[1])
uptrend := na(uptrend[1]) ? true : close[1] > dn[1] ? true : close[1] < up[1] ? false : uptrend[1]

// Calculate SMA
sma = ta.sma(tema1, smaPeriod)

// Heikin-Ashi Close
haTicker = ticker.heikinashi(syminfo.tickerid)
haClose = request.security(haTicker, timeframe.period, close)


// Trend determination using Heikin-Ashi Close
longC = tema1 > tema2 and tema1 > tema3 and uptrend and tema1 > sma and haClose > haClose[1]
shortC = tema1 < tema2 and tema1 < tema3 and not uptrend and tema1 < sma and haClose < haClose[1]


alertlong = longC and not longC[1]
alertshort = shortC and not shortC[1]

useDateFilter = input.bool(true, title="Begin Backtest at Start Date",
     group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2023"), 
     title="Start Date", group="Backtest Time Period",
     tooltip="This start date is in the time zone of the exchange " + 
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")

inTradeWindow = true

stopLossLevelLong = close - atr * mult
stopLossLevelShort = close + atr * mult
longTakeProfitLevel = close * (1 + takeProfitPercent)
longStopLossLevel = close * (1 - stopLossPercent)
shortTakeProfitLevel = close * (1 - takeProfitPercent)
shortStopLossLevel = close * (1 + stopLossPercent)



if inTradeWindow and longC
    strategy.entry('Long', strategy.long, comment='Long')
    strategy.exit("TP Long", "Long", limit=longTakeProfitLevel, stop=longStopLossLevel, comment="TP/SL Long")

if inTradeWindow and shortC
    strategy.entry('Short', strategy.short, comment='Short')
    strategy.exit("TP Short", "Short", limit=shortTakeProfitLevel, stop=shortStopLossLevel, comment="TP/SL Short")

// Alerts

alertcondition(longC, title='Long', message=' Buy Signal ')
alertcondition(shortC, title='Short', message=' Sell Signal ')

더 많은