피보나치 수정과 거래량 증가에 기반한 거래 전략


생성 날짜: 2024-05-15 10:45:58 마지막으로 수정됨: 2024-05-15 10:45:58
복사: 0 클릭수: 694
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

피보나치 수정과 거래량 증가에 기반한 거래 전략

개요

이 전략은 거래량 증가 (Delta Volume) 와 피보나치 회귀 (Fibonacci Retracement) 에 기반한 거래 전략이다. 이 전략은 구매자와 판매자의 거래량을 비교하여 시장의 흐름을 판단하며 피보나치 회귀선을 사용하여 출구점을 결정한다. 구매자의 거래량이 판매자의 거래량을 초과하고 가격이 61.8%의 피보나치 회귀선을 돌파했을 때 더 많이 입점한다.

전략 원칙

  1. 지정된 주기 내의 구매자 거래량과 판매자 거래량을 계산하고, 배열에 저장한다.
  2. 거래량 증가 (Delta Volume) 를 계산한다. 즉, 구매자의 거래량 빼기 판매자의 거래량이다.
  3. 지정된 주기 내의 최고 가격과 최저 가격을 계산하고, 그것들에 따라 38.2%와 61.8%의 피보나치 리코딩 라인을 계산한다.
  4. 거래량이 0보다 많을 때 (구매자의 거래량이 판매자의 거래량보다 많을 때) 그리고 청산 가격이 61.8%의 피보나치 회귀선보다 높을 때, 더 많은 지점을 다.
  5. 거래량 증가량이 0 (매매자의 거래량이 구매자의 거래량보다 크다) 보다 작고, 청산 가격이 38.2%의 피보나치 회귀선 이하일 때, 평점.

전략적 이점

  1. 거래량과 가격의 두 차원을 결합하면 시장의 흐름을 보다 포괄적으로 판단할 수 있다.
  2. 피보나치 회전선을 출입구로 이용하고 있으며, 명확한 기술 지원이 있습니다.
  3. 거래량 증가 지표는 시장의 수요와 공급 관계를 반영할 수 있으며, 선도적인 지표이다.
  4. 매개 변수는 조정할 수 있으며, 다른 시장과 거래 품종에 적용된다.

전략적 위험

  1. 불투명한 시장에서 거래가 자주 이루어지면 거래 비용이 더 높을 수 있습니다.
  2. 시장의 급격한 변동이 발생하면 가격이 피보나치 회귀선을 빠르게 돌파하여 가장 좋은 입출구를 놓칠 수 있습니다.
  3. 이 전략은 역사적인 데이터에 의존하여 계산되며, 새로운 상장된 거래 품종이나 데이터의 부재가 전략의 유효성에 영향을 미칠 수 있다.

전략 최적화 방향

  1. 트렌드와 진출점을 확인하기 위해 이동 평균, RSI 등과 같은 다른 기술 지표를 도입하는 것을 고려할 수 있습니다.
  2. 다른 시장과 거래 품종에 대해 거래량 증가와 피보나치 회귀의 계산 주기 및 매개 변수를 최적화 할 수 있습니다.
  3. 진입 후, 위험을 제어하고 이익을 잠금하기 위해 이동 스톱 또는 스톱을 설정할 수 있다.
  4. Fear & Greed Index과 같은 시장 감정 지표와 결합하여 전략에 동적으로 조정할 수 있습니다.

요약하다

이 전략은 거래량 증대와 피보나치 회귀선을 결합하여, 트렌드 형성 초기에 진입하고, 트렌드가 반전될 가능성이 있을 때 진출하여 시장의 주요 트렌드를 포착한다. 그러나, 불안정한 시장에서 빈번한 거래의 위험이 발생할 수 있으므로, 다른 지표와 위험 관리 수단과 결합하여 최적화가 필요하다.

전략 소스 코드
/*backtest
start: 2023-05-09 00:00:00
end: 2024-05-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Delta Volume with Fibonacci Levels Strategy", overlay=true)

// Input pour la période de calcul du volume et du delta
N = input(14, title="Période du Delta Volume")
fibLength = input(21, title="Fibonacci Lookback Period")

// Choix de la barre pour l'entrée et la sortie des trades
entryPriceType = input.string("close", title="Entry Price Type", options=["open", "close"])
exitPriceType = input.string("close", title="Exit Price Type", options=["open", "close"])

// Correction des dates de début et de fin pour le backtest
startDate = input(defval = timestamp("2021-01-01"), title = "Start Date")
endDate = input(defval = timestamp("2022-01-01"), title = "End Date")

// Calcul des volumes des acheteurs et des vendeurs
buyerVolume = array.new_float()
sellerVolume = array.new_float()

// Mise à jour des volumes à chaque bougie
buyVol = close > open ? volume : 0
sellVol = close < open ? volume : 0
array.unshift(buyerVolume, buyVol)
array.unshift(sellerVolume, sellVol)

// Gardez seulement les N dernières valeurs pour le delta volume
if array.size(buyerVolume) > N
    array.pop(buyerVolume)
if array.size(sellerVolume) > N
    array.pop(sellerVolume)

// Calcul du delta de volume
sumBuyerVolume = array.sum(buyerVolume)
sumSellerVolume = array.sum(sellerVolume)
deltaVolume = sumBuyerVolume - sumSellerVolume

// Calcul du plus haut et du plus bas pour Fibonacci
highestPrice = ta.highest(high, fibLength)
lowestPrice = ta.lowest(low, fibLength)

// Fibonacci Levels
fib382 = lowestPrice + (highestPrice - lowestPrice) * 0.5
fib618 = lowestPrice + (highestPrice - lowestPrice) * 0.786


// Vérification des dates pour le backtest
bool isInDateRange = true

// Conditions d'entrée et de sortie
entryPrice = entryPriceType == "open" ? open : close
exitPrice = exitPriceType == "open" ? open : close

// Acheter quand le volume des acheteurs dépasse celui des vendeurs, le prix est au-dessus du niveau 61.8% de Fibonacci
if isInDateRange and deltaVolume > 0 and entryPrice > fib618
    strategy.entry("Buy", strategy.long)

// Vendre quand le volume des vendeurs dépasse celui des acheteurs, le prix est en dessous du niveau 38.2% de Fibonacci
if isInDateRange and deltaVolume < 0 and exitPrice < fib382
    strategy.close("Buy")

// Affichage des niveaux de Fibonacci et du delta de volume
plot(fib382, color=color.red, title="Fibonacci 38.2%")
plot(fib618, color=color.green, title="Fibonacci 61.8%")
plot(deltaVolume, color=deltaVolume > 0 ? color.green : color.red, title="Delta Volume")