オープンハイとクローズローの取引戦略


作成日: 2024-02-02 12:03:45 最終変更日: 2024-02-02 12:03:45
コピー: 0 クリック数: 905
1
フォロー
1617
フォロワー

オープンハイとクローズローの取引戦略

概要

オープンポジション高閉盤低吸單取引戦略は,トレンド追跡型の取引戦略である.この戦略は,K線の開盤価格と閉盤価格の関係を判断し,価格の短期的なトレンド方向を識別し,トレンドが開始されたときにポジションを多く空白して,迅速に市場に入り,トレンドを追跡する目的を達成する.

戦略原則

この戦略は主にK線の開場価格と閉場価格の大きさの関係を判断し,開場価格が最低価格に等しいときに多信号を生成し;開場価格が最高価格に等しいときに空き信号を生成する.このようにして,価格の短期的な突破を捕捉し,トレンドを追跡することができる.

シグナルが入った後,固定数値を使ってすぐにポジションを開き,ポジションを確立する。ストップ・ロスはATR指標の設定を参考にして,市場の変動を追跡する。ストップ・ロスの目標は,ストップ・ロスの位から入場価格の間の距離のRRの比例部分である。価格がストップ・ロスの位またはストップ・ロスの目標に触れたとき,時効的にストップ・ロスまたはストップ・ロスする。

この戦略はまた,ユーザが設定した時間点,例えば米国市場の閉盘の30分前に,すべてのポジションを平定させ,一夜間に大きな波動のリスクを防止する.

優位分析

この戦略の利点は以下の通りです.

  1. オープニング価格とクロージング価格の関係を使用してトレンドの方向を判断し,価格の短期突破を素早く識別できます.

  2. 入り口の信号はシンプルで明快で,実行しやすい.

  3. タイムリーなストップ・ロズとストップ・ストップにより,利益を固定し,損失の拡大を防ぐことができます.

  4. 特定の時間帯に強制的に平仓を設けることで,夜間波動のリスクを回避できます.

  5. 特定の取引品種を選択する必要はありません. 外国為替,株式,暗号通貨などの市場に適用されます.

リスク分析

この戦略にはいくつかのリスクがあります.

  1. ATR ストップを使用し,震動状況で頻繁にストップすることがあります.

  2. 取引品種や時期の特徴を考慮せずに,過度に適合する可能性がある.

  3. 固定ストップ目標は市場条件に適合せず,持続的な利益を得られない可能性があります.

  4. 強制的に平仓を踏み込むと,トレンドのチャンスを逃すか,追加的な損失を被る可能性があります.

最適化の方向

この戦略は以下の点で最適化できます.

  1. 最適化ストップ方式,トレンド状況で留置ストップ,震動状況で掛札ストップなど.

  2. フィルタリング条件を追加し,トレンド指標などと組み合わせて入場時刻を決定し,偽突破を避ける.

  3. 市場変動に応じて合理的なストップ距離を決定するストップ位置を動的に調整する

  4. ポジション時間を最適化し,異なる取引品種と地域に対して適切なポジション時間を選択する.

要約する

ポジションを高開閉低食単一取引戦略は,価格の短期トレンドを簡単に判定する方法で,迅速にポジションを確立する.入場が簡単,止損が止まる明確な利点がある.しかし,止損方法,フィルター信号などの最適化可能な側面もあります.継続的なテストと最適化により,この戦略のパラメータは,より多くの市場環境に適応し,より強い適応性と収益性を持つことができます.

ストラテジーソースコード
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// Open-High-Low strategy

strategy('Strategy: OLH', shorttitle="OLH", overlay=true)

// Inputs
slAtrLen = input.int(defval=14, title="ATR Period for placing SL", group="StopLoss settings")
showSLLines = input.bool(defval=false, title="Show SL lines in chart", tooltip="Show SL lines also as dotted lines in chart. Note: chart may look untidy.", group="Stolploss settings")
// Trade related
rrRatio = input.float(title='Risk:Reward', step=0.1, defval=2.0, group="Trade settings")
endOfDay = input.int(defval=1500, title="Close all trades, default is 3:00 PM, 1500 hours (integer)", group="Trade settings")
mktAlwaysOn = input.bool(defval=true, title="Markets that never closed (Crypto, Forex, Commodity)", tooltip="Some markers never closes. For those cases, make this checked.", group="Trade settings")
lotSize = input.int(title='Lot Size', step=1, defval=1, group="Trade settings")


// Utils
green(open, close) => close > open ? true : false
red(open, close) => close < open ? true : false
body(open, close) => math.abs(open - close)
lowerwick = green(open, close) ? open - low : close - low
upperwick = green(open, close) ? high - close : high - open
crange = high - low
crangep = high[1] - low[1] // previous candle's candle-range
bullish = close > open ? true : false
bearish = close < open ? true : false


// Trade signals
longCond = barstate.isconfirmed and (open == low)
shortCond = barstate.isconfirmed and (open == high)

// For SL calculation
atr = ta.atr(slAtrLen)
highestHigh = ta.highest(high, 7)
lowestLow = ta.lowest(low, 7)
longStop = showSLLines ? lowestLow - (atr * 1) : na
shortStop = showSLLines ? highestHigh + (atr * 1) : na
plot(longStop, title="Buy SL", color=color.green, style=plot.style_cross)
plot(shortStop, title="Sell SL", color=color.red, style=plot.style_cross)

// Trade execute
h = hour(time('1'), syminfo.timezone)
m = minute(time('1'), syminfo.timezone)
hourVal = h * 100 + m
totalTrades = strategy.opentrades + strategy.closedtrades
if (mktAlwaysOn or (hourVal < endOfDay))
    // Entry
    var float sl = na
    var float target = na
    if (longCond)
        strategy.entry("enter long", strategy.long, lotSize, limit=na, stop=na, comment="Enter Long")
        sl := longStop
        target := close + ((close - longStop) * rrRatio)
        alert('Buy:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar)
    if (shortCond)
        strategy.entry("enter short", strategy.short, lotSize, limit=na, stop=na, comment="Enter Short")
        sl := shortStop
        target := close - ((shortStop - close) * rrRatio)
        alert('Sell:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar)

    // Exit: target or SL
    if ((close >= target) or (close <= sl))
        strategy.close("enter long", comment=close < sl ? "Long SL hit" : "Long target hit")
    if ((close <= target) or (close >= sl))
        strategy.close("enter short", comment=close > sl ? "Short SL hit" : "Short target hit")
else if (not mktAlwaysOn)
    // Close all open position at the end if Day
    strategy.close_all(comment = "Close all entries at end of day.")