Chiến lược giao dịch tương lai XBT dựa trên tâm lý


Ngày tạo: 2023-12-22 14:48:44 sửa đổi lần cuối: 2023-12-22 14:48:44
sao chép: 1 Số nhấp chuột: 649
1
tập trung vào
1623
Người theo dõi

Chiến lược giao dịch tương lai XBT dựa trên tâm lý

Tổng quan

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.

Nguyên tắc chiến lược

  1. 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)

  2. 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.

  3. 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.

  4. 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.

  5. 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ỗ.

Lợi thế chiến lược

  1. 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.

  2. Cơ chế điều chỉnh trọng lượng giúp chiến lược ổn định hơn.

  3. 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.

  4. 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.

Rủi ro chiến lược

  1. 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.

  2. Một sự kiện Black Swan bất ngờ có thể gây ra thất bại trong chiến lược.

  3. Đ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.

  4. 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ể.

Hướng tối ưu hóa

  1. 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.

  2. 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.

  3. 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.

  4. Động thái điều chỉnh trọng lượng.

  5. Tối ưu hóa chiến lược dừng lỗ.

Tóm tắt

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ể.

Mã nguồn chiến lược
/*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)