継続的なポジティブライン短期反転戦略


作成日: 2023-10-08 13:56:39 最終変更日: 2023-10-08 13:56:39
コピー: 1 クリック数: 767
1
フォロー
1617
フォロワー

概要

この戦略は,連続多根陽線が形成された後に陰線が現れて空白する,あるいは連続多根陰線が形成された後に陽線が現れて空白する,という古典的な短期取引の考え方に基づいている.具体的には,この戦略は,K線の実体高さと色を検知して,連続多根同一色のK線が現れたことを判断し,RVI指数によって反転が起こるかどうかを判断する.全体的に,これは,短期反転取引を実現するために,短期連続K線特性をRVI指数と組み合わせて利用する戦略である.

戦略原則

この戦略の核心的な論理は以下の通りです.

  1. K線実体高度が最小高度値を超えているかどうかを検出し,過小な陽線と陰線の波動をフィルターする.

  2. 前2つのK線が同じ色であるかどうかを判断し,そうであれば,短期的な価格逆転の機会が形成される可能性があります.

  3. 前2つのK線が同じ色であることを確認した後,現在のK線が前2つのK線と色が異なる場合,取引信号が生じます.すなわち,連続した2つの陰線の後,1つの陽線が多し,連続した2つの陽線の後,1つの陰線が空きとなります.

  4. 取引入場後,RVI指標の多空交差によってポジションの方向を判断する。RVI指標は短期的な逆転点を判断できる。RVI指標線が信号線を横切るとき,ポジション平仓を行う。

  5. 全体として,この戦略はK線特性とRVI指標を考慮して統合され,短期的な反転の取引システムを形成しています.短期的な異常な価格行動が発生したときに反転の機会を利用して利益を得ます.

優位分析

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

  1. 短期価格の異常を捕捉する. 連続多根陽線または連続多根陰線が現れた場合,短期間に価格の異常が生じたことを示し,このとき反転操作を行うと,よりよいリターンを得ることが期待される.

  2. RVI指数は判断を補助する。RVI指数は短期的な逆転点を効果的に判断し,K線特征と互補を形成し,システムの安定性を高める。

  3. 操作頻度は高く,ショートライン操作に適している.連続したK線が同色である場合が頻繁に発生し,RVI指数と組み合わせると,この戦略はより多くの取引機会を提供できる.

  4. リスクはコントロールできます. 固定取引数とストップ・ストップを設定します.

  5. 論理が明快でシンプル.理解し,実行しやすく,リールディスク操作は困難ではない.

リスク分析

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

  1. 短期逆転は必ずしも成立しない。継続的なトレンドの行情では,短期逆転シグナルが失効し,誤入場を引き起こす可能性がある。

  2. RVI指標が誤信号を発する可能性がある。RVI指標は特殊な状況により失効する可能性がある。

  3. 止損の設定が不適切である場合,損失を拡大する可能性がある.合理的な止損点を設定する必要がある.

  4. 連続した同色K線基準は過度に厳格である.N根K線内でX%の同色K線が出現する割合として最適化することを考えることができる.

  5. 固定手数では,全体のリスクの隙間を制御できないし,大手取引は,ポジションを爆発させる可能性が高い.

最適化の方向

この戦略は,次のいくつかの点でさらに最適化できます.

  1. 連続K線同色判定の論理を最適化し,静的固定根数ではなく,統計的方法を使用する.

  2. RVIパラメータを最適化して,最適なパラメータの組み合わせを探します.

  3. 移動ストップ戦略を追加し,市場の変動に応じて trailing stop loss を追加する.

  4. ポジション管理モジュールを追加し,資金使用率に応じて取引数を動的に調整します.

  5. フィルタリング条件を増やし,チャネル,トレンドなどの指標の組み合わせでシステムの安定性を高めます.

  6. 異なる品種に対してパラメータを最適化し,適応性を向上させる.

  7. 機械学習を導入し,歴史データにトレーニングし,システムパラメータを動的に最適化します.

要約する

この戦略は,全体として,短期K線異常とRVI指数に基づく典型的な短期逆転取引戦略である.それは一定の利点があるが,潜在的なリスクもある.パラメータを継続的に最適化し,より厳格なシステムを構築することにより,戦略の安定性と収益性をさらに向上させることができる.しかし,いかなる戦略も完全に損失を回避することはできません.トレーダーは理性的で,リスクをコントロールする必要があります.

ストラテジーソースコード
/*backtest
start: 2022-10-07 00:00:00
end: 2023-10-07 00:00:00
period: 3d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//This is part of a series of strategies developed automatically by a online software. I cannot share the site url, which is not related to me in any way, because it is against the TV reules.
//
//This strategy was optimized for GBPUSD, timeframe 1D, fixed lots 0.1, initial balance 1000€
//LOGIC:
//- LONG ENTRY when previous candle is bear
//- LONG EXIT: RVI > signal line
//- SHORT ENTRY when previous candle is bull
//- SHORT EXIT: RVI <  signal line
//
//NOTE: I considered the open of actual candle instead of close otherwise there will be a back shift of 1 candle in pine script
//
//Take profit = no
//Stop loss = no

// strategy("Expert studio strategy 1 - GBPUSD", overlay=false, precision=6, initial_capital=1000,calc_on_every_tick=true, pyramiding=0, default_qty_type=strategy.fixed, default_qty_value=10000, currency=currency.EUR)

//INPUTS
src = input(close, "source")
min_body_height = input(42, "Minimum body height", type=input.float)
//bars_back=input(2, "Consecutive bars of same color")
rvi_period = input(55, "RVI period")

//CALCULATIONS_____________________________
//candle color
body_height = abs(open - close) / syminfo.mintick
body_color = open > close ? color.red : color.green

//da migliorare for i=0 to bars_back-1

//RVI -------- thanks to hecate
p = rvi_period

CO = close - open
HL = high - low

value1 = (CO + 2 * CO[1] + 2 * CO[2] + CO[3]) / 6
value2 = (HL + 2 * HL[1] + 2 * HL[2] + HL[3]) / 6

num = sum(value1, p)
denom = sum(value2, p)

RVI = denom != 0 ? num / denom : 0

RVIsig = (RVI + 2 * RVI[1] + 2 * RVI[2] + RVI[3]) / 6

plot(RVI, color=color.green, style=plot.style_line, linewidth=1)
plot(RVIsig, color=color.red, style=plot.style_line, linewidth=1)

//----------------------------------

longCondition = body_height[1] >= min_body_height and body_color[1] == color.red and 
   body_height[0] >= min_body_height and body_color[0] == color.red and 
   RVIsig > RVI
exitLong = RVI > RVIsig

shortCondition = body_height[1] >= min_body_height and body_color[1] == color.green and 
   body_height[0] >= min_body_height and body_color[0] == color.green and 
   RVIsig < RVI
exitShort = RVI < RVIsig

if longCondition and strategy.opentrades == 0
    strategy.entry("Long", strategy.long)

strategy.close("Long", when=exitLong)

if shortCondition and strategy.opentrades == 0
    strategy.entry("Short", strategy.short)

strategy.close("Short", when=exitShort)

// === Backtesting Dates === thanks to Trost

testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2011, "Backtest Start Year")
testStartMonth = input(10, "Backtest Start Month")
testStartDay = input(7, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, testStartHour, 0)
testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testStopHour = input(23, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, testStopHour, 0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
testPeriod_1 = testPeriod()
isPeriod = testPeriodSwitch == true ? testPeriod_1 : true
// === /END

if not isPeriod
    strategy.cancel_all()
    strategy.close_all()