추후 곰 (FTB) 전략은 유럽 시장 오픈 동안 EUR/USD의 가격 행동에서 반복되는 패턴을 포착하기 위해 설계된 외환 거래 전략이다. 이 전략은 가격이 후퇴하기 시작함에 따라 긴 포지션을 풀어야 할 갇힌 유로 황소들을 활용하는 것을 목표로 한다. 구체적으로, EUR/USD 1시간 차트에서 쏘닝 스타 또는 해머 역전 촛불을 감시한다. 과잉 매수 RSI와 같은 추가 필터로 검출되고 확인되면, 역전 촛불 위에 단단한 스톱과 합리적인 위험 / 보상 비율에 기초한 수익 목표와 함께 공격적으로 짧은 포지션에 진입할 것이다.
FTB 전략의 핵심 전제는 유로 황소와 EUR/USD 가격을 끌어올리는 알고리즘이 유럽/런던 시장 개장 직후 상승 추세가 멈추거나 역전될 때 함정에 빠질 것이라는 가정에 기초합니다. 가격이 후퇴하기 시작하면, 이러한 함정에 빠진 장기 거래는 자신의 지위를 풀고, 추세 인하 동력을 부추기 위해 강제됩니다.
이 전략은 유럽 시간대 (예: 새벽 2시부터 7시까지) 에서 반전 촛불 패턴을 관찰함으로써 이 하락 이론을 활용하는 것을 목표로 한다. 반전 촛불의 기준은 폐쇄가 개방보다 낮고 촛불의 범위의 하위 50% 내에 있어야 한다는 것이다.
그러한 촛불이 형성되면, 포착 된 롱스가 청산에 직면하고 있음을 신호합니다. 신호를 추가적으로 자격을 갖추기 위해 추가 필터를 검사합니다.
모든 필터를 통과하면 전략은 최대치 바로 위의 스톱 로스로 촛불 닫기에 짧은 포지션을 입력하고 1:1 리스크/어워드 비율 (구성 가능) 을 기반으로 계산된 수익 목표를 설정합니다.
중요한 세부 사항 중 하나는 전략은 유럽 세션 동안만 거래된다는 것입니다. 그 밖에는 다음 거래 기간을 다시 설정하고 기다립니다.
간단한 단기 평균 역전 전략으로서 FTB 접근법은 몇 가지 주요 강점을 가지고 있습니다.
전체적으로, 낮은 주파수 야간 스칼핑 전략으로서, FTB의 안정성과 신뢰성은 상당히 매력적입니다.
이 전략은 모든 거래 시스템과 마찬가지로 장점이 있지만 다음과 같은 위험이 있습니다.
위험 을 해결 할 수 있는 몇 가지 방법:
전략의 기본적 성격과 관련된 위험을 감안할 때, 개선해야 할 몇 가지 분야는:
곰을 따르기 전략은 포착 된 유로 황소에 의해 부추긴 리트레이싱을 활용하여 단기 단축 판매에 대한 직설적인 접근 방식을 제공합니다. 이해하기 쉽고 향상시키는 데 쉬운 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)