マルチタイムフレームトレンドフォローデイスキャルピング戦略


作成日: 2023-11-16 17:47:06 最終変更日: 2023-11-16 17:47:06
コピー: 1 クリック数: 768
1
フォロー
1617
フォロワー

マルチタイムフレームトレンドフォローデイスキャルピング戦略

概要

この戦略は,複数のタイムフレームを組み合わせた移動平均指標によって,複数のタイムフレーム間のトレンド一致性を判断し,日中にスカルピング操作戦略をとり,トレンドを追求して利益を得る.

戦略原則

この戦略は,5分,15分,30分および60分の4つの時間フレームの8期および20期移動平均を使用して取引シグナルを構築する.より短い8日移動平均の上に20日移動平均を横断すると買取シグナルが生じ,8日移動平均の下の20日移動平均を横断すると売りシグナルが生じる.

戦略は,5分,15分,30分および60分の時間枠の取引信号が一致しなければならない場合にのみ取引指示を発行することを要求する.つまり,この4時間枠の移動平均が購入信号または販売信号に一致する場合にのみ,購入または販売操作が行われます.

ポジションに入ると,戦略は固定優位位でストップオーダーを設定し,日中のスカルピング操作を実現する.

具体的には,戦略は, security 関数を呼び出すことで,異なる時間枠における移動平均データを取得します. 5分,15分,30分および60分間の8日と20日の平均差値を計算し,差値曲線を描きます.

差値曲線がゼロ軸に突破するかどうかに基づいて,買入と出入を判断する.そして,各時間枠の下での取引シグナルを記録するために,複数の標識位islongとisshortを設定する.最終的に,islongとisshortの状態が要求を満たしたときに,入場と出出入りを指示する.

入場後,戦略は,strategy.exit関数を使用して固定点数ストップを設定し,scalping操作を実行する.

優位分析

この戦略は以下の利点があります.

  1. 複数の時間枠の設計により,異なる周期指標の総合判断により,偽断を効果的にフィルターし,取引頻度を減らすことができます.

  2. 長期にわたって,小規模な利益の蓄積を可能にします.

  3. コード構造が明確で,各部分の機能が明確で,理解し,最適化することが容易である.

  4. 条件を合理的に設定し,取引リスクを効果的に制御する.

リスク分析

この戦略にはいくつかのリスクがあります.

  1. 多時間枠デザインは,部分的なノイズをフィルターできますが,部分的な細部を逃すこともあり,そのため,不明瞭なトレンドの変化が記録されます.

  2. 日中のスカルピングは頻繁に取引され,取引コストの管理を考慮する必要があります.

  3. 固定ストップポイントの設定は柔軟性がないため,市場の変化に合わせて調整できない.

  4. 取引の信号は指数によって作られるので 騙される可能性もあります.

最適化の方向

この戦略は以下の点で最適化できます.

  1. 異なる周期時間枠の指標判断を追加し,信号をより安定して信頼できるようにする.

  2. ATRの動向に応じて停止点位置を設定する.

  3. 追加条件のフィルターで,取引量や過去最高値を突破するなど,入場時期をフィルターします.

  4. 移動平均の周期パラメータを最適化し,最適なパラメータの組み合わせを探します.

  5. マシン・ラーニング・モデルの追加により,指数信号の信頼性を判断し,利回りを回避する.

要約する

この戦略は,全体として,典型的な多時間枠トレンド追跡戦略であり,日中のスカルピングで利益を得る.戦略のアイデアは明確で,コードの構造は合理的で,さらなるテストと最適化の価値があります.ある程度の最適化調整によって,この戦略は,非常に実用的な日中のスカルピング戦略のテンプレートになることができます.

ストラテジーソースコード
/*backtest
start: 2022-11-09 00:00:00
end: 2023-11-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title="PeBAS $JPY Scalper 15m ",overlay=true) 
zeigeallebars= input(false, title="Zeige alle (Show all) Candles/Bars?")
profitwert=input(52, title="Profit")
myatr=  input(title="ATR", type=float, defval=0.00002, minval=0.00001,step=0.00001)


//Plot  EMA-Differenz Aktueller Timeframe

dif=(ema(close,8)+ema(close,20))/2
mcolor=ema(close,8) > ema(close,20) ? green : red
bs = ema(close,8) > ema(close,20) ? true : false
ThisATR=atr(16)

//trans = zeigeallebars == true ? 00 : 100
//plot(dif,"dif",color=mcolor,linewidth=6,transp=trans)


//1M EMA
htf_ma1Mema8 = ema(close, 5)
htf_ma1Mema20 = ema(close, 20)
ema81m=request.security(syminfo.tickerid, "1", htf_ma1Mema8)
ema201m=request.security(syminfo.tickerid, "1", htf_ma1Mema20)
dif1M = (ema81m + ema201m) / 2
Close1M = request.security(syminfo.tickerid, "1", close)
color1=ema81m > ema201m ? green : red
//plot(dif1M,"dif",color1,linewidth=6)
//plotshape(1, style=shape.cross, color=color1,location=location.top)
ls1 = ema81m > ema201m ? 1 : 0



//5M EMA

htf_ma5Mema8 = ema(close, 8)
htf_ma5Mema20 = ema(close, 20)
ema85m=request.security(syminfo.tickerid, "5", htf_ma5Mema8)
ema205m=request.security(syminfo.tickerid, "5", htf_ma5Mema20)
dif5M = (ema85m + ema205m) / 2
 
color5=ema85m > ema205m ? green : red
plot(dif5M,"dif",color5,linewidth=5)
ls5 = ema85m > ema205m ? 1 : 0
alert1= ema85m > ema205m and ema85m[1] < ema205m[1] ? 1 : 0
islong5 = ema85m > ema205m ? 1 : 0
isshort5 = ema85m < ema205m ? 1 : 0

//15M EMA

htf_ma15Mema8 = ema(close, 8)
htf_ma15Mema20 = ema(close, 20)
ema815m=request.security(syminfo.tickerid, "15", htf_ma15Mema8)
ema2015m=request.security(syminfo.tickerid, "15", htf_ma15Mema20)
dif15M = (ema815m + ema2015m) / 2
 
color15=ema815m > ema2015m ? green : red
plot(dif15M,"dif",color15,linewidth=3)
ls15= ema815m > ema2015m ? 1 : 0
alert2= ema815m > ema2015m and ema815m[1] < ema2015m[1] ? 1 : 0
islong15 = ema815m > ema2015m ? 1 : 0
isshort15 = ema815m < ema2015m ? 1 : 0





//30M EMA
htf_ma30Mema8 = ema(close, 8)
htf_ma30Mema20 = ema(close, 20)
ema830m=request.security(syminfo.tickerid, "30", htf_ma30Mema8)
ema2030m=request.security(syminfo.tickerid, "30", htf_ma30Mema20)
dif30M = (ema830m + ema2030m) / 2
 
color30=ema830m > ema2030m ? green : red
ls30= ema830m > ema2030m ?1 : 0
islong30 = ema830m > ema2030m ? 1 : 0
isshort30 = ema830m < ema2030m ? 1 : 0



//60M EMA

htf_ma60Mema8 = ema(close, 8)
htf_ma60Mema20 = ema(close, 20)
ema860m=request.security(syminfo.tickerid, "60", htf_ma60Mema8)
ema2060m=request.security(syminfo.tickerid, "60", htf_ma60Mema20)
dif60M = (ema860m + ema2060m) / 2
 
color60=ema860m > ema2060m ? green : red
ls60= ema860m > ema2060m ?1 : 0

islong60 = ema860m > ema2060m ? 1 : 0
isshort60 = ema860m < ema2060m ? 1 : 0

plot(dif60M,"dif",color60,linewidth=3,transp=70)

islong = islong5 ==1 and islong15 ==1 and islong60 ==1 and year > 2017 ? 1 : 0
isshort = isshort5 ==1 and isshort15 ==1 and  isshort60 ==1 and year > 2017 ? 1 : 0


condition2l= 0 
condition2s = 0

c= alert1 == alert2  and alert1[1] != alert2[1] ? 1 : 0
alertcondition(c, title='Da tat sich was ', message='Da tat sich was!')

strategy.entry("enter long", strategy.long,1,when = islong ==1 and islong[1] == 0  ) 
strategy.entry("enter short", strategy.short,1,when = isshort == 1  and isshort [1] == 0) 
strategy.exit("close",profit=profitwert)
strategy.exit("close",profit=profitwert)