Strategi ini mengamalkan pendekatan analisis sentimen pelbagai kitaran untuk pergi panjang atau pendek kontrak niaga hadapan XBTUSD. Ia secara komprehensif mempertimbangkan julat turun naik harga dan harga tertinggi dan terendah merentasi kitaran yang berbeza, dan mengira sentimen pasaran secara keseluruhan melalui satu siri penyesuaian berat. Isyarat beli dan jual dihasilkan berdasarkan corak perubahan nilai sentimen.
Mengira harga tertinggi, harga terendah, harga purata, julat turun naik harga dan penunjuk lain di seluruh kitaran dari a hingga j (1 hingga 89 bar).
Tentukan kedudukan standard harga penutupan dalam julat harga (pemainkan pembolehubah). Gabungkan dengan julat turun naik harga setiap kitaran untuk mendapatkan nilai sentimen untuk kitaran yang berbeza.
Nilai sentimen melalui satu siri penyesuaian berat (variabel w) untuk mendapatkan nilai sentimen keseluruhan (sentimen). Sentimen mencerminkan mood pasaran keseluruhan semasa.
Menganalisis turun naik nilai sentimen. Isyarat jual dihasilkan apabila sentimen berubah dari positif kepada negatif. Isyarat beli dihasilkan apabila sentimen berubah dari negatif kepada positif.
Menentukan momentum kemasukan dan menetapkan mengambil keuntungan dan syarat berhenti kerugian berdasarkan nilai mutlak fluktuasi sentimen (variabel delta).
Pertimbangkan sentimen merentasi kitaran yang berbeza untuk penilaian trend pasaran yang lebih komprehensif.
Mekanisme pelarasan berat menjadikan strategi lebih stabil.
Masa kemasukan yang lebih tepat dengan menggabungkan nilai sentimen dan turun naiknya.
Menguruskan risiko dengan harga tertinggi, harga terendah, mengambil keuntungan dan hentikan kerugian.
Tetapan parameter yang tidak betul boleh menyebabkan perdagangan yang terlalu kerap atau peluang yang hilang.
Peristiwa Black Swan boleh membatalkan logik strategi.
Penyesuaian kontrak dan perubahan peraturan boleh mempengaruhi prestasi strategi.
Pengiraan sentimen bergantung pada data sejarah. Penilaian semula diperlukan apabila rejim pasaran berubah.
Risiko boleh dikendalikan dengan menyesuaikan berat, kitaran dagangan, mengambil nisbah keuntungan dan lain-lain untuk menyesuaikan dengan keadaan pasaran yang berubah. Sementara itu, mengoptimumkan pengurusan modal dengan mengawal ukuran kedudukan dan pendedahan keseluruhan.
Luaskan kitaran analisis untuk membina asas yang lebih kaya untuk penilaian sentimen.
Memasukkan lebih banyak penunjuk teknikal untuk pendekatan gabungan.
Keluarkan ciri sentimen dengan kaedah pembelajaran mesin.
Sesuaikan tetapan berat secara dinamik.
Mengoptimumkan mengambil keuntungan dan strategi berhenti kerugian.
Strategi ini berdasarkan falsafah perdagangan analisis sentimen. Ia menentukan mood pasaran keseluruhan semasa dengan mempertimbangkan pelbagai kitaran. Perubahan sentimen yang berterusan berfungsi sebagai asas untuk menghasilkan isyarat perdagangan, dibantu oleh turun naik harga untuk kemasukan masa. Pendekatan unik ini menilai trend pasaran berfungsi dengan baik dalam kitaran yang berbeza. Memperluas tempoh analisis, menambah lebih banyak penunjuk dan mengoptimumkan boleh menjadikan strategi perdagangan sentimen lebih matang dan stabil untuk menyesuaikan diri dengan persekitaran pasaran 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)