Strategi Perdagangan Berjangka XBT Berdasarkan Sentimen


Tanggal Pembuatan: 2023-12-22 14:48:44 Akhirnya memodifikasi: 2023-12-22 14:48:44
menyalin: 1 Jumlah klik: 649
1
fokus pada
1623
Pengikut

Strategi Perdagangan Berjangka XBT Berdasarkan Sentimen

Ringkasan

Strategi ini menggunakan metode analisis sentimen multi-siklus untuk melakukan perdagangan terbuka pada kontrak XBTUSD. Strategi ini secara komprehensif mempertimbangkan fluktuasi harga dan informasi harga tertinggi dan terendah dalam periode yang berbeda, dengan menggunakan serangkaian penyesuaian berat, untuk menghitung nilai sentimen keseluruhan pasar saat ini.

Prinsip Strategi

  1. Hitung indikator harga tertinggi, harga terendah, harga rata-rata, dan amplitudo fluktuasi harga di bawah siklus a sampai j (dalam garis K dari 1 sampai 89)

  2. Menentukan posisi standar harga penutupan saat ini dalam kisaran harga (variabel tempat), kemudian menggabungkan amplitudo fluktuasi harga setiap periode untuk menghitung nilai emosi dalam periode yang berbeda.

  3. Nilai sentimen disesuaikan dengan serangkaian variabel berat (w) untuk menghitung nilai sentimen keseluruhan (sentiment). Nilai sentimen mencerminkan rata-rata sentimen pasar saat ini.

  4. Analisis fluktuasi nilai emosi, menghasilkan sinyal jual ketika emosi berubah dari positif ke negatif; menghasilkan sinyal beli ketika emosi berubah dari negatif ke positif.

  5. Berdasarkan besarnya nilai mutlak fluktuasi emosi (variabel delta), menilai intensitas masuk, dan mengatur kondisi stop loss.

Keunggulan Strategis

  1. Ini adalah cara yang lebih komprehensif untuk menilai tren pasar, dengan mempertimbangkan berbagai emosi dalam berbagai periode waktu.

  2. Mekanisme penyesuaian berat membuat strategi lebih stabil.

  3. Dengan mempertimbangkan nilai emosi dan fluktuasi emosi, waktu masuk lebih akurat.

  4. Pengendalian risiko dari Stop Loss Mechanism (SLSM) dengan harga tertinggi dan harga terendah.

Risiko Strategis

  1. Penetapan parameter yang tidak tepat dapat menyebabkan terlalu banyak perdagangan atau kehilangan peluang perdagangan.

  2. Kejadian Black Swan yang tak terduga dapat menyebabkan kegagalan strategi.

  3. Perubahan kontrak, perubahan aturan perdagangan, dan lain-lain dapat mempengaruhi strategi.

  4. Perhitungan nilai emosi bergantung pada data historis dan perlu dievaluasi ulang dan disesuaikan dengan perubahan struktur pasar.

Hal ini dapat dioptimalkan dengan menyesuaikan parameter seperti berat, siklus perdagangan, stop loss, dan lain-lain, sehingga strategi lebih sesuai dengan perubahan struktur pasar. Selain itu, pengelolaan dana yang dioptimalkan, pengendalian ketat terhadap ukuran perdagangan tunggal dan posisi keseluruhan.

Arah optimasi

  1. Ini adalah salah satu contoh yang paling jelas dari apa yang terjadi di dunia.

  2. Menambahkan lebih banyak indikator teknis untuk kombinasi penilaian emosi dan indikator teknis.

  3. Menggunakan metode pembelajaran mesin untuk mengekstrak karakteristik emosi.

  4. Pengaturan berat secara dinamis.

  5. Optimalkan strategi Stop Loss.

Meringkaskan

Strategi ini didasarkan pada filosofi perdagangan analisis emosi, melalui pertimbangan komprehensif multi-siklus, menilai emosi pasar saat ini secara keseluruhan. Perubahan emosi berturut-turut sebagai dasar untuk menghasilkan sinyal perdagangan, dan didukung oleh informasi fluktuasi harga untuk menentukan waktu masuk spesifik.

Kode Sumber Strategi
/*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)