Chiến lược đột phá đường K của Choppiness là một chiến lược giao dịch định lượng sử dụng các mẫu đường K và các chỉ số động lực để xác định các bước vào và ra khỏi giao dịch chứng khoán. Chiến lược này kết hợp nhiều chỉ số kỹ thuật để xác định xu hướng giá và các tín hiệu động lực, nắm giữ các vị trí tại các điểm đột phá và thiết lập dừng lỗ và lấy lợi nhuận để kiểm soát hiệu quả rủi ro giao dịch.
Các khái niệm cốt lõi của Chiến lược đột phá dòng K của Choppiness là:
Sử dụng chỉ số kênh hàng hóa (CCI) để xác định xem giá có nằm trong khu vực mua quá mức hay bán quá mức.
Xác định các mô hình đường K để phát hiện tín hiệu đột phá. Một đường K màu đỏ với mức đóng cao hơn mở cho thấy xu hướng tăng, trong khi một đường K màu xanh lá cây đóng thấp hơn mở cho thấy xu hướng giảm.
Bao gồm khối lượng giao dịch để chỉ xem xét tín hiệu mua và bán khi khối lượng tăng vọt.
Lấy các vị trí dài khi một xu hướng tăng được xác định và CCI cho thấy quá bán.
Thiết lập điểm dừng lỗ và lấy lợi nhuận để kiểm soát rủi ro và khóa lợi nhuận.
Đặc biệt, chiến lược sử dụng CCI để phân tích quá mua / quá bán, mô hình đường K cho hướng xu hướng và khối lượng cho động lực. Nó đi vào các vị trí dài hoặc ngắn khi các tiêu chí được đáp ứng.
Choppiness K-line Breakthrough Strategy có những lợi thế sau:
Kết hợp nhiều chỉ số cải thiện độ tin cậy của tín hiệu giao dịch. CCI xác định các khu vực giao dịch, đường K xác định hướng xu hướng và khối lượng phản ánh đà thị trường.
Sử dụng các mô hình đường K giúp xác định chính xác sự đảo ngược xu hướng.
Dừng lỗ và lấy lợi nhuận có hiệu quả kiểm soát rủi ro và khóa lợi nhuận.
Chỉ xem xét các tín hiệu về âm lượng tăng cao để tránh các tín hiệu sai.
Logic chiến lược rõ ràng và các tham số linh hoạt để tối ưu hóa trên các cổ phiếu và môi trường thị trường.
Chiến lược có thể được cải thiện hơn nữa thông qua nhiều yếu tố hơn, học máy vv, tăng tính ổn định và lợi nhuận.
Các rủi ro tiềm ẩn của chiến lược bao gồm:
Các tín hiệu CCI có thể bị chậm trễ, gây ra các điểm vào tối ưu bị bỏ qua. Các thông số CCI có thể được điều chỉnh để có độ nhạy cao hơn.
Các sự đột phá giả trong các mô hình đường K có thể gây ra tổn thất không cần thiết.
Sự gia tăng về khối lượng cũng có thể được thao túng, vì vậy điều quan trọng là phải theo dõi sự khác biệt về khối lượng-giá.
Chế độ dừng lỗ / lấy lợi nhuận tĩnh có thể thoát sớm hoặc bỏ lỡ xu hướng tiếp theo.
Các thông số được trang bị cho một cổ phiếu có thể không phù hợp với các cổ phiếu khác.
Kết quả thử nghiệm có thể không thể hiện hiệu suất trực tiếp.
Chiến lược có thể được tăng cường thông qua:
Tối ưu hóa các thông số CCI để tạo tín hiệu nhanh hơn.
Thêm thêm các chỉ số như MACD, Bollinger Bands để cải thiện độ chính xác tín hiệu.
Sử dụng các mô hình máy học được đào tạo trên dữ liệu lịch sử để dự đoán các điểm nhập / xuất.
Sử dụng stop loss động và lấy lợi nhuận dựa trên biến động thị trường.
Cải thiện logic tăng khối lượng để phát hiện sự chênh lệch giá khối lượng.
Điều chỉnh các tham số cho các cổ phiếu và chế độ thị trường khác nhau để cải thiện sự ổn định.
Tích hợp các cơ chế theo xu hướng để hiệu suất tốt hơn trên tất cả các giai đoạn thị trường.
Mô-đun hóa chiến lược cho sự linh hoạt và mở rộng hơn.
Choppiness K-line Breakthrough Strategy là một chiến lược giao dịch ngắn hạn tương đối đơn giản. Nó kết hợp các chỉ số kỹ thuật chung cho logic rõ ràng và kiểm soát rủi ro thông qua dừng lỗ và lấy lợi nhuận. Chiến lược có thể được tối ưu hóa linh hoạt dựa trên nhu cầu để nắm bắt sự đảo ngược ngắn hạn và xu hướng trung hạn.
/*backtest start: 2023-09-06 00:00:00 end: 2023-10-06 00:00:00 period: 2h 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/ // © vikris //@version=4 strategy("[VJ]War Machine PAT Intra", overlay=true, calc_on_every_tick = false) // ********** 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=5.0) * 0.01 shortProfitPerc = input(title="Short Take Profit (%)", type=input.float, minval=0.0, step=0.1, defval=5.0) * 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=5.0) * 0.01 shortLossPerc = input(title="Short Stop Loss (%)", type=input.float, minval=0.0, step=0.1, defval=5.0) * 0.01 trendFactor = input(title="Trend Factor(Lower means trending)", type=input.integer, minval=1, step=1, defval=50) oversold = input(title="Oversold", type=input.integer, minval=1, step=1, defval=25) overbought = input(title="Overbought", type=input.integer, minval=1, step=1, defval=75) // ********** 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=========================== //Vol Confirmation vol = volume > volume[1] //Engulfing candle confirm bullishEC = close > open[1] and close[1] < open[1] bearishEC = close < open[1] and close[1] > open[1] //Candles colors greenCandle = (close > open) redCandle = (close < open) length = input(title="Length", type=input.integer, defval=14, minval=1, maxval=2000) src = hlc3 upper = sum(volume * (change(src) <= 0 ? 0 : src), length) lower = sum(volume * (change(src) >= 0 ? 0 : src), length) _rsi(upper, lower) => 100.0 - (100.0 / (1.0 + upper / lower)) mf = _rsi(upper, lower) ci = 100 * log10(sum(atr(1), length) / (highest(length) - lowest(length))) / log10(length) //tradeSignal = ((rsiOS or rsiOS[1]) and bullishEC) or ((rsiOB or rsiOB[1]) and bearishEC) //Final Long/Short Condition longCondition = redCandle and mf < oversold and ci <trendFactor and vol shortCondition = greenCandle and mf >overbought and ci <trendFactor and vol //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 **********