
Chiến lược này tạo ra chỉ số MACD bằng cách tính toán chênh lệch giữa đường trung bình di chuyển nhanh và đường trung bình di chuyển chậm, sau đó kết hợp với đường tín hiệu để xác định xu hướng của thị trường tài chính và khu vực mua quá bán, tạo ra nhiều ngã ba của MACD và đường tín hiệu khi giá cao hơn đường trung bình 200 ngày và tạo ra ngã ba của ngã ba khi giá thấp hơn đường trung bình 200 ngày.
Nguyên tắc cơ bản là tính toán chênh lệch giữa đường trung bình di chuyển nhanh và đường trung bình di chuyển chậm để tạo ra chỉ số MACD để xác định hướng xu hướng thị trường, sau đó sử dụng đường tín hiệu để xác định khu vực mua quá bán. Khi MACD và đường tín hiệu hình thành nồi vàng, tín hiệu nhiều đầu là nhiều đầu, khi hình thành nồi chết, tín hiệu trống là tín hiệu trống.
Cách tính toán cụ thể là:
Khi MACD vượt qua đường tín hiệu và MACD và đường tín hiệu đồng thời thấp hơn 0, hãy làm nhiều tín hiệu cho gai vàng. Khi MACD vượt qua đường tín hiệu và MACD và đường tín hiệu đồng thời cao hơn 0, hãy làm trống tín hiệu cho gai chết.
Có thể giảm rủi ro bằng cách giảm chu kỳ trung bình thích hợp, thêm các phán đoán về các chỉ số khác và thêm các biện pháp ngăn chặn.
1.tested on different timeframes from 15m upto 1D, where optimal results where on 4H timeframe in terms of risk adjusted returns
2.optimize fast ma and slow ma so that macd represents cycle, I found 7-21 performs good for 15m chart
3.also tested hull moving average for MACD which gave good results
4.stoploss can also be trailed for better risk management
Chiến lược này nói chung rất đơn giản và thực tế, tạo ra tín hiệu giao dịch có xác suất cao thông qua phán đoán chỉ số kép và lọc giá, tỷ lệ lợi nhuận biên cao, sử dụng bộ tham số cổ điển của MACD, không được tối ưu hóa quá mức.
/*backtest
start: 2024-02-14 00:00:00
end: 2024-02-21 00:00:00
period: 1h
basePeriod: 15m
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/
// © Hurmun
//@version=4
strategy("Simple MACD strategy ", overlay=true, margin_long=100, margin_short=100)
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA (Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=false)
// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00
// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal
movinga2 = input(title="movinga 2", type=input.integer, defval=200)
movinga200 = sma(close, movinga2)
plot(movinga200, "MA", color.orange)
longCondition = crossover(macd, signal) and macd < 0 and signal < 0 and close > movinga200
if (longCondition)
strategy.entry("My Long Entry Id", strategy.long)
shortCondition = crossunder(macd, signal) and macd > 0 and signal > 0 and close < movinga200
if (shortCondition)
strategy.entry("My Short Entry Id", strategy.short)
shortProfitPerc = input(title="Short Take Profit (%)", minval=0.0, step=0.1, defval=2) / 100
longProfitPerc = input(title="Long Take Profit (%)", minval=0.0, step=0.1, defval=2) / 100
stoploss = input(title="stoploss in %", minval = 0.0, step=1, defval=2) /100
longStoploss = strategy.position_avg_price * (1 - stoploss)
longExitPrice = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)
shortStoploss = strategy.position_avg_price * (1 + stoploss)
if (strategy.position_size > 0 )
strategy.exit(id="XL TP", limit=longExitPrice, stop=longStoploss)
if (strategy.position_size < 0 )
strategy.exit(id="XS TP", limit=shortExitPrice, stop=shortStoploss)