하락장 전략 추적


생성 날짜: 2024-02-26 14:12:09 마지막으로 수정됨: 2024-02-26 14:12:09
복사: 1 클릭수: 955
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

하락장 전략 추적

개요

곰 시장 추적 전략은 유럽 시장 개시 시 EUR/USD의 전형적인 행동 패턴을 포착하기 위해 설계된 외환 거래 전략이다. 이 전략은 유럽 시장 개시 시 EUR의 다수자가 갇혀서 공백을 강요되는 특성을 활용하여 공백 위치를 설정한다. 구체적으로 이 전략은 EUR/USD의 1 시간 K 선이 역전형 모양의 ?? 하락을 발견한 후 RSI와 같은 지표 필터링 신호를 검토하고, 조건이 확인되면, 결단적으로 공백을 하고, 역전점의 높은 지점에 스톱 로스를 설정하며, 목표 수익은 수용 가능한 위험 수익률에 따라 설정된다.

전략 원칙

곰 시장 전략을 추적하는 핵심 거래 논리는 다음과 같은 가정에 기반합니다. 유럽/런던 시장 개시 기간 동안 유로 거래 상자와 알고리즘은 유로/달러 가격을 높여줍니다. 그러나 가격이 계속 상승하지 못하거나 하락의 징후가 나타나면 더 많은 거래자는 갇히게됩니다. 그래서 가격이 회전을 시작하면 과잉을 평정 할 수 밖에 없습니다.

이 전략은 바로 이 곰시장 이론을 이용해 단기 하락세를 포착한다. 구체적으로, 유럽 시간대 (예: 2am-7am) 에서 1시간 K 선의 반전형 ?? 신호를 찾는다. 여기서 반전형 ?? 신호의 판단 기준은: ?? 개체 부분 종결 가격이 개시 가격보다 낮고, 종결 가격이 0.5배 이상의 전체 ?? 변동 범위 (즉, 종결 가격이 개시 하위점에 가깝다) 를 넘지 않는다.

이러한 역형 이 나타난다면, 다중 행위자가 교도소 위험에 처해 있음을 나타냅니다. 신호를 더 검증하기 위해, 이 전략은 다음과 같은 필터링 조건을 검사합니다:

  1. RSI 지표가 초과 구매 라인 (기본 70) 보다 높습니다.
  2. 전 K선 종결값이 개시값보다 높습니다.
  3. K-선에서 가장 높은 지점이 최근 최고치를 기록했을 때;

모든 필터 조건이 충족된 후, 전략은 역전투 종전시 공백을 하게 되며, 스톱로스는 ?? 최고점 위에 설정되며, 목표 수익은 허용 가능한 위험 수익률에 기초하여 배치된다 (설정된 위험 수익률은 1 배당 1) [2].

참고로, 이 전략은 유럽 시간대에서만 활동하며, 유럽 시간대에서 벗어나면 다음 시간대 거래 시간을 기다리기 위해 재설정됩니다.

우위 분석

이것은 간단하지만 실용적인 짧은 라인 외환 전략입니다. 주요 장점은 다음과 같습니다:

  1. 이 실험에서, 반복되는 단기 행동 패턴을 포착하는 것은 성공률이 높습니다.
  2. 전략적 논리는 단순하고, 이해하기 쉽고, 재검토를 통해 최적화됩니다.
  3. 야간 거래, 낮에는 시장의 소음을 피하는 것
  4. 위험은 잘 통제되고, 손실을 막는 전략이 명확합니다.
  5. MT4/5 자동 거래에 직접 연결할 수 있습니다.

종합적으로, 곰 시장 전략은 단선 야간 중매 전략으로서의 안정성과 실용성이 모두 좋은 선택이다.

위험 분석

이 전략은 장점이 있지만, 모든 금융 상품을 거래하는 것은 위험성이 있습니다. 주요 위험에는 다음과 같은 것들이 있습니다.

  1. 야간 거래 시장의 유동성이 낮아 적당히 손실을 막을 수 없습니다.
  2. 이 전략은 너무 단순해서 알고리즘이 쉽게 해독할 수 있습니다.
  3. 일부 시장 상황에서는 유로 유로피스 (유로피스) 가 갇혀있는 행동법이 작동하지 않을 수 있습니다.
  4. 이 전략의 효과에 대한 충분한 역사적 자료가 필요합니다.
  5. 이 자료는 리드 디스크와 큰 차이가 있을 수 있습니다.

위와 같은 위험들에 대응하기 위한 몇 가지 방법은 다음과 같습니다.

  1. 정지량을 조정하여 무효 정지를 방지합니다.
  2. 더 많은 지표와 필터링 조건을 조합하여 전략이 더 거칠게 될 수 있습니다.
  3. 전략적 요소를 최적화하여 더 넓은 시장 환경에 적응합니다.
  4. 더 긴 회귀주기를 사용한다.
  5. 여러 번의 실체 검증으로 재검토 결과가 신뢰성이 높습니다.

최적화 방향

이 전략의 단순성과 잠재적인 위험을 고려할 때, 다음과 같은 최적화 방향이 고려될 수 있습니다.

  1. 다중 시간 프레임 검증- 5분 또는 15분 시간 프레임에 반전 신호를 다시 검증하여 안정성을 높일 수 있습니다.
  2. 기계 학습 필터링- 더 많은 패턴을 식별하고 가짜 신호를 필터링하기 위해 기계 학습 알고리즘을 도입합니다.
  3. 동적 정지- 시장의 변동에 따라 실시간으로 스톱포트를 조정하여 무효 스톱포드를 방지합니다.
  4. 안정적 자금 관리 최적화- 자금 관리 전략을 최적화하여 지위를 조정하여 수익을 더 안정적으로 유지하십시오.

요약하다

곰 시장 전략을 추적하는 것은 간단한, 거래 위험을 제어할 수 있는 짧은 라인 상장 전략이다. 이 전략은 유로 다목적 경매 현상이 가져오는 단기 조정을 포착하여 안정적인 수익을 달성한다. 이 전략은 이해하기 쉽고 최적화되어 야간 경매 거래의 이상적인 선택이다. 물론, 모든 금융 상품을 거래하는 것은 위험이 있으며, 변수를 조정하고 시장 환경에 적응하기 위해 적절하게 최적화해야합니다.

전략 소스 코드
/*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)