모멘텀 지표를 기반으로 한 종합 거래 전략


생성 날짜: 2024-02-21 11:59:22 마지막으로 수정됨: 2024-02-21 11:59:22
복사: 0 클릭수: 597
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

모멘텀 지표를 기반으로 한 종합 거래 전략

개요

이 전략은 이동 평균, MACD, RSI, 브린 밴드 등 여러 가지 기술 지표를 사용하여 여러 가지 구매 및 판매 신호의 집합을 구현하여 보다 완벽한 동력 지표 집합 거래 전략을 형성합니다.

전략 원칙

전략의 핵심 논리는 여러 기술 지표의 구매/판매 신호를 집약하는 것입니다. 특히 다음과 같은 요소들이 포함됩니다.

  1. 이동 평균 지표: 빠른 이동 평균과 느린 이동 평균을 계산하여, 빠른 선에서 느린 선을 통과할 때 구매 신호를 생성하고, 낮은 선을 통과할 때 판매 신호를 생성한다.

  2. MACD 지표: MACD 라인과 신호 라인을 계산하여 MACD 라인이 신호 라인을 통과할 때 구매 신호를 생성하고, 아래로 통과할 때 판매 신호를 생성한다.

  3. RSI 지표: RSI 값을 계산하여 과매매 또는 과매매 영역에 진입했는지 판단하고 RSI 선과 중축 50 선의 황금 교차와 사망 교차를 결합하여 구매 판매 신호를 생성한다.

  4. 브린 벨트 지표: 가격이 상하 궤도를 돌파했는지 여부를 판단하고, 반전 중하 궤도의 신호를 결합하여 구매 판매 신호를 생성한다.

  5. 탈퇴 판단: 스톱 스톱 손실 기준을 설정하고, 특정 비율이 달성되면 적극적으로 포지션을 탈퇴한다.

위의 각 신호 모듈은 서로 독립적이며, 전략은 실시간으로 이러한 신호를 모니터링하고, 구매 신호를 유발할 때 더 많은 포지션을 열고, 판매 신호를 유발할 때 공백을 열고, 수익 디스크의 동적 집합을 실현한다.

우위 분석

이 전략에는 다음과 같은 장점이 있습니다.

  1. 신호의 풍부함: 여러 기술 지표와 결합된 구매/판매 신호로 시장 기회를 놓치지 않는 것이 쉽다.

  2. 가짜 신호를 줄여: 다양한 지표 신호의 집적 검증으로, 특정 지표의 가짜 신호로 인한 부정적인 영향을 어느 정도 줄일 수 있다.

  3. 동향과 반향을 모두 고려하십시오. 이동 평균과 같은 동향형 지표와 RSI, MACD와 같은 반향 지표를 사용하면 다양한 상황에서 좋은 효과를 얻을 수 있습니다.

  4. 자동 스톱 스톱: 전략에는 자동 스톱 스톱 스톱 메커니즘이 내장되어 있으며, 위험을 효과적으로 제어하여 손실 확산을 방지할 수 있습니다.

위험 분석

이 전략에는 다음과 같은 몇 가지 위험도 있습니다.

  1. 지표 실패 위험: 특정 상황에서는 각 지표가 특정 오류가 발생할 수 있으며, 이는 신호의 편향을 초래한다.

  2. 과다 집약 문제: 신호가 너무 집약되어 지표 해상도가 부족하고, 일부 기회를 놓친 문제.

  3. 매개 변수 최적화 난이도: 지표가 많기 때문에 매개 변수 최적화 난이도가 높으며, 부적절한 지표 매개 변수 설정도 전략 성능에 영향을 줄 수 있다.

  4. 높은 교환율: 전략 신호가 더 자주 발생하여 거래비용이 증가하는 높은 교환율을 초래합니다.

최적화 방향

이 전략에는 최적화할 수 있는 여지가 있는데, 다음과 같은 부분에서 시작할 수 있습니다.

  1. 각 지표와 매개 변수를 테스트하고 최적화하여 최적의 지표 조합을 찾습니다.

  2. 기계학습을 통해 최적의 변수를 자동으로 찾고, 수작업으로 열악한 변수 최적화를 피한다.

  3. 다양한 지표 중량 집합 방법을 테스트하여 신호 집합의 최적의 방법을 찾습니다.

  4. 시장의 변동에 따라 자동으로 손해 기준을 조정할 수 있는 적응형 손해 차단 메커니즘을 추가한다.

  5. 포지션 개시 알고리즘을 추가하고, 단일 포지션 개시 비율을 제어하고, 단일 위험을 줄입니다.

요약하다

이 전략은 전체적으로 비교적 전형적이고 일반적인 운동 지표 집합 거래 전략으로, 여러 일반적인 기술 지표의 구매 판매 신호를 종합적으로 사용하여 신호 집합을 통해 전략 성능을 향상시킵니다. 단일 지표 전략에 비해 신호 소스가 더 풍부하고, 추세를 식별하고, 역전하는 것이 더 포괄적 인 장점이 있습니다. 동시에, 매개 변수 최적화의 어려움, 지표 실패의 위험이 증가하는 것도 주의해야 할 문제입니다. 추가 테스트 및 최적화를 통해이 전략은 매우 실용적인 수치화 거래 도구가 될 수 있습니다.

전략 소스 코드
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Kesin Etkili Analiz V1 - Artun Sinan", overlay=true)
//indicator("Kesin Etkili Analiz V1 - Artun Sinan", overlay=true)

//BackTest
yearin = input (2019, title="BackTestBaşlangıç Tarihi")

// Göstergelerin parametrelerini tanımlayın
emaShrtPeriod = input.int(title="EMA Kısa Periyodu", defval=50, minval=1)
emaLngPeriod = input.int(title="EMA Uzun Periyodu", defval=100, minval=1)

maPeriod = input.int(50, "Hareketli Ortalama Periyodu", minval=1)
fast = input.int(12, "MACD Hızlı Periyodu", minval=1)
slow = input.int(26, "MACD Yavaş Periyodu", minval=1)
signal = input.int(9, "MACD Sinyal Periyodu", minval=1)
rsiPeriod = input.int(14, "RSI Periyodu", minval=1)
rsiOverbought = input.int(70, "RSI Aşırı Alım Eşiği", minval=50, maxval=100)
rsiOversold = input.int(30, "RSI Aşırı Satım Eşiği", minval=0, maxval=50)
bbPeriod = input.int(20, "Bollinger Bantları Periyodu", minval=1)
bbStd = input.float(2, "Bollinger Bantları Standart Sapması", minval=0.1)

//EMA göstergesi ayarları
ema1 = ta.ema (close,emaShrtPeriod)
ema2 = ta.ema (close, emaLngPeriod)

emaCrossUp = ema1 >= ema2
emaCrossDown = ema2 < ema1

plot(ema1, title="EMAKısa", color=color.rgb(0, 255, 13))
plot(ema2, title="EMAUzun", color=color.rgb(255, 251, 1))



// Göstergeleri hesaplayın
ma = ta.sma(close, maPeriod) // Hareketli ortalama
[macd, macdsignal, macdhist] = ta.macd(close, fast, slow, signal) // MACD
rsi = ta.rsi(close, rsiPeriod) // RSI
[upper, middle, lower] = ta.bb(close, bbPeriod, bbStd) // Bollinger Bantları

// Alım veya satım sinyalleri üretin
buySignal = false
sellSignal = false

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Fibonacci seviyelerini tanımlayın
fibLevels = array.new_float(7) // Fibonacci seviyelerini tutacak bir dizi oluşturun
array.set(fibLevels, 0, 0.0) // %0 seviyesini ayarlayın
array.set(fibLevels, 1, 0.236) // %23.6 seviyesini ayarlayın
array.set(fibLevels, 2, 0.382) // %38.2 seviyesini ayarlayın
array.set(fibLevels, 3, 0.5) // %50 seviyesini ayarlayın
array.set(fibLevels, 4, 0.618) // %61.8 seviyesini ayarlayın
array.set(fibLevels, 5, 0.786) // %78.6 seviyesini ayarlayın
array.set(fibLevels, 6, 1.0) // %100 seviyesini ayarlayın

// Tepe ve dip noktasını belirleyin
highpoint = ta.highest (high, 20) // Son 30 mum çubuğunun en yüksek değerini alın
lowpoint = ta.lowest (low, 20) // Son 30 mum çubuğunun en düşük değerini alın
diff = highpoint - lowpoint // Tepe ve dip noktası arasındaki farkı hesaplayın

// Fibonacci seviyelerini hesaplayın
fib0 = lowpoint + diff * array.get(fibLevels, 0) // %0 seviyesini hesaplayın
fib1 = lowpoint + diff * array.get(fibLevels, 1) // %23.6 seviyesini hesaplayın
fib2 = lowpoint + diff * array.get(fibLevels, 2) // %38.2 seviyesini hesaplayın
fib3 = lowpoint + diff * array.get(fibLevels, 3) // %50 seviyesini hesaplayın
fib4 = lowpoint + diff * array.get(fibLevels, 4) // %61.8 seviyesini hesaplayın
fib5 = lowpoint + diff * array.get(fibLevels, 5) // %78.6 seviyesini hesaplayın
fib6 = lowpoint + diff * array.get(fibLevels, 6) // %100 seviyesini hesaplayın

// Alım sinyali: Fiyat %61,8 seviyesinden yukarı yönlü kırılırsa ve MACD çizgisi sinyal çizgisinin üzerine çıkarsa, alım pozisyonu açın
alSignal = close > fib4 and ta.crossover(macd, macdsignal)

// Satım sinyali: Fiyat %61,8 seviyesinden aşağı yönlü kırılırsa ve MACD çizgisi sinyal çizgisinin altına inerse, satım pozisyonu açın
satSignal = close < fib4 and ta.crossunder(macd, macdsignal)

// Çıkış sinyali: Fiyat %38,2 Fibonacci seviyesine ulaşırsa veya belirli bir yüzde oranında kar veya zarar elde ederseniz, pozisyonu kapatın
exitSignal = close >= fib2 or close <= strategy.position_avg_price * 0.95 // Kar oranı olarak %5, zarar oranı olarak %5 belirledik

plot(fib0, title="%0", color=color.rgb(25, 0, 255))
plot(fib1, title="%23.6", color=color.rgb(25, 0, 255))
plot(fib2, title="%38.2", color=color.rgb(25, 0, 255))
plot(fib3, title="%50", color=color.rgb(25, 0, 255))
plot(fib4, title="%61.8", color=color.rgb(25, 0, 255))
plot(fib5, title="%78.6", color=color.rgb(25, 0, 255))
plot(fib6, title="%100", color=color.rgb(25, 0, 255))
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Hareketli ortalama kesişimi sinyali
maCrossUp = ta.crossover(ma, close) // Fiyat hareketli ortalamanın üzerine çıkarsa
maCrossDown = ta.crossunder(ma, close) // Fiyat hareketli ortalamanın altına inerse

// MACD çizgisi ve sinyal çizgisi kesişimi sinyali // Histogram yerine çizgiler
macdCrossUp = ta.crossover(macd, macdsignal) // MACD çizgisi sinyal çizgisinin üzerine çıkarsa
macdCrossDown = ta.crossunder(macd, macdsignal) // MACD çizgisi sinyal çizgisinin altına inerse

// RSI aşırı alım veya aşırı satım sinyali ve 50 seviyesi kesişimi sinyali // Sinyalleri birleştir
// Eşik değerleri doğrudan kullanın
rsiOverboughtSignal = rsi > rsiOverbought and ta.crossover(rsi, 50) // RSI değeri aşırı alım eşiğinin üzerindeyse ve 50 seviyesini yukarı keserse
rsiOversoldSignal = rsi < rsiOversold and ta.crossunder(rsi, 50) // RSI değeri aşırı satım eşiğinin altındaysa ve 50 seviyesini aşağı keserse

// Bollinger Bantları kırılımı sinyali ve orta bant geri dönüşü sinyali // Sinyalleri birleştir
bbBreakUp = close > upper and ta.crossover(close, middle) // Fiyat üst banttan çıkarsa ve orta banta geri dönerse
bbBreakDown = close < lower and ta.crossunder(close, middle) // Fiyat alt banttan inerse ve orta banta geri dönerse

// Sinyalleri birleştirin
buySignal := maCrossUp or macdCrossUp or rsiOversoldSignal or bbBreakUp or emaCrossUp and yearin >= year
sellSignal := maCrossDown or macdCrossDown or rsiOverboughtSignal or bbBreakDown or emaCrossDown and yearin >= year

// Sinyalleri grafikte oklar ile gösterin
plotshape(buySignal, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape(sellSignal, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)

plot(macd, title="MACD", color=color.blue) // MACD çizgisini mavi renkte çizin
plot(macdsignal, title="Sinyal", color=color.orange) // Sinyal çizgisini turuncu renkte çizin


if buySignal
    strategy.entry("Enter Long", strategy.long)
else if sellSignal
    strategy.entry("Enter Short", strategy.short)