
Phương pháp này sử dụng chỉ số Stochastic để tạo ra tín hiệu mua và bán, và kết hợp với OTT để lọc tín hiệu, cố gắng nắm bắt xu hướng lớn và giảm tác động của tín hiệu giả do biến động thị trường. Bài viết này sẽ đánh giá kỹ thuật này.
Ý tưởng cốt lõi của chiến lược này là để lọc tín hiệu của các chỉ số OTT được chồng lên các chỉ số Stochastic. Các chỉ số Stochastic so sánh giá với giá cao nhất và thấp nhất trong khoảng thời gian được chỉ định để xác định xem giá có ở vùng cực hay không. Các chỉ số OTT sử dụng đường trung bình di chuyển và dừng động để theo dõi xu hướng.
Mã đặt Stochastic ở mức cao là 1080, thấp là 1020, trung bình của Stochastic là khoảng không trung bình. Khi Stochastic tạo ra tín hiệu mua / bán, mã sẽ đánh giá hiệu quả của tín hiệu dựa trên chỉ số OTT. Nếu giá vượt qua đường trung bình OTT lên, sẽ gửi tín hiệu mua và nếu giá vượt qua đường trung bình OTT xuống, sẽ gửi tín hiệu bán.
Sự kết hợp này sử dụng Stochastic để đánh giá quá mua quá bán và phát tín hiệu vào thị trường, OTT chịu trách nhiệm theo dõi xu hướng, sử dụng các tín hiệu giả tạo gây ra bởi các trường hợp biến động quá mạnh của bộ lọc giảm giá, do đó tối ưu hóa độ chính xác và độ dao động của tín hiệu.
Chiến lược này sử dụng sự kết hợp của Stochastic và OTT để tối ưu hóa:
Nhìn chung, chiến lược này đã làm tăng hiệu quả chất lượng tín hiệu và lợi nhuận chiến lược bằng cách sử dụng OTT để lọc tín hiệu Stochastic, đồng thời giảm số lần giao dịch và biến động chiến lược, đạt hiệu quả gần với xu hướng, rủi ro thấp và lợi nhuận cao.
Các biện pháp sau đây có thể được thực hiện để cải thiện các rủi ro trên:
Chiến lược này có thể được tối ưu hóa sâu hơn trong các lĩnh vực sau:
Cài đặt tham số điều chỉnh cho các thị trường và loại cổ phiếu khác nhau. Các giá trị mặc định hiện nay là phổ biến, có thể thử nghiệm riêng cho các cổ phiếu khác nhau để tìm kiếm sự kết hợp tham số tối ưu nhất.
Việc giới thiệu các cơ chế dừng và dừng di động. Hiện nay, các lệnh dừng cố định động được áp dụng, không thể theo dõi động các khoản lỗ và lợi nhuận. Việc giới thiệu các lệnh dừng và dừng di động có thể được thử nghiệm để kiểm soát thêm chiến lược rủi ro lợi nhuận.
Tối ưu hóa logic phán đoán tín hiệu. Hiện tại, logic phán đoán đơn giản hơn, đánh dấu trực tiếp các tín hiệu mua và bán bằng cách phá vỡ giá. Bạn có thể xem xét kết hợp nhiều chỉ số và phán đoán hình thức giá để đảm bảo độ tin cậy của tín hiệu.
Thêm điều kiện mở vị trí và cơ chế lọc. Chiến lược hiện tại xử lý mọi tín hiệu một cách không phân biệt. Có thể giới thiệu các điều kiện mở vị trí như chỉ số năng lượng, chỉ số khối lượng giao dịch và thêm một cửa sổ thời gian tín hiệu nhất định để loại bỏ tín hiệu giả.
Kiểm tra kết hợp các chỉ số khác nhau với OTT. Hiện nay, Stochastic được sử dụng kết hợp với OTT. Các chỉ số khác như MACD, RSI và kết hợp với OTT có thể được kiểm tra.
Mô-đun quản lý tài chính và quản lý vị trí tích hợp. Hiện tại không có cơ chế quản lý tài chính và kiểm soát vị trí, hoàn toàn phụ thuộc vào dừng lỗ. Có thể thử nghiệm các loại quản lý tài chính và phương pháp quản lý vị trí khác nhau để kiểm soát thêm rủi ro đơn lẻ và tổng thể.
Phương pháp này sử dụng lợi thế bổ sung của hai chỉ số để tăng độ chính xác của tín hiệu và giảm rủi ro trong khi vẫn nắm bắt được xu hướng lớn.
Chiến lược này có lợi thế là có tỷ lệ lỗi thấp, tín hiệu rõ ràng và biến động nhỏ. Nó tăng cường độ tin cậy của tín hiệu, tối ưu hóa mức dừng lỗ, giảm tần suất giao dịch và là một chiến lược định lượng đáng được đề xuất.
Đồng thời, chiến lược này cũng có một số không gian cải tiến. Bằng các phương tiện như tối ưu hóa tham số, cải thiện cơ chế ngăn chặn thiệt hại, tăng cường cơ chế tín hiệu và lọc, chiến lược này có thể phát triển theo hướng ổn định hơn, tự động hóa và thông minh hơn, đó cũng là mục tiêu của công việc tiếp theo của chúng tôi.
/*backtest
start: 2023-12-27 00:00:00
end: 2024-01-03 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KivancOzbilgic
//created by: @Anil_Ozeksi
//developer: ANIL ÖZEKŞİ
//author: @kivancozbilgic
strategy(title="Stochastic Optimized Trend Tracker", shorttitle="SOTT", format=format.price, precision=2)
periodK = input(250, title="%K Length", minval=1)
smoothK = input(50, title="%K Smoothing", minval=1)
src1 = input(close, title="Source")
length=input(3, "OTT Period", minval=1)
percent=input(0.618, "OTT Percent", type=input.float, step=0.1, minval=0)
showsupport = input(title="Show Support Line?", type=input.bool, defval=false)
showsignalsc = input(title="Show Stochastic/OTT Crossing Signals?", type=input.bool, defval=false)
Var_Func1(src1,length)=>
valpha1=2/(length+1)
vud11=src1>src1[1] ? src1-src1[1] : 0
vdd11=src1<src1[1] ? src1[1]-src1 : 0
vUD1=sum(vud11,9)
vDD1=sum(vdd11,9)
vCMO1=nz((vUD1-vDD1)/(vUD1+vDD1))
VAR1=0.0
VAR1:=nz(valpha1*abs(vCMO1)*src1)+(1-valpha1*abs(vCMO1))*nz(VAR1[1])
VAR1=Var_Func1(src1,length)
k = Var_Func1(stoch(close, high, low, periodK), smoothK)
src=k+1000
Var_Func(src,length)=>
valpha=2/(length+1)
vud1=src>src[1] ? src-src[1] : 0
vdd1=src<src[1] ? src[1]-src : 0
vUD=sum(vud1,9)
vDD=sum(vdd1,9)
vCMO=nz((vUD-vDD)/(vUD+vDD))
VAR=0.0
VAR:=nz(valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*nz(VAR[1])
VAR=Var_Func(src,length)
h0 = hline(1080, "Upper Band", color=#606060)
h1 = hline(1020, "Lower Band", color=#606060)
fill(h0, h1, color=#9915FF, transp=80, title="Background")
plot(k+1000, title="%K", color=#0094FF)
MAvg=Var_Func(src, length)
fark=MAvg*percent*0.01
longStop = MAvg - fark
longStopPrev = nz(longStop[1], longStop)
longStop := MAvg > longStopPrev ? max(longStop, longStopPrev) : longStop
shortStop = MAvg + fark
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := MAvg < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
MT = dir==1 ? longStop: shortStop
OTT=MAvg>MT ? MT*(200+percent)/200 : MT*(200-percent)/200
plot(showsupport ? MAvg : na, color=#0585E1, linewidth=2, title="Support Line")
OTTC = #B800D9
pALL=plot(nz(OTT[2]), color=OTTC, linewidth=2, title="OTT", transp=0)
alertcondition(cross(src, OTT[2]), title="Price Cross Alert", message="OTT - Price Crossing!")
alertcondition(crossover(src, OTT[2]), title="Price Crossover Alarm", message="PRICE OVER OTT - BUY SIGNAL!")
alertcondition(crossunder(src, OTT[2]), title="Price Crossunder Alarm", message="PRICE UNDER OTT - SELL SIGNAL!")
buySignalc = crossover(src, OTT[2])
plotshape(buySignalc and showsignalsc ? OTT*0.995 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
sellSignallc = crossunder(src, OTT[2])
plotshape(sellSignallc and showsignalsc ? OTT*1.005 : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
dummy0 = input(true, title = "=Backtest Inputs=")
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear = input(defval = 2005, title = "From Year", minval = 2005)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToYear = input(defval = 9999, title = "To Year", minval = 2006)
Start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
Finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
Timerange() =>
time >= Start and time <= Finish ? true : false
if buySignalc
strategy.entry("Long", strategy.long,when=Timerange())
if sellSignallc
strategy.entry("Short", strategy.short,when=Timerange())