
二重移動平均反転トレンド戦略は,主に外為市場の中期取引に使用される戦略である.この戦略は,二つの異なる周期の移動平均を使用して取引信号を生成する.急速移動平均と遅い移動平均が黄金交差したとき,空頭を探して反転する.急速移動平均と遅い移動平均が死交差したとき,多頭を探して反転する.
この戦略は,1時間と1日の2つの時間周期の移動平均を使用する. 1時間周期の移動平均は価格変化に敏感で,快速移動平均として使用できる; 1日周期の移動平均は価格変化に反応するより遅いので,スロー移動平均として使用できる.
逆転を狙う上位または下位への逆転の原則は,急速移動平均と遅い移動平均が黄金交差または死叉を発生したとき,市場が逆転を起こす可能性があることを示すことであり,急速ラインを横切ったり下したりする遅い移動線は逆転の信号を生成する時間である.逆転取引理論によると,価格は通常,単一の上昇または下降をしません.突破または重要なサポートと抵抗の位置が発生したときに,株価が逆転する瞬間になる可能性があります.
この戦略はまた,取引時間および日付のフィルタリング条件を設定し,取引は,適切な日程範囲内および適切な取引時間内にのみ行われ,不適切な時間帯での取引を避ける.
双移動平均逆転策には以下の利点があります.
逆転策には利益の余地がある.逆転取引は,価格変動が大きい状況で,重要なポイントで逆転操作することによって,より高い利益を得ることができます.
双移動平均の組み合わせでフィルター信号を使用し,偽信号を避けます.単一の指標は偽信号を生成しやすいが,双指標の組み合わせは信号の信頼性を高め,偽信号をフィルターして取引機会をより信頼できます.
取引時間と日付の条件を設定し,市場の不活性期を回避し,困窮を回避します. 設定された取引時間と日付の範囲内での取引のみで,価格が激しく変動する期間を回避し,取引を阻害を回避できます.
逆転戦略は中期取引に適している.高頻度取引に比べて,中期取引戦略はより安定しており,あまりにも頻繁に取引を避けている.
最大引き出しコントロールは資金管理に有利である.最大引き出し割合を設定すると,一夜間のリスクをうまく制御し,資金の大幅な損失を防ぐことができる.
移動平均の逆転策には以下のリスクがあります.
逆転シグナルが効かず損失を招く可能性があります. 価格逆転シグナルは必ずしも信頼できないため,価格が逆転せずに動き続けると損失のリスクがあります. 損失を制御するためにストップを設定できます.
トレンド偏差は損失をもたらす. 移動平均が明らかに分離しているときに逆転すると,損失のリスクに直面する可能性があります. 移動平均の間隔を観察することによって逆転のタイミングを判断することができます.
取引時間の設定が不適切であれば,機会が逃れることがあります.取引時間の設定が厳格すぎると,いくつかの取引機会が逃れることがあります.取引時間を適切に拡張することができます.
逆転後,時効で止損を拡大することができない.逆転後,価格が元のトレンドを継続すると,時効で止損を制御しなければならない.
双動平均の逆転策は,以下の点で最適化できます.
より多くの指標の組み合わせをテストし,より良い取引信号を探します. MACD,KDJなどの他の指標を二重移動平均と組み合わせてテストして,信号の正確性を向上させることができます.
移動平均の周期パラメータを最適化し,最適なパラメータを見つける.移動平均の異なる長さのパラメータを反測することによって最適な周期数を決定することができる.
取引時間を拡大または縮小し,最適な取引時間を発見する.異なる品種の特徴に応じて取引時間の調整の効果をテストする.
トレンドフィルター条件を追加し,偏差を避ける. 傾向の強さや弱さを見極めるためにADXのような指標を追加し,明らかな傾向がないときに逆転を避ける.
信号検査のための機械学習モデルを追加する.反転信号の信頼性を判断し,低品質の信号をフィルターするモデルを訓練する.
双移動平均反転トレンド戦略は,外為中期取引に適した戦略である.それは,急速な移動平均と遅い移動平均の黄金のクロスと死叉を生成する反転信号を使用して,市場の重要なポイントで反転操作を行うことで,利益を得る大きな利点がある.同時に,それは,取引時間と最大撤退の設定を使用してリスクを制御する.これは,より安定した反転システムであり,高い利益を生み出し,リスクを制御することができる.将来,この戦略は,指標とパラメータの最適化,および機械学習のモデルを増やすなどによって向上し,最適化することができる.
/*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)