クロス移動平均価格戦略

作者: リン・ハーンチャオチャン,日付: 2023-11-27 16:52:19
タグ:

img

概要

この戦略は基本的に移動平均のクロス戦略である.価格の移動平均を計算し,特定の短期および長期移動平均を設定することによって,短期移動平均が長期移動平均を下から越えるときに長引く.短期移動平均が長期移動平均を下から越えるときに短引く.

原則

価格移動平均交差戦略の核心理念は,価格の移動平均は価格変化の傾向を効果的に反映することができる.この戦略は,異なるサイクルの2つの移動平均と特定の取引論理を設定して取引信号を生成することによって市場の傾向の変化を判断する.

ストラテジーは,長期移動平均と短期移動平均を計算する.ロングラインは主に主要なトレンドを判断し,ショートラインは主要なトレンドの間に中期変動を捕捉するために使用される.戦略の取引信号は主にロングライン上のショートラインの交差から来る:ショートラインがロングラインの上を横切るときのロング信号,ショートラインが下を横切るときのショート信号.さらに,戦略は偽信号を避けるためにシグナルをフィルタリングする.

この戦略は,SMA,EMA,VWMAなど7種類の異なる移動平均を使用しています.ユーザーは移動平均の種類を選択できます.移動平均の長さも柔軟に設定できます.また,戦略は特定の取引時間期間やポジション管理メカニズムにも制限を提供します.これらの設定を通じて,ユーザーはさまざまな種類と市場環境に適応するために戦略のパラメータを柔軟に調整できます.

利点分析

価格移動平均のクロス戦略の主な利点は以下の通りである.

  1. 戦略の論理は 明確でシンプルで 分かりやすく 実行可能で 初心者向けに適しています

  2. 戦略の原則は堅牢で,完全に検証された移動平均取引のルールに基づいています.

  3. 戦略のパラメータは柔軟で調整可能で,利用者は市場での判断と好みに合わせて適切なパラメータを選択できます.

  4. この戦略には,負けるオーダーの保持時間を短縮し,不要なリバースポジションを防ぐための一定のリスク管理メカニズムがあります.

  5. この戦略には複数の種類の移動平均値が含まれています.ユーザーは,取引品種に最も適した移動平均値を選択できます.

  6. この戦略は,主要な休日市場における異常変動を避けるために,特定の取引時間間に取引論理を有効にするのを支持します.

リスク分析

価格移動平均のクロス戦略には多くの利点があるが,実際の取引には依然としていくつかのリスクがあり,これらは主に次の2つの側面に反映される.

  1. ほとんどの移動平均値の遅延により,価格逆転が完了した後の後期にクロスシグナルが現れ,簡単に罠にかかりやすい.

  2. パラメータの設定が正しくない場合,クロスシグナルが頻繁すぎるため,取引活動が高すぎたり,取引コストが上昇したりすることがあります.

上記のリスクに対応して,以下の方法で制御と対処方法を実施します.

  1. 適切なストップ損失範囲を設定することによって単一の損失のリスクを制御する.

  2. フィルター条件を追加することで取引頻度を減らし,過剰取引を防ぐ.例えば,価格チャネルまたは価格変動範囲の条件を設定する.

  3. 移動平均のパラメータを最適化し,独自の取引品種とサイクルに最適なパラメータの組み合わせを選択します.異なる市場条件下で戦略の安定性をテストします.

最適化

この価格移動平均のクロスオーバー戦略のさらなる最適化にはまだ余地があります.

  1. 極端な市場状況下で保護メカニズムを強化します.例えば,異常な市場状況を避けるために,激しい価格変動の際に取引を一時停止します.

  2. 信号の品質と安定性を向上させるために,より多くのフィルター条件と組み合わせられた取引信号を増やす.例えば,他の技術指標と組み合わせたトレンドクロスオーバーを特定する.

  3. ダイナミックパラメータシステムを採用する.市場状況や品種の特徴に応じて,固定値を使用するのではなく,移動平均長,取引スイッチなどのキーパラメータを自動的に調整する.

  4. 複合多様性仲介のような高度な戦略でこの移動平均クロスオーバー信号を適用します. 深い戦略最適化のために他の情報と組み合わせます.

上記の提案は,この戦略の適用環境と有効性を拡大し,より良いリスク/報酬のバランスを達成することができます.

結論

この記事では,シンプルな移動平均クロスオーバー戦略 - Noros CrossMAの詳細なコード分析と解釈を行います.その戦略アイデア,原則構造,主な利点および可能な改善方向を分析します.全体として,この戦略は明確な論理を持ち,シンプルで実践的です.柔軟なパラメータ調整は多くの取引環境に適応できます.また,戦略の既存の問題やリスクを解剖し,標的化されたアドバイスを提供します.これらの包括的な分析と議論を通じて,トレーダーはそのようなタイプの戦略をよりよく理解し,実際の取引システムを継続的に最適化するのに役立ちます.


/*backtest
start: 2022-11-20 00:00:00
end: 2023-11-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=4
strategy(title = "Noro's CrossMA", shorttitle = "CrossMA", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0, commission_value = 0.1)

needlong = input(true, "long")
needshort = input(true, "short")
lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
type = input(defval = "SMA", options = ["SMA", "EMA", "VWMA", "DEMA", "TEMA", "KAMA", "PCMA"], title = "MA type")
src = input(close, defval = close, title = "MA Source")
len = input(30, defval = 30, minval = 1, title = "MA length")
off = input(00, defval = 00, minval = 0, title = "MA offset")
anti = input(true, defval = true, title = "Anti-saw filter")
showma = input(true, defval = true, title = "Show MA")
showbg = input(false, defval = false, title = "Show background")
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")

//DEMA
dema = 2 * ema(src, len) - ema(ema(close, len), len)

//TEMA
xPrice = close
xEMA1 = ema(src, len)
xEMA2 = ema(xEMA1, len)
xEMA3 = ema(xEMA2, len)
tema = 3 * xEMA1 - 3 * xEMA2 + xEMA3

//KAMA
xvnoise = abs(src - src[1])
nfastend = 0.20
nslowend = 0.05
nsignal = abs(src - src[len])
nnoise = sum(xvnoise, len)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2)
kama = 0.0
kama := nz(kama[1]) + nsmooth * (src - nz(kama[1]))

//PriceChannel
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

sma_1 = sma(src, len)
ema_1 = ema(src, len)
vwma_1 = vwma(src, len)
ma2 = type == "SMA" ? sma_1 : type == "EMA" ? ema_1 : type == "VWMA" ? vwma_1 : type == "DEMA" ? dema : type == "TEMA" ? tema : type == "KAMA" ? kama : type == "PCMA" ? center : 0
ma = ma2[off]

macol = showma ? color.blue : na
plot(ma, color = macol, linewidth = 3, transp = 0)

//Background
trend = 0
trend := anti == false and close > ma ? 1 : anti == false and close < ma ? -1 : low > ma ? 1 : high < ma ? -1 : trend[1]
bgcol = showbg ? trend == 1 ? color.lime : trend == -1 ? color.red : na : na
bgcolor(bgcol, transp = 70)

//Trading
size = strategy.position_size
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1]
if trend == 1 and trend[1] == -1
    strategy.entry("Long", strategy.long, lot, when = needlong and truetime)
if trend == -1 and trend[1] == 1
    strategy.entry("Short", strategy.short, lot, when = needshort and truetime)
if size > 0 and needshort == false and trend == -1
    strategy.close_all()
if size < 0 and needlong == false and trend == 1
    strategy.close_all()
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")

もっと