//Noro
// 1.9 - 2.1 - Buy
// e=binance a=AutoView s=btcusdt b=buy t=market q=100% delay=1
// 3.9 - 5.1 - CloseAll or CloseAll and Sell
// e=binance a=AutoView s=btcusdt b=sell t=market q=100% delay=1
// 5.9 - 6.1 - CloseAll and Buy (no Short Sell in binance. so only buy)
// e=binance a=AutoView s=btcusdt b=buy t=market q=100% delay=1
//2018
//
// short trade
// e=bitfinex a=bitfinex s=btcusd b=short t=market q=0.002 l=10
// on 0.8 - 1.2
// e=bitfinex a=bitfinex s=btcusd b=sell t=market q=100%
// e=bitfinex a=bitfinex s=btcusd b=short t=market q=0.002 l=10
// on 5.2 4.8
// i think this the right stop for the short
// e=bitfinex a=bitfinex s=btcusd b=short c=position q=0.002 t=market
// e=bitfinex a=bitfinex s=btcusd b=sell t=market q=100% and that the long
// a=* e=bitmextestnet s=XBTUSD s=sell t=market c=position
// a=* e=BitMEXtestnet b=buy l=2 q=90% s=XBTUSD u=contracts t=market delay=15
// Ранее я выкладывал стратегию BarColor, оказалась она совместима с той мешаниной, которая получилась в Fast RSI , и я её еще и туда прикрутил до кучи. Но оказалась что она даже более совместима чем Min/Max, не ожидал.
// Все три включенные стратегии (галки Use *** Strategy стало три штуки) максимизируют доходность.
// Диверсификации
// Иметь 3 стратегии в одном боте очень прикольно, так как если одна из трех вдруг перестанет работать (исчезнет закономерность, которую эксплуатирует бот - когда-нибудь это обязательно произойдет), то по крайней мере продолжат работать две оставшихся. А какая из стратегий перестала работать легко и удобно определить просто выключая галочки Use *** Strategy.
// Закономерности
// Скрипт стратегии юзает 4 закономерности, которые есть на рынке крипты. 4, если все галки стоят.
// 1) Тело свечи. Если тело свечи больше половины среднего тела свечи, то вероятность разворота больше чем 50/50. Где среднее тело свечи - это простое среднее-арифметическое из 10 предыдущих свечей. То есть говоря программистски abody = sma (body, 10).
// 2) Fast RSI . Обычный RSI с периодом 7, вместо классического периода в 14. Лимит 30%. Если RSI просел ниже 30, то вероятность роста больше чем 50/50.
// Стратегию интересуют сочетание этих двух закономерностей одновременно на одной свече. То есть и RSI должен просесть ниже 30, и тело свечи должно быть длиннее половины среднего - тогда это годная свеча чтобы открывать на лонг, так как на одной свече висит сразу 2 закономерности.
// 3) Min/Max, если низ тела свечи ниже предыдущего низа тела свечи, то вероятность роста больше чем 50/50. Так же и для шорта верно обратное.
// 4) Цвет двух свечей подряд. Проще говоря, после двух красных свечек вероятность появления зеленой свечки (роста) чуть-чуть выше чем 50/50.
// Ну вот от этого всего и пляска.
//@version=3
study(title = "Noro's FRSI Indicator v1.6 for AutoView", shorttitle = "AV FRSI 1.6")
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usersi = input(true, defval = true, title = "Use Fast RSI Strategy")
usemm = input(true, defval = true, title = "Use Min/Max Strategy")
usebc = input(true, defval = true, title = "Use BarColor Strategy")
usesma = input(false, defval = false, title = "Use SMA Filter")
smaperiod = input(20, defval = 20, minval = 2, maxval = 1000, title = "SMA Filter Period")
fast = input(7, defval = 7, minval = 2, maxval = 50, title = "Fast RSI Period")
limit = input(30, defval = 30, minval = 1, maxval = 100, title = "RSI limit")
rsisrc = input(close, defval = close, title = "RSI Price")
rsibars = input(1, defval = 1, minval = 1, maxval = 20, title = "RSI Bars")
mmbars = input(1, defval = 1, minval = 1, maxval = 5, title = "Min/Max Bars")
fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
maxavgcount = input(1, defval = 1, minval = 1, maxval = 10, title = "Max Averaging count. 1 - no average rebuy/resell")
//Fast RSI
fastup = rma(max(change(rsisrc), 0), fast)
fastdown = rma(-min(change(rsisrc), 0), fast)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))
//Limits
//bar type
bar = close > open ? 1 : close < open ? -1 : 0
uplimit = 100 - limit
dnlimit = limit
//RSI Bars
upsignal = fastrsi > uplimit ? 1 : 0
dnsignal = fastrsi < dnlimit ? 1 : 0
uprsi = sma(upsignal, rsibars) == 1
dnrsi = sma(dnsignal, rsibars) == 1
//Body
body = abs(close - open)
abody = sma(body, 10)
//MinMax Bars
min = min(close, open)
max = max(close, open)
minsignal = min < min[1] and bar == -1 and bar[1] == -1 ? 1 : 0
maxsignal = max > max[1] and bar == 1 and bar[1] == 1 ? 1 : 0
mins = sma(minsignal, mmbars) == 1
maxs = sma(maxsignal, mmbars) == 1
//SMA Filter
sma = sma(close, smaperiod)
// colorsma = showsma ? blue : na
// plot(sma, color = colorsma, linewidth = 3)
//======[ Signal Count ]======//
sectionLongs = 0
sectionLongs := nz(sectionLongs[1])
sectionShorts = 0
sectionShorts := nz(sectionShorts[1])
strategy_position_size = sectionLongs - sectionShorts
//======[ Position Averages ]======//
totalLongs = 0.0
totalLongs := nz(totalLongs[1])
totalShorts = 0.0
totalShorts := nz(totalShorts[1])
averageLongs = 0.0
averageLongs := nz(averageLongs[1])
averageShorts = 0.0
averageShorts := nz(averageShorts[1])
//Signals
up1 = bar == -1 and (strategy_position_size == 0 or close < averageLongs) and dnrsi and body > abody / 5 and usersi
dn1 = bar == 1 and (strategy_position_size == 0 or close > averageShorts) and uprsi and body > abody / 5 and usersi
up2 = mins and (close > sma or usesma == false) and fastrsi < uplimit and usemm
dn2 = maxs and (close < sma or usesma == false) and fastrsi > dnlimit and usemm
up3 = sma(bar, 2) == -1 and usebc
dn3 = sma(bar, 2) == 1 and usebc
exit = ((strategy_position_size > 0 and fastrsi > dnlimit and bar == 1) or (strategy_position_size < 0 and fastrsi < uplimit and bar == -1)) and body > abody / 2
sgnlclose = 0
sgnllong = 0
sgnlshort = 0
//Trading
if up1 or up2 or up3
if strategy_position_size < 0
sgnlclose := 1
totalShorts := 0
sectionShorts := 0
averageShorts := 0
if sectionLongs < maxavgcount
sgnllong := 1
sectionLongs := sectionLongs + 1
totalLongs := totalLongs + close
averageLongs := totalLongs / sectionLongs
if dn1 or dn2 or dn3
if strategy_position_size > 0
sgnlclose := 1
totalLongs := 0
sectionLongs := 0
averageLongs := 0
if sectionShorts < maxavgcount
sgnlshort := 1
sectionShorts := sectionShorts + 1
totalShorts := totalShorts + close
averageShorts := totalShorts / sectionShorts
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
sgnlclose :=1
if sgnlclose == 1
totalLongs := 0
sectionLongs := 0
averageLongs := 0
totalShorts := 0
sectionShorts := 0
averageShorts := 0
plot(sgnllong8, "Long" , green , linewidth=2, style=area, transp=50)
plot(sgnlshort8, "Short" , red , linewidth=2, style=area, transp=50)
plot(sgnlclose8, "CloseAll" , purple , linewidth=2, style=area, transp=50)
plot(sgnllong2 + sgnlshort + sgnlclose*4, "Code", gray , linewidth=1, style=area, transp=50)
@forward Поздравляю! Вы получили личную награду!
С Днём Рождения - 2 лет на Голосе
Вы можете нажать на бейдж, чтобы увидеть свою страницу на Доске Почета.
@forward Поздравляю! Вы получили личную награду!
С Днём Рождения - 1 год на Голосе
Вы можете нажать на бейдж, чтобы увидеть свою страницу на Доске Почета.