Chiến lược dừng lỗ theo đường EMA ba


Ngày tạo: 2023-10-17 15:05:41 sửa đổi lần cuối: 2023-10-17 15:05:41
sao chép: 2 Số nhấp chuột: 715
1
tập trung vào
1617
Người theo dõi

Chiến lược dừng lỗ theo đường EMA ba

Tổng quan

Chiến lược này là một sự thực hiện của chiến lược giao dịch trung bình di chuyển chỉ số ba. Nó tạo ra tín hiệu giao dịch bằng cách kết hợp EMA 5 ngày nhanh hơn, EMA 20 ngày trung bình và EMA 50 ngày chậm hơn. Đồng thời, nó kết hợp các dấu hiệu giả để lọc các dấu hiệu giả. Ngoài ra, chiến lược này cũng sử dụng tracking stop loss để khóa lợi nhuận.

Nguyên tắc

Khi 5 ngày EMA đi qua 20 ngày EMA, và ba EMA đều có nhiều đầu xếp hàng ((5 ngày EMA > 20 ngày EMA > 50 ngày EMA), và giá đóng cửa K hiện tại tăng hơn một số ticks nhất định so với ngày trước, làm nhiều; khi 5 ngày EMA đi qua 20 ngày EMA, và ba EMA đều có đầu xếp hàng trống ((5 ngày EMA < 20 ngày EMA < 50 ngày EMA), và giá đóng cửa K hiện tại giảm hơn một số ticks nhất định so với ngày trước, làm trống.

Sau khi vào thị trường, nếu giá hoạt động vượt quá một số ticks nhất định, hãy khởi động cơ chế theo dõi dừng lỗ, liên tục điều chỉnh đường dừng lỗ theo biến động giá để khóa thêm lợi nhuận.

Ưu điểm

  1. Sử dụng ba EMA để tạo ra tín hiệu giao dịch, có thể lọc hiệu quả tiếng ồn thị trường, nhận ra xu hướng. EMA nhanh phản ánh những thay đổi mới nhất, EMA trung bình xác định hướng xu hướng, EMA chậm lọc sự dao động.

  2. Tăng giá đóng cửa K hiện tại so với giá đóng cửa ngày trước, có thể lọc thêm các tín hiệu giả và giảm các giao dịch không cần thiết.

  3. Sử dụng cơ chế theo dõi dừng lỗ, bạn có thể điều chỉnh động theo xu hướng thị trường để hạn chế lỗ hổng và tối đa hóa lợi nhuận.

  4. Các tham số của chiến lược này được thiết lập linh hoạt, có thể được tối ưu hóa cho các giống và chu kỳ khác nhau, từ đường ngày đến đường phút.

Rủi ro

  1. Trong các trường hợp bất ổn, các tín hiệu giao dịch EMA thường xuyên và dễ dàng tạo ra quá nhiều giao dịch làm tăng phí giao dịch và chi phí trượt.

  2. Theo dõi dừng lỗ có thể dừng lại quá sớm trong một cú sốc lớn, không thể giữ được toàn bộ xu hướng.

  3. Tính năng EMA chậm có thể bỏ lỡ điểm biến động xu hướng và gây ra tổn thất.

  4. Cần tối ưu hóa các tham số như độ dài chu kỳ EMA, theo dõi ticks dừng lỗ, v.v., hiệu quả khác nhau giữa các giống và chu kỳ.

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

  1. Có thể kết hợp với các chỉ số khác như MACD, KD để hỗ trợ lọc tín hiệu giao dịch.

  2. Có thể thử nghiệm và tối ưu hóa để tìm ra sự kết hợp tối ưu của các tham số dựa trên các tham số cụ thể của giống và chu kỳ.

  3. Các tham số có thể được điều chỉnh động thông qua các phương pháp như can thiệp nhân tạo hoặc học máy.

  4. Có thể xem xét đóng theo dõi dừng lỗ, toàn bộ vị trí giữ xu hướng trong trường hợp cụ thể.

  5. Có thể kết hợp với tự động dừng để thay thế cho đơn giản theo dõi dừng.

Tóm tắt

Chiến lược này kết hợp ba phương pháp phân tích kỹ thuật phổ biến như giao dịch EMA, phá vỡ giá và theo dõi dừng để tạo thành một hệ thống giao dịch theo dõi xu hướng toàn diện và đáng tin cậy hơn. Bằng cách tối ưu hóa tham số, nó có thể thích ứng với nhiều loại và chu kỳ và có hiệu quả tốt nhất trong thị trường có xu hướng rõ ràng. Tuy nhiên, chiến lược này cũng có một số điểm yếu của chiến lược phân tích kỹ thuật điển hình cần được tối ưu hóa hơn nữa để đối phó với nhiều tình huống thị trường.

Mã nguồn chiến lược
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-02 12: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/
// © Matt Dearden - IndoPilot
// @version=4

/////////////////////////////////////////////////////// Initial Parameters /////////////////////////////////////////////////////// 
SystemName = "Triple EMA Strategy"
ShortSystemName = "TEMA"
InitPosition = 0
InitCapital = 50000
InitCommission = 0.004 //approx value to compensate for Oanda spreads
InitPyramidMax = 0
CalcOnorderFills = true

strategy(title=SystemName, shorttitle=ShortSystemName, overlay=true, pyramiding=InitPyramidMax, 
 default_qty_type=strategy.cash, default_qty_value=InitPosition, commission_type=strategy.commission.percent, 
 commission_value=InitCommission, initial_capital=InitCapital, max_lines_count=500, 
 max_labels_count=500, process_orders_on_close=false, calc_on_every_tick=false) 

///////////////////////////////////////////////////////////// Inputs /////////////////////////////////////////////////////////////

DateFilter = input(false, "═════ Data Filtering ═════") 
InitYear = input(title="Year", type=input.integer, defval=2021, minval=2000, maxval=2021)
InitMonth = input(title="Month (0=ALL)", type=input.integer, defval=0, minval=0, maxval=12)
InitStopLoss = input(title="Stop Loss (ticks)", type=input.integer, defval=100, minval=0, maxval=1000) 
TrailingStopLoss = input(title="Trailing S/L (ticks)", type=input.integer, defval=130, minval=0, maxval=1000) 
InitBuffer = input(title="Buffer (ticks)", type=input.integer, defval=15, minval=0, maxval=1000) 
InitEMA1 = input(title="EMA 1", type=input.integer, defval=5, minval=0, maxval=1000) 
InitEMA2 = input(title="EMA 2", type=input.integer, defval=20, minval=0, maxval=1000) 
InitEMA3 = input(title="EMA 3", type=input.integer, defval=50, minval=0, maxval=1000) 

//////////////////////////////////////////////////////////// Variables ///////////////////////////////////////////////////////////

var StopLoss = float(0.0)
var StartPrice = float(0.0)
//setup multipliers and catch JPY difference
Multiplier = syminfo.currency == "JPY" ? 10 : 1000
//get the daily exchange rate from yesterday
//X_rate = security(AccountCurrency+syminfo.currency, "D", close[1]) 
OrderQty = 1  
Buffer = InitBuffer / (Multiplier * 100)

/////////////////////////////////////////////////////// Triple EMA Strategy //////////////////////////////////////////////////////

EMA1 = ema(close, InitEMA1)
EMA2= ema(close, InitEMA2)
EMA3 = ema(close, InitEMA3)

//entry conditions
longCondition = crossover(EMA1, EMA2) and close > EMA3 and EMA1 > EMA3 and EMA2 > EMA3 and close > (close[1] + Buffer) 
shortCondition = crossunder(EMA1, EMA2) and close < EMA3 and EMA1 < EMA3 and EMA2 < EMA3 and close < (close[1] - Buffer) 

/////////////////////////////////////////////////////// Trailing Stoploss ////////////////////////////////////////////////////////

if (strategy.position_size > 0 and (close > (StartPrice + (TrailingStopLoss / (100 * Multiplier)))))  
    StopLoss := max(StopLoss, close - (TrailingStopLoss / (100 * Multiplier))) 
    strategy.exit("Long Stoploss", "Long") 
    
if (strategy.position_size < 0 and (close < (StartPrice - (InitStopLoss / (100 * Multiplier))))) 
    StopLoss := min(StopLoss, close + (TrailingStopLoss / (100 * Multiplier)))
    strategy.exit("Short Stoploss", "Short") 
    
///////////////////////////////////////////////////////// Setup entries /////////////////////////////////////////////////////////

if (longCondition)
    StartPrice := close
    StopLoss := StartPrice - (InitStopLoss / (100 * Multiplier)) 
    strategy.entry("Long", strategy.long, qty=OrderQty)
    strategy.exit("Long Stoploss", "Long")

if (shortCondition)
    StartPrice := close
    StopLoss := StartPrice + (InitStopLoss / (100 * Multiplier)) 
    strategy.entry("Short", strategy.short, qty=OrderQty)
    strategy.exit("Short Stoploss", "Short")
    
///////////////////////////////////////////////////////// Draw the EMAs /////////////////////////////////////////////////////////
plot(EMA1, "EMA1", color=#00FF00)
plot(EMA2, "EMA2", color=#FF0000)
plot(EMA3, "EMA3", color=#4040FF)