리소스 로딩... 로딩...

낮은-높은 트렌드 전략

저자:차오장, 날짜: 2023-11-23 11:03:18
태그:

img

전반적인 설명

이 전략은 낮은 가격으로 구매하고 높은 가격으로 판매하는 시장 원칙에 기초하여 설계되었습니다. 특정 기간 동안 가장 높고 가장 낮은 가격을 추적하고, 가격이 가장 낮은 가격을 뚫고 갈 때 긴 포지션을 설정하고, 가격이 가장 높은 가격 이하로 떨어지거나 수익 조건이 충족되면 포지션을 닫습니다. 동시에이 전략은 옵션 트렌드 필터를 추가하여 가격이 상승 추세에있을 때만 구매 할 수 있습니다.

전략 논리

최저 가격 및 최저 가격 계산

  • 최저 가격 (lowcriteria): ta.lowest 함수를 호출하여 사용자가 설정한 뷰백 기간 동안 최저 가격을 계산하고 (전면 20 바) 최저 가격 라인을 그래프화합니다.

  • 가장 높은 가격 (highcriteria): ta.highest 함수를 호출하여 사용자가 설정한 뷰백 기간 동안 가장 높은 가격을 계산하고 가장 높은 가격 라인을 그래프합니다.

입력 신호

현재 가격이 가장 낮은 가격선을 통과하면, 긴 포지션을 설정하기 위해 구매 신호가 발동됩니다.

출구 신호

옵션에 두 가지 출구 방법이 있습니다.

  1. 고정 취업 수익: 가격이 미리 설정된 취업 수익 수준 (예: 입시 가격보다 8% 이상) 에 도달하면 수익을 위해 포지션을 닫습니다.

  2. 가장 높은 가격의 분포: 가장 높은 가격 라인 아래로 가격이 떨어지면 트렌드 반전을 판단하여 손실을 줄이기 위해 포지션을 닫습니다.

트렌드 필터

트렌드 방향을 결정하기 위해 EMA 라인을 추가하십시오. 가격이 EMA 라인 (상승 추세) 이상일 때만 구매를 허용하십시오. 이 필터는 활성화 또는 비활성화 될 수 있습니다.

이점 분석

  • 낮은 가격에 구매하고 높은 가격에 판매하는 고전적인 전략을 채택하고, 시장의 기본 요소에 맞추어

  • 가격 변동 중 빈번한 오픈을 피하기 위해 트렌드 판단을 추가합니다.

  • 높은 수익을 추구하거나 손실을 줄이기 위해 두 가지 출구 옵션을 제공하십시오.

  • 사용자 정의 가능한 매개 변수는 더 많은 시장 환경에 적응합니다.

  • 매개 변수 조정, 필터 디자인 등을 통해 전략 최적화를 위한 방안이 많습니다.

위험 분석

  • 고정된 영업이익 수준은 실제 시장 움직임에 따라 조정되지 않아 조기 영업이익 또는 충분한 영업이익 목표가 발생하지 않습니다.

  • 가장 높은 가격으로 판매하면 이미 막대한 손실을 초래할 수 있고 손실을 효과적으로 통제할 수 없습니다.

  • EMA의 추세 판단은 특정 기간만 거슬러 올라가며 실제 추세 변화보다 뒤떨어질 수도 있습니다.

  • 백테스트 결과는 미래를 나타낼 수 없습니다. 라이브 공연은 불확실성이 있습니다.

최적화 방향

  • 이윤을 취득하는 방법을 추가하십시오. 후속 정지, 부분 출구 등으로 이윤을 취득하는 수준을 동적으로 조정합니다.

  • 출구 신호를 최적화하십시오. 예를 들어 부분 출구, 다른 지표를 추가하십시오.

  • 더 많은 지표나 머신러닝을 적용함으로써 트렌드 판단을 향상시킵니다.

  • 최적의 세트를 찾기 위해 더 광범위한 백테스트를 통해 매개 변수를 최적화합니다.

  • 손실을 더 잘 조절하기 위해 스톱 로스 방법을 추가합니다.

요약

이 전략은 일반적으로 고전적 인 낮은 구매 높은 판매 원칙을 적용하고 특정 조건 하에 잘 수행 할 수 있습니다. 그러나 여전히 매개 변수 조정, 출구 최적화, 스톱 로스 메커니즘 등을 통해 개선 할 여지가 있습니다. 이 기사는 전략의 논리, 장단점 및 최적화 방향에 대한 심도있는 분석을 제공하며 전략 아이디어를 공유하고 투자자들에게 위험을 상기시키고 양적 전략으로 신중하게 거래하는 것을 목표로합니다.


/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 00:00:00
period: 1d
basePeriod: 1h
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/
// @version=5
// Author = TradeAutomation


strategy(title="Low-High-Trend Strategy", shorttitle="Low-High-Trend Strategy", process_orders_on_close=true, overlay=true, commission_type=strategy.commission.cash_per_order, commission_value=1, slippage=3, initial_capital = 25000, margin_long=50, margin_short=50, default_qty_type=strategy.percent_of_equity, default_qty_value=110)


// Backtest Date Range Inputs // 
StartTime = input(defval=timestamp('01 Jan 2000 05:00 +0000'), title='Start Time')
EndTime = input(defval=timestamp('01 Jan 2099 00:00 +0000'), title='End Time')
InDateRange = true

// Strategy Calculations //
lowcriteria = ta.lowest(close, input(20, "Lowest Price Lookback", tooltip="The strategy will BUY when the price crosses over the lowest it has been in the last X amount of bars"))[1]
highcriteria = ta.highest(close, input(10, "Highest Price Lookback", tooltip="If Take-Profit is not checked, the strategy will SELL when the price crosses under the highest it has been in the last X amount of bars"))[1]
plot(highcriteria, color=color.green)
plot(lowcriteria, color=color.red)

// Take Profit //
TakeProfitInput = input(true, "Sell with Take-Profit % intead of highest price cross?")
TakeProfit = ta.crossover(close,strategy.position_avg_price*(1+(.01*input.float(8, title="Take Profit %", step=.25))))

// Operational Functions //
TrendFilterInput = input(true, "Only buy when price is above EMA trend?")
ema = ta.ema(close, input(200, "EMA Length"))
TrendisLong = (close>ema)
plot(ema)

// Entry & Exit Functions//
if (InDateRange and TrendFilterInput==true)
    strategy.entry("Long", strategy.long, when = ta.crossover(close, lowcriteria) and TrendisLong)
if (InDateRange and TrendFilterInput==false)
    strategy.entry("Long", strategy.long, when = ta.crossover(close, lowcriteria))
if (InDateRange and TakeProfitInput==true)
    strategy.close("Long", when = TakeProfit)
if (InDateRange and TakeProfitInput==false)
    strategy.close("Long", when = ta.crossunder(close, highcriteria))
if (not InDateRange)
    strategy.close_all()
    

더 많은