複数の指標に基づいた高/低仮想通貨戦略

作者: リン・ハーンチャオチャン, 日付: 2023-12-29 14:16:16
タグ:

img

概要

この戦略は仮想通貨市場に適した高/低レベルの戦略である.MACD,PSAR,ATR,エリオット・ウェーブなどの複数の指標を1時間,4時間または1日などのより高い時間枠で取引するために統合している.この戦略の利点は,1.5から2.5の平均利益因子を持つ高いリスク報酬比にあります.

戦略の論理

この戦略の取引シグナルは,価格の高低レベルと複数の指標の複合判断から来ています. 具体的な論理は:

  1. 価格チャート上の連続した高値や低値によって形成された高値/低値の範囲があるかどうかを判断する.

  2. MACDのヒストグラムレベルをチェックします.

  3. PSAR インジケーターで 傾向の方向を確認する

  4. ATRとMAをベースにトレンド方向を確認する.

  5. エリオット波の指示で 傾向の方向を確認します

5つの条件が同じ方向を指している場合,長または短信号が生成されます.

利点

  1. 高リスク報酬比は1:30まで

  2. 平均的な高利益因子 通常は1.5-2.5です

  3. 複数の指標を組み合わせることで 誤ったブレイクを効果的にフィルタリングできます

リスク

  1. 比較的低い勝利率は 10%~20%です

  2. 引き下げや ショットソーリスクはあります

  3. 指標の業績は市場制度の影響を受ける可能性があります

  4. 心理的な耐久性が必要なんだ

対応する措置:

  1. 勝率を平衡するために 資本を増やす

  2. ストップ・ロスを設定します

  3. 異なる市場に基づいてパラメータを調整します

  4. 心理を強化し ポジションのサイズを制御する

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

  1. テストパラメータは 異なる暗号と市場に基づいています

  2. ストップ・ロストと 利益を取って 資金管理を最適化します

  3. 機械学習の方法により 勝利率を上げます

  4. ソーシャル・センチメント・フィルターを追加します

  5. 複数の時間枠で確認を考慮してください

結論

結論として,これは高リスク高リターン暗号通貨取引戦略である.その利点は高いリスク報酬比と利益因子にある.主なリスクは,強い心理学を必要とする比較的低い勝利率から生じる.将来の最適化方向はパラメータチューニング,マネーマネジメント,勝利率の増加などである.全体的にこの戦略は,高い利益を求める暗号通貨トレーダーにとって実用的な価値を持っています.


/*backtest
start: 2023-12-21 00:00:00
end: 2023-12-28 00:00:00
period: 45m
basePeriod: 5m
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("Crypto strategy high/low", overlay=true)
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=true)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)
//sar
start = input(0.02)
increment = input(0.02)
maximum = input(0.2)
var bool uptrend = na
var float EP = na
var float SAR = na
var float AF = start
var float nextBarSAR = na
if bar_index > 0
	firstTrendBar = false
	SAR := nextBarSAR
	if bar_index == 1
		float prevSAR = na
		float prevEP = na
		lowPrev = low[1]
		highPrev = high[1]
		closeCur = close
		closePrev = close[1]
		if closeCur > closePrev
			uptrend := true
			EP := high
			prevSAR := lowPrev
			prevEP := high
		else
			uptrend := false
			EP := low
			prevSAR := highPrev
			prevEP := low
		firstTrendBar := true
		SAR := prevSAR + start * (prevEP - prevSAR)
	if uptrend
		if SAR > low
			firstTrendBar := true
			uptrend := false
			SAR := max(EP, high)
			EP := low
			AF := start
	else
		if SAR < high
			firstTrendBar := true
			uptrend := true
			SAR := min(EP, low)
			EP := high
			AF := start
	if not firstTrendBar
		if uptrend
			if high > EP
				EP := high
				AF := min(AF + increment, maximum)
		else
			if low < EP
				EP := low
				AF := min(AF + increment, maximum)
	if uptrend
		SAR := min(SAR, low[1])
		if bar_index > 1
			SAR := min(SAR, low[2])
	else
		SAR := max(SAR, high[1])
		if bar_index > 1
			SAR := max(SAR, high[2])
	nextBarSAR := SAR + AF * (EP - SAR)


// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

CCI = input(20)
ATR = input(5)
Multiplier=input(1,title='ATR Multiplier')
original=input(true,title='original coloring')
thisCCI = cci(close, CCI)
lastCCI = nz(thisCCI[1])
bufferDn= high + Multiplier * sma(tr,ATR)
bufferUp= low - Multiplier * sma(tr,ATR)
if (thisCCI >= 0 and lastCCI < 0) 
    bufferUp := bufferDn[1]
if (thisCCI <= 0 and lastCCI > 0) 
    bufferDn := bufferUp[1]

if (thisCCI >= 0)
    if (bufferUp < bufferUp[1])
        bufferUp := bufferUp[1]
else
    if (thisCCI <= 0)
        if (bufferDn > bufferDn[1])
            bufferDn := bufferDn[1]
x=0.0
x:=thisCCI >= 0 ?bufferUp:thisCCI <= 0 ?bufferDn:x[1]
swap=0.0

swap:=x>x[1]?1:x<x[1]?-1:swap[1]

swap2=swap==1?color.lime:color.red
swap3=thisCCI >=0 ?color.lime:color.red
swap4=original?swap3:swap2

//elliot wave
srce = input(close, title="source")
sma1length = input(5)
sma2length = input(35)
UsePercent = input(title="Show Dif as percent of current Candle", type=input.bool, defval=true)
smadif=iff(UsePercent,(sma(srce, sma1length) - sma(srce, sma2length)) / srce * 100, sma(srce, sma1length) - sma(srce, sma2length))
col=smadif <= 0 ? color.red : color.green

longC = high > high[1] and high[1] > high[2] and close[2] > high[3] and hist > 0 and uptrend and smadif < 0 and swap4==color.lime 
//longC = high > high[1] and high[1] > high[2] and high[2] > high[3] and high[3] > high[4] and close[4] > high[5]
shortC = low < low[1] and low[1] < low[2] and close[2] < low[3] and hist < 0 and not uptrend and  smadif > 0 and swap4==color.red 
//shortC = low < low[1] and low[1] < low[2] and low[2] < low[3] and low[3] < low[4] and close[4] < low[5]

tp=input(0.15, title="tp")
sl=input(0.005, title="sl")


strategy.entry("long",1,when=longC)
strategy.entry("short",0,when=shortC)

strategy.exit("x_long", "long" ,loss = close * sl / syminfo.mintick, profit = close * tp / syminfo.mintick , alert_message = "closelong")
//strategy.entry("short",0, when= loss = close * sl / syminfo.mintick)

strategy.exit("x_short", "short" , loss = close * sl / syminfo.mintick, profit  = close * tp / syminfo.mintick,alert_message = "closeshort")
//strategy.entry("long",1, when = loss = close * sl / syminfo.mintick)

//strategy.close("long",when= hist < 0)
//strategy.close("short", when= hist > 0)

もっと