Chiến lược này sử dụng các chỉ số kỹ thuật xuyên giai đoạn để xác định hướng xu hướng, kết hợp với lọc xu hướng và lọc biến động, để đạt được giao dịch theo dõi xu hướng có rủi ro thấp.
Sử dụng các bước đột phá điểm cao thấp để xác định tín hiệu mua và bán. Đi ngắn khi giá vượt qua mức cao 7 giai đoạn và đi dài khi nó vượt qua mức thấp 7 giai đoạn.
Chỉ số Trendflex xác định hướng xu hướng chính. Chỉ số này kết hợp các kỹ thuật làm mịn đôi và có thể xác định hiệu quả các đoạn trung tâm xu hướng. Giá trị trên 1 cho thấy xu hướng tăng, trong khi giá trị dưới -1 cho thấy xu hướng giảm. Ở đây chúng ta yêu cầu Trendflex > 1 cho dài và < -1 cho ngắn, do đó lọc các trạng thái hợp nhất.
Sử dụng Bollinger Bands để xác định phạm vi dao động. Tránh mua dài và mua ngắn khi giá đóng nằm trong dải.
Sử dụng stop loss di chuyển và lấy lợi nhuận để quản lý các vị trí.
Các chỉ số chéo thời gian kết hợp với các kỹ thuật làm mịn đôi có thể xác định hiệu quả hướng xu hướng và tránh các thị trường dao động.
Xem xét cả hướng xu hướng và mô hình biến động làm cho tín hiệu giao dịch đáng tin cậy hơn.
Các thiết lập dừng lỗ và lấy lợi nhuận hợp lý khóa lợi nhuận và ngăn chặn tổn thất mở rộng.
Chiến lược tương đối đơn giản và dễ thực hiện.
Các tín hiệu đột phá có thể có những đột phá sai, dẫn đến các giao dịch sai.
Các tham số chu kỳ cố định không thể thích nghi với những thay đổi của thị trường.
Thiếu giá dừng lại không thể ngăn chặn tổn thất lớn từ điều kiện thị trường cực đoan.
Các điểm lấy lợi nhuận và dừng lỗ cố định không thể được điều chỉnh một cách thông minh theo biến động thị trường.
Xem xét thêm các chỉ số đánh giá xu hướng để tạo thành một sự kết hợp chiến lược để cải thiện độ chính xác đánh giá.
Thêm các mô-đun nhận dạng dao động để tạm dừng giao dịch khi dao động nghiêm trọng để giảm rủi ro.
Đưa ra các thuật toán học máy để đạt được tối ưu hóa tham số động.
Thêm các mô-đun dừng lỗ giá để dừng lỗ khi lỗ đạt đến ngưỡng nhất định.
Tính toán tỷ lệ lấy lợi nhuận và dừng lỗ dựa trên sự biến động của thị trường để đạt được điều chỉnh thông minh về lấy lợi nhuận và dừng lỗ.
Nhìn chung, chiến lược này tương đối ổn định và đáng tin cậy, đồng thời cũng có chỗ để cải thiện. Ý tưởng cốt lõi là xác định hướng xu hướng qua các chu kỳ, và sau đó lọc bằng các chỉ số sức mạnh xu hướng và chỉ số biến động để tạo ra các tín hiệu chất lượng cao. Chiến lược đơn giản và thực tế này rất phù hợp để theo dõi xu hướng trung và dài hạn. Bằng cách giới thiệu nhiều phán đoán có điều kiện và tối ưu hóa tham số động, hiệu ứng chiến lược có thể được cải thiện hơn nữa.
/*backtest start: 2023-08-27 00:00:00 end: 2023-09-26 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Eltrut", shorttitle="Eltrut Strat", overlay=true, pyramiding=0, default_qty_type= strategy.percent_of_equity,calc_on_order_fills=false, slippage=25,commission_type=strategy.commission.percent,commission_value=0.075) testStartYear = input(2016, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testStopYear = input(2030, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(30, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) // R E F L E X / T R E N D F L E X f_supersmoother(_src,_len)=> pi = 2 * asin(1) _a = exp(-sqrt(2) * pi / _len) _c2 = 2 * _a * cos(sqrt(2) * pi / _len) _c3 = -_a * _a _c1 = 1 - _c2 - _c3 _out = 0.0 _out := _c1 * _src + _c2 * nz(_out[1],nz(_src[1],_src)) + _c3 * nz(_out[2],nz(_src[2],nz(_src[1],_src))) f_IQIFM(_src1,_max)=> _src = _src1 < 0.001 ? _src1 * 10000 : _src1 _imult = 0.635, _qmult = 0.338 , _inphase = 0.0, _quad = 0.0 _re = 0.0, _im = 0.0, _deltaphase = 0.0, _instper = 0.0, _per = 0.0, _v4 = 0.0 _v1 = _src - nz(_src[7]) _inphase := 1.25 * (nz(_v1[4]) - _imult * _v1[2]) + _imult * nz(_inphase[3]) _quad := _v1[2] - _qmult * _v1 + _qmult * nz(_quad[2]) _re := 0.2 * (_inphase * _inphase[1] + _quad * _quad[1]) + 0.8 * nz(_re[1]) _im := 0.2 * (_inphase * _quad[1] - _inphase[1] * _quad) + 0.8 * nz(_im[1]) if _re != 0.0 _deltaphase := atan(_im / _re) for i = 0 to _max _v4 := _v4 + _deltaphase[i] if _v4 > 4 * asin(1) and _instper == 0.0 _instper := i if _instper == 0.0 _instper := nz(_instper[1]) _per := 0.25 * _instper + 0.75 * nz(_per[1]) _per f_flex(_src1, _fixed_len, _reflex) => _src = _src1 _len = _fixed_len _ss1 = f_supersmoother(_src, _len) _ss = _ss1 _slope = (_ss[_len] - _ss) / _len _sum = 0.0 for _i = 1 to _len _c1 = _reflex ? _ss + _i * _slope - _ss[_i] : _ss - _ss[_i] _sum := _sum + _c1 _sum := _sum / _len _ms = 0.0 _ms := 0.04 * pow(_sum,2) + 0.96 * nz(_ms[1]) _flex1 = _ms != 0 ? _sum / sqrt(nz(_ms)) : 0.0 _flex = _flex1 _flex rflx = f_flex(close, 20, true) trndflx = f_flex(close, 20, false) // S I G N A L hi7 = highest(7) lo7 = lowest(7) long_cond = crossunder(close, lo7[1]) short_cond = crossover(close, hi7[1]) // F I L T E R S long_filter1 = trndflx < 1 short_filter1 = trndflx > -1 basis = sma(close, 35) dev = 3 * stdev(close, 35) long_filter2 = close > basis - dev short_filter2 = close < basis + dev // S T R A T E G Y long = long_cond and long_filter1 and long_filter2 short = short_cond and short_filter1 and short_filter2 if( true) strategy.entry("Long", strategy.long, when = long) strategy.entry("Long", strategy.long, when = short) // User Options to Change Inputs (%) stopPer = input(3, title='Stop Loss %', type=input.float) / 100 takePer = input(9, title='Take Profit %', type=input.float) / 100 // Determine where you've entered and in what direction longStop = strategy.position_avg_price * (1 - stopPer) shortStop = strategy.position_avg_price * (1 + stopPer) shortTake = strategy.position_avg_price * (1 - takePer) longTake = strategy.position_avg_price * (1 + takePer) if strategy.position_size > 0 strategy.exit(id="Exit Long", stop=longStop, limit=longTake) if strategy.position_size < 0 strategy.exit(id="Exit Short", stop=shortStop, limit=shortTake) // P L O T plotshape(long, color = #1e90ff, text = "", style=shape.triangleup, location=location.belowbar, size=size.tiny) plotshape(short, color = #ff69b4, text = "", style=shape.triangledown, location=location.abovebar, size=size.tiny) alertcondition(long, "Long", "Enter Long") alertcondition(short, "Short", "Enter S")