
Chiến lược giao dịch định lượng phá vỡ giá trị quan trọng nhiều đầu của Livermore là một phương pháp giao dịch có hệ thống dựa trên triết lý giao dịch của Jesse Livermore. Chiến lược này nắm bắt chính xác thời điểm giá phá vỡ các mức hỗ trợ và kháng cự quan trọng bằng cách xác định xu hướng chính, điều chỉnh tự nhiên và điều chỉnh thứ hai của thị trường.
Chiến lược này dựa trên triết lý giao dịch của Jesse Livermore, phân chia xu hướng thị trường thành sáu trạng thái: xu hướng tăng chính (MAIN_UP), xu hướng giảm chính (MAIN_DOWN), hồi phục tự nhiên (NATURAL_REBOUND), hồi phục tự nhiên (NATURAL_RETRACEMENT), hồi phục thứ cấp (SECONDARY_REBOUND) và hồi phục thứ cấp (SECONDARY_RETRACEMENT).
Chiến lược xác định trạng thái xu hướng của thị trường bằng cách tính toán mối quan hệ giữa giá hiện tại và các điểm mấu chốt lịch sử, kết hợp với tỷ lệ khoảng cách pivot được đặt trước (có thể là tỷ lệ phần trăm cố định hoặc dựa trên tính toán động ATR).
Trong xu hướng tăng chính, duy trì trạng thái tăng xu hướng và cập nhật điểm cao nhất khi giá không vượt quá ngưỡng giảm được xác định bởi nhân trục chính. Khi mức giảm vượt quá ngưỡng giảm, chuyển sang trạng thái giảm tự nhiên.
Trong xu hướng giảm chính, duy trì trạng thái xu hướng giảm và cập nhật điểm thấp nhất khi giá tiếp tục giảm hoặc không vượt quá ngưỡng rebound được xác định bởi số nhân trục chính; chuyển sang trạng thái rebound tự nhiên khi rebound vượt quá ngưỡng rebound.
Trong khi tự nhiên bounce / điều chỉnh và thứ cấp bounce / điều chỉnh, dựa trên mối quan hệ của giá với lịch sử cao thấp và thiết lập chính và thứ cấp trục trục nhân định giá xu hướng chuyển đổi.
Logic tạo tín hiệu giao dịch là: Xây dựng vị trí đa đầu khi xu hướng xác nhận xu hướng tăng chính trong hai chu kỳ liên tiếp; Xóa vị trí khi xu hướng xác nhận xu hướng giảm chính trong hai chu kỳ liên tiếp.
Xác định xu hướng hệ thốngChiến lược này hệ thống hóa lý thuyết giao dịch của Livermore, xác định các trạng thái xu hướng khác nhau thông qua mô hình toán học rõ ràng, loại bỏ sự không chắc chắn của phán đoán chủ quan.
Khả năng thích nghi cao: Với phần trăm khoảng cách trục cốt tham số và tùy chọn ATR, chiến lược có thể thích ứng với các điều kiện thị trường và biến động khác nhau, tăng tính linh hoạt của chiến lược.
Cơ chế xác nhậnChiến lược yêu cầu xác nhận xu hướng hai chu kỳ liên tiếp trước khi thực hiện giao dịch, giảm thiểu thiệt hại do phá vỡ giả.
Tích hợp quản lý tài chínhChiến lược: Sử dụng tỷ lệ quyền lợi của tài khoản để quản lý vị trí, đảm bảo các lỗ hổng rủi ro phù hợp với các tài khoản khác nhau.
Bắt được xu hướng dài hạnBằng cách phân biệt xu hướng chính và xu hướng phụ, chiến lược có thể nắm bắt được xu hướng chu kỳ lớn một cách hiệu quả, tránh bị nhiễu bởi tiếng ồn ngắn hạn.
Rủi ro của sự chậm trễDo chiến lược cần xác nhận trạng thái xu hướng trong hai chu kỳ để thực hiện giao dịch, bạn có thể bỏ lỡ một phần lợi nhuận khi xu hướng bắt đầu hoặc chịu sự rút lui lớn hơn khi xu hướng đảo ngược.
Độ nhạy tham sốHiệu suất của chiến lược phụ thuộc rất nhiều vào thiết lập các tham số như phần trăm khoảng cách trục trục, số nhân trục chính và phụ, các tham số không đúng có thể dẫn đến giao dịch quá mức hoặc bỏ lỡ tín hiệu quan trọng.
Hạn chế giao dịch một chiềuChiến lược này được thiết kế để chỉ thực hiện các giao dịch nhiều đầu, có thể phải đối mặt với thời gian dài của tiền bị bỏ ra trong thị trường giảm dài hạn, ảnh hưởng đến lợi nhuận tổng thể.
Xu hướng xác định sự phức tạp: logic chuyển đổi giữa sáu trạng thái xu hướng phức tạp hơn, có thể dẫn đến chuyển đổi trạng thái thường xuyên trong khi thị trường biến động mạnh, tăng chi phí giao dịch.
Thiếu cơ chế ngăn chặn thiệt hại: Không có thiết lập dừng lỗ rõ ràng trong mã, có thể sẽ có tổn thất lớn hơn trong trường hợp thị trường đảo ngược đột ngột.
Tăng hệ thống chống thiệt hạiGhi chú: giới thiệu chiến lược dừng lỗ dựa trên ATR hoặc tỷ lệ phần trăm cố định để kiểm soát rủi ro giao dịch đơn trước khi xu hướng đảo ngược. Thực hiện cụ thể có thể đặt giá dừng lỗ đồng thời thiết lập vị trí nhiều đầu, bảo vệ an toàn tài chính.
Cơ chế xác nhận xu hướng tối ưu hóaChiến lược hiện tại cần hai chu kỳ xác nhận xu hướng liên tiếp, có thể xem xét kết hợp lưu lượng giao dịch hoặc các chỉ số kỹ thuật khác để xác nhận xu hướng, cải thiện chất lượng tín hiệu.
Thêm chức năng làm trống: Mở rộng chiến lược để hỗ trợ giao dịch không đầu, tận dụng tối đa các cơ hội lợi nhuận trong xu hướng giảm, nâng cao hiệu suất toàn thời tiết của chiến lược.
Điều chỉnh tham số động: giới thiệu cơ chế điều chỉnh tham số động dựa trên biến động lịch sử hoặc tình trạng thị trường, giúp chiến lược thích ứng tốt hơn với các môi trường thị trường khác nhau.
Thêm điều kiện lọcGhi chú: Kết hợp các bộ lọc theo chu kỳ thị trường, theo mùa hoặc cơ bản, tránh mở vị trí trong điều kiện bất lợi, tăng tỷ lệ thắng.
Xây dựng kho và kho hàngGhi chú: Thực hiện cơ chế nhập cảnh theo nhóm, giảm rủi ro chọn thời gian, tối ưu hóa hiệu quả sử dụng vốn.
Chiến lược giao dịch định lượng đột phá giá trị quan trọng đa đầu của Livermore đã thành công trong việc chuyển đổi khái niệm giao dịch cổ điển của Jesse Livermore thành một hệ thống thuật toán thực hiện định lượng. Bằng cách xác định chính xác sáu trạng thái xu hướng của thị trường và các điều kiện chuyển đổi của chúng, chiến lược có thể xác định và theo dõi xu hướng tăng chính một cách hiệu quả, thực hiện giao dịch đa đầu dựa trên xu hướng xác nhận.
Mặc dù chiến lược có những ưu điểm như hệ thống hóa, thích ứng mạnh mẽ và cơ chế xác nhận tích hợp, nhưng cũng phải đối mặt với những rủi ro như chậm trễ, nhạy cảm tham số và thiếu dừng. Bằng cách tăng cơ chế dừng, xác nhận xu hướng tối ưu, mở rộng chức năng làm trống, thực hiện điều chỉnh tham số động, các hướng tối ưu hóa có thể nâng cao hơn nữa sự ổn định và khả năng sinh lời của chiến lược.
Nhìn chung, chiến lược này cung cấp một khuôn khổ vững chắc cho các nhà đầu tư tìm cách thực hiện triết lý giao dịch Livermore một cách có hệ thống, với khả năng thu được lợi nhuận lâu dài ổn định trong giao dịch thực tế thông qua điều chỉnh tham số thích hợp và tối ưu hóa quản lý rủi ro.
/*backtest
start: 2024-07-16 00:00:00
end: 2025-07-12 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":200000}]
*/
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © bozhang_ox
//@version=6
strategy("Trading strategy Jesse Livermore", overlay=true)
// Input parameters
pivot_distance_percentage = input.float(0.5, title="Pivot Distance Percentage")
major_pivot_multiplier = input.int(6, title="Major Pivot Multiplier")
minor_pivot_multiplier = input.int(3, title="Minor Pivot Multiplier")
use_atr_pivot_distance = input.bool(false, title="Use ATR for Pivot Distance")
atr_period = input.int(14, title="ATR Period")
atr_pivot_multiplier = input.float(1, title="ATR Pivot Multiplier")
// Calculate ATR
atr = ta.atr(atr_period)
// Helper function to calculate pivot distance ratio
pivot_distance_ratio = use_atr_pivot_distance ? (atr * atr_pivot_multiplier) / close : pivot_distance_percentage / 100
// Trend states
NONE = 0
MAIN_UP = 6
MAIN_DOWN = 1
NATURAL_REBOUND = 2
NATURAL_RETRACEMENT = 5
SECONDARY_REBOUND = 4
SECONDARY_RETRACEMENT = 3
// Variables to track trends
var float main_up_max = na
var float main_down_min = na
var float natural_rebound_max = na
var float natural_retracement_min = na
var int trend = NONE
var int prev_trend = NONE
var int prev_prev_trend = NONE
// Initialize variables
if na(main_up_max)
main_up_max := -1e10
if na(main_down_min)
main_down_min := 1e10
if na(natural_rebound_max)
natural_rebound_max := -1e10
if na(natural_retracement_min)
natural_retracement_min := 1e10
// Trend logic
if trend == NONE
if close > close[1]
trend := MAIN_UP
main_up_max := close
else
trend := MAIN_DOWN
main_down_min := close
else if trend == MAIN_UP
if close > close[1] or (main_up_max - close < close[1] * pivot_distance_ratio * major_pivot_multiplier)
trend := MAIN_UP
main_up_max := math.max(main_up_max, close)
else
trend := NATURAL_RETRACEMENT
natural_retracement_min := close
else if trend == MAIN_DOWN
if close < close[1] or (close - main_down_min < close[1] * pivot_distance_ratio * major_pivot_multiplier)
trend := MAIN_DOWN
main_down_min := math.min(main_down_min, close)
else
trend := NATURAL_REBOUND
natural_rebound_max := close
else if trend == NATURAL_REBOUND
if close > close[1]
if close <= main_up_max
if close - natural_rebound_max <= close[1] * pivot_distance_ratio * minor_pivot_multiplier
trend := NATURAL_REBOUND
natural_rebound_max := math.max(natural_rebound_max, close)
else
trend := MAIN_UP
main_up_max := close
else
trend := MAIN_UP
main_up_max := close
else
if natural_rebound_max - close <= close[1] * pivot_distance_ratio * major_pivot_multiplier
trend := NATURAL_REBOUND
else if close < natural_retracement_min
trend := NATURAL_RETRACEMENT
natural_retracement_min := close
else
trend := SECONDARY_RETRACEMENT
else if trend == NATURAL_RETRACEMENT
if close < close[1]
if close >= main_down_min
if natural_retracement_min - close <= close[1] * pivot_distance_ratio * minor_pivot_multiplier
trend := NATURAL_RETRACEMENT
natural_retracement_min := math.min(natural_retracement_min, close)
else
trend := MAIN_DOWN
main_down_min := close
else
trend := MAIN_DOWN
main_down_min := close
else
if close - natural_retracement_min <= close[1] * pivot_distance_ratio * major_pivot_multiplier
trend := NATURAL_RETRACEMENT
else if close > natural_rebound_max
trend := NATURAL_REBOUND
natural_rebound_max := close
else
trend := SECONDARY_REBOUND
else if trend == SECONDARY_REBOUND
if close <= natural_rebound_max and close >= natural_retracement_min
trend := SECONDARY_REBOUND
else if close < natural_retracement_min
trend := NATURAL_RETRACEMENT
natural_retracement_min := close
else
trend := NATURAL_REBOUND
natural_rebound_max := close
else if trend == SECONDARY_RETRACEMENT
if close >= natural_retracement_min and close <= natural_rebound_max
trend := SECONDARY_RETRACEMENT
else if close > natural_rebound_max
trend := NATURAL_REBOUND
natural_rebound_max := close
else
trend := NATURAL_RETRACEMENT
natural_retracement_min := close
// Execute trades based on trend changes
if prev_trend != prev_prev_trend
if trend == MAIN_UP and prev_trend == MAIN_UP
strategy.entry("Long Entry", strategy.long, comment="Long Entry")
else if trend == MAIN_DOWN and prev_trend == MAIN_DOWN
strategy.close("Long Entry", comment = "Long Close")
// Update previous trend
prev_prev_trend := prev_trend
prev_trend := trend