ハイケン・アシに基づく戦略をフォローする暗号通貨のトレンド

作者: リン・ハーンチャオチャン,日付: 2024-01-19 17:40:52
タグ:

img

概要

この戦略は,ハイケン・アシ指標に基づいた仮想通貨のトレンドフォロー戦略である.これは,ハイケン・アシと異なる期間と様々な条件を組み合わせた2つの指数的な移動平均値 (EMA) を使用して取引信号を生成する.この戦略の目標は,中期から長期間の価格トレンドを特定し,トレンド逆転が起きたときにタイミングで入る.

戦略の論理

この戦略は50期と100期EMAを使用している.一方,市場騒音をフィルタリングできる特別なキャンドルスタイクであるハイケン・アシのキャンドルを計算する.この戦略は,ハイケン・アシのキャンドルのオープン,閉鎖,高値,低値を使用して,より正確な取引信号を生成するために100期EMAに適用する.

具体的には,100期ヘイケンアシのオープン価格が終了価格より高く,前のキャンドルのオープン価格が終了価格より低くなった場合,それはロング信号である.逆に,100期ヘイケンアシのオープン価格が終了価格より低く,前のキャンドルのオープン価格が終了価格より高くなった場合,それはショート信号である.

この戦略は,二重EMAシステムとハイケン・アシ指標を組み合わせ,中期から長期間のトレンドが形成されたときにタイミングで機会を把握することを目的としています.これは,ハイケン・アシを使用して,短期市場のノイズをフィルタリングし,取引信号がより信頼性を持つことができます.

利点

  • ハイケン・アシを使用することで,ノイズを効果的にフィルタリングし,取引信号をより明確にすることができます.
  • ハイケン・アシと組み合わせた二重EMAは,中期から長期間の比較的強い傾向を特定することができます.
  • 多重条件判断は 良い機会を逃さないようにします
  • この戦略は特に不安定な仮想通貨市場に適しています
  • 取引リスクを減らすための長期戦略として設定できます

リスク

  • ストップ・ロスは緩すぎると大きな損失が発生する可能性があります.
  • この戦略は,範囲限定市場での取引をより非効率化させる可能性があります.
  • ハイケン・アシは まだ少し遅れている リスクは完全に回避できない
  • 傾向の逆転点を特定できず,損失拡大のリスクに直面している

リスクを軽減するために,ストップ・ロスの範囲を適切に削減したり,トレンド逆転を決定するために他の指標を組み合わせることを検討したりできます. 市場はレンジ期間に入ると,戦略を一時停止し,新しいトレンドが現れるのを待つこともできます.

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

戦略は,次の側面でも最適化できます.

  • EMA パラメータを最適化して最適なパラメータ組み合わせを見つけます
  • KDJ,MACDなど,他の指標でHeiken Ashiを入れ替えるようにしましょう.
  • 入場確認として価格ブレイクを追加する
  • 傾向の逆転を決定するための変動指標を組み込む
  • パラメータをダイナミックに最適化するために機械学習方法を使用する

結論

ハイケン・アシに基づいた仮想通貨トレンドフォロー戦略は,トレンド判断,エントリータイミング,ストップ損失制御などの側面を包括的に考慮し,暗号通貨のような非常に不安定な資産に非常に適応できるようにしています. ハイケン・アシを使用してノイズをフィルタリングし,強力なリスク制御方法を採用することで,戦略は中期から長期間の価格トレンドによってもたらされる取引機会を効果的に把握することができます.パラメータ,指標選択,リスク制御方法をさらに最適化できれば,戦略のパフォーマンスの改善にはまだ多くの余地があります.


/*backtest
start: 2023-01-12 00:00:00
end: 2024-01-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//@SoftKill21
strategy(title="CRYPTO HA Strategy", shorttitle="CRYPTO HA Strategy", overlay=true , default_qty_type =strategy.percent_of_equity, default_qty_value =100, commission_type= strategy.commission.percent,commission_value =0.1 )


ma1_len = input(50)
ma2_len = input(100)

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 = 2020, 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


//First Moving Average data
o = ema(open, ma1_len)
c = ema(close, ma1_len)
h = ema(high, ma1_len)
l = ema(low, ma1_len)

// === HA calculator ===
ha_t = heikinashi(syminfo.tickerid)
ha_o = security(ha_t, timeframe.period, o)
ha_c = security(ha_t, timeframe.period, c)
ha_h = security(ha_t, timeframe.period, h)
ha_l = security(ha_t, timeframe.period, l)

//Second Moving Average data

o2 = ema(ha_o, ma2_len)
c2 = ema(ha_c, ma2_len)
h2 = ema(ha_h, ma2_len)
l2 = ema(ha_l, ma2_len)

// === Color def ===
ha_col = o2 > c2 ? color.white : color.lime

sell = o2 > c2 and o2[1] < c2[1] and time_cond
buy = o2 < c2 and o2[1] > c2[1] and time_cond
plotshape(buy, color=color.green, text= "Buy", location= location.belowbar,style= shape.labelup, textcolor=color.white, size = size.tiny, title="Buy Alert",editable=false, transp=60)
plotshape(sell, color=color.red, text= "Sell", location= location.abovebar,style= shape.labeldown, textcolor=color.white, size = size.tiny, title="Sell Alert", editable=false, transp=60)

trendColor = buy ? color.red : sell ? color.green : na
plot( buy ? close: sell  ? close : na , color=trendColor, style=plot.style_line, linewidth=4, editable=false)



onlylong=input(true)
original=input(false)

if(onlylong)
    strategy.entry("long",1,when=buy)
    strategy.close("long",when=sell)
if(original)
    strategy.entry("long",1,when=buy)
    strategy.entry("short",0,when=sell)

sl = input(0.075)
strategy.exit("closelong", "long" , loss = close * sl / syminfo.mintick, alert_message = "sl point")
strategy.exit("closeshort", "short" , loss = close * sl / syminfo.mintick, alert_message = "sl point")




もっと