Chiến lược tiền điện tử cao/ thấp dựa trên nhiều chỉ số

Tác giả:ChaoZhang, Ngày: 2023-12-29 14:16:16
Tags:

img

Tổng quan

Chiến lược này là một chiến lược cấp cao / thấp phù hợp với thị trường tiền điện tử. Nó tích hợp MACD, PSAR, ATR, Elliott Wave và nhiều chỉ số khác để giao dịch trong khung thời gian cao hơn như 1 giờ, 4 giờ hoặc 1 ngày.

Chiến lược logic

Các tín hiệu giao dịch của chiến lược này đến từ mức giá cao / thấp và đánh giá tổng hợp của nhiều chỉ số.

  1. Đánh giá liệu có một phạm vi mức cao/dưới được hình thành bởi các mức cao hơn hoặc thấp hơn liên tục trên biểu đồ giá.

  2. Kiểm tra mức histogram của MACD.

  3. Kiểm tra chỉ số PSAR về hướng xu hướng.

  4. Kiểm tra hướng xu hướng dựa trên ATR và MA.

  5. Xác nhận hướng xu hướng với chỉ số sóng Elliott.

Nếu tất cả 5 điều kiện đều hướng về cùng một hướng, các tín hiệu dài hoặc ngắn sẽ được tạo ra.

Ưu điểm

  1. Tỷ lệ phần thưởng rủi ro cao đến 1:30.

  2. Tỷ lệ lợi nhuận trung bình cao, thường nằm trong khoảng 1,5-2,5.

  3. Sự kết hợp của nhiều chỉ số giúp lọc các sự đột phá giả hiệu quả.

Rủi ro

  1. Tỷ lệ thắng tương đối thấp khoảng 10% -20%.

  2. Có khả năng rút tiền và rủi ro đòn chọc.

  3. Hiệu suất chỉ số có thể bị ảnh hưởng bởi các chế độ thị trường.

  4. Cần sức chịu đựng tâm lý tốt.

Các biện pháp tương ứng:

  1. Tăng vốn để cân bằng tỷ lệ thắng.

  2. Thiết lập lệnh dừng lỗ nghiêm ngặt cho mỗi giao dịch.

  3. Điều chỉnh các thông số dựa trên các thị trường khác nhau.

  4. Tăng cường tâm lý và kiểm soát vị trí kích thước.

Hướng dẫn tối ưu hóa

  1. Các thông số thử nghiệm dựa trên các loại tiền điện tử và thị trường khác nhau.

  2. Thêm dừng lỗ và lấy lợi nhuận để tối ưu hóa quản lý tiền.

  3. Tăng tỷ lệ chiến thắng bằng các phương pháp học máy.

  4. Thêm bộ lọc tình cảm xã hội cho tín hiệu giao dịch.

  5. Xem xét xác nhận qua nhiều khung thời gian.

Kết luận

Kết luận, đây là một chiến lược giao dịch tiền điện tử rủi ro cao lợi nhuận cao. Ưu điểm của nó nằm trong tỷ lệ phần thưởng rủi ro cao và yếu tố lợi nhuận. Các rủi ro chính đến từ tỷ lệ thắng tương đối thấp đòi hỏi tâm lý mạnh mẽ.


/*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)

Thêm nữa