
Эта стратегия использует методы многоциклического эмоционального анализа для многолинейных сделок с контрактами XBTUSD. Она комплексно учитывает колебания цены и информацию о максимальных и минимальных ценах в разных циклах, рассчитывает общую эмоциональную стоимость текущего рынка с помощью ряда весовых корректировок.
Вычислить показатели, такие как максимальная цена, минимальная цена, средняя цена, величина колебаний цены в течение a до j циклов (с 1 до 89 K-линий).
Определяет стандартизированную позицию текущей закрытой цены в ценовом диапазоне (переменная “place”), а затем объединяет колебания цен в каждом периоде, чтобы рассчитать эмоциональные значения в разных периодах.
Эмоциональные значения, скорректированные по ряду весовых переменных, рассчитывают общее эмоциональное значение (sentiment). Эмоциональные значения отражают средние эмоции на текущем рынке.
Анализируйте колебания эмоциональных значений, когда эмоции переходят от положительного к отрицательному, создавая сигнал продажи; когда эмоции переходят от отрицательного к положительному, создавая сигнал покупки.
Размер абсолютных колебаний эмоций (дельта-переменная), оценка силы входа в игру и установка условий стоп-стоп.
По мнению экспертов, это позволит более полно оценить рыночные тенденции, учитывая различные эмоции в разные периоды времени.
Механизм перевеса делает стратегию более стабильной.
Внимание к эмоциональным показателям и эмоциональным колебаниям позволяет более точно определить время поступления.
Контроль риска в сочетании с максимальной ценой и минимальной ценой и механизмом сдерживания убытков.
Неправильная настройка параметров может привести к слишком частым сделкам или упущенным возможностям.
Внезапные черные лебеди могут привести к провалу стратегии.
Изменения в контрактах, правила торговли и т.д. могут повлиять на стратегию.
Расчет эмоциональных значений зависит от исторических данных и требует переоценки и корректировки при изменении структуры рынка.
Можно оптимизировать стратегию путем корректировки весов, циклов торговли и стоп-лосс, чтобы она была более адаптирована к изменениям в структуре рынка. При этом оптимизируется управление капиталом, строго контролируется размер отдельных сделок и общая позиция.
Продолжайте расширять циклы анализа, чтобы обогатить основу для эмоционального суждения.
Добавить больше технических показателей, чтобы достичь комбинации эмоционального суждения и технических показателей.
Эмоциональные характеристики в сочетании с машинным обучением.
Динамическая настройка весов.
Оптимизация стратегии стоп-стоп.
Эта стратегия основана на торговой идее, основанной на эмоциональном анализе, для оценки текущих общих рыночных настроений с помощью комплексного многоциклического рассмотрения. Ее последовательные изменения настроений служат основой для создания торговых сигналов, а также для определения конкретного времени входа в рынок с помощью информации о колебаниях цен.
/*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)