Как обнаружить изменение тренда в скрипте 2BARBLR1.1

Вопрос или проблема

Я использую Tradingview и пытаюсь изучить пинскрипт. Я использую скрипт 2BARBL R1.1

В нем есть трендовая линия, которая отображает тренд зеленым цветом для восходящего тренда и красным для нисходящего тренда. Я новичок в пинскрипте, но хотел бы понять, как я могу обнаружить изменение цвета трендовой ленты с зеленого на красный. Я хочу добавить метку на продажу в этом индексе бара. Этот скрипт написан в версии 3, поэтому я не думаю, что метки поддерживаются. Я предполагаю, что мне нужно будет добавить plotchar(), чтобы отметить точку для символа ‘продажа’?

Я НЕ прошу кого-либо писать код за меня. Я прошу кого-то указать мне правильное направление в скрипте. Когда я пойму, какую область в скрипте необходимо целить, я думаю, что смогу завершить задачу. Также, если кто-то может подтвердить, что мне нужно будет использовать plotchar() для этого?

Я полагаю, что plot() на строке 223 — это то, на что мне нужно обратить внимание. Если кто-то может это подтвердить для меня? Я пытался добавить plotchar, но это не сработало:

a = ""
if tDirection == UP
    a="u"
if tDirection == DOWN
    a="d"
pct = close
plotchar(pct, char=a, location=location.belowbar, color=#ffff00)
//@version=3
//

study(title="Two Bar Break Line Alerts R1.1 by JustUncleL", shorttitle="2BARBL R1.1", overlay=true,max_bars_back=200)

//
// Автор:  JustUncleL
// Дата:    25-марк-2018
// Версия: R1.1
//
// Описание:
//    Этот индикатор с настройками по умолчанию предназначен для торговли БИНАРНЫМИ ОПЦИОНАМИ. Индикатор также может быть использован для торговли на Форекс с некоторыми изменениями настроек.
//    Скрипт показывает линии прорыва двух баров и выдаёт оповещения, когда эти линии прорыва
//    касаются (ломаются), создавая условие для краткосрочного входа в рынок.
//
//    - Для того чтобы произошел бычий прорыв (зеленая стрелка вверх): сначала должно быть два (или три)
//      последовательных медвежьих (красных) свечи, за которыми следует бычья (зеленая) свеча, создающая
//      опорную точку. Прорыв происходит, когда максимальная цена текущей бычьей (зеленой)
//      превышает наивысшую точку предыдущих двух (или трех) значимых медвежьих свечей. 
//      Зеленая линия канала показывает, где происходит текущий бычий прорыв.
//
//    - Для того чтобы произошел медвежий прорыв (красная стрелка вниз): сначала должно быть два (или три)
//      последовательных бычьих (зеленых) свечи, за которыми следует медвежья (красная) свеча, создающая
//      опорную точку. Прорыв происходит, когда минимальная цена текущей медвежьей (красной)
//      опускается ниже наименьшей точки предыдущих двух (или трех) значимых бычьих свечей.
//      Красная линия канала показывает, где происходит текущий медвежий прорыв.
//
//    Стрелки линии прорыва могут быть дополнительно отфильтрованы цветной MA (включена по умолчанию), 
//    более долгосрочной направляющей MA (выключена по умолчанию) и/или условием MACD (включена по умолчанию)
//    в качестве фильтра импульса.
//
//    Вы можете дополнительно выбрать три линии прорыва, вместо двух. Линии прорыва трех баров 
//    на самом деле эквивалентны методу Гуппи по трехбарному обратному методу для входа в торговлю
//    (см. видео Гуппи ниже).
//
//    В этот индикатор включена возможность отображать некоторые основные статистические данные по бинарным опционам, 
//    при включении (по умолчанию отключена) показываются успешные бары желтым цветом и 
//    неудачные бары черным, а последние девять чисел на строке заголовка скрипта 
//    представляют собой статистику бинарных опционов в следующем порядке:
//      - %ITM, 
//        Всего заказов, Успешные заказы, Несчастные заказы,
//        Всего протестированных свечей, Свечки в день, Торговли в день, 
//        Макс. последовательные победы, Макс. последовательные потери
//
//    Вы можете начать статистику бинарных опционов с конкретной даты, 
//    что удобно для проверки более недавней истории.
//
// Подсказки:
//    - Торговля БИНАРНЫМИ ОПЦИОНАМИ: используйте 5мин, 15м, 1ч или даже Дневные графики. Торгуйте после
//      того как цена коснется одной из линий прорыва и стрелка появится первой.
//      Дождитесь, пока цена вернется от линии прорыва на 1 или 2 пункта, стрелка уведомления 
//      должна оставаться включенной, и свеча должна смениться на черную, затем делайте бинарную сделку с истечением в конце свечи.
//      Если цена откатится и стрелка выключится, не делайте сделку на этой свече, двигайтесь дальше, у вас, вероятно,
//      нет импульса, будут множество других событий-триггеров. 
//      По результатам моего бэктестирования, результаты хорошие с уровнями ITM 65% до 72% на многих
//      валютных парах, сырьевых товарах и индексах. Торговля в реальном времени подтвердила
//      результаты бэктестирования, и они могут быть даже лучше, при условии, 
//      что вы отбираете, какие сигналы торговать (сильная поддержка MACD и т.д.),
//      что вы терпеливы и дисциплинированы к этому методу торговли.
//
//    - Торговля на FOREX: настройки по умолчанию должны работать при скальпировании. Для долгосрочных сделок
//      попробуйте изменить настройки на более стандартизированный фильтр MACD или более медленный
//      для захвата длинных колебаний импульса, и идея будет заключаться в том, чтобы торговать 
//      первым сигналом прорыва линии, который появляется после значительного отката в направлении 
//      тренда. Установите SL чуть выше/ниже опорной высокой/низкой и 
//      установите цель в два или три раза превышающей SL.
//
// Ссылки:
//    - "Основы торговли ценами для Forex, акций, опционов и фьючерсов" видео:
//          https://www.youtube.com/watch?v=4MWUOAAYGIs 
//    - Другие видео от "basecamptrading" о Нагих торгах.
//    - "Получение прибыли на сегодняшнем рынке Дэрила Гуппи" видео: 
//          https://www.youtube.com/watch?v=QInB6iExaxw
//
// Модификации:
//    R1.0  Апрель-2018
//         - Первая опубликованная версия
//    R1.1  Июнь-2019 
//         - Добавлены сигналы для изменения направления тренда и опциональные стрелки направления.
//
//
//
// -----------------------------------------------------------------------------
// Авторское право 2018 JustUncleL
//
// Эта программа является бесплатным программным обеспечением: вы можете распространять его и/или модифицировать
// в соответствии с условиями Генеральной общественной лицензии GNU как она опубликована
// Фондом свободного программного обеспечения, либо версии 3 лицензии, либо
// любой более поздней версии.
//
// Эта программа распространяется в надежде, что она будет полезной,
// но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии
// коммерческой пригодности или соответствия конкретной цели. См.
// Генеральную общественную лицензию GNU для получения дополнительных сведений.
// 
// Генеральную общественную лицензию GNU можно найти здесь
// <http://www.gnu.org/licenses/>.
//
// -----------------------------------------------------------------------------
//

//
// === ВВОДЫ НАЧАЛО

//
boBars      = input(2,minval=2,maxval=3,title="Использовать стратегию прорыва на 2 или 3 бара")
hidefractals= input(true,title="Скрыть символы опорной точки (треугольники)")
hidelevels  = input(false,title="Скрыть уровни прорыва канала")
maxtrigger  = input(0,minval=0,title="Максимальное расстояние триггера от опорной точки (0 = без ограничений)")
cmafilter   = input(true,title="Использовать цветной фильтр MA на 2уровневых прорывах")
stffilter_  = input(false,title="Использовать медленный фильтр тренда MA на 2уровневых прорывах")
stffilter   = cmafilter? stffilter_ : false
cmaType     = input(defval="HullMA", title="Тип цветной MA: ", options=["SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "ZEMA", "TMA", "SSMA"], type=string)
cmaLen      = input(defval=21, title="Длина цветной MA :", minval=1)
filterType  = input(defval="EMA", title="Тип медленного фильтра MA: ", options=["SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "ZEMA", "TMA", "SSMA"], type=string)
filterLen   = input(defval=200, title="Длина медленного фильтра MA :", minval=1)
//
show2Balert = input(true, title="Показать стрелки предупреждения прорыва бара")
showCCalert = input(false, title="Показать стрелки предупреждения направления MA")

//
// Получить MACD для фильтрации сигналов
umacd       = input(true,title="Использовать фильтр MACD на 2уровневых прорывах")
signalFilter_= input(true, title="Использовать сигнальную линию MACD вместо уровня выше/ниже нуля для фильтрации")
MACDfast    = input(title="Длина быстрой MA MACD", type = integer, defval = 8, minval = 2)
MACDslow    = input(title="Длина медленной MA MACD", type = integer, defval = 21, minval = 7)
MACDsignal  = input(title="Длина сигнала MACD",  type = integer, defval = 5 , minval = 1)
src         = close
signalFilter= MACDsignal==1?false:signalFilter_
//
DodgerBlue = #1E90FF
UP = 1
DOWN = -1

// === ВВОДЫ КОНЕЦ

// === ФУНКЦИИ

// - variant(type, src, len)
// Возвращает выбор варианта MA, по умолчанию SMA, если пусто или опечатка.

// Фильтр SuperSmoother
// © 2013  John F. Ehlers
variant_supersmoother(src,len) =>
    a1 = exp(-1.414*3.14159 / len)
    b1 = 2*a1*cos(1.414*3.14159 / len)
    c2 = b1
    c3 = (-a1)*a1
    c1 = 1 - c2 - c3
    v9 = 0.0
    v9 := c1*(src + nz(src[1])) / 2 + c2*nz(v9[1]) + c3*nz(v9[2])
    v9

variant_smoothed(src,len) =>
    v5 = 0.0
    v5 := na(v5[1]) ? sma(src, len) : (v5[1] * (len - 1) + src) / len
    v5

variant_zerolagema(src,len) =>
    ema1 = ema(src, len)
    ema2 = ema(ema1, len)
    v10 = ema1+(ema1-ema2)
    v10

variant_doubleema(src,len) =>
    v2 = ema(src, len)
    v6 = 2 * v2 - ema(v2, len)
    v6

variant_tripleema(src,len) =>
    v2 = ema(src, len)
    v7 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len)               // Тройное экспоненциальное
    v7

// вернуть вариант, по умолчанию SMA 
variant(type, src, len) =>
    type=="EMA"     ? ema(src,len) : 
      type=="WMA"   ? wma(src,len): 
      type=="VWMA"  ? vwma(src,len) : 
      type=="SMMA"  ? variant_smoothed(src,len) : 
      type=="DEMA"  ? variant_doubleema(src,len): 
      type=="TEMA"  ? variant_tripleema(src,len): 
      type=="HullMA"? wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len))) :
      type=="SSMA"  ? variant_supersmoother(src,len) : 
      type=="ZEMA"  ? variant_zerolagema(src,len) : 
      type=="TMA"   ? sma(sma(src,len),len) : 
                      sma(src,len)

// - /variant 

// === /ФУНКЦИИ КОНЕЦ

// === СЕРИИ ПЕРЕМЕННЫХ
// 
// Найдите все фракталы за два или три бара назад.
topfractal = boBars==2? high[1]>high[2] and open[2]<close[2] and open[1]<close[1] and (open>close or high<high[1]) : high[2]>high[3] and high[1]>high[2] and open[1]<close[1] and open>close
botfractal = boBars==2? low[1]<low[2] and open[2]>close[2] and open[1]>close[1] and (open<close or low>low[1]) : low[2]<low[3] and low[1]<low[2] and open[1]>close[1] and open<close

// MA
ma_slow    = variant(cmaType, src, cmaLen)
ma_filter  = variant(filterType, src, filterLen)

// Получить направление для скользящих средних
slowdirection = UP
slowdirection := ma_slow>ma_slow[1] ? UP : ma_slow<ma_slow[1] ? DOWN : nz(slowdirection[1],UP)
slowdirection := stffilter? slowdirection==UP? (ma_slow>ma_filter? UP : 0)  : slowdirection==DOWN? (ma_slow<ma_filter? DOWN : 0) : slowdirection  : slowdirection
tDirection    = slowdirection

// Получить линию MACD
[currMacd,signalLine,_] = macd(close, MACDfast, MACDslow, MACDsignal)

// === /СЕРИИ ПЕРЕМЕННЫХ КОНЕЦ

// === НАНЕСЕНИЕ

plotshape(hidefractals ? na : topfractal, color=red, transp=0, style=shape.triangledown, location=location.abovebar, offset=0, size=size.tiny)
plotshape(hidefractals ? na : botfractal, color=green, transp=0, style=shape.triangleup, location=location.belowbar, offset=0, size=size.tiny)

//
//plot(filter and fastLen>1 and slowLen!=fastLen? ma_fast:na,color=blue,transp=0,linewidth=2,title="Линия быстрого фильтра MA")
plot(cmafilter? ma_slow:na,color=tDirection==UP?lime:red,transp=0,linewidth=2,title="Линия цветного фильтра MA")
plot(stffilter? ma_filter:na,color=gray,transp=0,linewidth=2,title="Линия медленного трендового фильтра")
// Если это опорная точка, найдите уровень триггера прорыва
toptriggers = 0.0
bottriggers = 0.0
toptriggers := topfractal ? boBars==2?min(low[2],low[1]): min(low[3],min(low[2],low[1])): toptriggers[1]
bottriggers := botfractal ? boBars==2?max(high[2],high[1]): max(high[3],max(high[2],high[1])) : bottriggers[1]

// Найти количество баров с последней новой опорной точкой
tcount = barssince(topfractal)
bcount = barssince(botfractal)

// Нанесите уровни триггера прорыва как канал
plot(hidelevels ? na : toptriggers, color=red, transp=0,offset=0,style=stepline, linewidth=1,title="Верхняя линия прорыва")
plot(hidelevels ? na : bottriggers, color=lime, transp=0,offset=0,style=stepline, linewidth=1, title="Нижняя линия прорыва")

// Проверьте на прорыв линии триггера, посчитайте бары после линии триггера
tup = 0
tdn = 0
tup := high>bottriggers and close>open[1] and open<bottriggers and (maxtrigger==0 or bcount<=maxtrigger) and (not cmafilter or tDirection==UP) ? nz(tup[1])+1 : 0
tup := umacd ? signalFilter ? (signalLine<currMacd ? tup : 0 ) : (currMacd>0 and signalLine<currMacd? tup : 0) : tup
tdn := low<toptriggers and close<open[1] and open>toptriggers and (maxtrigger==0 or tcount<=maxtrigger) and (not cmafilter or tDirection==DOWN) ? nz(tdn[1])+1 : 0
tdn := umacd ? signalFilter ? (signalLine>currMacd ? tdn : 0 ) : (currMacd<0 and signalLine>currMacd? tdn : 0) : tdn
//
plotarrow(not show2Balert? na : tup==1?1:tdn==1?-1:na, minheight=10, maxheight=100, colorup=line, colordown=red, title="Стрелки прорыва")

// показать стрелки изменения направления тренда
tSignal =  change(tDirection) ? tDirection : 0
plotshape(showCCalert and tSignal==UP?   ma_slow : na, style=shape.triangleup,location=location.absolute,size=size.normal, transp=0, color=green, title="Стрелки направления MA")
plotshape(showCCalert and tSignal==DOWN? ma_slow : na, style=shape.triangledown,location=location.absolute,size=size.normal, transp=0, color=maroon, title="Стрелки направления MA")

// === /НАНЕСЕНИЕ КОНЕЦ

// === ОПОВЕЩЕНИЕ
buy = tup==1
sell = tdn==1
alertcondition(buy or sell, title="Предупреждение о линии прорыва", message="BL Оповещение")
alertcondition(buy, title="Покупка по линии прорыва", message="КУПИТЕ")
alertcondition(sell, title="Продажа по линии прорыва", message="ПРОДАЙТЕ")
alertcondition(tSignal==UP, title="Тренд ВВЕРХ", message="ТРЕНД ВВЕРХ")
alertcondition(tSignal==DOWN, title="Тренд ВНИЗ", message="ТРЕНД ВНИЗ")

//

// === /ОПОВЕЩЕНИЕ КОНЕЦ

// ===============================================================
// --- СТАТИСТИКА ---
// Это общее кусок кода для генерации статистики по бинарным опционам бар за баром.
// Эта идея была вдохновлена "Торговлей бинарными опционами двумя предыдущими барами" от radixvinni.
// Вы можете начать статистику с конкретной даты/времени, что удобно для проверки
// более недавней истории.
//
// Вводы
ssuc     = input(true,title="Показать статистику Бинарных опционов и выделить бары")
nc       = input(0,minval=0,title="Количество свечей в BO сделке (по умолчанию=0)")
// Начать статистику с этой даты/времени
d_year   = input(2010,minval=1990,    title="Начало года статистики BO")
d_month  = input(1,minval=1,maxval=12,title="Начало месяца статистики BO")
d_day    = input(1,minval=1,maxval=31,title="Начало дня статистики BO")
d_hour   = input(0,minval=0,maxval=23,title="Начало часа статистики BO")
d_minute = input(0,minval=0,maxval=59,title="Начало минуты статистики BO")

// Не учитывайте данные до этого времени начала.
isvalid_time = time >= timestamp(d_year, d_month, d_day, d_hour, d_minute) 

GRAY = #6969690F
GOLD = #FFD700FF
BLACK= #000000FF

//
// Ответить на барлы оповещения, проверьте и отметьте завершенные сделки ITM или нет
alert_bar = isvalid_time? (buy[nc] or sell[nc]) : false
correct   = alert_bar? (buy[nc] and close > bottriggers[nc]) or  (sell[nc] and (close < toptriggers[nc])): false

//
// Покажите успешный (желтый) или неудачный (черный) бар в конце сделки
bcolor = alert_bar and correct? GOLD: alert_bar==1? BLACK : na
barcolor(ssuc?bcolor:na,title="Успешные и неудачные бары")
//
// Подсчитайте достижения и провалы
wcount = 0
lcount = 0
wmax = 0
lmax = 0
//
yellow_bar = isvalid_time? (alert_bar and correct)?1:0 : 0
black_bar =  isvalid_time? (alert_bar and not correct)?1:0 : 0
all_bar   =  isvalid_time? 1 : 0
//
wcount := yellow_bar? nz(wcount[1])+1 : nz(wcount[1])
wcount := black_bar? 0 : wcount
wmax   := wcount>nz(wmax[1])? wcount : nz(wmax[1])
//
lcount := black_bar? nz(lcount[1])+1 : nz(lcount[1])
lcount := yellow_bar? 0 : lcount
lmax   := lcount>nz(lmax[1])? lcount : nz(lmax[1])

//
// Рассчитать простую статистику
total_bars    = cum(all_bar)
total_yellow_bars = cum(yellow_bar)
total_black_bars = cum(black_bar)
total_trades  = total_yellow_bars + total_black_bars
success_rate  = total_trades>0? 100.0*total_yellow_bars/total_trades: 0
bars_per_day  = isintraday? 1440/interval : 1
trades_per_day= total_trades/(total_bars/bars_per_day) 
//
// Нанести пустые формы, чтобы числа отображались как девять чисел в формате строки индикатора
plotshape(ssuc?success_rate:na,"уровень успеха",location=location.bottom, color=nz(bcolor,GRAY), style=shape.triangleup,size=size.auto)
plotshape(ssuc?total_trades:na,"сделки",location=location.bottom, color=nz(bcolor,GRAY), style=shape.triangleup,size=size.auto)
plotshape(ssuc?total_yellow_bars:na,"выигрышные сделки",location=location.bottom, color=nz(bcolor,GRAY), style=shape.triangleup,size=size.auto)
plotshape(ssuc?total_black_bars:na,"проигрышные сделки",location=location.bottom, color=nz(bcolor,GRAY), style=shape.triangleup,size=size.auto)
plotshape(ssuc?total_bars:na,"всего полос",location=location.bottom, color=nz(bcolor,GRAY), transp=0, style=shape.triangleup,size=size.auto)
plotshape(ssuc?bars_per_day:na,"баров в день",location=location.bottom, color=nz(bcolor,GRAY), transp=0, style=shape.triangleup,size=size.auto)
plotshape(ssuc?trades_per_day:na,"сделок в день",location=location.bottom, color=nz(bcolor,GRAY), transp=0, style=shape.triangleup,size=size.auto)
plotshape(ssuc?wmax:na,"максимальное число последовательных побед",location=location.bottom, color=nz(bcolor,GRAY), transp=0, style=shape.triangleup,size=size.auto)
plotshape(ssuc?lmax:na,"максимальное число последовательных проигрышей",location=location.bottom, color=nz(bcolor,GRAY), transp=0, style=shape.triangleup,size=size.auto)

// --- СТАТИСТИКА ---
// ===============================================================

// --- отладка

//plotshape(tcount,location=location.bottom,color=gray)
//plotshape(bcount,location=location.bottom,color=gray)

// --- /отладка

//eof

Ответ или решение

Для того чтобы обнаружить изменение тренда в скрипте 2BARBLR1.1 и добавить метку продажи при изменении цвета трендовой ленты, вам необходимо сосредоточиться на нескольких ключевых моментах в коде скрипта.

  1. Определение направления тренда: В скрипте переменная tDirection используется для определения текущего направления тренда. Вы можете увидеть, что tDirection принимает значение UP (1) или DOWN (-1) в зависимости от среднего значения (MA). Изменение тренда происходит, когда tDirection меняет свое значение. Для этого достаточно сравнить текущее значение tDirection с предыдущим значением:

    tSignal = change(tDirection) ? tDirection : 0

    Эта строка делает то, что вы ищете – она определяет, произошло ли изменение тренда.

  2. Добавление меток на графике: В версии Pine Script 3 метки в виде label невозможно использовать. Однако, вы можете использовать plotchar() для отображения символов на графике. Вам нужно будет создать условие, которое будет проверять, произошло ли изменение тренда с UP на DOWN. Например, вы можете сделать это следующим образом:

    sellSignal = tSignal == DOWN ? close : na
    plotchar(sellSignal, char='✖', location=location.abovebar, color=color.red, size=size.small)

    Это создаст символ (например, ‘✖’) над баром, когда произойдет изменение тренда с восходящего на нисходящий.

  3. Добавление в нужное место: Вы можете разместить данный код в секции, где происходят уже другие визуализации на графике, например, в секции // === PLOTTING. Убедитесь, что вы проверили переменные и провели тестирование, чтобы гарантировать, что логика работает последовательно с другими частями скрипта.

Надеюсь, эти указания помогут вам обнаружить изменение цвета трендовой ленты и успешно пометить бар для продажи. Определите участок кода, как, например, вышеуказанные строки, чтобы встроить их в ваш текущий скрипт, и протестируйте его на графике для проверки правильности работы.

Оцените материал
Добавить комментарий

Капча загружается...