資源の読み込みに... 荷物...

PSAR と EMA ベースの定量取引戦略

作者: リン・ハーンチャオチャン開催日:2024年5月28日11時40分
タグ:PSARエイマ総会IRC

img

概要

この定量的な取引戦略は,主にパラボリックSAR (PSAR) と指数移動平均 (EMA) 指標のクロスオーバー信号を使用し,複数のカスタム条件と組み合わせて購入・販売信号を生成する.戦略の背後にある主なアイデアは,PSARが下からEMAを超えて特定の条件を満たしたとき,購入信号が生成され,PSARが上からEMAを下回って特定の条件を満たしたとき,販売信号が生成される.さらに,戦略はリスクを管理するために,利益とストップロスのレベルを設定する.

戦略原則

  1. PSAR と 30 期間の EMA 指標を計算する
  2. PSAR と EMA の交差関係を決定し,対応するフラグを設定する.
  3. IGC (理想の緑のキャンドル) とIRC (理想の赤いキャンドル) を PSAR と EMA の相対位置,およびキャンドルの色に基づいて定義する.
  4. IGC と IRC の発生に基づいて,買い・売るシグナルを生成する
  5. 購入価格より8%,16%,32%,ストップ・ロスのレベルは購入価格より16%低;販売価格より8%,16%,32%,ストップ・ロスのレベルは販売価格より16%低
  6. 取引セッションとポジションの状態に基づいて,買い,売り,または閉じるポジションを実行する

戦略 の 利点

  1. 信号の信頼性を向上させるために複数の指標と条件を組み合わせます
  2. 柔軟なリスクとリターン管理のために複数のメリットとストップ・ロスのレベルを設定します
  3. 異なる市場状況に基づいて 購入・販売条件のフィルターを設定し,戦略の適応性を高めます
  4. 高度なモジュール化コードで,理解し,修正しやすい

戦略リスク

  1. 戦略のパラメータ設定は,すべての市場環境に適していない可能性があり,実際の状況に基づいて調整する必要があります.
  2. 不安定な市場では,戦略は頻繁に取引信号を生成し,取引コストの増加につながる可能性があります.
  3. 戦略は市場の動向を判断できず,強い動向市場における機会を逃す可能性があります
  4. ストップ・ロスの設定は,極端な市場状況によるリスクを完全に回避できない可能性があります.

戦略の最適化方向

  1. 信号の正確性と信頼性を向上させるため,より多くの技術指標や市場情勢指標を導入する
  2. ダイナミックな得益/得益/得益/得益/得益/得益/得益/得益/得益/得益/得益/得益/得益を考慮し,得益/得益/得益/得益のレベルを最適化する
  3. 戦略の適応性を高めるために,異なる市場状態のための異なる取引パラメータと規則を設定する.
  4. 資金管理モジュールを導入し,口座の資本比率や残高などの要因に基づいて,ポジションとリスク露出を動的に調整する.

概要

この定量的な取引戦略は,PSARとEMA指標に基づいており,複数のカスタム条件とルールを通じて購入・売却信号を生成する.この戦略は,リスクを管理するために利益とストップロスのレベルを設定する一方で,一定の適応性と柔軟性を持っています.しかし,パラメータ設定とリスク管理の観点から最適化するにはまだ余地があります.全体として,この戦略は基本的なテンプレートとして機能し,さらなる最適化と改善により,堅牢な取引戦略になる可能性があります.


/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © SwapnilRaykar

//@version=5
strategy("aj sir second project", overlay=true, margin_long=100, margin_short=100)

start=input("0915-1515","session time")
st11=time(timeframe.period,start)
st=st11>0
et= not st 

psar=ta.sar(0.02,0.02,0.2)
emared=ta.ema(close,30)
//plot(psar,"psar",color.yellow,style = plot.style_cross)
//plot(emared,"emared",color.red)
var crodownflag=0
var croupflag=0

var igcflag=0

var ircflag=0

cdown1=ta.crossunder(psar,emared)  and not (psar<close and psar[1]>close[1])
cup1=ta.crossover(psar,emared) and not (psar>close and psar[1]<close[1])

cdown=ta.crossunder(psar,emared) 
cup=ta.crossover(psar,emared)


green_candle=close>open
red_candle=close<open

if ta.crossunder(psar,emared) and crodownflag==0  and not (psar<close and psar[1]>close[1])
    crodownflag:=1
else if cdown and crodownflag==1
    crodownflag:=0



if crodownflag==1 and green_candle and igcflag==0
    igcflag:=1
else if cdown and igcflag==1
    igcflag:=0

//plot(igcflag,"igcflag",color.lime)

if ta.crossover(psar,emared) and croupflag==0 and not (psar>close and psar[1]<close[1])
    croupflag:=1
else if cdown and croupflag==1
    croupflag:=0

//plot(crodownflag,"crodownflag",color.white)
irc_cond=croupflag==1 or cup

if (croupflag==1 and red_candle and ircflag==0)
    ircflag:=1
else if cup and croupflag==1
    ircflag:=0

igc_candle1=(igcflag==1 and igcflag[1]==0) or (cdown1 and green_candle)
irc_candle1=(ircflag==1 and ircflag[1]==0) or (cup1 and red_candle)
///////////////////////////
dm=dayofmonth(time)
newday=dm!=dm[1]
dmc=dm==ta.valuewhen(bar_index==last_bar_index,dm,0)

///////////////////////////////////////////
var irc_there=0

if irc_candle1[1] and irc_there==0
    irc_there:=1
else if cdown and irc_there==1
    irc_there:=0

irc_candle=irc_candle1 and irc_there==0// and dmc

var igc_there=0

if igc_candle1[1] and igc_there==0
    igc_there:=1
else if cup and igc_there ==1
    igc_there:=0

igc_candle=igc_candle1 and igc_there==0// and dmc
/////////// to get rid of irc being valid even after crossdown
var valid_igc_low=0
var valid_irc_high=0

if irc_candle[1] and valid_irc_high==0
    valid_irc_high:=1
else if igc_candle and valid_irc_high==1
    valid_irc_high:=0

if igc_candle and valid_igc_low==0
    valid_igc_low:=1
else if irc_candle and valid_igc_low==1
    valid_igc_low:=0


igc_low=ta.valuewhen(igc_candle,low,0)
irc_high=ta.valuewhen(irc_candle,high,0)
//////////////////////////////
//plot(irc_high,"irc_high",color.red)

//plot(valid_irc_high,"valid_irc_high",color.purple)

buy12=ta.crossunder(close,igc_low) and valid_igc_low==1
buy1=buy12[1]

short12=ta.crossover(close,irc_high) and valid_irc_high==1
short1=short12[1]
//plotshape(short12,"short12",shape.arrowdown,color=color.purple)

// plotshape(igc_candle,"igc_candle",shape.arrowdown,color=color.green)
// plotshape(irc_candle,"irc_candle",shape.arrowdown,color=color.red)
//plotshape((psar<close and psar[1]>close[1]) ,"croup",shape.arrowdown,color=color.red)
//plotshape(cup ,"croup",shape.arrowdown,color=color.orange)

buyprice=ta.valuewhen(buy1 and strategy.position_size[1]==0,open,0)
shortprice=ta.valuewhen(short1 and strategy.position_size[1]==0,open,0)

btarget1=buyprice+(buyprice*0.08)
btarget2=buyprice+(buyprice*0.16)
btarget3=buyprice+(buyprice*0.32)
bstoploss=buyprice-(buyprice*0.16)

starget1=shortprice-(shortprice*0.08)
starget2=shortprice-(shortprice*0.16)
starget3=shortprice-(shortprice*0.32)
sstoploss=shortprice+(shortprice*0.16)

if buy12 and strategy.position_size==0 and st11
    strategy.entry("buy",strategy.long)

if strategy.position_size >0
    strategy.exit("sell",from_entry = "buy",stop=bstoploss,limit=btarget3)

if short12 and strategy.position_size==0 and st11
    strategy.entry("short",strategy.short)

if strategy.position_size<0
    strategy.exit("cover",from_entry = "short",stop = sstoploss,limit = starget3)

if et
    strategy.close_all(comment = "timeover")

plot(strategy.position_size>0?buyprice:na,"buyprice",color.white, style=plot.style_circles )
plot(strategy.position_size>0?bstoploss:na,"bstoploss",color.red, style=plot.style_circles )
plot(strategy.position_size>0?btarget1:na,"btarget1",color.green, style=plot.style_circles )
plot(strategy.position_size>0?btarget2:na,"btarget2",color.green, style=plot.style_circles )
plot(strategy.position_size>0?btarget3:na,"btarget3",color.green, style=plot.style_circles )

plot(strategy.position_size<0?shortprice:na,"shortprice",color.white, style=plot.style_circles )
plot(strategy.position_size<0?sstoploss:na,"sstoploss",color.red, style=plot.style_circles )
plot(strategy.position_size<0?starget1:na,"starget1",color.green, style=plot.style_circles )
plot(strategy.position_size<0?starget2:na,"starget2",color.green, style=plot.style_circles )
plot(strategy.position_size<0?starget3:na,"starget3",color.green, style=plot.style_circles )


関連性

もっと