熊 の 戦略 に 従い

作者: リン・ハーンチャオチャン,日付: 2024-02-26 14:12:09
タグ:

img

概要

フォロー・ザ・ベア (FTB) ストラテジー (Follow The Bear,FTB) は,欧州市場開通中にEUR/USDの価格動きの繰り返しパターンを捕捉するために設計されたフォレックス取引戦略である.この戦略は,価格が引き下げられるにつれてロングポジションを緩めることを余儀なくされた捕らえたユーロのブルを活用することを目的としている.具体的には,EUR/USDの1時間チャートでシャッタースターまたはハンマー逆転のキャンドルスタイクを見張る.過剰購入RSIのような追加のフィルターで検出され確認されると,逆転キャンドルの上での緊密なストップと合理的なリスク/リターン比率に基づく利益目標で激しくショートポジションに入る.

戦略の論理

FTB戦略の基本前提は,ユーロのブールとEUR/USDの価格を押し上げるアルゴリズムが,欧州/ロンドンの市場がオープンした直後に上昇傾向が停止または逆転すると,罠にかかったロングが,そのポジションを緩め,下向きの勢いをさらに増やすことを余儀なくされるという仮定に基づいています.

この戦略は,欧州タイムゾーン (例えば午前2時~午前7時) の間に反転キャンドルスタイクパターンを監視することによって,この下落理論をキャピタリングすることを目指しています.反転キャンドルの基準は,閉じる値はオープン値以下で,キャンドルの範囲の下半 (オープン値よりも低値に近い) の内にある必要があります.

このようなキャンドルが形成されると,閉じ込められたロングが清算に直面していることを示します.信号をさらに資格化するために,追加のフィルターがチェックされます.

  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. リスク緩和安定した成長のためにポジションサイズを最適化

結論

フォロー・ザ・ベア・ストラテジーは,EUROの高騰によって引き上げられたリトラセッションを活用することで,短期間のショートセールに直接的なアプローチを提供します.理解し,強化しやすい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)

もっと