Chiến lược chéo trung bình di chuyển kép với các đường trung bình di chuyển đa loại

Tác giả:ChaoZhang, Ngày: 2023-09-19 21:27:31
Tags:

Tổng quan

Chiến lược này tạo ra tín hiệu giao dịch bằng cách tính toán chéo của nhiều loại trung bình động, thực hiện chéo MA hai dài và ngắn.

Chiến lược logic

  1. Tính toán hai MA: MA1 và MA2, có thể chọn từ SMA, EMA, VWMA vv. Chiều dài có thể tùy chỉnh.

  2. Xác định giao thoa MA: đi dài khi MA1 giao thoa với MA2, đóng vị trí khi MA1 giao thoa với MA2.

  3. (Tìm chọn) Tính toán một MA thứ ba - MA3, thường với một khoảng thời gian dài hơn như 50. Trên MA3 là xu hướng tăng, dưới đó là xu hướng giảm. Chỉ giao dịch khi giá phá vỡ MA3.

  4. Kết hợp các quy tắc với khung thời gian backtest để tạo ra tín hiệu giao dịch.

  5. Lấp đầy màu sắc trên các khu vực chéo để hỗ trợ thị giác.

Chiến lược kết hợp xu hướng theo dõi các MA và chéo dài / ngắn, với một MA thứ ba để kiểm soát rủi ro.

Phân tích lợi thế

  1. Sự giao thoa hai MA thực sự theo xu hướng.

  2. Hỗ trợ kết hợp nhiều loại MA, có thể được tối ưu hóa cho các khoảng thời gian khác nhau.

  3. MA thứ ba kiểm soát rủi ro và giảm tổn thất không cần thiết.

  4. Trợ giúp trực quan cải thiện trải nghiệm giao dịch biểu đồ.

  5. Các thông số điều chỉnh có thể được tối ưu hóa cho các chu kỳ khác nhau.

  6. Lý thuyết đơn giản và rõ ràng, dễ hiểu và theo dõi.

Phân tích rủi ro

  1. MA kép đấu tranh với các kịch bản chuyển hướng và biến đổi xu hướng.

  2. MA kép có thể tạo ra tín hiệu sai hoặc phản ứng quá mức đôi khi. Có thể kéo dài thời gian MA hoặc tối ưu hóa các tham số.

  3. MA thứ ba có thể bỏ lỡ các cơ hội xu hướng mạnh mẽ. có thể thử rút ngắn thời gian của nó để nắm bắt nhiều lợi nhuận hơn.

  4. Không thể đảm bảo thắng lợi cho mọi giao dịch, cần quản lý dừng lỗ thích hợp.

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

  1. Kiểm tra các loại và khoảng thời gian MA khác nhau cho cặp tham số tốt nhất.

  2. Tối ưu hóa giai đoạn MA thứ ba để cân bằng kiểm soát rủi ro và thu lợi nhuận.

  3. Thêm chiến lược dừng lỗ để kiểm soát số tiền lỗ giao dịch duy nhất.

  4. Hãy xem xét các thuật toán học máy để tìm các thông số tối ưu dựa trên dữ liệu lớn.

  5. Kết hợp với các chỉ số khác như KD, MACD để lọc tín hiệu và xác nhận.

Tóm lại

Chiến lược chéo trung bình động kép này với nhiều loại MAs kết hợp theo xu hướng, kiểm soát rủi ro, tối ưu hóa tham số, hỗ trợ trực quan và nhiều hơn nữa. Với kiểm tra và tối ưu hóa liên tục, giới thiệu các chỉ số khác hoặc học máy vv, nó có thể thích nghi tốt hơn với thị trường và có giá trị thực tế lớn. Tóm lại, đây là một chiến lược đơn giản, thực tế và dễ tối ưu hóa, làm cho nó trở thành điểm khởi đầu tuyệt vời cho giao dịch thuật toán.


/*backtest
start: 2023-09-11 00:00:00
end: 2023-09-12 22:00:00
period: 1m
basePeriod: 1m
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/
// © HAMIDBOX

//@version=4
strategy("Multi-X by HAMID-BOX", overlay=true)

maType(source , length, type)   =>
    type    == "SMA"            ? sma(source , length)  :
     type   == "EMA"            ? ema(source , length)  :
     type   == "RMA"            ? rma(source, length)   : 
     type   == "WMA"            ? wma(source, length)   :
     type   == "VWMA"           ? vwma(source, length)  :
     na
     
////////////////////////////////////////////////////////////////////////////////
colorup             = #11ff00
colordn             = #e91e63

/////////////////////////// MOVING AVERAGE №1 INPUTS ///////////////////////////
ma1_show            = input(title="MA №1", defval=true, type=input.bool, inline="ma1")
ma1type             = input(title="", defval="EMA", options=["SMA","EMA","RMA","WMA","VWMA"], inline="ma1")
ma1src              = input(title="", defval=close, type=input.source, inline="ma1")
ma1Len              = input(title="", defval=9, type=input.integer, inline="ma1")
ma1col              = input(colorup, "", type=input.color, inline="ma1")

ma1                 = maType(ma1src, ma1Len, ma1type)

ma1p = plot(ma1_show ? ma1 : na, linewidth=1, color=color.new(ma1col , 50))

/////////////////////////// MOVING AVERAGE №2 INPUTS ///////////////////////////
ma2_show            = input(title="MA №2", defval=true, type=input.bool, inline="ma2")
ma2type             = input(title="", defval="SMA", options=["SMA","EMA","RMA","WMA","VWMA"], inline="ma2")
ma2src              = input(title="", defval=close, type=input.source, inline="ma2")
ma2Len              = input(title="", defval=21, type=input.integer, inline="ma2")
ma2col              = input(colordn, "", type=input.color, inline="ma2")

ma2                 = maType(ma2src, ma2Len, ma2type)

ma2p = plot(ma2_show ? ma2 : na, linewidth=1, color=color.new(ma2col , 50))

/////////////////////////// MOVING AVERAGE №3 INPUTS ///////////////////////////

read                = input(title="For Safe Side = Read This >>>", defval=true, tooltip="If you want to play on the safe side, Check ON Moving Average № 3, MA №3 shows the major trend, its work as a Trend-Zone,\nRule: Do not open trades if the market is below MA № 3, WHY? because Trend is Bearish and it will make more Down, NOTE:: It is possible after adding MA № 3, it will give you a small profit. But the great advantage of that, it will reduce your loss and it will also increase your Profit Factor.\nAnd if you not have any issue with Risk then you can Leave Moving Average No 3")
ma3_show            = input(title="MA №3", defval=false, type=input.bool, inline="ma3")
ma3type             = input(title="", defval="SMA", options=["SMA","EMA","RMA","WMA","VWMA"], inline="ma3")
// ma3srcH          = input(title="", defval=high, type=input.source, inline="ma3")
// ma3srcL          = input(title="", defval=low, type=input.source, inline="ma3")
ma3Len              = input(title="", defval=50, type=input.integer, inline="ma3")
ma3col              = input(colordn, "", type=input.color, inline="ma3")

ma3H                = maType(high, ma3Len, ma3type)
ma3L                = maType(low, ma3Len, ma3type)

ma3p                = plot(ma3_show ? ma3H : na, linewidth=1, color=color.new(ma3col , 50))
ma3p2               = plot(ma3_show ? ma3L : na, linewidth=1, color=color.new(ma3col , 50))

Bigcross_zone_color = if ma3_show and close > ma3H
    color.new(colorup , 90)
else
    if ma3_show and close < ma3L
        color.new(colordn , 90)
fill(ma3p , ma3p2, color=Bigcross_zone_color, title="Cross Background Color")

BigCrossSignal      = close > ma3H
ZoneCrossover       = crossover(close , ma3H)
///////////////////////////// BACK TESTING INPUTS //////////////////////////////
startTime           = input(title="Start Time", type=input.time, defval= timestamp("01 Jan 2021"))
endTime             = input(title="End Time", type=input.time, defval= timestamp("01 Jan 2100"))
inDateRange         = true

//////////////////////////// PLOTING AND COOLORING /////////////////////////////
Cross               = input(true, "Cross Sign ON/OFF") 
maCrossOver         = crossover(ma1 , ma2)
maCrossUnder        = crossunder(ma1 , ma2)
cross_zone_color    = ma1 > ma2 ? color.new(colorup , 85) : color.new(colordn , 85)

plotshape(Cross ? maCrossOver : na, title="CrossUP Sign", style=shape.triangleup, location=location.belowbar, color=color.white, size=size.tiny)
plotshape(Cross ? maCrossUnder : na, title="CrossDN Sign", style=shape.xcross, location=location.abovebar, color=#e91e63, size=size.tiny)

fill(ma1p , ma2p, color=cross_zone_color, title="Cross Background Color")

///////////////////////////////// (CONDITIONS) /////////////////////////////////

if maCrossOver and inDateRange
    if ma3_show
        strategy.entry("BUY", strategy.long, when=BigCrossSignal)
    else    
        strategy.entry("BUY", strategy.long)

if  ma3_show
    strategy.entry("BUY", strategy.long, when=ZoneCrossover)

if maCrossUnder and inDateRange
    strategy.close("BUY", comment="Exit")
if (not inDateRange)
    strategy.close_all()





Thêm nữa