
Chiến lược này sử dụng phương pháp phân tích cảm xúc đa chu kỳ để giao dịch nhiều khoảng trống cho hợp đồng XBTUSD. Nó xem xét toàn diện mức độ biến động giá và thông tin giá cao nhất, giá thấp nhất trong các chu kỳ khác nhau, tính toán giá trị cảm xúc tổng thể của thị trường hiện tại thông qua một loạt các trọng số. Xác định tình hình dựa trên quy luật thay đổi giá trị cảm xúc, tạo ra tín hiệu mua và bán.
Tính giá cao nhất, giá thấp nhất, giá trung bình, giá dao động theo chu kỳ a đến j (đường K từ 1 đến 89)
Xác định vị trí tiêu chuẩn hóa của giá đóng cửa hiện tại trong phạm vi giá, và sau đó kết hợp các biến động giá theo chu kỳ để tính toán giá trị cảm xúc trong các chu kỳ khác nhau.
Giá trị cảm xúc được điều chỉnh theo một loạt các biến trọng lượng để tính toán giá trị cảm xúc tổng thể. Giá trị cảm xúc phản ánh cảm xúc trung bình của thị trường hiện tại.
Phân tích sự biến động của giá trị cảm xúc, khi cảm xúc chuyển từ tích cực sang âm, tạo ra tín hiệu bán; khi cảm xúc chuyển từ âm sang tích cực, tạo ra tín hiệu mua.
Phân tích mức độ của sự thay đổi tuyệt đối của cảm xúc (thường là biến delta), đánh giá mức độ của sự tham gia, và thiết lập điều kiện dừng lỗ.
Các nhà đầu tư cũng có thể xem xét các cảm xúc trong các giai đoạn thời gian khác nhau để đánh giá một cách toàn diện hơn về xu hướng của thị trường.
Cơ chế điều chỉnh trọng lượng giúp chiến lược ổn định hơn.
Cân nhắc tổng hợp các giá trị cảm xúc và biến động cảm xúc, đánh giá thời gian nhập học chính xác hơn.
Kiểm soát rủi ro với giá thấp nhất và giá cao nhất và hệ thống ngăn chặn.
Thiết lập tham số không đúng có thể dẫn đến giao dịch quá thường xuyên hoặc bỏ lỡ cơ hội giao dịch.
Một sự kiện Black Swan bất ngờ có thể gây ra thất bại trong chiến lược.
Điều chỉnh hợp đồng, thay đổi quy tắc giao dịch có thể ảnh hưởng đến chiến lược.
Tính toán giá trị cảm xúc phụ thuộc vào dữ liệu lịch sử và cần được đánh giá lại và điều chỉnh khi cấu trúc thị trường thay đổi.
Có thể tối ưu hóa các tham số bằng cách điều chỉnh trọng số, chu kỳ giao dịch, mức dừng lỗ, để chiến lược thích ứng hơn với sự thay đổi của cấu trúc thị trường. Đồng thời tối ưu hóa quản lý tiền, kiểm soát chặt chẽ quy mô giao dịch và vị trí tổng thể.
Tiếp tục mở rộng chu kỳ phân tích, làm phong phú nền tảng phán đoán cảm xúc.
Thêm thêm các chỉ số kỹ thuật, kết hợp các chỉ số về cảm xúc và kỹ thuật.
Phương pháp học máy kết hợp để trích xuất các đặc điểm cảm xúc.
Động thái điều chỉnh trọng lượng.
Tối ưu hóa chiến lược dừng lỗ.
Chiến lược này dựa trên lý thuyết giao dịch của phân tích cảm xúc, thông qua xem xét tổng hợp nhiều chu kỳ, đánh giá cảm xúc thị trường tổng thể hiện tại. Sự thay đổi cảm xúc liên tục của nó là cơ sở để tạo tín hiệu giao dịch, và hỗ trợ thông tin biến động giá để đánh giá thời điểm tham gia cụ thể.
/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 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/
// © Jomy
//@version=4
//2h chart BITMEX:XBTUSD
//use on low leverage 1-2x only
strategy("expected range STRATEGY",overlay=false,initial_capital=1000,precision=2)
leverage=input(1,"leverage",step=.5)
tp=input(53,"take profit %",step=1)
sl=input(7,"stoploss %",step=1)
stoploss=1-(sl/100)
plot(stoploss)
level=input(.70,"level to initiate trade",step=.02)
closelevel=input(0.0,"level to close trade",step=.02)
levelshort=input(.68,"level to initiate trade",step=.02)
closelevelshort=input(0.0,"level to close trade",step=.02)
wa=input(1.158,"weight a",step=.2)
wb=input(1.119,"weight b",step=.2)
wc=input(1.153,"weight c",step=.2)
wd=input(1.272,"weight d",step=.2)
we=input(1.295,"weight e",step=.2)
wf=input(1.523,"weight f",step=.2)
wg=input(1.588,"weight g",step=.2)
wh=input(2.100,"weight h",step=.2)
wi=input(1.816,"weight i",step=.2)
wj=input(2.832,"weight j",step=.2)
a=1
b=2
c=3
d=5
e=8
f=13
g=21
h=34
i=55
j=89
n=0
n:=if volume > -1
nz(n[1])+1
ra=highest(high,a)-lowest(low,a)
aa=sma(ohlc4,a)
ha=aa[1]+ra[1]/2
la=aa[1]-ra[1]/2
rb=highest(high,b)-lowest(low,b)
ab=sma(ohlc4,b)
hb=ab[1]+rb[1]/2
lb=ab[1]-rb[1]/2
rc=highest(high,c)-lowest(low,c)
ac=sma(ohlc4,c)
hc=ac[1]+rc[1]/2
lc=ac[1]-rc[1]/2
rd=highest(high,d)-lowest(low,d)
ad=sma(ohlc4,d)
hd=ad[1]+rd[1]/2
ld=ad[1]-rd[1]/2
re=highest(high,e)-lowest(low,e)
ae=sma(ohlc4,e)
he=ae[1]+re[1]/2
le=ae[1]-re[1]/2
rf=highest(high,f)-lowest(low,f)
af=sma(ohlc4,f)
hf=af[1]+rf[1]/2
lf=af[1]-rf[1]/2
rg=highest(high,g)-lowest(low,g)
ag=sma(ohlc4,g)
hg=ag[1]+rg[1]/2
lg=ag[1]-rg[1]/2
rh=highest(high,h)-lowest(low,h)
ah=sma(ohlc4,h)
hh=ah[1]+rh[1]/2
lh=ah[1]-rh[1]/2
ri=highest(high,i)-lowest(low,i)
ai=sma(ohlc4,i)
hi=ai[1]+ri[1]/2
li=ai[1]-ri[1]/2
rj=highest(high,j)-lowest(low,j)
aj=sma(ohlc4,j)
hj=aj[1]+rj[1]/2
lj=aj[1]-rj[1]/2
placea=((close-la)/(ha-la)-.5)*-100
placeb=((close-lb)/(hb-lb)-.5)*-100
placec=((close-lc)/(hc-lc)-.5)*-100
placed=((close-ld)/(hd-ld)-.5)*-100
placee=((close-le)/(he-le)-.5)*-100
placef=((close-lf)/(hf-lf)-.5)*-100
placeg=((close-lg)/(hg-lg)-.5)*-100
placeh=((close-lh)/(hh-lh)-.5)*-100
placei=((close-li)/(hi-li)-.5)*-100
placej=((close-lj)/(hj-lj)-.5)*-100
sentiment=((placea/j)*ra*wa+(placeb/i)*rb*wb+(placec/h)*rc*wc+(placed/g)*rd*wd+(placee/f)*re*we+(placef/e)*rf*wf+(placeg/d)*rg*wg+(placeh/c)*rh*wh+(placei/b)*ri*wi+(placej/a)*rj*wj)/(wa+wb+wc+wd+we+wf+wg+wh+wi+wj)
deltalong=0.0
deltalong:=if sentiment>0
nz(deltalong[1])+sentiment-sentiment[1]
else
0
deltashort=0.0
deltashort:=if sentiment<0
nz(deltashort[1])+((sentiment-sentiment[1])*-1)
else
0
//plot(sentiment*-1,color=color.blue)
//plot(deltalong,color=color.red)
//plot(deltashort,color=color.lime)
peakfindlong=highest(deltalong,j)*level
peakfindshort=highest(deltashort,j)*levelshort
contracts=(strategy.equity/close)*leverage
//reason for o is this strategy makes dumb trades before the sentiment line crosses the 0 point the first time
o=0
o:=if cross(0,sentiment) and n>j
1
else
nz(o[1])
long=deltashort>peakfindlong and o==1
short=deltalong>peakfindshort and o==1
longstart=0.0
longstart:=if strategy.position_size>0 and strategy.position_size[1]<=0
close
else
nz(longstart[1])
shortstart=0.0
shortstart:=if strategy.position_size<0 and strategy.position_size[1]>=0
close
else
nz(shortstart[1])
highsincelong = 0.0
highsincelong := if strategy.position_size>0
max(max(highsincelong[1],high),high[1])
else
0
lowsinceshort = 1000000.0
lowsinceshort := if strategy.position_size<0
min(min(lowsinceshort[1],low),low[1])
else
10000000
closelong=strategy.position_size > 0 and ((highsincelong/longstart-1)*100) > tp
closeshort=strategy.position_size < 0 and ((shortstart/lowsinceshort-1)*100) > tp
stoptrade=0
stoptrade:= if closelong
1
else
nz(stoptrade[1])
stoptrade:= if short and stoptrade[1]==1
0
else
stoptrade
stoptrade:= if closeshort
-1
else
stoptrade
stoptrade:= if long and stoptrade[1]==-1
0
else
stoptrade
if(closelong)
strategy.close("Long1")
pnllong = ((close - strategy.position_avg_price) / strategy.position_avg_price)*100
pnlshort = ((strategy.position_avg_price-close) / strategy.position_avg_price) *100
plot (strategy.position_size > 0 ?(highsincelong/longstart-1)*100 : 0.0,color=color.lime,linewidth=2)
plot (strategy.position_size < 0 ?(shortstart/lowsinceshort-1)*100 : 0.0,color=color.red,linewidth=2)
plot( strategy.position_size > 0 ? pnllong:0, color=strategy.position_size > 0 ?color.yellow:color.black,linewidth=2 )
plot( strategy.position_size < 0 ? pnlshort:0, color=strategy.position_size < 0 ?color.orange:color.black,linewidth=2)
longuntilshort=0
longuntilshort:=if long
1
else
if short
-1
else
nz(longuntilshort[1])
bgcolor(stoptrade!=0?color.black:longuntilshort==1?color.lime:longuntilshort==-1?color.red:na,transp=70)
if(long and stoptrade==0)
strategy.entry("Long1",strategy.long,qty=max(1,min(contracts,1000000000)))
if(closelong)
strategy.close("Long1")
strategy.exit("Long1",stop=longstart * stoploss,when = strategy.position_size>0)
if(short and stoptrade==0)
strategy.entry("Short1",strategy.short,max(1,min(contracts,1000000000)))
if(closeshort)
strategy.close("Short1")
strategy.exit("Long1",stop=shortstart / stoploss,when = strategy.position_size<0)