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

곰 전략 을 따르십시오

저자:차오장, 날짜: 2024-02-26
태그:

img

전반적인 설명

추후 곰 (FTB) 전략은 유럽 시장 오픈 동안 EUR/USD의 가격 행동에서 반복되는 패턴을 포착하기 위해 설계된 외환 거래 전략이다. 이 전략은 가격이 후퇴하기 시작함에 따라 긴 포지션을 풀어야 할 갇힌 유로 황소들을 활용하는 것을 목표로 한다. 구체적으로, EUR/USD 1시간 차트에서 쏘닝 스타 또는 해머 역전 촛불을 감시한다. 과잉 매수 RSI와 같은 추가 필터로 검출되고 확인되면, 역전 촛불 위에 단단한 스톱과 합리적인 위험 / 보상 비율에 기초한 수익 목표와 함께 공격적으로 짧은 포지션에 진입할 것이다.

전략 논리

FTB 전략의 핵심 전제는 유로 황소와 EUR/USD 가격을 끌어올리는 알고리즘이 유럽/런던 시장 개장 직후 상승 추세가 멈추거나 역전될 때 함정에 빠질 것이라는 가정에 기초합니다. 가격이 후퇴하기 시작하면, 이러한 함정에 빠진 장기 거래는 자신의 지위를 풀고, 추세 인하 동력을 부추기 위해 강제됩니다.

이 전략은 유럽 시간대 (예: 새벽 2시부터 7시까지) 에서 반전 촛불 패턴을 관찰함으로써 이 하락 이론을 활용하는 것을 목표로 한다. 반전 촛불의 기준은 폐쇄가 개방보다 낮고 촛불의 범위의 하위 50% 내에 있어야 한다는 것이다.

그러한 촛불이 형성되면, 포착 된 롱스가 청산에 직면하고 있음을 신호합니다. 신호를 추가적으로 자격을 갖추기 위해 추가 필터를 검사합니다.

  1. RSI 70 이상 과잉 매수 수준
  2. 이전 촛불은 닫았습니다.
  3. 현재 촛불은 새로운 최근 최고치를 만들었습니다

모든 필터를 통과하면 전략은 최대치 바로 위의 스톱 로스로 촛불 닫기에 짧은 포지션을 입력하고 1:1 리스크/어워드 비율 (구성 가능) 을 기반으로 계산된 수익 목표를 설정합니다.

중요한 세부 사항 중 하나는 전략은 유럽 세션 동안만 거래된다는 것입니다. 그 밖에는 다음 거래 기간을 다시 설정하고 기다립니다.

이점 분석

간단한 단기 평균 역전 전략으로서 FTB 접근법은 몇 가지 주요 강점을 가지고 있습니다.

  1. 좋은 승률을 가진 거래 가능한 행동 패턴을 캡처합니다.
  2. 이해하기 쉽고 최적화 할 수있는 논리
  3. 밤새 거래함으로써 낮의 소음을 피합니다.
  4. 명확하게 정의된 위험 관리 규칙
  5. 자동 거래에 대한 원활한 연결

전체적으로, 낮은 주파수 야간 스칼핑 전략으로서, FTB의 안정성과 신뢰성은 상당히 매력적입니다.

위험 분석

이 전략은 모든 거래 시스템과 마찬가지로 장점이 있지만 다음과 같은 위험이 있습니다.

  1. 하루 중 폭넓은 스프레드와 격차
  2. 단순성은 과도한 최적화로 이어질 수 있습니다.
  3. 일부 시장에서 패턴 정확성의 결함
  4. 제한된 역사 데이터 생존성
  5. 백테스트 제한

위험 을 해결 할 수 있는 몇 가지 방법:

  1. 스톱 손실 버퍼를 조정합니다.
  2. 필터를 추가하고 전략을 조합
  3. 시장 조건에서 안정성을 최적화
  4. 더 긴 백테스트 기간을 사용
  5. 라이브 거래 전에 광범위한 포워드 테스트

최적화 경로

전략의 기본적 성격과 관련된 위험을 감안할 때, 개선해야 할 몇 가지 분야는:

  1. 다중 시간 프레임 견고성을 위해 5m 또는 15m에서 신호를 확인
  2. 기계 학습 신호를 스크린하는 열차 모델
  3. 동적 정지 변동성에 따라 정지값을 조정합니다.
  4. 위험 완화 더 안정적인 성장을 위해 위치 크기를 최적화

결론

곰을 따르기 전략은 포착 된 유로 황소에 의해 부추긴 리트레이싱을 활용하여 단기 단축 판매에 대한 직설적인 접근 방식을 제공합니다. 이해하기 쉽고 향상시키는 데 쉬운 FTB는 체계적인 오버나이트 스칼핑에 적합합니다. 자연스럽게 모든 거래에 위험이 있습니다. 따라서 매개 변수 조정 및 최적화는 변화하는 시장 경관에서 관련성을 보장하는 데 도움이됩니다.


/*backtest
start: 2024-02-18 00:00:00
end: 2024-02-25 00:00:00
period: 3h
basePeriod: 15m
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/
// © ZenAndTheArtOfTrading / PineScriptMastery
// FTB Strategy (PineConnector Version)
// Last Updated: 21st July, 2021
// @version=4
strategy("[2021] FTB Strategy", shorttitle="FTB", overlay=true)

// Risk Settings
var g_risk      = "Risk Settings"
pips            = input(title="Stop Pips", type=input.float, defval=2.0, group=g_risk, tooltip="How many pips above high to put stop loss")
rr              = input(title="Risk:Reward", type=input.float, defval=1.0, group=g_risk, tooltip="This determines the risk:reward profile of the setup")
// Filters
var g_filter    = "Filter Settings"
timezone        = input(title="Timezone", type=input.session, defval="0200-0700", group=g_filter, tooltip="Which timezone to search for FTB signals in")
days            = input(title="Days To Trade", defval="13457", group=g_filter, tooltip="Which days to trade this strategy on (Monday & Friday disabled by default)")
useRsiFilter    = input(title="RSI OB/OS?", type=input.bool, defval=true, group=g_filter, tooltip="If true then the RSI must be considered overbought before a signal is valid")
useCloseFilter  = input(title="Previous Bar Must Be Bullish?", type=input.bool, defval=false, group=g_filter, tooltip="If true then the previous bar must have closed bullish")
useHighFilter   = input(title="High Filter", type=input.bool, defval=false, group=g_filter, tooltip="If true then the signal bar must be the highest bar over X bars")
highLookback    = input(title="High Lookback", type=input.integer, defval=10, group=g_filter, tooltip="This is for setting the High Filter lookback distance")
fib             = input(title="Candle Close %", defval=0.5, group=g_filter, tooltip="For identifying shooting star candles (0.5 = must close <= 50% mark of candle size)")
rsiLen          = input(title="RSI Length", type=input.integer, defval=3, group=g_filter, tooltip="RSI length")
rsiOB           = input(title="RSI OB", type=input.float, defval=70.0, group=g_filter, tooltip="RSI overbought threshold")
// PineConnector Settings
var g_pc        = "PineConnector Settings"
pc_id           = input(title="License ID", defval="YOUR_ID", type=input.string, group=g_pc, tooltip="This is your PineConnector license ID")
pc_risk         = input(title="Risk Per Trade", defval=1, step=0.5, type=input.float, group=g_pc, tooltip="This is how much to risk per trade (% of balance or lots)")
pc_prefix       = input(title="MetaTrader Prefix", defval="", type=input.string, group=g_pc, tooltip="This is your broker's MetaTrader symbol prefix")
pc_suffix       = input(title="MetaTrader Suffix", defval="", type=input.string, group=g_pc, tooltip="This is your broker's MetaTrader symbol suffix")
pc_spread       = input(title="Spread", defval=0.5, type=input.float, group=g_pc, tooltip="Enter your average spread for this pair (used for offsetting limit order)")
pc_limit        = input(title="Use Limit Order?", defval=true, type=input.bool, group=g_pc, tooltip="If true a limit order will be used, if false a market order will be used")

// Generate PineConnector alert string
var symbol = pc_prefix + syminfo.ticker + pc_suffix
var limit = pc_limit ? "limit" : ""
pc_entry_alert(direction, sl, tp) =>
    price = pc_limit ? "price=" + tostring(pc_spread) + "," : ""
    pc_id + "," + direction + limit + "," + symbol + "," + price + "sl=" + tostring(sl) + ",tp=" + tostring(tp) + ",risk=" + tostring(pc_risk)

// Get RSI filter
rsiValue = rsi(close, rsiLen)
rsiFilter = not useRsiFilter or rsiValue >= rsiOB

// Check high & close filter
highFilter = not useHighFilter or high == highest(high, highLookback)
closeFilter = not useCloseFilter or close[1] > open[1]

// InSession() determines if a price bar falls inside the specified session
inSession(sess) => na(time(timeframe.period, sess + ":" + days)) == false

// Calculate 50% mark of candle size
bearFib = (high - low) * fib + low

// Check filters
filters = inSession(timezone) and closeFilter and high > high[1] and rsiFilter and highFilter and open != close

// Detect valid shooting star pinbar pattern
var takenTradeAlready = false
star = true

// Calculate stops & targets
shortStopPrice = high + (syminfo.mintick * pips * 10)
shortStopDistance = shortStopPrice - close
shortTargetPrice = close - (shortStopDistance * rr)

// Save stops & targets for the current trade
var tradeStopPrice = 0.0
var tradeTargetPrice = 0.0

// If we detect a valid shooting star, save our stops & targets, enter short and generate alert
if star and barstate.isconfirmed
    tradeStopPrice := shortStopPrice
    tradeTargetPrice := shortTargetPrice
    takenTradeAlready := true
    alertString = pc_entry_alert("sell", tradeStopPrice, tradeTargetPrice)
    alert(alertString, alert.freq_once_per_bar_close)
    strategy.entry(id="Short", long=strategy.short, when=strategy.position_size == 0, comment=alertString)

// If we have exited the FTB session then reset our takenTradeAlready flag for the next session
if not inSession(timezone) and inSession(timezone)[1]
    takenTradeAlready := false
    
// If price has exceeded target then cancel limit order if it's still active
if pc_limit and low <= tradeTargetPrice and strategy.position_size == 0
    alert(pc_id + ",cancelshort," + symbol)
    tradeTargetPrice := na

// Draw stops & targets
plot(star ? tradeStopPrice : na, color=color.red, style=plot.style_linebr, title="SL")
plot(star ? shortTargetPrice : na, color=color.green, style=plot.style_linebr, title="TP")
// Draw short signals
plotshape(star ? 1 : na, style=shape.triangledown, color=color.red)
// Change background color to highlight detection zone
bgcolor(color=inSession(timezone) ? color.new(color.red,80) : na, title="Session")

// Exit trade whenever our stop or target is hit
strategy.exit(id="Short Exit", from_entry="Short", limit=tradeTargetPrice, stop=tradeStopPrice, when=strategy.position_size != 0)

더 많은