リバース・オープニング・エングロフィング・戦略

作者: リン・ハーンチャオチャン開催日:2023年11月22日 16:05:24
タグ:

img

概要

リバース・オープニング・エングルフィング・ストラテジー (Reverse Opening Engulfing Strategy) は,開封後の最初のキャンドルスタイクに基づいた簡単な日中取引戦略である.この戦略の核心理念は,開封後に毎日現れる最初のキャンドルスタイクの上昇傾向または下落傾向を判断し,コントラオペレーションを行うことである.最初のキャンドルスタイクが赤いヤン線である場合,ロング;最初のキャンドルスタイクが緑の陰線である場合,ショートする.この戦略は,ポジションを終了するためのストップ損失と利益メカニズムを設定する.

戦略の論理

この戦略の原理は,開封後の最初のキャンドルスタイルの特異性である.市場が開くとき,ロングとショートの力は最も激しく対立し,逆転の可能性は比較的大きい.最初のキャンドルスタイルの上昇傾向または下落傾向を判断し,カウンターオペレーションを行うことがこの戦略の核心思想である.

具体的には,新しい日の開業後,戦略は最初のキャンドルスタイルの開業価格,閉店価格,価格変化を記録します.開業価格が閉店価格 (緑の陰線) よりも高くなった場合,それはクマが勝ち,我々はロングするべきであることを意味します.開業価格が閉店価格 (赤の陽線) よりも低い場合,それは雄牛が勝ち,我々はショートするべきであることを意味します.そのような対抗操作を行うことで,戦略は開業後に逆転の機会を捉えることを試みます.

一方,この戦略は,長期・短期ポジションのリスクと利益を制御し,過度の損失や過早な利益を取ることを避けるために,長期ストップ損失価格,長期ストップ損失価格,短期ストップ損失価格,短期利益取付価格を含むストップ損失と利益取付メカニズムも設定している.

利点分析

リバース・オープニング・エングルフィング・戦略には以下の利点があります.

  1. 論理は単純で明快で 分かりやすく実行できます
  2. 初期セグメントの高い予測値を活用して逆転の機会を把握する.
  3. ストップ・ロストとメリット・テイクの設定は リスクを効果的にコントロールできます
  4. 戦略のアイデアは普遍性があり,ほとんどの株式に適しています.
  5. 参加費は比較的低く,資本管理は簡単です.

リスク分析

また,逆開封戦略にはいくつかのリスクがあります.主に以下のようなリスクがあります.

  1. 開口逆転失敗の確率.最初のキャンドルスタイルの逆転信号が失敗すると,大きな損失を引き起こす可能性があります.
  2. 低品質の株を効果的にフィルタリングできない.戦略には十分な基礎分析がないため,基礎が悪い株を選択することがあります.
  3. ブラック・スワン・イベントによるシステムリスク,特にネガティブなニュースの影響など,効果的に制御できない.
  4. 誤ったストップ・ロースと取利益設定は,損失を拡大したり利益を縮小したりする可能性があります.

オプティマイゼーションの方向性

リバース・オープニング・エングルフィング・戦略は,次の側面で最適化できる:

  1. 誤った信号を避けるために開口逆転信号の有効性試験を増加させ,例えば,音量分析を組み合わせる.
  2. 基本分析と技術分析を統合して低品質のストックをフィルタリングすることで,ストックプールを選択します.
  3. 主要な出来事やニュースのモニタリングモジュールを追加し,システムリスクを制御します.
  4. 遺伝子アルゴリズム,機械学習,その他の方法を使って ストップ・ロストをダイナミックに最適化し 利益設定をします

概要

リバース・オープニング・エングルフィング・ストラテジーは,最初のキャンドルの方向を判断し,カウンター・オペレーションを行うことで,開封後の逆転機会を把握しようとします. 戦略のアイデアは,参加コストが低く,シンプルで,実用的な価値があります. しかし,リスクについても慎重に認識し,より堅牢で信頼性の高いように戦略を実践で絶えず改善し最適化する必要があります.


/*backtest
start: 2023-10-22 00:00:00
end: 2023-11-21 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/
// © vikris
//@version=4
strategy("[VJ]First Candle Strategy", overlay = true,calc_on_every_tick = true,default_qty_type=strategy.percent_of_equity,default_qty_value=100,initial_capital=750,commission_type=strategy.commission.percent, 
     commission_value=0.02)


// ********** Strategy inputs - Start **********

// Used for intraday handling
// Session value should be from market start to the time you want to square-off 
// your intraday strategy
// Important: The end time should be at least 2 minutes before the intraday
// square-off time set by your broker
var i_marketSession = input(title="Market session", type=input.session, 
     defval="0915-1455", confirm=true)

// Make inputs that set the take profit % (optional)
longProfitPerc = input(title="Long Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=1) * 0.01

shortProfitPerc = input(title="Short Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=1) * 0.01
     
// Set stop loss level with input options (optional)
longLossPerc = input(title="Long Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=0.5) * 0.01

shortLossPerc = input(title="Short Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=0.5) * 0.01    


// ********** Strategy inputs - End **********


// ********** Supporting functions - Start **********

// A function to check whether the bar or period is in intraday session
barInSession(sess) => time(timeframe.period, sess) != 0



// Figure out take profit price
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)

// Determine stop loss price
longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)


// ********** Supporting functions - End **********


// ********** Strategy - Start **********
// See if intraday session is active
bool intradaySession = barInSession(i_marketSession)

// Trade only if intraday session is active

//=================Strategy logic goes in here===========================
 
// If start of the daily session changed, then it's first bar of the new session
isNewDay = time("D") != time("D")[1]
var firstBarCloseValue = close
var firstBarOpenValue = open
if isNewDay
    firstBarCloseValue := close
    firstBarOpenValue := open


greenCandle = firstBarOpenValue < firstBarCloseValue
redCandle = firstBarOpenValue > firstBarCloseValue

buy = redCandle
sell = greenCandle


// plot(firstBarCloseValue)
// plot(firstBarOpenValue)



//Final Long/Short Condition
longCondition = buy
shortCondition =sell
 
//Long Strategy - buy condition and exits with Take profit and SL
if (longCondition and intradaySession)
    stop_level = longStopPrice
    profit_level = longExitPrice
    strategy.entry("My Long Entry Id", strategy.long)
    strategy.exit("TP/SL", "My Long Entry Id", stop=stop_level, limit=profit_level)


//Short Strategy - sell condition and exits with Take profit and SL
if (shortCondition and intradaySession)
    stop_level = shortStopPrice
    profit_level = shortExitPrice
    strategy.entry("My Short Entry Id", strategy.short)
    strategy.exit("TP/SL", "My Short Entry Id", stop=stop_level, limit=profit_level)
 
 
// Square-off position (when session is over and position is open)
squareOff = (not intradaySession) and (strategy.position_size != 0)
strategy.close_all(when = squareOff, comment = "Square-off")

// ********** Strategy - End **********

もっと