2つの移動平均対トレンド戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-08 11:01:11
タグ:

img

概要

ダブル・ムービング・平均対トレンド戦略は,主にFOREX市場に適用されるスウィング・トレードのために設計されています.この戦略は,異なるタイムフレームの2つのムービング・平均を使用して取引シグナルを生成します.高速移動平均がスロームービング・平均を超えると,逆転を求めるショートポジションが取られます.高速移動平均がスロームービング・平均を下回ると,逆転を求めるロングポジションが取られます.

戦略原則

この戦略は,1時間および1日のタイムフレームの移動平均を使用する. 1時間の移動平均は価格変化をより敏感に反映し,高速移動平均として機能することができる. 1日移動平均は価格変化によりゆっくりと反応し,スロームービング平均として機能することができる. 急速移動平均がスロームービング平均を超えると,現在の市場は上昇傾向にあり,ショート信号が生成されると考えられる. 急速移動平均がスロームービング平均を下回ると,現在の市場は下落傾向にあり,長い信号が生成されると考えられる.

逆転指数と逆転指数の間の交差は,逆転指数と逆転指数の間の交差である.逆転指数と逆転指数の交差は,逆転指数の発生のタイミングである.逆転指数理論によると,価格は通常,1方向に上昇または低下しない.重要なサポートおよびレジスタンスレベルが突破するときに価格逆転の時期である可能性が高い.したがって,この戦略は逆転機会を捕捉するために二重移動平均逆転信号を使用する.

この戦略は,取引時間と日付のスクリーニング条件も設定します.不適切な期間中に取引を避けるために,設定された日付範囲と取引時間内でのみ取引します.

利点分析

二重移動平均対トレンド戦略には以下の利点があります.

  1. リバース・トレードには大きな利益空間が備わっている.リバース・トレードでは,重要なポイントでカウンター・オペレーションを行うことで,不安定な市場条件でより高い利益を得ることができます.

  2. ダブル・ムービング・平均の組み合わせを使用すると,シグナルをフィルタリングし,偽信号を避ける.単一の指標は偽信号に易くなりますが,ダブル・インディケーターの組み合わせは,いくつかの偽信号をフィルタリングすることで,シグナルの信頼性を向上させ,取引機会をより信頼性のあるものにします.

  3. 取引時間と日付条件を設定することで,不活発な市場期間を避け,罠にはまりないようにします.設定された取引時間と日付範囲内でのみ取引することで,劇的な価格変動の期間を避け,停止した取引を避けることができます.

  4. 逆転戦略は中期取引に適しています.高周波取引と比較して,中期取引戦略はより安定しており,過剰な頻繁な売買を避けます.

  5. 最大引き上げ管理は資本管理に有益である.最大引き上げ比率を設定することで,一夜間のリスクを効果的に制御し,莫大な資金損失を回避することができる.

リスク分析

双向移動平均対トレンド戦略には,次のリスクもあります.

  1. 逆転シグナルが失敗して損失につながる可能性があります. 価格逆転シグナルは常に信頼性がない. 価格が逆転せずにトレンドを継続すると損失のリスクがあります. ストップロスを設定することで損失を制御することができます.

  2. トレンドの偏差は損失につながる. 2つの移動平均が逆転する前に大幅に分離した場合,損失のリスクがある可能性があります.逆転のタイミングは,移動平均間の距離を観察することによって決定することができます.

  3. 不適切な取引時間設定は機会を逃す可能性があります. 取引時間があまりにも厳格に設定されている場合,いくつかの取引機会が逃れることがあります. 取引時間は適切に拡張することができます.

  4. 逆転後すぐに損失を止めない場合,損失が拡大する.逆転後,価格が損失を制御するために元の傾向を継続するときに損失を直ちに止めなければならない.

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

二重移動平均対トレンド戦略は,次の側面でも最適化できます.

  1. より良い取引信号を見つけるためにより多くの指標の組み合わせをテストする.MACD,KDJのような指標は,信号の精度を向上させるためにダブル移動平均値と組み合わせてテストすることができます.

  2. 最適なパラメータを見つけるために移動平均サイクルパラメータを最適化する.最良のサイクル数は,異なる長さの移動平均値をバックテストすることによって決定することができる.

  3. 最適な取引時間を見つけるために取引時間を拡大または狭める.異なる製品特性に応じて取引時間を調整する効果をテストする.

  4. トレンドフィルタリング条件を追加して偏差を回避する. ADX などの指標は,トレンドの強さを判断し,明らかなトレンドがないときに逆転を避けるために追加することができます.

  5. 信号検証のための機械学習モデルを追加します. モデルを訓練して逆信号の信頼性を判断し,低品質の信号をフィルタリングすることができます.

概要

ダブル・ムービング・平均対トレンド戦略は,外為市場で中期取引に適しています. 逆転信号を生成するために,高速および遅い移動平均間の黄金十字と死十字を使用し,主要市場ポイントで対抗操作を行うことで,大きな利益空間の利点があります. 同時に,リスクを管理するために取引時間や最大引き下げなどの設定も使用します. これはリスクを制御しながら高いリターンを生み出すことができる比較的安定した逆転システムです. 将来,この戦略は指標とパラメータ最適化,機械学習モデルの適用などの方法によって改善および最適化することができます.


/*backtest
start: 2023-12-08 00:00:00
end: 2024-01-07 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © SoftKill21

//@version=4
strategy("gbpnzd 1h", overlay=true)

src = close
useCurrentRes = input(true, title="Use Current Chart Resolution?")
resCustom = input(title="Use Different Timeframe? Uncheck Box Above", type=input.resolution, defval="60")
len = input(28, title="Moving Average Length - LookBack Period")
//periodT3 = input(defval=7, title="Tilson T3 Period", minval=1) 
factorT3 = input(defval=7, title="Tilson T3 Factor - *.10 - so 7 = .7 etc.", minval=0) 
atype = input(2,minval=1,maxval=8,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA, 8=Tilson T3")

fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true

res = useCurrentRes ? timeframe.period : resCustom
resCustom2 = input(title="plm", type=input.resolution, defval="D")
res2 = resCustom2
//hull ma definition
hullma = wma(2*wma(src, len/2)-wma(src, len), round(sqrt(len)))
//TEMA definition
ema1 = ema(src, len)
ema2 = ema(ema1, len)
ema3 = ema(ema2, len)
tema = 3 * (ema1 - ema2) + ema3

//Tilson T3
factor = factorT3 *.10
gd(src, len, factor) => ema(src, len) * (1 + factor) - ema(ema(src, len), len) * factor 
t3(src, len, factor) => gd(gd(gd(src, len, factor), len, factor), len, factor) 
tilT3 = t3(src, len, factor) 
 

avg = atype == 1 ? sma(src,len) : atype == 2 ? ema(src,len) : atype == 3 ? wma(src,len) : atype == 4 ? hullma : atype == 5 ? vwma(src, len) : atype == 6 ? rma(src,len) : atype == 7 ? 3 * (ema1 - ema2) + ema3 : tilT3

out = avg 

ema20 = security(syminfo.tickerid, res, out)



plot3 = security(syminfo.tickerid, res2, ema20)

plot33 = security(syminfo.tickerid, res, ema20)

plot(plot3,linewidth=2,color=color.red) 
plot(plot33,linewidth=2,color=color.white) 

// longC = crossover(close[2], plot3) and close[1] > close[2] and close > close[1]
// shortc = crossunder(close[2],plot3)  and close[1] < close[2] and close < close[1]

volumeMA=input(24)
ema_1 = ema(volume, volumeMA)

timeinrange(res, sess) => time(res, sess) != 0
//entrytime = timeinrange(timeframe.period, "0900-0915")

myspecifictradingtimes = input('0900-2300', type=input.session, title="My Defined Hours")


entrytime = time(timeframe.period, myspecifictradingtimes) != 0

longC = crossover(plot33,plot3)  and time_cond and entrytime
shortc = crossunder(plot33,plot3) and time_cond and entrytime

// exitlong = crossunder(plot33,plot3)
// exitshort = crossover(plot33,plot3)

distanta=input(1.0025)
exitshort = plot33/plot3 > distanta
exitlong  = plot3/plot33 > distanta

inverse = input(true)
exit = input(false)
if(inverse==false)

    strategy.entry("long",1,when=longC)
    strategy.entry("short",0,when=shortc)
if(inverse)
    strategy.entry("long",1,when=shortc)
    strategy.entry("short",0,when=longC)

if(exit)
    strategy.close("long",when=exitlong)
    strategy.close("short",when=exitshort)

// if(dayofweek==dayofweek.friday)
//     strategy.close_all()

// risk = input(25)
// strategy.risk.max_intraday_loss(risk, strategy.percent_of_equity)

もっと