この戦略は,移動平均に基づく多空戦略である.これは,3つの異なるパラメータの移動平均を使用して取引信号を生成する.価格が移動平均を上越しするときに多空し,下越しするときに空空する.この戦略には,3つの移動平均があり,段階的に多空し,トレンドを追跡することができます.
この策略は,sma関数を使って,lenの長さである移動平均maを計算する. そして,longline1,longline2,longline3の移動平均を,maに基づいて計算する.このうち,longline1の移動は-4%,longline2の移動は-5%,longline3の移動は-6%である.
買い信号生成時に,現時点でポジションがない場合,価格がlongline1を突破したとき,ポジションを多く開きます. 1手ポジションがある場合は,価格がlongline2を突破したとき,さらに1手を開きます. 2手ポジションがある場合は,価格がlongline3を突破したとき,さらに1手を開きます. 最大3手ポジションを多く持っています.
売る信号が生成される時,当時は多ポジションを保有し,価格を下回る時に平ポジションを保有する.
この戦略は,トレンドトラッキング効果を実現するために,分量的に分級することで,より多くのことを行うことができます.
リスク対策:
この戦略は以下の点で最適化できます.
傾向の方向を判断する他の指標の判断を追加します.例えば,MACDにトレンドの強さを判断します.
移動平均のパラメータを最適化して,最適なパラメータの組み合わせを探します.
集団での多量殺人の数と割合を調整し,追尾殺人を防止する.
ATRによるストップポイントを設定できるモバイルストップメカニズムを追加
市場変動に合わせてポジション数を動的に調整し,大きな変動時にポジションを減額できます.
戦略に最も適した品種を見つけるために,さまざまな品種のパラメータの効果をテストする
Exit モジュールを開発し,特定の形状が発生したときに停止退出を考慮する
全体として,この戦略は,移動平均を使用してトレンドの方向を判断して取引し,分批分級を単行で行うことでトレンドを追跡して利益を得ることができる.しかし,一定の遅れがあり,追及するリスクがある.我々は,補助判断指標,最適化パラメータ,ポジション管理の調整,停止メカニズムの追加などの方法で,この戦略を最適化して,異なる市場状況に適応して,安定した制御可能な利益の効果を達成することができる.
/*backtest
start: 2022-10-02 00:00:00
end: 2023-10-08 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2019
//@version=4
strategy(title = "Noro's ShiftMA-multi Strategy v1.0", shorttitle = "ShiftMA-multi", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)
//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(3, minval = 1, title = "MA Lenghs")
src = input(ohlc4, title = "MA Source")
longlevel1 = input(-4.0, title = "Long line 1")
longlevel2 = input(-5.0, title = "Long line 2")
longlevel3 = input(-6.0, title = "Long line 3")
needoffset = input(true, title = "Offset")
//Variables
size = strategy.position_size
mult = 1 / syminfo.mintick
//MA
ma = sma(src, len)
longline1 = round(ma * ((100 + longlevel1) / 100) * mult) / mult
longline2 = round(ma * ((100 + longlevel2) / 100) * mult) / mult
longline3 = round(ma * ((100 + longlevel3) / 100) * mult) / mult
//Lines
offset = needoffset ? 1 : 0
plot(ma, color = color.blue)
plot(longline1, offset = offset, color = color.lime)
plot(longline2, offset = offset, color = color.lime)
plot(longline3, offset = offset, color = color.lime)
//Trading
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
lots = 0.0
if ma > 0
lots := round(size / lot)
strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0))
lots := round(size / lot)
strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1))
lots := round(size / lot)
strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2))
if size > 0
strategy.entry("TP", strategy.short, 0, limit = ma)