간달프 매인 리버션 양적 거래 전략

저자:차오장, 날짜: 2023-10-30 10:27:40
태그:

img

전반적인 설명

간달프 양적 거래 전략 (Gandalf quantitative trading strategy) 은 중간 가격 라인을 기반으로 한 평균 반전 전략이다. 중량 평균 가격, 중간 가격 라인 및 몸 중간 가격을 계산하여 최적의 입점점을 찾기 위해 현재 트렌드 방향을 결정한다. 트렌드 반전이 감지되면 손실을 빠르게 절단하고 출구한다. 전략은 트렌드 다음과 트렌드 반전 전략의 아이디어를 결합한다.

전략 논리

달프 전략의 핵심 논리는 현재 트렌드 방향과 강도를 판단하기 위해 가중 평균 가격, 중간 가격 라인 및 몸 중간 가격 사이의 크기 관계를 비교하는 것입니다.

구체적으로 다음 가격을 계산합니다.

  • 가중된 평균 가격: (최고 가격 + 최저 가격 + 종료 가격 + 종료 가격) / 4
  • 중간 가격 선: (최고 가격 + 최저 가격) / 2
  • 몸매 중간 가격: (개시 가격 + 폐쇄 가격) / 2

포지션에 들어가면 중력 평균 가격, 중위 가격 라인 및 마지막 두 바의 몸 중간 가격 사이의 크기 관계를 비교하여 시작 트렌드의 특성에 맞는지 여부를 결정합니다.

예를 들어, 가중된 평균 가격이 중위 가격 라인 이하이고, 몸매 중위 가격도 가중된 평균 가격 이하라면, 이는 가격이 하락하고 있음을 나타냅니다. 이는 단축 기회를 제공합니다.

손실을 중지 할 때, 트렌드 역전의 징후가 있는지 판단하기 위해 이러한 가격 사이의 크기 관계를 계속 비교합니다. 가중 평균 가격이 몸 중간 가격보다 높고 중간 가격 라인이 가중 평균 가격보다 낮으면 트렌드 역전을 나타내고 즉시 손실을 줄여야합니다.

가격 대량 관계를 비교함으로써, 간달프 전략은 추세의 판단과 추적을 실현합니다. 최적의 진입 시기를 찾을 수 있으며 손실을 막기 위해 트렌드 반전을 신속하게 감지 할 수 있습니다.

장점

간달프 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 트렌드 방향을 결정하기 위해 중간 가격 라인을 사용하면 시장 소음을 효과적으로 필터하고 주요 트렌드를 잠그게 할 수 있습니다.

  2. 여러 가지 가격 비교를 결합한 입시 조건은 트렌드의 시작을 더 안정적으로 결정할 수 있습니다.

  3. 스톱 로스 조건은 또한 트렌드 반전을 판단하기 위해 가격 비교를 사용하여 빠른 스톱 로스 및 위험 통제를 허용합니다.

  4. 조건부 입국 명령을 채택하면 이상적인 가격으로 들어갈 수 있습니다.

  5. 미리 설정된 최대 수익 취득 시간 및 보유 기간 상한 제한은 수익을 차단하고 단일 무역 위험을 제어 할 수 있습니다.

  6. 코드 구조는 명확하고 간단하고 이해하기 쉽고 수정하기 쉽습니다.

  7. 개인 위험 선호도에 따라 매개 변수를 조정할 수 있고 최적화하기 쉽습니다.

  8. 트렌딩 상품에 적용되며, 트렌딩 수익을 얻을 수 있습니다.

요약하자면, 갱달프 전략은 트렌드를 결정하기 위해 중간선을 이용하고, 이윤을 취하고 손실을 멈추는 조건을 설정하며, 트렌드를 추적하는 동안 위험을 효과적으로 제어할 수 있으며, 이를 신뢰할 수 있는 트렌드 다음 전략으로 만듭니다.

위험성

간달프 전략에는 몇 가지 위험도 있습니다.

  1. 트렌드를 따르는 전략으로서, 트렌드가 불분명하거나 자주 역전될 때 더 작은 손실을 발생시킬 것입니다.

  2. 트렌드 반전 지점을 효과적으로 결정하지 못하면 손실이 커질 수 있습니다.

  3. 범위를 제한하는 시장에 갇히기 쉽죠.

  4. 매개 변수 설정에 의존하고, 매개 변수는 다른 제품에 맞게 조정해야 합니다.

  5. 일방적인 지분, 역동적인 추세에서 이익을 얻을 수 없습니다.

  6. 조건부 주문의 실패율이 높고 입장이 오래 걸릴 수도 있습니다.

위험 관리 조치:

  1. 작은 포지션 크기를 채택, 부분 입출입, 단일 손실을 제어하기 위해.

  2. 스톱 로스 라인을 설정하거나 빠른 스톱 로스를 설정하거나 이동 스톱 로스 또는 후속 스톱 로스를 채택하십시오.

  3. 현재 제품에 맞는 매개 변수를 최적화합니다. 추세 판단을 돕기 위해 다른 지표를 사용하십시오.

  4. 마틴게일에서 낮은 비용 기준으로 간주하십시오.

  5. 명백한 추세를 보이는 상품을 거래하면 수익 확신이 높아집니다.

  6. 진입 확률을 높이기 위해 진입 기준을 적절히 완화하십시오.

개선 방향

달프 전략은 다음과 같은 측면에서도 개선될 수 있습니다.

  1. 트렌드 역전 시기를 결정하는 데 도움이되는 트렌드 판단 지표를 구축하십시오. 예를 들어 MACD, 볼링거 밴드 등을 추가하십시오.

  2. 자동 최적화 매개 변수를 추가하고 더 많은 제품에 적응 할 수 있습니다.

  3. 머신러닝 알고리즘을 강화하고, 트렌드를 판단하기 위해 역사적인 데이터에 신경망이나 SVM 모델을 훈련합니다.

  4. 더 많은 수익을 취하는 방법을 추가합니다. 예를 들어, 이동 수익, 파라볼리 수익.

  5. 스프레드 트레이딩 또는 통계 트래딩 전략을 위해 관련 상품을 결합합니다.

  6. 시장을 판단하기 위해 Hidden Markov 모델에 기반한 상태 예측을 추가합니다.

  7. 복합적인 전략을 세우는 것, 예를 들어 멀티 전략 관리에 대한 이동 평균 전략과 결합하는 것.

  8. 최적의 포트폴리오 가중치를 찾기 위해 거래 전략 조합의 최적화를 탐구합니다.

요약하자면, 간달프 전략은 트렌드 판단, 자동 최적화, 위험 관리와 같은 여러 차원에서 확장되고 최적화 될 수 있습니다.

결론

간달프 양적 전략은 트렌드를 결정하기 위해 가격 비교를 기반으로 한 간단하면서도 효과적인 전략이다. 트렌드를 따르는 것과 빠른 스톱 손실의 아이디어를 결합하여 위험을 효과적으로 제어 할 수 있습니다. 전략 논리는 명확하고 이해하기 쉽고 개인 위험 선호도에 따라 매개 변수를 조정할 수 있습니다. 그러나 또한 적절한 최적화와 관리가 필요한 수익 변동과 보유 위험을 가지고 있습니다. 전반적으로, 간달프 전략은 안정적인 수익을 추구하는 데 적합한 신뢰할 수 있고 이해하기 쉽고 최적화 할 수있는 트렌드 다음 전략입니다.


/*backtest
start: 2023-10-22 00:00:00
end: 2023-10-29 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3

// The GandalfProjectResearchSystem strategy, as discussed in
// “System Development Using Artificial Intelligence”
// by Domenico D’Errico and Giovanni Trombetta
strategy("Gandalf Project Research System", overlay=true)

// Inputs
Quantity = input(0, title="Quantity (0 to auto calc)")
Single_Trade_Money = input(10000, minval=1, title="Money to spend on single trade")
MaxProfitCloses = input(6, minval=1, title="Max Profit Close")
MaxBars = input(8, minval=1, title="Max Total Bars")
Enter_Gap = input(-0.08, title="Distance from low price to place entry limit")
AltExit = input(true, title="Use Alt Exit")

// Calculate Order Quantity
Ncon = Single_Trade_Money / close

// Misc Variables
src = close
BarsSinceEntry = 0
MaxProfitCount = 0
MedBodyPrice = (open + close) / 2.0
Weighted = (high + low + close + close) / 4.0
Median = (high + low) / 2.0

// Enter Conditions
Cond00 = strategy.position_size == 0
Cond01 = ((Weighted[1] < Median[1] and Median[2] <= Weighted[1] and MedBodyPrice[2] <= Weighted[3]) or (Weighted[1] < Median[3] and MedBodyPrice[0] < Median[2] and MedBodyPrice[1] < MedBodyPrice[2]))
Entry01 = Cond00 and Cond01

// Update Exit Variables
BarsSinceEntry := Cond00 ? 0 : nz(BarsSinceEntry[1]) + 1
MaxProfitCount := Cond00 ? 0 : (close > strategy.position_avg_price and BarsSinceEntry > 1) ? nz(MaxProfitCount[1]) + 1 : nz(MaxProfitCount[1])

// Exit Conditions
eCond01 = BarsSinceEntry - 1 >= MaxBars
eCond02 = MaxProfitCount >= MaxProfitCloses
eCond03 = ((Weighted[1] < MedBodyPrice[1] and Median[2] == MedBodyPrice[3] and MedBodyPrice[1] <= MedBodyPrice[4]) or (Weighted[2] < MedBodyPrice[0] and Median[4] <= Weighted[3] and MedBodyPrice[1] <= Weighted[1]) or (Weighted[2] < MedBodyPrice[0] and Median[4] <= Weighted[3] and MedBodyPrice[1] <= Weighted[1]))
eCond04 = AltExit ? true : close - strategy.position_avg_price < 0
Exit01 = not Cond00 and (eCond01 or eCond02 or (eCond03 and eCond04))

// Entries
strategy.entry(id="L1", long=true, limit=low + Enter_Gap, qty=(Quantity > 0 ? Quantity : Ncon), when=Entry01)
 
// Exits
strategy.close("L1", Exit01)


더 많은