Chiến lược đường cân bằng Ichimoku

Tác giả:ChaoZhang, Ngày: 2023-12-26 16:13:42
Tags:

img

Tổng quan

Chiến lược Ichimoku Balance Line là một chiến lược theo xu hướng xác định hướng xu hướng bằng cách tính trung bình động kết hợp với chỉ số Ichimoku Kinko Hyo cho giao dịch xu hướng rủi ro thấp.

Nguyên tắc chiến lược

Chiến lược này chủ yếu sử dụng chỉ số Ichimoku Kinko Hyo để xác định hướng xu hướng. Ichimoku Kinko Hyo, còn được gọi là Ichimoku Cloud, bao gồm Tenkan-sen (Đường chuyển đổi), Kijun-sen (Đường cơ sở), Senkou Span A (Đường dẫn A) và Senkou Span B (Đường dẫn B). Nó tạo thành một vùng cân bằng giữa phía trước và phía sau được gọi là Kumo Cloud. Khi giá ở trên đám mây, nó báo hiệu xu hướng tăng. Một sự vi phạm bên dưới đám mây báo hiệu xu hướng giảm.

Chiến lược này kết hợp mối quan hệ giá với đường trung bình động để xác định hướng xu hướng. Nó tạo ra tín hiệu mua khi giá vượt qua đường cơ sở và đường chuyển đổi. Một tín hiệu bán được tạo ra khi giá phá vỡ dưới đám mây. Sự kết hợp này giúp lọc các đột phá sai và khóa hướng xu hướng.

Phân tích lợi thế

  • Sử dụng Ichimoku Kinko Hyo để xác định xu hướng và tránh phá vỡ sai trong các thị trường khác nhau
  • Các thông số trung bình động có thể tùy chỉnh để tối ưu hóa qua các giai đoạn
  • Kết hợp với các đường trung bình động giúp khóa hiệu quả trong hướng xu hướng
  • Các dải mây cho phép giao dịch xu hướng rủi ro thấp

Phân tích rủi ro

  • Có xu hướng tạo ra tín hiệu sai trong điều kiện thị trường hỗn loạn
  • Cài đặt tham số không chính xác có thể dẫn đến tín hiệu giao dịch quá thường xuyên hoặc chậm trễ
  • Đánh giá thủ công về hướng xu hướng và điều chỉnh tham số cần thiết

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

Chiến lược có thể được tối ưu hóa theo nhiều cách:

  1. Tối ưu hóa các tham số Ichimoku để phù hợp với nhiều khung thời gian hơn
  2. Bao gồm stop loss để giới hạn lỗ cho mỗi giao dịch
  3. Thêm các chỉ số để đánh giá các xu hướng mạnh và yếu để tránh các whipsaws
  4. Thêm thêm các điều kiện nhập cảnh để tránh mở các vị trí trong điều kiện thị trường cực đoan

Kết luận

Tóm lại, Chiến lược đường cân Ichimoku sử dụng đám mây Ichimoku để xác định hướng xu hướng, khóa xu hướng hiệu quả và tạo ra các tín hiệu giao dịch bằng cách kết hợp mối quan hệ giá với đường trung bình động, cho phép giao dịch xu hướng rủi ro thấp. Chiến lược có thể được điều chỉnh cho các môi trường thị trường khác nhau thông qua điều chỉnh và tối ưu hóa các tham số, làm cho nó có giá trị cho các nhà đầu tư nghiên cứu và sử dụng.


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

//@version=3
// Credit for the initial code to nathanhoffer - I simply added the ability to select a time period
//
strategy("Cloud Breakout", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Component Code Start ///////////////
testStartYear = input(2016, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

Ten = input(18, minval=1, title="Tenkan")
Kij = input(60, minval=1, title="Kijun")
LeadSpan = input(30, minval=1, title="Senkou B")
Displace = input(52, minval=1, title="Senkou A")
SpanOffset = input(52, minval=1, title="Span Offset")

sts = input(true, title="Show Tenkan")
sks = input(true, title="Show Kijun")
ssa = input(true, title="Show Span A")
ssb = input(true, title="Show Span B")
sc = input(true, title="Show Chikou")

source = close

//Script for Ichimoku Indicator
donchian(len) => avg(lowest(len), highest(len))
TS = donchian(Ten)
KS = donchian(Kij)
SpanA = avg(TS, KS)
SpanB = donchian(LeadSpan)

CloudTop = max(TS, KS)

Chikou = source[Displace]
SpanAA = avg(TS, KS)[SpanOffset]
SpanBB = donchian(LeadSpan)[SpanOffset]

//Kumo Breakout (Long)
SpanA_Top = SpanAA >= SpanBB ? 1 : 0
SpanB_Top = SpanBB >= SpanAA ? 1 : 0

SpanA_Top2 = SpanA >= SpanB ? 1 : 0
SpanB_Top2 = SpanB >= SpanA ? 1 : 0

SpanA1 = SpanA_Top2 ? SpanA : na
SpanA2 = SpanA_Top2 ? SpanB : na

SpanB1 = SpanB_Top2 ? SpanA : na
SpanB2 = SpanB_Top2 ? SpanB : na

//plot for Tenkan and Kijun (Current Timeframe)
p1= plot(sts and TS ? TS : na, title="Tenkan", linewidth = 2, color = gray)
p2 = plot(sks and KS ? KS : na, title="Kijun", linewidth = 2, color = black)
//p5 = plot(sc and KS ? KS : na, title="Chikou", linewidth = 2, color = orange)
p5 = plot(sc and Displace ? close: na, title="Chikou", linewidth = 2, offset=-Displace, color = orange)

//Plot for Kumo Cloud (Dynamic Color)
p3 = plot(ssa and SpanA ? SpanA : na, title="SpanA", linewidth=2, offset=Displace, color=green)
p4 = plot(ssb and SpanB ? SpanB : na, title="SpanB", linewidth=2, offset=Displace, color=red)

p8 = plot(ssa and SpanA1 ? SpanA1 : na, title="Span A1 above", style=linebr, linewidth=1, offset=Displace, color=green)
p9 = plot(ssa and SpanA2 ? SpanA2 : na, title="Span A2 above", style=linebr, linewidth=1, offset=Displace, color=green)
p10 = plot(ssb and SpanB1 ? SpanB1 : na, title="Span B1 above", style=linebr, linewidth=1, offset=Displace, color=red)
p11 = plot(ssb and SpanB2 ? SpanB2 : na, title="Span B2 above", style=linebr, linewidth=1, offset=Displace, color=red)

fill(p8, p9, color = lime, transp=70, title="Kumo Cloud Up")
fill (p10, p11, color=red, transp=70, title="Kumo Cloud Down")

LongSpan = (SpanA_Top and source[1] < SpanAA[1] and source > SpanAA) or (SpanB_Top and source[1] < SpanBB[1] and source > SpanBB) ? 1 : 0
cupSpan = LongSpan  == 1 ? LongSpan : 0

Long_Breakout = (SpanA_Top ==1 and crossover(source, SpanAA)) or (SpanB_Top ==1 and crossover(source, SpanBB))

ShortSpan = (SpanB_Top and source[1] > SpanAA[1] and source < SpanAA) or (SpanA_Top and source[1] > SpanBB[1] and source < SpanBB) ? 1 : 0
cdnSpan = ShortSpan == 1 ? ShortSpan : 0

Short_Breakout = (SpanA_Top ==1 and crossunder(source, SpanBB)) or (SpanB_Top ==1 and crossunder(source, SpanAA))

//Kumo Twist
Kumo_Twist_Long = SpanA[1] < SpanB[1] and SpanA > SpanB ? 1 : 0
Kumo_Twist_Short = SpanA[1] > SpanB[1] and SpanA < SpanB ? 1 : 0

cupD = Kumo_Twist_Long == 1 ? Kumo_Twist_Long : 0
cdnD = Kumo_Twist_Short == 1 ? Kumo_Twist_Short : 0

Chikou_Above = close > Chikou
Chikou_Below = close < Chikou

long = (cross(TS, SpanA) or cross(TS, SpanB)) and TS>SpanA and TS>SpanB and TS>=KS
short = cross(TS, KS) and KS >= TS

if testPeriod()
    strategy.entry("long", strategy.long, when=Long_Breakout)
    strategy.entry("short", strategy.short, when=Short_Breakout)

Thêm nữa