
この戦略は,ポーリング帯とインデックス移動平均 ((EMA) の2つの技術指標を組み合わせて,市場の短期的な価格変動を捉えることを目的としている.ポーリング帯は価格の変動性を測定するために用いられ,EMAはトレンドの方向性を評価するために用いられる.閉盘価格がEMAを突破し,上線を上回ると,上昇傾向が続く可能性を示し,その時にポジションを多く開く.逆に,閉盘価格がEMAを破って下線を下回ると,下線が続く可能性を示し,その時にポジションを空にする.この戦略は,下行リスクを制御し,利益をロックするために,ストップとストップなどのリスク管理テクニックを組み合わせている.
この戦略の核心は,ポリング帯とEMAの組み合わせを使用して潜在的な取引機会を識別することです.ポリング帯は3つの線で構成されています. 中央線 (通常は単純移動平均),上線 (通常は標準差を一定倍数加え),下線 (通常は標準差を一定倍数減去する). 価格の突破上線または下線は,通常,市場が強い波動を示しますが,価格の中央線の近くで動作することは,市場が比較的安定していることを示します.EMAは,最近の価格変化により高い重みを与え,したがって,価格変化に対する反応は単純移動平均よりも敏感です.
この戦略の取引論理は以下の通りです.
ボーリング帯とEMAのトレンドトラッキング戦略は,波動性指標とトレンドトラッキング指標を組み合わせて,市場の短期的な価格変動を捕捉するための体系的な方法を提供する. この戦略の優点は,リスク管理とポジション管理のテクニックを組み合わせて,市場トレンドを効果的に識別し,追跡できることです. しかし,この戦略は,パラメータの感受性,市場のノイズ,トレンドの逆転などのリスクにも直面しています.
/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Bollinger Bands and EMA Strategy", overlay=true)
// Bollinger Bands Inputs
bb_length = input.int(20, minval=1, title="Bollinger Bands Length")
bb_mult = input.float(2.0, minval=0.001, maxval=50, title="Bollinger Bands StdDev")
bb_src = input(close, title="Bollinger Bands Source")
bb_offset = input.int(0, title="Bollinger Bands Offset", minval=-500, maxval=500)
// EMA Inputs
ema_period = input.int(9, minval=1, title="EMA Period")
ema_src = input(close, title="EMA Source")
ema_offset = input.int(0, title="EMA Offset", minval=-500, maxval=500)
// Calculate Bollinger Bands
bb_basis = ta.sma(bb_src, bb_length)
bb_dev = bb_mult * ta.stdev(bb_src, bb_length)
bb_upper = bb_basis + bb_dev
bb_lower = bb_basis - bb_dev
// Plot Bollinger Bands
plot(bb_basis, "BB Basis", color=color.blue, offset=bb_offset)
p1 = plot(bb_upper, "BB Upper", color=color.red, offset=bb_offset)
p2 = plot(bb_lower, "BB Lower", color=color.green, offset=bb_offset)
fill(p1, p2, title="BB Background", color=color.rgb(33, 150, 243, 95))
// Calculate EMA
ema_value = ta.ema(ema_src, ema_period)
// Plot EMA
plot(ema_value, title="EMA", color=color.orange, offset=ema_offset)
// Strategy Conditions
long_condition = ta.crossover(close, ema_value) and close > bb_upper
short_condition = ta.crossunder(close, ema_value) and close < bb_lower
// Define Stop Loss and Take Profit Levels
stop_loss_pct = input.float(0.5, title="Stop Loss (%)")
take_profit_pct = input.float(1.0, title="Take Profit (%)")
stop_loss_level_long = close * (1 - stop_loss_pct / 100)
take_profit_level_long = close * (1 + take_profit_pct / 100)
stop_loss_level_short = close * (1 + stop_loss_pct / 100)
take_profit_level_short = close * (1 - take_profit_pct / 100)
// Calculate Position Size Based on Risk Per Trade
risk_per_trade = input.float(1.0, title="Risk Per Trade (%)")
capital_at_risk = strategy.equity * risk_per_trade / 100
risk_per_unit_long = math.abs(close - stop_loss_level_long)
risk_per_unit_short = math.abs(close - stop_loss_level_short)
position_size_long = capital_at_risk / risk_per_unit_long
position_size_short = capital_at_risk / risk_per_unit_short
// Enter Long and Short Trades
if long_condition
strategy.entry("Long", strategy.long, qty=position_size_long)
strategy.exit("Take Profit", "Long", limit=take_profit_level_long)
strategy.exit("Stop Loss", "Long", stop=stop_loss_level_long)
if short_condition
strategy.entry("Short", strategy.short, qty=position_size_short)
strategy.exit("Take Profit", "Short", limit=take_profit_level_short)
strategy.exit("Stop Loss", "Short", stop=stop_loss_level_short)