期間をまたいだ移動量戦略


作成日: 2023-11-03 16:35:15 最終変更日: 2023-11-03 16:35:15
コピー: 0 クリック数: 621
1
フォロー
1617
フォロワー

期間をまたいだ移動量戦略

概要

この戦略は,移動量の突破に基づいて取引シグナルを生成する.主な考えは,指定された期間中の価格の動きを観察し,移動量の突破によって価格の傾向の変化を判断することである.

戦略原則

この戦略は,価格の動きを判断するために,ピボットハイとピボットローという特定の時間帯の最高値と最低値を計算します.

具体的には,過去N根K線の最高値がピボット高で,過去M根K線の最低値がピボットローとして計算される.現在のK線の高点がピボット高を上回ると多値シグナルが生成され,現在のK線の低点がピボットローを下回ると空値シグナルが生成される.

オーバーと空白の後に,戦略はATRを使用して,ストップを設定し,日中の段階的なストップを行う.また,戦略は,特定の時間帯で (例えば14:55分) すべてのポジションを平定する.

この戦略は,特定の時間帯の価格の突破を簡単に効果的に利用してトレンドを捉え,日中のショートライン取引に適しています.計算は,考え方が明確で,実行しやすいです.

戦略的優位性

  • 価格の動きを突破し,トレンドの変化を捉え,信号を信頼する
  • 基本のK線データだけで簡単に実現できます.
  • 合理的な止損,日中の段階的な止損,効果的なリスク管理
  • 昼間の短距離で,夜間の危険を防ぐために適しています.
  • パラメータが少なく,最適化が容易

戦略的リスクと解決策

  • 傾向の始まりの機会を逃す可能性のある遅滞

適切な時間帯の調整,または他の指標の組み合わせで入場時刻を決定できます

  • 傾向がはっきりしない場合,偽信号が多くなります.

パラメータを適当に調整したり,トレンド指標,取引量などのフィルタ条件を追加したりできます.

  • 日中ショートラインの取引は,高額な資金コストを必要とします.

ポジションのサイズを調整したり,適切な期間を延長したりできます.

  • パラメータの最適化により,市場状況によって効果が異なる可能性があります.

異なる市場状況に応じてパラメータを調整するか,機械学習などの方法を使用して自動的に最適化する必要があります.

戦略最適化の方向性

  • 典型的な価格,平均価格などの他の価格データを試す

  • 取引量や変動率などのフィルタリング条件

  • 異なるパラメータの組み合わせを試す

  • トレンド指標と組み合わせてトレンドの方向を決定する

  • 機械学習によるパラメータの自動最適化

  • 舞台の時間帯を拡大する

要約する

この戦略の全体的な構想は明確で簡潔で,価格の移動突破を効果的に利用して短期トレンドを捕捉し,高い収益因子を実現する.戦略のパラメータは少なく,テストし,最適化し,日中のショートライン操作に適している.ある程度の遅れや偽信号の問題があるが,パラメータ調整,フィルター条件の追加などの方法によって改善できる.この戦略は,突破思考に基づく効果的な取引枠組みを提供する.

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

//   ____________        _________           _____________
//  |____________|      ||________|          ||__________|
//       ||             ||        ||         ||
//       ||             ||________||         ||
//       ||     H E     ||________   U L L   ||       H A R T I S T
//       ||             ||        ||         ||
//       ||             ||________||         ||__________
//       ||             ||________|          ||__________|
  
//@version=5
// strategy("PIVOT STRATEGY [5MIN TF]",overlay=true ,commission_type = strategy.cash, commission_value = 30 , slippage = 2, default_qty_value = 60, currency = currency.NONE, pyramiding = 0)
leftbars = input(defval = 10)
rightbars = input(defval = 15)

// ═══════════════════════════ //
// ——————————> INPUTS <——————— //
// ═══════════════════════════ //

EMA1 = input.int(title='PRICE CROSS EMA', defval = 150, minval = 10 ,maxval = 400)
factor1 = input.float(title='_ATR LONG',defval = 3.2 , minval = 1 , maxval = 5 , step = 0.1, tooltip = "ATR TRAIL LONG")
factor2 = input.float(title='_ATR SHORT',defval = 3.2 , minval = 1 , maxval = 5 , step = 0.1, tooltip = "ATR TRAIL SHORT")
risk = input.float(title='RISK',defval = 200 , minval = 1 , maxval = 5000 , step = 50, tooltip = "RISK PER TRADE")

var initialCapital = strategy.equity
t = time(timeframe.period, '0935-1400:1234567')
time_cond = true

// ══════════════════════════════════ //
// ———————————> EMA DATA <——————————— //
// ══════════════════════════════════ //
ema1 = ta.ema(close, EMA1)

plot(ema1, color=color.new(color.yellow, 0), style=plot.style_linebr, title='ema1')

// ══════════════════════════════════ //
// ————————> TRAIL DATA <———————————— //
// ══════════════════════════════════ //
// *******Calculate LONG TRAIL data*****
ATR_LO = ta.atr(14)*factor1

// *******Calculate SHORT TRAIL data*****
ATR_SH = ta.atr(14)*factor2

longStop = close - ATR_LO
shortStop = close + ATR_SH

// Plot atr data
//plot(longStop, color=color.new(color.green, 0), style=plot.style_linebr, title='Long Trailing Stop')
//plot(shortStop , color=color.new(color.red, 0), style=plot.style_linebr, title='Short Trailing Stop')

// ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ //
// ————————————————————————————————————————————————————————> PIVOT DATA <———————————————————————————————————————————————————————————————————————————————————————————————————— //
// ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ //

ph = ta.pivothigh(close,leftbars, rightbars)
pl = ta.pivotlow(close,leftbars, rightbars)

pvt_condition1 = not na(ph)

upper_price = 0.0
upper_price := pvt_condition1 ? ph : upper_price[1]

pvt_condition2 = not na(pl)

lower_price = 0.0
lower_price := pvt_condition2 ? pl : lower_price[1]

// Signals
long  = ta.crossover(high, upper_price + syminfo.mintick)
short = ta.crossunder(low, lower_price - syminfo.mintick)

plot(upper_price, color= close > ema1  ? color.green : na, style=plot.style_line, title='PH')

plot(lower_price,  color= close <  ema1  ? color.red : na, style=plot.style_line, title='PL')


// ══════════════════════════════════//
// ————————> LONG POSITIONS <————————//
// ══════════════════════════════════//
//******barinstate.isconfirmed used to avoid repaint in real time*******

if ( long and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close >= ema1 )
    strategy.entry(id= "Long" ,direction = strategy.long, comment = "B")
    
//plot(longStop , color=color.new(color.blue, 0), style=plot.style_linebr, title='long Stop')

if strategy.position_size > 0 
    strategy.exit("long tsl", "Long" , stop = longStop ,comment='S')
 

// ═════════════════════════════════════//
// ————————> SHORT POSITIONS <————————— //
// ═════════════════════════════════════//
if ( short and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close <= ema1 )
    strategy.entry(id = "Short" ,direction = strategy.short,  comment = "S") 

if strategy.position_size < 0
    strategy.exit("short tsl", "Short" ,  stop = shortStop ,comment='B')

// ════════════════════════════════════════════════//
// ————————> CLOSE ALL POSITIONS BY 3PM <————————— //
// ════════════════════════════════════════════════//
strategy.close_all(when = hour == 14 and minute == 55)

// ════════════════════════════════════════//
// ————————> MAX INTRADAY LOSS  <————————— //
// ════════════════════════════════════════//
// strategy.risk.max_intraday_loss(type = strategy.cash, value = risk)