弱気相場戦略の追跡


作成日: 2024-02-26 14:12:09 最終変更日: 2024-02-26 14:12:09
コピー: 1 クリック数: 955
1
フォロー
1617
フォロワー

弱気相場戦略の追跡

概要

追跡熊市戦略は,欧州市場開設時にユーロ/ドルを捕まえるために設計された外為取引戦略である.この戦略は,欧州市場開設時にユーロの多頭が閉じ込められ,そのため平仓を強制される特性を利用して,空白ポジションを確立する.具体的には,この戦略は,ユーロ/ドルの1時間K線が反転形状の (射撃の星または) が出現していることを発見した後,RSIなどの指標のフィルター信号を調査し,条件が合っていると確認すると,空白を決定し,反転の高い点にストップ・ロスを設定し,目標利益は,受け入れられるリスクリターン率に基づいて設定される.

戦略原則

熊市戦略を追跡する交易の核心的な論理は,次の仮定に基づいています:ヨーロッパ/ロンドンの開市期間中に,ユーロを多額にするトレーダーとアルゴリズムは,ユーロ/ドルの価格を上昇させます.しかし,価格が上昇し続けることができなければ,または下落の兆候が現れた場合,これらの多額者は,困ってしまいます.したがって,価格が回調し始めると,多額を平らにするように強制され,その結果,下落を悪化させます.

この戦略は,この熊市理論を利用して短期的な下落を捕捉するものである.具体的には,欧州時間帯 (例えば,2am-7am) で1時間のK線上の反転形信号を探している.ここで反転形信号の判断基準は,実体の一部の閉盘価格が開盘価格より低いこと,そして閉盘価格が0.5倍以上の全体的な波動の範囲を超えないこと (すなわち,閉盘価格が低点に近いこと) である.

この反転型が現れた場合,多行者が罠の危険にさらされていることを示している.信号をさらに検証するために,この戦略は以下のフィルタリング条件もチェックする.

  1. RSIは超買い線 (デフォルト70) よりも高い.
  2. 前K線の閉盘価格が開盘価格より高い ((多頭終止信号);
  3. 根K線の高さが最近の新高を記録したとき

すべてのフィルタリング条件を満たした後,戦略は,逆転のクローズオフ時に空白になり,ストップ・ロスは高点の上に設定され,目標利益は,受け入れ可能なリスク・リターン・レートに基づいて配置される (デフォルトのリスク・リターン・レートは1対1である).

注目すべきは,この戦略はヨーロッパ時間帯のみでアクティブであり,もし価格がヨーロッパ時間帯から外れた場合,次の時間帯の取引時間を待つために状態をリセットするということです.

優位分析

これは簡単な,しかし実用的ショートライン空調策である.主な利点は:

  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)