Chiến lược giao dịch trung bình động đa loại


Ngày tạo: 2023-09-19 21:27:31 sửa đổi lần cuối: 2023-09-19 21:27:31
sao chép: 0 Số nhấp chuột: 713
1
tập trung vào
1617
Người theo dõi

Tổng quan

Chiến lược này là một chiến lược theo dõi xu hướng bằng cách tính toán nhiều loại trung bình di chuyển, thực hiện giao kèo chéo và giao kèo chéo của hai đường ngang. Đồng thời, chiến lược cũng giới thiệu một đường trung bình di chuyển thứ ba như một phán đoán xu hướng để kiểm soát rủi ro.

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

  1. Tính toán hai đường trung bình: MA1 và MA2, có thể lựa chọn nhiều loại như SMA, EMA, VWMA, chiều dài cũng có thể tùy chỉnh.

  2. Xác định sự giao thoa của MA1 và MA2: khi MA1 đeo MA2, làm nhiều hơn; khi MA1 đeo MA2 dưới, bằng phẳng.

  3. (Tự chọn) tính toán đường trung bình thứ ba MA3, độ dài thường có chu kỳ dài hơn, chẳng hạn như 50 ≠ MA3 trên là nhiều đầu, dưới là đầu trống ≠ chỉ khi giá phá vỡ MA3 mới mở vị trí ≠

  4. Quy tắc trên kết hợp với thời gian phản hồi để tạo tín hiệu giao dịch chiến lược.

  5. Các vùng trống được thêm vào để tạo thành một hỗ trợ thị giác.

Chiến lược này kết hợp theo dõi xu hướng của trung bình di chuyển và các tư tưởng của giao dịch nhị phân, đồng thời giới thiệu một đường trung bình thứ ba để kiểm soát rủi ro, điều chỉnh các tham số để thích nghi với các chu kỳ thị trường khác nhau.

Phân tích lợi thế

  1. Sử dụng phương pháp giao chéo hai đường bằng nhau để xác định xu hướng, có thể theo dõi xu hướng một cách hiệu quả.

  2. Hỗ trợ sự kết hợp của nhiều loại đường trung bình, có thể được tối ưu hóa cho thị trường trong các chu kỳ khác nhau.

  3. Việc giới thiệu dòng thứ ba để kiểm soát rủi ro có thể làm giảm tổn thất không cần thiết.

  4. Hình ảnh màu sắc chéo sẽ cải thiện trải nghiệm giao dịch trên bản đồ.

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

  6. Các quy tắc đơn giản, rõ ràng, dễ hiểu và dễ thực hiện.

Phân tích rủi ro

  1. Chiến lược hai đường trung bình dễ gây ra tổn thất cho các tình huống chấn động và tình huống đảo ngược xu hướng. Bạn có thể giảm rủi ro bằng cách tối ưu hóa các tham số.

  2. Đường trung bình đôi khi sẽ tạo ra tín hiệu sai hoặc phản ứng vượt trội. Bạn có thể tăng chu kỳ đường trung bình hoặc tối ưu hóa tham số thích hợp.

  3. Đường trung bình thứ ba có thể bỏ lỡ cơ hội có động lực mạnh hơn. Bạn có thể thử nghiệm cắt ngắn đường trung bình thứ ba một cách thích hợp để giảm cơ hội lợi nhuận bị bỏ lỡ.

  4. Không thể đảm bảo rằng mỗi lần giao dịch đều có lợi nhuận, cần phải quản lý lỗ hổng tốt.

Hướng tối ưu hóa

  1. Kiểm tra các loại đường trung bình khác nhau và sự kết hợp của các tham số khác nhau để tìm kiếm các cặp tham số tối ưu.

  2. Tối ưu hóa các tham số chu kỳ của đường thứ ba, cân bằng kiểm soát rủi ro và thu lợi nhuận.

  3. Tham gia chiến lược dừng lỗ để kiểm soát tổn thất đơn lẻ.

  4. Có thể xem xét thêm các thuật toán học máy để tìm các tham số tối ưu bằng cách sử dụng đào tạo dữ liệu lớn.

  5. Lưu trữ và kiểm tra tín hiệu kết hợp với các chỉ số khác như KD, MACD.

Tóm tắt

Chiến lược chéo trung bình di chuyển đa dạng này, tích hợp nhiều chức năng như theo dõi xu hướng, kiểm soát rủi ro, tối ưu hóa tham số và hỗ trợ hình ảnh, là một chiến lược xu hướng rất cổ điển và thực tế. Bằng cách liên tục kiểm tra và tối ưu hóa tham số, kết hợp với các phương tiện như giới thiệu các chỉ số khác hoặc học máy một cách thích hợp, chiến lược này có thể liên tục cải thiện khả năng thích ứng với thị trường và có giá trị thực tế rất mạnh.

Mã nguồn chiến lược
/*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()