複数のタイムフレームのトレンド追跡日中スキルピング戦略

作者: リン・ハーンチャオチャン, 日付: 2023-11-16 17:47:06
タグ:

img

概要

この戦略は,複数のタイムフレームの移動平均指標を組み合わせて,トレンドの一貫性を決定し,トレンドをフォローし利益を得るために日中にスカルピング行動をします.

戦略の論理

この戦略は,取引シグナルを生成するために,5分,15分,30分,60分タイムフレームで8期および20期移動平均を使用する. 8期MAが20期MAを超えると購入シグナルが生成される. 8期MAが20期MAを下回ると販売シグナルが生成される.

この戦略は,取引命令を発行する前に4つのタイムフレームに一貫したシグナルを必要とする. 移動平均が4つのタイムフレームに一致するときにのみ購入または販売オーダーが表示されます.

ポジションに入ると 戦略は定額利益目標を設定し 日中利益を得ます

具体的には,この戦略は,異なるタイムフレームからMA値を取得するために,セキュリティ (Security) 関数を使用します. 5分,15分,30分,60分チャート上の8期と20期MAの違いを計算します.

買い・売るシグナルは,差線がゼロ線以上/下を横切るかによって決定される.各タイムフレームでシグナルを記録するために複数の islongと isshortフラグが使用される. islongと isshort条件が満たされたときに注文が表示されます.

戦略は,取引を完了した後,strategy.exit() スカルピングの固定利益目標を設定する

利点分析

この戦略の利点は以下の通りです.

  1. 複数のタイムフレームの設計は 騒音をフィルターし 取引頻度を減らす

  2. 利益の最適化による 日中のスカルピングは 安定した小利益を蓄積します

  3. 簡単なコード構造で 分かりやすく最適化できます

  4. 合理的な条件はリスクを制御するのに役立ちます

リスク分析

この戦略による潜在的なリスク:

  1. 複数のタイムフレームは微妙なトレンド変化を見逃す可能性があります

  2. スカルピングの頻度はコストを増加させる.

  3. 固定利益目標には柔軟性がない.

  4. 指示値次第で 騙される危険性があります

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

可能な最適化:

  1. より強力な信号のために より多くの時間枠を追加します.

  2. 動的利益目標 ATRをベースに

  3. 音量増加や歴史の極端など

  4. 最適なパラメータのために MA 期間を最適化する.

  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)





もっと