
이 전략은 계절 효과에 기반한 역전 거래 전략이다. 특정 진입 달에 포지션을 구축하고, 퇴출 달에 평점을 설정하여 계절 효과로 인한 가격 역전을 포착한다.
이 전략의 핵심 논리는 사용자가 선택한 입수 월과 퇴수 월에 따라 계절 포지션을 구축하는 것이다. 구체적으로, 만약 현재 달이 입수 월과 같고 포지션이 구축되지 않은 경우, 다단계 또는 공백 방향에 따라 상장한다.
예를 들어, 만약 10월에 상장하고, 1월에 퇴장하는 것을 선택한다면, 매년 10월에, 만약 포지션이 없다면, 다단자 또는 빈자 방향에 따라 새로운 포지션을 구축한다. 만약 포지션이 있다면, 매년 1월에 그 포지션을 평행한다. 이러한 논리에 의존하여, 계절 효과로 인한 가격 반전을 포착할 수 있다.
참고로 이 전략은 매 거래에 25%의 리스크 자본을 기본으로 설정하고, 0.5%의 수수료로 계산한다. 이것은 최종 수익에 영향을 미치게 된다.
이 전략의 가장 큰 장점은 계절 효과로 인한 시장 역전을 활용하여 수익을 창출하는 것입니다. 많은 상품 및 금융 시장에는 계절적 인 가격 변동이 더 많이 나타납니다. 적절한 상장 및 퇴출 시간을 선택하면 이러한 계절 효과로 인한 역전 기회를 효과적으로 포착 할 수 있습니다.
또한, 이 전략은 매우 간단하고 명확하며, 이해하기 쉽고, 실행하기 쉬우며, 양적 거래의 초보자에게 적합하다. 그것은 두 개의 매개 변수에만 의존하며, 전략 최적화의 어려움을 크게 줄인다.
이 전략의 효과는 뚜렷하지만, 여전히 위험은 존재한다. 첫째, 부적절한 출시 및 출구 시간을 선택하면 가격 반전을 잡지 못하여 손실을 초래할 수 있습니다. 둘째, 시장 환경의 변화는 계절 효과를 약화시킬 수 있습니다. 마지막으로, 기본 손실 논리는 약하여 단일 손실을 효과적으로 제어 할 수 없습니다.
위험을 줄이기 위해, 시장 상황을 판단하는 더 많은 분석과 함께 시장 출입 및 출퇴근 시간을 최적화하는 것을 고려할 수 있으며, 위험을 제어하기 위해 손실을 설정할 수 있습니다. 물론, 어떤 거래 전략도 시장 위험을 완전히 피할 수 없으며, 거래자는 신중하게 처리해야합니다.
이 전략에는 또한 많은 최적화 공간이 있습니다. 첫째, 중지 논리를 도입하여 합리적인 중지 범위를 설정할 수 있습니다. 둘째, 더 많은 다양한 출구 / 출구 포트폴리오를 테스트하여 최적의 변수를 찾을 수 있습니다.
위의 몇 가지 최적화를 통해 전략의 안정성을 더욱 높이고 전략의 추적 성능을 향상시킬 수 있습니다. 물론, 모든 최적화는 엄격한 피드백 검증이 필요합니다. 과도한 최적화를 피하십시오.
이 계절 역전 기간 간 거래 전략은 전체적으로 매우 실용적입니다. 적절한 상장 및 퇴장 달을 선택하여 계절 효과로 인한 가격 역전을 효과적으로 포착하여 수익을 창출합니다. 동시에, 이 전략은 매우 간단하고 이해하기 쉽고 실행하기 쉽고, 양적 거래 초보자에게 적합합니다. 물론, 거래자는 특정 시장 위험에 주의를 기울이고, 시장 환경 변화에 적응 할 수 있도록 지속적으로 전략을 최적화해야합니다.
/*backtest
start: 2023-01-24 00:00:00
end: 2024-01-24 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/
// © EmpiricalFX
//@version=4
strategy("Seasonality Benchmark ","Season",overlay=false,default_qty_type=strategy.percent_of_equity,
default_qty_value=25,initial_capital=100000,currency="USD",
commission_type=strategy.commission.percent,commission_value=0.5)
input_entry_direction = input("Long","Position Type",options=["Long","Short"])
input_entry_month = input("Oct","Entry Month",options=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"])
input_exit_month = input("Jan","Entry Month",options=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"])
//Convert three character month string to integer
month_str_to_int(m)=>
ret = m == "Jan" ? 1 :
m == "Feb" ? 2 :
m == "Mar" ? 3 :
m == "Apr" ? 4 :
m == "May" ? 5 :
m == "Jun" ? 6 :
m == "Jul" ? 7 :
m == "Aug" ? 8 :
m == "Sep" ? 9 :
m == "Oct" ? 10 :
m == "Nov" ? 11 :
m == "Dec" ? 12 : -1
is_long = input_entry_direction == "Long" ? true : false
entry = month_str_to_int(input_entry_month)
exit = month_str_to_int(input_exit_month)
var balance = strategy.equity
//Entering a position is conditional on:
//1. No currently active trades
//2. Input entry month matches current month
if(strategy.opentrades == 0 and entry == month)
strategy.entry("Swing",is_long)
//Exiting a position is conditional on:
//1. Must have open trade
//2. Input exit month matches current month
if(strategy.opentrades > 0 and exit == month)
strategy.close("Swing")
//Update the balance every time a trade is exited
if(change(strategy.closedtrades)>0)
balance := strategy.equity
plot(strategy.equity,"Equity",color.orange)
plot(balance,"Balance",color.red)