移動平均システムに基づくグリッド取引戦略


作成日: 2024-01-03 17:18:22 最終変更日: 2024-01-03 17:18:22
コピー: 0 クリック数: 1029
1
フォロー
1621
フォロワー

移動平均システムに基づくグリッド取引戦略

概要

この戦略は,均線理論を用いて格子取引システムを構築し,複数の異なるパラメータのJMA均線組合せによって市場のトレンドを判断し,トレンド転換点で格子取引を開始し,市場の中央の長線トレンドの変換から利益を得ることを目的としています.

戦略原則

  1. 1-20周期不等のJMA平均線を用いて平均線組を構成し,市場トレンドを判断する.短周期平均線が長周期平均線より高いときは上昇傾向として判断し,逆に下降傾向である.

  2. トレンドの転換点,すなわち短平均線が上から下へ長平均線または下から長平均線に突入する時に,格子取引を開きます. 上昇傾向で徐々に空券を構築し,下降傾向で徐々に複数券を構築します.

  3. K線実体色でフィルタリングするかどうかを選択し,もし有効であれば,赤K線でのみ買い,緑K線でのみ売り,そうでなければK線の色を考慮せず,トレンド転換時にのみ取引する.

  4. ストップ・ロスは,ストップ・ロスを追跡するか,または終了するストップ・ロスを用いる.終了するストップ・ロスは,戦略の実行周期の終わりに,すべてのポジションを平定する.

優位分析

  1. 平均線システムでトレンドを判断し,市場の長線動きの転換点を効果的に判断できる.

  2. 格子取引は,明確なトレンドがないときに震動市場から利益を得ることができる.同時に,リスクを制御するためにストップロスを配置することができる.

  3. JMA平均線パラメータはカスタマイズ可能で,異なる周期に最適化され,柔軟性が高い.

  4. 偽突破の誤解を避けるために,K線実体色でフィルタリングするかどうかを選択できます.

リスク分析

  1. 市場が大きく揺れ動いて,トレンドがはっきりしない場合,止損のリスクは高くなります.

  2. 均線システムの判断誤差 may lead to 取引信号の誤り.

  3. K線フィルタを有効にすると,いくつかの取引機会を逃すリスクがあります.

  4. 格子間隔が大きすぎると,十分な利益を得られない.小さすぎると,ポジションが多すぎると,コストプレッシャーが大きい.

最適化の方向

  1. より多くの組み合わせのパラメータをテストして,異なる品種に適したJMA均線組み合わせを見つけることができます.

  2. BOLL通道,KDなど,他の指標と組み合わせてFilterを行うことで,信号の質を向上させることができる.

  3. 格子取引の配置を最適化できる格子間隔,倉庫建設数などのパラメータ.

  4. 跳躍停止,追跡停止など,さらに多くのタイプの停止を考慮することができます.

要約する

この戦略は,JMA平均線理論でトレンド転換を判断し,転換点で格子取引を開きます.市場の中央の長線トレンド転換による利益を得ることができます.パラメータ最適化により優れた戦略パフォーマンスを得ることができます.全体的に,この戦略は中長期にわたって保持し,トレンドトレンドを徐々に追跡して利益を得るのに適しています.

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

//Noro
//2019

//@version=3
strategy(title = "Noro's Fishnet Strategy", shorttitle = "Fishnet str", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
usecf = input(false, defval = false, title = "Use Color-filter")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//JMA
jmax(src, len) =>
    beta = 0.45*(len-1)/(0.45*(len-1)+2)
    alpha = pow(beta, 3)
    L0=0.0, L1=0.0, L2=0.0, L3=0.0, L4=0.0
    L0 := (1-alpha)*src + alpha*nz(L0[1])
    L1 := (src - L0[0])*(1-beta) + beta*nz(L1[1])
    L2 := L0[0] + L1[0]
    L3 := (L2[0] - nz(L4[1]))*((1-alpha)*(1-alpha)) + (alpha*alpha)*nz(L3[1])
    L4 := nz(L4[1]) + L3[0]
	L4

ma01 = jmax(close, 10)
ma02 = jmax(close, 20)
ma03 = jmax(close, 30)
ma04 = jmax(close, 40)
ma05 = jmax(close, 50)
ma06 = jmax(close, 60)
ma07 = jmax(close, 70)
ma08 = jmax(close, 80)
ma09 = jmax(close, 90)
ma10 = jmax(close, 100)
ma11 = jmax(close, 110)
ma12 = jmax(close, 120)
ma13 = jmax(close, 130)
ma14 = jmax(close, 140)
ma15 = jmax(close, 150)
ma16 = jmax(close, 160)
ma17 = jmax(close, 170)
ma18 = jmax(close, 180)
ma19 = jmax(close, 190)
ma20 = jmax(close, 200)

trend = 0
trend := ma01 > ma20 ? 1 : ma01 < ma20 ? -1 : trend[1]
col = trend == 1 ? #00FF7F : #DC143C

plot(ma01, transp = 0, color = col)
plot(ma02, transp = 0, color = col)
plot(ma03, transp = 0, color = col)
plot(ma04, transp = 0, color = col)
plot(ma05, transp = 0, color = col)
plot(ma06, transp = 0, color = col)
plot(ma07, transp = 0, color = col)
plot(ma08, transp = 0, color = col)
plot(ma09, transp = 0, color = col)
plot(ma10, transp = 0, color = col)
plot(ma11, transp = 0, color = col)
plot(ma12, transp = 0, color = col)
plot(ma13, transp = 0, color = col)
plot(ma14, transp = 0, color = col)
plot(ma15, transp = 0, color = col)
plot(ma16, transp = 0, color = col)
plot(ma17, transp = 0, color = col)
plot(ma18, transp = 0, color = col)
plot(ma19, transp = 0, color = col)
plot(ma20, transp = 0, color = col)

//Trading
lot = 0.0
lot := strategy.equity / close * capital / 100

if trend == 1 and (close < open or usecf == false)
    strategy.entry("Long", strategy.long, needlong ? lot : na)

if trend == -1 and (close > open or usecf == false)
    strategy.entry("Short", strategy.short, needshort ? lot : na)