格子取引戦略 移動平均システムに基づく

作者: リン・ハーンチャオチャン,日付: 2024-01-03 17:18:22
タグ:

img

概要

この戦略は,異なるパラメータを持つ複数のセットのJMA移動平均値を通して市場傾向を判断することによってグリッド取引システムを構築するために移動平均理論を使用する.それは,市場における長期的トレンド逆転中に利益を得ることを目的としています.

戦略の論理

  1. 市場傾向を決定するために,1~20期間のJMA移動平均の組み合わせを使用する.短期のMAが長期期間のMAを超えると,上昇傾向と,逆もまた下落傾向と判断される.

  2. トレンド逆転点で格子取引を開く.ショートMAがロングMAを下または上を横切るとき.上向きのトレンド中に徐々にショートポジション,下向きのトレンド中にロングポジションを確立する.

  3. ろうそくの色に基づいてフィルタリングするオプション - 赤色のろうそくでのみ購入し,緑色のろうそくでのみ販売します. そうでなければ色を無視し,トレンド逆転でのみ取引します.

  4. ストップ・ロスの追跡または戦略の期間が終了する時の時間に基づく出口です

利点分析

  1. 傾向を特定するためにMAシステムを使用することで,長期的な傾向逆転を効果的に特定することができます.

  2. 格子取引は,明確なトレンドのない範囲限定市場から利益を得ることができ,リスクを制御するためにストップロスを使用します.

  3. JMAパラメータをカスタマイズし,異なる期間で最適化できます.

  4. キャンドルフィルターは 偽の突出によって 誤導されるのを避けます

リスク分析

  1. 明確なトレンドのない高速のサーチ市場は,ストップロスのリスクが高くなります.

  2. MAシステムからの判断の誤りは,不正な取引信号につながる可能性があります.

  3. キャンドルフィルターは 取引機会を逃すリスクがあります

  4. 格子間隔が広い場合 利益が不足し 狭すぎると ポジションが多すぎたり 高額なコストがかかることもあります

オプティマイゼーションの方向性

  1. 異なる製品に対して JMA MA の最適な組み合わせを見つけるために,より多くのパラメータの組み合わせをテストする.

  2. BOLL帯,KDなどなどのフィルターを組み込むことで信号の質を向上させる.

  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)
    

もっと