이 전략은 비트코인의 사용자 지정 긴/단 거래 전략으로, 주중의 다른 날들에 대한 열망이나 단축을 백테스팅할 수 있다. 가격은 평일마다 한 방향으로 움직일 수 있으며, 이 전략은 이를 활용하기 위해 다양한 날짜에 걸쳐 테스트를 할 수 있다.
성과 및 거래 역사를 볼 때 매일 시간 프레임에 있는지 확인 하 여 스크립트가 의도 된 대로 작동 하 고 TradingView에서 최대 역사 데이터를 가지고 있는지 확인 합니다.
이 전략의 핵심 논리는 사용자가 주중 각 날 동안 장기, 단기 또는 거래를 하지 않는 것을 선택할 수 있도록 하는 것입니다.
첫째, 사용자가 시작달, 일, 일, 그리고 끝달, 일, 일을 포함한 백테스팅의 날짜 범위를 설정할 수 있습니다.
다음으로, 그것은 0일부터 토요일 6일까지 주간의 각 날의 수치 표현을 저장하기 위해 배열 시간 프레임을 사용합니다.
또 다른 배열 timeframes_options는 각 하루에 대한 긴, 짧은 또는 거래의 선택지를 저장하는 데 사용됩니다. 이것은 입력 옵션을 통해 설정됩니다.
포 루프에서 전략은 현재 거래일이 시간 프레임 배열의 일과 일치하는지 확인합니다. 만약 그렇다면 옵션이 전날과 다르면 먼저 모든 오픈 포지션을 닫습니다.
옵션이
따라서, 전략은 주일의 각 날의 설정을 기반으로 설정된 날짜 범위에서 긴 / 짧은 거래를 할 수 있습니다.
이 전략의 주요 장점은 매우 사용자 정의 가능한 긴 / 짧은 거래를 제공하는 것입니다. 사용자는 일주일에 매일 거래 방향을 선택할 수있는 완전한 자유를 가지고 있습니다.
고정 주간 거래 전략과 달리, 이것은 유연하게 조정 될 수 있습니다. 열악한 성과가있는 날은 다른 날만 거래하도록 쉽게 수정 될 수 있습니다.
백테스트 날짜 범위 또한 매우 유연하며, 어떤 날짜 조합이 가장 잘 수행되는지 확인하기 위해 사용자가 지정한 기간을 테스트 할 수 있습니다.
거래 논리는 매우 명확하고 간단하며, 이해하기 쉽고 수정 할 수 있습니다. 사용자는 코딩 없이 매개 변수를 조정할 수 있습니다.
이 전략은 또한 매일 방향 변경에 따라 자동으로 포지션을 닫아 불필요한 위험을 피합니다.
주요 위험은 사용자가 선택한 일일 거래 선택이 모든 날짜 범위에 맞지 않을 수 있다는 것입니다.
예를 들어, 평일과 짧은 주말에 긴 시간은 일부 기간에 효과적이지만 다른 기간에는 실패할 수 있습니다.
따라서 날짜 범위는 신중하게 테스트되어야하며, 한 백테스트 결과에 의존하지 않습니다. 매개 변수 조정은 시장 조건을 고려해야합니다.
또 다른 위험은 방향이 매일 바뀌면 손실을 시간적으로 줄일 수 없다는 것입니다. 그러나 전략은 자동 폐쇄로 이것을 완화하려고합니다.
전체적으로 전략은 최적화에 크게 의존하고 있으며, 다양한 시장 조건에 맞는 매개 변수 집합을 찾기 위해 충분한 테스트를 필요로 합니다.
이 전략은 몇 가지 측면에서 개선될 수 있습니다.
매일 방향 변경에 Stop Loss 로직을 추가하고, 포지션이 수익성이있을 때 트레일링 스톱을 설정하여 드라우다운을 제한합니다.
필터를 추가하여 특정 날의 높은/저하를 깨는 신호만 받아 트렌드가 없는 거래를 피합니다.
높은 변동성 기간에 포지션 크기를 줄이고 변동성이 낮을 때 증가하여 위험을 제어합니다.
매매일 선택에 머신러닝을 추가하여 역사적인 데이터에 기초하여 각 날의 확률을 판단하여 동적인 매일 방향성을 생성합니다.
트레이딩을 일시 중단하여 오프사이즈로 잡히지 않기 위해 주요 뉴스와 같은 갑작스러운 사건을 처리하기 위해 논리를 추가하십시오.
이 전략은 매일 방향 선택을 통해 매우 유연한 긴 / 짧은 거래 능력을 제공합니다. 사용자는 최적의 매개 변수를 위해 테스트를 자유롭게 결합 할 수 있습니다. 그러나 높은 최적화 요구 사항이 있으며, 다양한 시장에 맞는 설정을 찾기 위해 광범위한 테스트가 필요합니다. 정지, 필터, 동적 조정과 같은 향상 기능을 추가하면 위험을 줄이고 견고함을 향상시킬 수 있습니다. 신중한 매개 변수 최적화로 전략은 효과적인 매일 방향 거래 도구가 될 수 있습니다.
/*backtest start: 2022-09-19 00:00:00 end: 2023-09-25 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=4 // strategy("Day of Week Custom Buy/Sell Strategy", overlay=true, currency=currency.USD, default_qty_value=1.0,initial_capital=30000.00,default_qty_type=strategy.percent_of_equity) frommonth = input(defval = 6, minval = 01, maxval = 12, title = "From Month") fromday = input(defval = 14, minval = 01, maxval = 31, title = "From day") fromyear = input(defval = 2021, minval = 1900, maxval = 2100, title = "From Year") tomonth = input(defval = 12, minval = 01, maxval = 12, title = "To Month") today = input(defval = 31, minval = 01, maxval = 31, title = "To day") toyear = input(defval = 2100, minval = 1900, maxval = 2100, title = "To Year") timeframes = array.new_int(7, 1) timeframes_options = array.new_string(7, 'None') array.set(timeframes,0,7) array.set(timeframes_options,0, input(defval='None', options=['Long','Short','None'], title='sunday')) array.set(timeframes,1,1) array.set(timeframes_options,1, input(defval='Long', options=['Long','Short','None'], title='monday')) array.set(timeframes,2,2) array.set(timeframes_options,2, input(defval='Long', options=['Long','Short','None'], title='tuesday')) array.set(timeframes,3,3) array.set(timeframes_options,3, input(defval='Long', options=['Long','Short','None'], title='wednesday')) array.set(timeframes,4,4) array.set(timeframes_options,4, input(defval='None', options=['Long','Short','None'], title='thursday')) array.set(timeframes,5,5) array.set(timeframes_options,5, input(defval='None', options=['Long','Short','None'], title='friday')) array.set(timeframes,6,6) array.set(timeframes_options,6, input(defval='None', options=['Long','Short','None'], title='saturday')) for i = 0 to array.size(timeframes) - 1 if dayofweek == array.get(timeframes, i) and array.get(timeframes_options, i) != array.get(timeframes_options, i==0?6:i-1) strategy.close_all() if dayofweek == array.get(timeframes, i) and array.get(timeframes_options, i)!='None' and array.get(timeframes_options, i) != array.get(timeframes_options, i==0?6:i-1) if array.get(timeframes_options, i) == 'Long' strategy.entry("Long", strategy.long, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00))) else if array.get(timeframes_options, i) == 'Short' strategy.entry("Short", strategy.short, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))