Chu kỳ xu hướng Schaff với chiến lược chéo trung bình động đôi

Tác giả:ChaoZhang, Ngày: 2023-12-12 17:43:19
Tags:

img

Tổng quan

Chiến lược này được đặt tên là Chu kỳ xu hướng Schaff với Chiến lược chéo trung bình di chuyển kép. Ý tưởng chính là xác định các vị trí dài và ngắn dựa trên chỉ số Chu kỳ xu hướng Schaff (STC) và chéo trung bình di chuyển kép. Cụ thể, khi STC vượt ra khỏi các khu vực mua quá mức hoặc bán quá mức, giá vượt quá mức trung bình di chuyển theo cấp số nhân nhanh, và EMA nhanh vượt quá EMA chậm, một vị trí dài được mở. Ngược lại, một vị trí ngắn được mở.

Chiến lược logic

Chiến lược dựa chủ yếu trên hai chỉ số kỹ thuật:

  1. Chỉ số xu hướng: Chỉ số STC để xác định hướng xu hướng. STC bao gồm đường chỉ số MACD, Stochastic và STC. Một sự đột phá tăng từ vùng 0-25 báo hiệu xu hướng tăng, trong khi một sự đột phá giảm từ vùng 75-100 báo hiệu xu hướng giảm.

  2. Moving average crossover: Đường trung bình di chuyển đơn giản nhanh (thời gian mặc định 35) vượt trên/dưới SMA chậm (thời gian mặc định 200). Một tín hiệu tăng được kích hoạt khi SMA nhanh vượt trên SMA chậm. Một tín hiệu giảm được kích hoạt trên giao diện đối diện.

Logic tín hiệu giao dịch được định nghĩa như sau:

  1. Tín hiệu dài: STC phá vỡ trên đường 25, SMA nhanh nằm trên SMA chậm và giá đóng ở trên SMA nhanh.

  2. Tín hiệu ngắn: STC phá vỡ dưới đường 75, SMA nhanh dưới SMA chậm và giá đóng dưới SMA nhanh.

Phân tích lợi thế

Những lợi thế của chiến lược này bao gồm:

  1. Các tín hiệu giao dịch đáng tin cậy từ sự kết hợp các chỉ số xu hướng và trung bình động.

  2. Thời gian trung bình động có thể tùy chỉnh. Thời gian MA có thể được tối ưu hóa cho các điều kiện thị trường khác nhau.

  3. Rủi ro có thể kiểm soát được. STC xác định mức mua quá mức / bán quá mức để tránh mua đỉnh và bán đáy. Các điểm dừng mục tiêu đặt phạm vi lợi nhuận / lỗ 400 điểm.

Phân tích rủi ro

Có một số rủi ro cần xem xét:

  1. Có khả năng STC sẽ phá vỡ, cần phải được xác nhận bằng giá.

  2. Có nhiều tín hiệu sai từ các đường chéo MA, đòi hỏi phải điều chỉnh thời gian MA.

  3. Chỉ giao dịch theo một hướng tại một thời điểm giới hạn không gian cho các vị trí mở xem xét cho phép giao dịch hai hướng

  4. Không xử lý rủi ro chênh lệch trong giao dịch ngoại hối ký quỹ.

Tối ưu hóa

Các con đường tối ưu hóa có thể bao gồm:

  1. Điều chỉnh các thông số STC mua quá mức / bán quá mức.

  2. Tối ưu hóa thời gian MA để cải thiện độ tin cậy tín hiệu chéo.

  3. Thêm các bộ lọc bổ sung như Bollinger Bands để giảm các giao dịch breakout sai.

  4. Thực hiện logic giao dịch hai hướng để tăng năng lực.

  5. Thêm logic dừng lỗ để kiểm soát lỗ cho mỗi giao dịch.

Kết luận

Tóm lại, chiến lược này kết hợp các chỉ số chéo xu hướng và trung bình động để xác định hướng xu hướng và thời gian nhập. Với kiểm soát rủi ro thích hợp, nó có thể đạt được lợi nhuận tốt.


/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// Shaff Trend Cycle coded by Alex Orekhov (everget)
// Strategy and its additional conditions provided by greenmask
// Schaff Trend Cycle script may be freely distributed under the MIT license.
strategy("STC", shorttitle="STC")

fastLength = input(title="MACD Fast Length", type=input.integer, defval=23)
slowLength = input(title="MACD Slow Length", type=input.integer, defval=50)
cycleLength = input(title="Cycle Length", type=input.integer, defval=10)
d1Length = input(title="1st %D Length", type=input.integer, defval=3)
d2Length = input(title="2nd %D Length", type=input.integer, defval=3)
src = close
highlightBreakouts = input(title="Highlight Breakouts ?", type=input.bool, defval=true)

macd = ema(src, fastLength) - ema(src, slowLength)
k = nz(fixnan(stoch(macd, macd, macd, cycleLength)))
d = ema(k, d1Length)
kd = nz(fixnan(stoch(d, d, d, cycleLength)))
stc = ema(kd, d2Length)
stc := 	stc > 100 ? 100 : stc < 0 ? 0 : stc
stcColor = not highlightBreakouts ? (stc > stc[1] ? color.green : color.red) : #ff3013
stcPlot = plot(stc, title="STC", color=stcColor, transp=0)
upper = 75
lower = 25
transparent = color.new(color.white, 100)
upperLevel = plot(upper, title="Upper", color=color.gray)
hline(50, title="Middle", linestyle=hline.style_dotted)
lowerLevel = plot(lower, title="Lower", color=color.gray)

fill(upperLevel, lowerLevel, color=#f9cb9c, transp=90)

upperFillColor = stc > upper and highlightBreakouts ? color.green : transparent
lowerFillColor = stc < lower and highlightBreakouts ? color.red : transparent

fill(upperLevel, stcPlot, color=upperFillColor, transp=80)
fill(lowerLevel, stcPlot, color=lowerFillColor, transp=80)
strategy.initial_capital = 50000
ordersize=floor(strategy.initial_capital/close)
targetvalue = input(title="Target/stop", type=input.integer, defval=400)

ma1length = input(title="SMA1", type=input.integer, defval=35)
ma2length = input(title="SMA2", type=input.integer, defval=200)
ma1 = ema(close,ma1length)
ma2 = ema(close,ma2length)

bullbuy = crossover(stc, lower) and ma1>ma2 and close>ma1
bearsell = crossunder(stc, upper) and ma1<ma2 and close<ma1

if (bullbuy)
    strategy.entry("Riposte", strategy.long, ordersize)
    strategy.exit( "Riposte close", from_entry="Riposte", qty_percent=100, profit=targetvalue,loss=targetvalue)

if (bearsell)
    strategy.entry("Riposte", strategy.short, ordersize)
    strategy.exit( "Riposte close", from_entry="Riposte", qty_percent=100, profit=targetvalue,loss=targetvalue)

//plotshape(bullbuy,  title= "Purple", location=location.belowbar, color=#006600, transp=0, style=shape.circle, size=size.tiny, text="Riposte")
//plotshape(bearsell,  title= "Purple", location=location.abovebar, color=#006600, transp=0, style=shape.circle, size=size.tiny, text="Riposte")
















Thêm nữa