
Chiến lược này thực hiện giao dịch đa đầu không tự động trong nhiều khung thời gian bằng cách kết hợp ba chỉ số sử dụng Parabolic SAR, MACD và RSI. Chiến lược này chủ yếu áp dụng cho giao dịch trong ngày của cổ phiếu và hàng hóa.
Chỉ số PSAR được sử dụng để xác định hướng giá và điểm đảo ngược xu hướng. Khi số điểm giảm, nó là tín hiệu nhiều đầu và khi số điểm tăng, nó là tín hiệu trống.
Chỉ số MACD đánh giá động lực giá. Các đường MACD và đường SIGNAL phá vỡ lên là tín hiệu đa đầu, phá vỡ xuống là tín hiệu trống.
Chỉ số RSI đánh giá hiện tượng quá mua quá bán. RSI cao hơn mức giá thấp là tín hiệu đa đầu và thấp hơn mức giá thấp là tín hiệu trống.
Kết hợp các tín hiệu của ba chỉ số trên để tạo ra quyết định cuối cùng.
Tự thích nghi với việc sử dụng chỉ số Chop Index để lọc ra thị trường hợp nhất, tránh các whipsaws.
Sử dụng nguyên tắc đặt cược theo kim tự tháp đảo ngược để quản lý động cơ rủi ro và lợi nhuận bằng cách thiết lập điểm dừng lỗ và điểm dừng.
Các chỉ số đa dạng được sử dụng để đánh giá xu hướng, động lực và tính năng mua quá nhiều và bán quá nhiều, giúp cải thiện độ chính xác của các quyết định.
Thích ứng với các đặc điểm của thị trường, lọc các thị trường hợp nhất thông qua chỉ số Chop Index, tránh bị lấn vào.
Quản lý động cơ rủi ro và lợi nhuận, thực hiện lệnh dừng lỗ chủ động thông qua nguyên tắc đặt cược theo kim tự tháp đảo ngược.
Có nhiều tham số tùy chỉnh và tối ưu hóa, dễ dàng điều chỉnh cho các giống và môi trường thị trường khác nhau.
Hỗ trợ nhiều khung thời gian, có thể được sử dụng linh hoạt cho giao dịch đường ngắn và đường dài trong ngày.
Quyết định đa đầu trống phụ thuộc vào cài đặt tham số, cài đặt không phù hợp có thể dẫn đến lỗi.
Có khả năng các chỉ số phát ra tín hiệu sai, có thể tạo ra các quyết định trái ngược với xu hướng.
Chặn lỗ không được thiết lập đúng, có thể làm tăng lỗ hoặc giảm lợi nhuận.
Cần giám sát và điều chỉnh các tham số thường xuyên, chi phí can thiệp nhân tạo lớn.
Thêm mô-đun kiểm tra mô hình, đánh giá các thiết lập tham số và hiệu quả của tín hiệu.
Thêm mô-đun học máy để tự động tối ưu hóa tham số và mô hình.
Truy cập nhiều nguồn dữ liệu hơn, nhiều tính năng hơn và hiệu quả hơn trong việc ra quyết định.
Phát triển hệ thống giám sát và bảo trì tự động, giảm chi phí can thiệp của con người.
Tăng cường đánh giá phản hồi và mô phỏng, hiệu quả của chiến lược kiểm tra.
Chiến lược này thực hiện giao dịch số hóa tự động dựa trên quy tắc bằng cách sử dụng sự kết hợp của nhiều chỉ số kỹ thuật. Chiến lược có không gian tối ưu hóa lớn, khả năng mở rộng, thích hợp để điều chỉnh tham số, mở rộng chức năng và tối ưu hóa học máy, sẽ phục vụ tốt hơn cho giao dịch trên thực tế.
/*backtest
start: 2022-12-20 00:00:00
end: 2023-12-26 00:00:00
period: 1d
basePeriod: 1h
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/
// © vikris
//@version=4
strategy("[VJ]Phoenix Force of PSAR +MACD +RSI", overlay=true, calc_on_every_tick = false,pyramiding=0)
// ********** Strategy inputs - Start **********
// Used for intraday handling
// Session value should be from market start to the time you want to square-off
// your intraday strategy
// Important: The end time should be at least 2 minutes before the intraday
// square-off time set by your broker
var i_marketSession = input(title="Market session", type=input.session,
defval="0915-1455", confirm=true)
// Make inputs that set the take profit % (optional)
longProfitPerc = input(title="Long Take Profit (%)",
type=input.float, minval=0.0, step=0.1, defval=3) * 0.01
shortProfitPerc = input(title="Short Take Profit (%)",
type=input.float, minval=0.0, step=0.1, defval=3) * 0.01
// Set stop loss level with input options (optional)
longLossPerc = input(title="Long Stop Loss (%)",
type=input.float, minval=0.0, step=0.1, defval=3) * 0.01
shortLossPerc = input(title="Short Stop Loss (%)",
type=input.float, minval=0.0, step=0.1, defval=3) * 0.01
// ********** Strategy inputs - End **********
// ********** Supporting functions - Start **********
// A function to check whether the bar or period is in intraday session
barInSession(sess) => time(timeframe.period, sess) != 0
// Figure out take profit price
longExitPrice = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)
// Determine stop loss price
longStopPrice = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)
// ********** Supporting functions - End **********
// ********** Strategy - Start **********
// See if intraday session is active
bool intradaySession = barInSession(i_marketSession)
// Trade only if intraday session is active
//=================Strategy logic goes in here===========================
psar = sar(0.02,0.02,0.2)
c1a = close > psar
c1v = close < psar
malen = input(50, title="MA Length")
mm200 = sma(close, malen)
c2a = close > mm200
c2v = close < mm200
fast = input(12, title="MACD Fast EMA Length")
slow = input(26, title="MACD Slow EMA Length")
[macd,signal,hist] = macd(close, fast,slow, 9)
c3a = macd >= 0
c3v = macd <= 0
rsilen = input(7, title="RSI Length")
th = input(50, title="RSI Threshold")
rsi14 = rsi(close, rsilen)
c4a = rsi14 >= th
c4v = rsi14 <= th
chopi = input(7, title="Chop Index lenght")
ci = 100 * log10(sum(atr(1), chopi) / (highest(chopi) - lowest(chopi))) / log10(chopi)
buy = c1a and c2a and c3a and c4a ? 1 : 0
sell = c1v and c2v and c3v and c4v ? -1 : 0
//Final Long/Short Condition
longCondition = buy==1 and ci <50
shortCondition = sell==-1 and ci <50
//Long Strategy - buy condition and exits with Take profit and SL
if (longCondition and intradaySession)
stop_level = longStopPrice
profit_level = longExitPrice
strategy.entry("My Long Entry Id", strategy.long)
strategy.exit("TP/SL", "My Long Entry Id", stop=stop_level, limit=profit_level)
//Short Strategy - sell condition and exits with Take profit and SL
if (shortCondition and intradaySession)
stop_level = shortStopPrice
profit_level = shortExitPrice
strategy.entry("My Short Entry Id", strategy.short)
strategy.exit("TP/SL", "My Short Entry Id", stop=stop_level, limit=profit_level)
// Square-off position (when session is over and position is open)
squareOff = (not intradaySession) and (strategy.position_size != 0)
strategy.close_all(when = squareOff, comment = "Square-off")
// ********** Strategy - End **********