Chiến lược này được đặt tên là Chiến lược đảo ngược đường trung bình trung bình dựa trên đường trung bình chuyển động, ý tưởng chính của nó là mua sau khi giảm đường trung bình quan trọng và dừng lại khi đạt được mục tiêu lợi nhuận được đặt trước.
Nguyên tắc chính của chiến lược này là sử dụng đường trung bình ngắn hạn để nắm bắt cơ hội phục hồi trong tình trạng toàn bộ thị trường. Cụ thể, khi giá giảm xuống đường trung bình dài hơn (như đường 20 ngày, đường 50 ngày, v.v.), sau khi có dấu hiệu giảm mạnh, giá thường tạo ra một mức độ phục hồi do tính chất đảo ngược trung bình của biến động thị trường.
Chiến lược mua cụ thể của chiến lược này là: mua 1 tay sau khi giá giảm xuống đường 20 ngày, đặt cược 1 tay sau khi giảm xuống đường 50 ngày, tiếp tục đặt cược 1 tay sau khi giảm xuống đường 100 ngày, giảm xuống đường 200 ngày tối đa đặt cược 1 tay, làm thêm 4 tay. Đơn giản hóa vị trí sau khi đạt được mục tiêu dừng đặt trước. Đồng thời đặt thời gian và điều kiện dừng lỗ.
Chiến lược này nói chung là một chiến lược giao dịch theo đường thẳng cổ điển và phổ biến hơn. Nó sử dụng các tính năng smooting của đường thẳng một cách chính xác, đồng thời kết hợp nhiều đường thẳng để xác định thời điểm mua trong thời gian ngắn.
/*backtest
start: 2023-12-13 00:00:00
end: 2023-12-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("EMA_zorba1", shorttitle="zorba_ema", overlay=true)
// Input parameters
qt1 = input.int(5, title="Quantity 1", minval=1)
qt2 = input.int(10, title="Quantity 2", minval=1)
qt3 = input.int(15, title="Quantity 3", minval=1)
qt4 = input.int(20, title="Quantity 4", minval=1)
ema10 = ta.ema(close, 10)
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema100 = ta.ema(close, 100)
ema200 = ta.ema(close, 200)
// Date range filter
start_date = timestamp(year=2021, month=1, day=1)
end_date = timestamp(year=2024, month=10, day=27)
in_date_range = true
// Profit condition
profit_percentage = input(1, title="Profit Percentage") // Adjust this value as needed
// Pyramiding setting
pyramiding = input.int(2, title="Pyramiding", minval=1, maxval=10)
// Buy conditions
buy_condition_1 = in_date_range and close < ema20 and close > ema50 and close < open and close < low[1]
buy_condition_2 = in_date_range and close < ema50 and close > ema100 and close < open and close < low[1]
buy_condition_3 = in_date_range and close < ema100 and close > ema200 and close < open and close < low[1]
buy_condition_4 = in_date_range and close < ema200 and close < open and close < low[1]
// Exit conditions
profit_condition = strategy.position_avg_price * (1 + profit_percentage / 100) <= close
exit_condition_1 = in_date_range and (close > ema10 and ema10 > ema20 and ema10 > ema50 and ema10 > ema100 and ema10 > ema200 and close < open) and profit_condition and close < low[1] and close < low[2]
exit_condition_2 = in_date_range and (close < ema10 and close[1] > ema10 and close < close[1] and ema10 > ema20 and ema10 > ema50 and ema10 > ema100 and ema10 > ema200 and close < open) and profit_condition and close < low[1] and close < low[2]
// Exit condition for when today's close is less than the previous day's low
//exit_condition_3 = close < low[1]
// Strategy logic
strategy.entry("Buy1", strategy.long, qty=qt1 * pyramiding, when=buy_condition_1)
strategy.entry("Buy2", strategy.long, qty=qt2 * pyramiding, when=buy_condition_2)
strategy.entry("Buy3", strategy.long, qty=qt3 * pyramiding, when=buy_condition_3)
strategy.entry("Buy4", strategy.long, qty=qt4 * pyramiding, when=buy_condition_4)
strategy.close("Buy1", when=exit_condition_1 or exit_condition_2)
strategy.close("Buy2", when=exit_condition_1 or exit_condition_2)
strategy.close("Buy3", when=exit_condition_1 or exit_condition_2)
strategy.close("Buy4", when=exit_condition_1 or exit_condition_2)