낮은 가격에 매수하고 높은 가격에 이익을 실현하세요


생성 날짜: 2023-11-23 11:03:18 마지막으로 수정됨: 2023-11-23 11:03:18
복사: 1 클릭수: 667
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

낮은 가격에 매수하고 높은 가격에 이익을 실현하세요

개요

이 전략은 시장의 낮은 시점에 구매하고, 높은 시점에 판매하는 아이디어 디자인에 기반한다. 그것은 과거 일정 주기 동안의 최고 가격과 최저 가격을 추적하고, 가격이 최저 가격을 돌파 할 때 다단 포지션을 구축하고, 가격이 최고 가격으로 떨어지거나 정지 조건을 달성 할 때 평점. 또한, 이 전략은 옵션 트렌드 필터를 추가하고, 가격이 상승 추세일 때만 구매한다.

전략 원칙

최저 가격과 최고 가격 계산

  • 최저 가격 ((lowcriteria): ta.lowest 함수를 호출하여, 사용자 설정된 회고 주기 ((설정 20 K선) 를 기반으로 과거 일정 주기 동안의 최저 가격을 계산하고 최저 가격 선을 그리는다.

  • 최고 가격 ((highcriteria): 호출 ta.highest 함수, 사용자 설정 된 회고 주기 ((默认 10根K线) 를 기반으로 과거 일정 주기 동안의 최고 가격을 계산하고 최고 가격 라인을 그리기.

출입 신호

현재 가격이 최저 가격선을 돌파했을 때, 구매 신호를 발신하여 다단계 포지션을 설정한다.

출구 신호

두 가지 출전 방법이 있습니다.

  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()