이 전략은 촛불 몸의 길이를 사용하여 길고 짧은 방향을 결정합니다. 최근 30 개의 촛불의 평균 몸의 길이를 계산합니다. 상승 촛불 몸의 길이가 평균보다 크면 길게됩니다. 하락 촛불 몸의 길이가 평균보다 크면 짧게됩니다.
이 전략은 먼저 촛불 몸의 길이를 계산하고 최근 30개의 촛불 몸의 평균 몸의 길이를 계산합니다.
오늘의 촛불이 하향 (바==-1) 이고 몸길이가 평균 몸길이보다 크면 긴 포지션을 열고 (올림1).
오늘의 촛불이 상승 (바==1) 이고 몸길이가 평균 몸길이보다 크면, 짧은 포지션 (dn1) 을 개척합니다.
긴 오픈 후, 오늘의 촛불이 상승 (바==1) 이고 현재 포지션은 수익성이 있다면 긴 포지션을 닫습니다.
코스를 오픈한 후, 오늘의 촛불이 하향 (bar==-1) 이고 현재 포지션이 수익성이 있다면, 코스를 닫습니다.
이 전략은 시장 트렌드를 결정하기 위해 촛불 몸길이를 간단하고 효과적으로 사용합니다. 몸길이가 길어질수록 트렌드가 더 강합니다. 따라서 몸길이가 길고 짧은 기준으로 사용됩니다.
이 전략의 장점:
논리는 간단하고 명확하고 이해하기 쉽고 실행하기 쉽습니다.
촛불체 길이를 사용하여 트렌드를 결정하고 소음 간섭을 피하십시오.
동적 평균 계산을 채택하고 시장 변화에 적응할 수 있습니다.
수익성을 높이기 위해 수익성있는 출구 조건을 설정하십시오.
다양한 시장 환경에 적응할 수 있는 구성 가능한 매개 변수
이 전략의 위험은:
긴 몸집은 강한 추세를 나타내지는 않지만 정상적인 변동일 수도 있습니다.
부적절한 평균 몸길이 시간 창은 거래 기회를 놓칠 수 있습니다.
블랙 스완 사건으로 인해 손실이 발생할 수 있습니다.
너무 오래 포지션을 보유하면 손실을 증폭시킬 수 있습니다.
해결책:
다른 지표와 결합해서 트렌드를 결정하고 잘못된 거래를 피하세요.
다른 매개 변수 값을 테스트하고 평균 몸길이 계산을 최적화합니다.
한 번의 손실을 제어하기 위해 손실을 멈추도록 설정합니다.
너무 오래 기다리지 않도록 입력과 출력 논리를 최적화하십시오.
이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.
트렌드를 결정하기 위해 MACD와 RSI를 결합하고 정상적인 변동으로부터 잘못된 신호를 피합니다.
다양한 평균 몸길이 시간 창 매개 변수를 테스트하여 최적의 매개 변수를 찾습니다.
위치 사이즈 컨트롤 로직을 추가하면 손실이 발생하면 점진적으로 위치 크기를 줄입니다.
단일 손실 비율을 제어하기 위해 후속 스톱 손실 또는 이익 목표를 설정합니다.
비효율적 인 거래를 피하기 위해 입출구 조건을 최적화하십시오. 예를 들어, 입출구 전에 3 개의 연속적인 긴 촛불을 기다립니다.
변동성 손실을 통제하기 위해 특정 기간 또는 중요한 데이터 공개 주위에서 거래를 피하십시오.
이 전략은 진입 시기를 위해 촛불 몸의 평균 길이를 비교하는 명확하고 이해하기 쉬운 논리를 가지고 있습니다. 다양한 시장 환경에 더 잘 맞출 수 있도록 여러 차원에서 최적화를 위한 넓은 공간. 전반적으로 초보 트레이더가 사용하고 배우기에 적합한 간단하고 신뢰할 수있는 도입량 거래 전략. 더 많은 지표를 결합하고 수익성과 견고성을 향상시키기 위해 최적화하십시오.
/*backtest start: 2023-10-16 00:00:00 end: 2023-11-15 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=3 strategy(title = "Noro's ColorBar Strategy v1.0", shorttitle = "ColorBar str v1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") usebody = input(true, defval = true, title = "Use body") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //Signals bar = close > open ? 1 : close < open ? - 1 : 0 body = abs(close - open) sbody = ema(body, 30) up1 = bar == -1 and (body > sbody or usebody == false) dn1 = bar == 1 and (body > sbody or usebody == false) plus = (close > strategy.position_avg_price and strategy.position_size > 0) or (close < strategy.position_avg_price and strategy.position_size < 0) exit = ((strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1)) and plus if up1 strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, 01, 00, 00) and time < timestamp(toyear, tomonth, 31, 00, 00))) if dn1 strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, 01, 00, 00) and time < timestamp(toyear, tomonth, 31, 00, 00))) if time > timestamp(toyear, tomonth, 31, 00, 00) or exit strategy.close_all()