Strategi ini mengadopsi pendekatan analisis sentimen multi-siklus untuk pergi panjang atau pendek kontrak berjangka XBTUSD. Ini secara komprehensif mempertimbangkan rentang fluktuasi harga dan harga tertinggi dan terendah di berbagai siklus, dan menghitung sentimen pasar secara keseluruhan melalui serangkaian penyesuaian bobot.
Menghitung harga tertinggi, harga terendah, harga rata-rata, kisaran fluktuasi harga dan indikator lainnya di seluruh siklus dari a sampai j (1 sampai 89 bar).
Tentukan posisi standar harga penutupan dalam kisaran harga (variabel tempat). Gabungkan dengan kisaran fluktuasi harga dari setiap siklus untuk mendapatkan nilai sentimen untuk siklus yang berbeda.
Nilai sentimen melalui serangkaian penyesuaian bobot (variabel w) untuk mendapatkan nilai sentimen keseluruhan (sentimen). Sentimen mencerminkan suasana pasar saat ini secara keseluruhan.
Menganalisis fluktuasi nilai sentimen. Sinyal jual dihasilkan ketika sentimen berubah dari positif menjadi negatif. Sinyal beli dihasilkan ketika sentimen berubah dari negatif menjadi positif.
Menentukan momentum masuk dan mengatur kondisi mengambil keuntungan dan stop loss berdasarkan nilai absolut fluktuasi sentimen (variabel delta).
Pertimbangkan sentimen di berbagai siklus untuk penilaian tren pasar yang lebih komprehensif.
Mekanisme penyesuaian berat membuat strategi lebih stabil.
Waktu masuk yang lebih tepat dengan menggabungkan nilai sentimen dan fluktuasinya.
Mengelola risiko dengan harga tertinggi, harga terendah, mengambil keuntungan dan stop loss.
Pengaturan parameter yang tidak benar dapat menyebabkan perdagangan yang terlalu sering atau kehilangan peluang.
Peristiwa Black Swan mungkin membatalkan logika strategi.
Penyesuaian kontrak dan perubahan aturan dapat mempengaruhi kinerja strategi.
Perhitungan sentimen didasarkan pada data historis. penilaian ulang diperlukan ketika rezim pasar berubah.
Risiko dapat dikelola dengan menyesuaikan bobot, siklus perdagangan, mengambil rasio keuntungan dll untuk menyesuaikan dengan perubahan kondisi pasar. Sementara itu mengoptimalkan manajemen modal dengan ketat mengendalikan ukuran posisi dan eksposur keseluruhan.
Perluas siklus analisis untuk membangun dasar yang lebih kaya untuk penilaian sentimen.
Masukkan lebih banyak indikator teknis untuk pendekatan gabungan.
Ekstrak fitur sentimen dengan metode pembelajaran mesin.
Sesuaikan pengaturan berat secara dinamis.
Mengoptimalkan mengambil keuntungan dan strategi stop loss.
Strategi ini didasarkan pada filosofi perdagangan analisis sentimen. Hal ini menentukan mood pasar secara keseluruhan saat ini dengan mempertimbangkan beberapa siklus. Perubahan sentimen terus-menerus berfungsi sebagai dasar untuk menghasilkan sinyal perdagangan, dibantu oleh fluktuasi harga untuk entri waktu. Pendekatan unik ini menilai tren pasar bekerja dengan baik dalam siklus yang bervariasi. Lebih lanjut memperluas periode analisis, menambahkan lebih banyak indikator dan mengoptimalkan dapat membuat strategi perdagangan sentimen lebih matang dan stabil untuk beradaptasi dengan lingkungan pasar yang lebih kompleks.
/*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)