// Этот код Pine Script™ подчиняется условиям Лицензии Mozilla Public License 2.0 на https://mozilla.org/MPL/2.0/
// © jeromehorus предсказывает все циклические явления, может быть применимо к ветру и т.д.
//@version=6
indicator("бот диапазона маркетинга" ,overlay=true)
plage= input.int(33,"вершины")
clos = ta.sma(close,13)
float dm =0
float dd =0
for i = 0 до plage
m= clos-clos[1]>0?true:false
diff= math.abs(clos-clos[1])
dm := m? dm+diff:dm
dd := m==false? dd+diff:dd
bas = ta.lowest(close,13)
высокая = ta.highest(close,13)
rsip = input.int(27,"диапазон rsi")
rsivb = input.int(35,"значение перепроданности")
rsivh = input.int(70,"значение перекупленности")
rsiv = ta.rsi(close,rsip)
eml = input.int(83,"длина ema")
ema200 = ta.ema(close,eml)
ema666 = ta.ema(close,666)
m6 = ema666 - ema666[1] >0? true:false
plot( ema200, color= m6? color.green:color.red)
m2 = ema200 - ema200[1] >0? true:false
base = ta.lowest(close,33)
высокая = ta.highest( close,33)
plot( close, color= close> haute[13] ? color.green: close< base[13]? color.red: color.yellow,linewidth=5)
of= input.float(10.0, "Минимальный отскок в $ для подтверждения сигнала вершины")//10 для btc вершины более взрывные в волатильности
ofb= input.float(0.01, "Минимальный отскок в $ для подтверждения сигнала дна")// вершины более взрывные в волатильности
// Память о последнем дне или вершине
// Память
var float basDetecte = na
var bool ожиданиеРебонда = false
var bool сигналОтображен = false
// Обнаружение дна
if (close == bas and dd > dm and rsiv < rsivb and not ожиданиеРебонда)
basDetecte := close
ожиданиеРебонда := true
сигналОтображен := false
// Если в ожидании и отскок на 200$
if (ожиданиеРебонда and not сигналОтображен and close >= basDetecte + of)
//label.new(bar_index, low, "ПОКУПКА подтверждена", style=label.style_label_up, color=color.green, textcolor=color.white)
сигналОтображен := true
ожиданиеРебонда := false
// if (close[1]==bas[1] and dd[1]>dm[1] and rsiv[1]< rsivb[1] and close[1]+ofb< close)// и m2==false)
if (close==bas and dd>dm and rsiv< rsivb and close+ofb< close[1])// действительно на дне, менее 1 мин предыдущей и m2==false)
label.new(bar_index, low, "b", style=label.style_label_up, color=close>haute[13]?color.green:color.rgb(0,122,0), textcolor=color.white)
//alert("Цена низкая, возможность покупки ? ", alert.freq_once)
alert("СИГНАЛ ДНО",freq=alert.freq_once_per_bar_close)
// позволяет устранить некоторые ложные сигналы
// не все, потому что если это срабатывает несколько раз или тренд вверх, мы не продаем (необходим алгоритм для продвинутых, я это сделаю на c)
// if (close[1]==высокая[1] and dm[1]>dd[1] and rsiv[1] > rsivh[1] and close[1]-of > close)// и m2)
if (close==высокая and dm>dd and rsiv > rsivh and close-of > close[1])// на вершине, больше чем 1 мин предыдущей, и m2)
label.new(bar_index, high, "h", style=label.style_label_down, color=close<base[13]?color.red:color.rgb(255,55,55), textcolor=color.white)
//alert("Цена высокая, возможность продажи ? ", alert.freq_once)
alert("СИГНАЛ ВЕРШИНА",freq=alert.freq_once_per_bar_close)
// защита против rugPull
// определить диапазон цен
// мы могли бы сказать между последними вершинами
// дно и вершина по сравнению с последними вершинами
// 2) но также последние вершины высокие - значение RugPull
последниеВершины= ta.highest(close,333)
// мы ищем его менее, чтобы избежать
// мягкие RugPull
значениеRugPull = input.float(3,"Защита против RugPull, максимальная стоимость потерь в долларах за 333 минуты")
bool AntiRugPull = close < последниеВершины-значениеRugPull?false:true
// если актив падает слишком сильно на 3 доллара по сравнению со своей вершиной за 333 минуты, мы останавливаемся
// слишком много ложных сигналов
valsma = input.int(100,"SMA ЗАКРЫТИЯ")
sma100 = ta.sma(close,valsma)
plot(sma100,color=color.yellow,linewidth=3)
valEloign = input.float(0.1 , "удаление от sma для фильтрации ложных сигналов")
// если цена ниже sma
// мы покупаем иначе, мы
// не покупаем (цена слишком высокая или близка к sma)
prixAchat = sma100-valEloign
///////////////// сигналы закрытия
valclotu= input.int(13,"rsi закрытия")//7,17
rsivd = ta.rsi(close,valclotu)
закрытие = input.bool(false,"Торговля начата, уведомления о закрытии")
// установить сигнал стоп-лосс на 7% левередж 100 и 17% левередж 200
// ультимативное оружие против Rugpull
// определить диапазон
Session = input.float(0,"МИНИМАЛЬНЫЙ для сессии без потерь (смотрите 15 или 45 мин, если мы на дне)")
if (close< prixAchat and close> Session and cloture==true and close[1]==bas[1] and dd[1]>dm[1] and rsivd[1]< rsivb[1] and close[1]+ofb< close and AntiRugPull)// и m2==false)
// для бота
//if (закрытие==true and close==bas and dd>dm and rsivd< rsivb )// и m2==false)
label.new(bar_index, low, "☠", style=label.style_label_down, color=close>haute[13]?color.green:color.rgb(0,122,0), textcolor=color.white)
alert("закрыть короткую позицию ?",freq=alert.freq_once_per_bar_close)
if (close> sma100+valEloign and закрытие and close[1]==высокая[1] and dm[1]>dd[1] and rsivd[1] > rsivh[1] and close[1]-of > close and AntiRugPull)// и m2)
//f (закрытие and close==высокая and dm>dd and rsivd > rsivh )// и m2)
label.new(bar_index, high, "💀", style=label.style_label_up, color=close<base[13]?color.red:color.rgb(255,55,55), textcolor=color.white)
alert("закрыть длинную позицию",freq=alert.freq_once_per_bar_close)
float tp=0
if (bar_index > 0)
for i=0 до 83
mp = close[i]-close[i+1]>=0?true:false
dp = math.abs(close[i]-close[i+1])
tp := mp ? tp+dp: tp-dp
grandt = tp<=0?false: true
tp :=0
if (bar_index > 0)
for i=0 до 33
mp = close[i]-close[i+1]>=0?true:false
dp = math.abs(close[i]-close[i+1])
tp := mp ? tp+dp: tp-dp
пети= tp<=0?false: true
tp :=0
plot ( ema666, color= grandt ? peti ? color.green:color.blue: peti==false? color.red:color.yellow)
supportRes = input.int(83,"поддержка и сопротивление")
// r i= 0 до supportRes с шагом 33
hhaut = ta.highest(high,supportRes)
bbas = ta.lowest(low,supportRes)
box.new( bar_index-1233, hhaut, bar_index+253,hhaut,border_color = color.rgb(2,55,225,43),border_width=4,bgcolor=color.rgb(255,255,255,255))
box.new( bar_index-1233, bbas, bar_index+253,bbas,border_color = color.rgb(2,55,225,43),border_width=4,bgcolor=color.rgb(255,255,255,255))
plot (hhaut,color=color.green,offset=-1)
plot (bbas, color= color.green,offset=1)
plot(bbas+((hhaut-bbas)/3), color= color.red)
plot( hhaut- ((hhaut-bbas)/3) , color=color.yellow )
// условие для 1 buy после зоны buy, чтобы оставаться выше зеленого
plot ( ta.sma(close,13), color=color.black)
// sma 13, если мы ее пробиваем, мы входим в 1 buy
// расчет следующих уровней инвестиций
// в общем: риск краха,
// если мы пришли с вершины и она падает
// более 2000 : спираль.
prixAchatd = close//input.int(100000,"Цена покупки")
pallier = input.int(1000,"уровни DCA")
g = input.float(1.1,"геометрический")
// мы можем разложить
// покупки (по 1 разу)
// по уровням
// от поддержки
plot ( prixAchatd, color= color.black)
plot( prixAchatd-pallier, color=color.black)
plot( prixAchatd-pallier*2*g, color=color.black)
plot( prixAchatd-pallier*3*g, color=color.black)
plot( prixAchatd-pallier*4*g, color=color.black)
plot( prixAchatd-pallier*5*g, color=color.black)
plot( prixAchatd-pallier*6*g, color=color.black)
plot( prixAchatd-pallier*7*g, color=color.black)
// следящий стоп
стоп = input.float(200,"падение актива для срабатывания стопа")
somm = input.int(13,"точность вершины стопа")
stopSuiveur = ta.highest(close,somm)
// инвестиции
инвестиция = input.float(100,"3 ордера покупки уровней")
факторСглаживания= input.float(1.1," смещение")
plot( close-invest*факторСглаживания, color=color.red)
plot( close-invest*2*факторСглаживания, color=color.red)
plot( close-invest*3*факторСглаживания, color= color.red)
takeProfit = input.float(0.02, "% take profit")
plot( close+( close*takeProfit), color=color.purple)
левередж = input.int(58,"левередж")
// расчет средней цены
// мы знаем, где находимся (сколько уровней пройдено)
//( close > stopSuiveur-stop and close < stopSuiveur )
// label.new(bar_index, high, "стоп", style=label.style_label_down, color=close<base[13]?color.red:color.rgb(255,55,55), textcolor=color.white)
// расчет средней цены