Индикатор свечного паттерна «Шпиль»
📈 Индикатор похож на PinBar, но отличается тем, что не смотрит предыдущий тренд, а просто показывает шпили на графике. Особых настроек нет.
________
#thinkscript indicator: Pin.
#Показывает паттерн «Шпиль»
#by thetrader.pro
def low25 = ((high — low) / 100) * 25;
def bSignalDown = open[1] > close[1] and high-open < low25 and high-close <low25;
def bSignalUp = open[1] < close[1] and open-low < low25 and close-low<low25;
plot down = if bSignalDown then high else double.NaN;
plot up = if bSignalUp then high else double.NaN;
up.SetPaintingStrategy(paintingStrategy.BOOLEAN_ARROW_up);
down.SetPaintingStrategy(paintingStrategy.BOOLEAN_ARROW_down);
up.setDefaultColor(color.LIGHT_green);
down.setDefaultColor(color.LIGHT_red);
📈 Индикатор показывает надпись в верхнем левом углу графика по определенным параметрам акции. Серые показания в течение дня статические (практически не меняются), а ярко-зеленые показания меняются (динамические).
⚙ Из параметров (Inputs) доступны: средний объем за 14 дней, atr за 65 дней, показатель volume play, показатель atr play и показатель текущего объема (volume).
________
#thinkscript indicator: Label.
#Рисует показатели акции прямо на графике.
#by thetrader.pro
input AvgVolume14 = {default «1», «0»};
input ATR65 = {default «1», «0»};
input VolumePlay = {default «1», «0»};
input ATRPlay = {default «1», «0»};
input Volume_ = {default «1», «0»};
def length = 65;
def length2 = 14;
AddLabel (yes,«TOS Library©», color.DARK_GRAY);
def iATR = round((Average(high(period = «DAY»), 65 )-Average(low(period = «DAY»),65 )),2);
AddLabel (!ATR65,«ATR » + iATR, color.GRAY);
def iAvgVolume = round(Average (volume(period = «DAY»)[1], length2),0);
AddLabel (!AvgVolume14,«AvgVol » + iAvgVolume, color.GRAY);
def iVolume = volume(period=«DAY»);
AddLabel (!Volume_,«Vol » + iVolume, color.light_green);
def iATRPlay = round((high(period = «DAY»)-low(period = «DAY»))/iATR,1);
AddLabel (!ATRPlay,«ATRPlay » + iATRPlay, color.light_green);
def iVolumePlay = round(iVolume/ Average(volume(period=«DAY»),65),1);
AddLabel (!VolumePlay,«VolPlay » + iVolumePlay, color.light_green);
#thinkscript indicator: Revers.
#Показывает паттерн «Реверсивный разворот»
#by thetrader.pro
def bSignalUp = high[1]>high[2] and close[1]>high[2] and open>high[1] and close<close[1];
def bSignalDown = high[1]<high[2] and close[1]<low[2] and open<low[1] and close>close[1];
plot up = if bSignalUp then high else double.NaN;
plot down = if bSignalDown then high else double.NaN;
up.SetPaintingStrategy(paintingStrategy.BOOLEAN_ARROW_down);
down.SetPaintingStrategy(paintingStrategy.BOOLEAN_ARROW_up);
up.setDefaultColor(color.LIGHT_red);down.setDefaultColor(color.LIGHT_green);
Settings = {
Name = "*BB (Bollinger Bands) %B oscillator",
Period = 20,
Metod = «SMA», --(SMA, MMA, EMA, WMA, SMMA, VMA)
VType = «Close», --(Open, High, Low, Close, Volume, Median, Typical, Weighted, Difference)
Shift=2,
line = {{
Name = «Horizontal line (top)»,
Type = TYPE_LINE,
Color = RGB(221, 44, 44)
},
{
Name = «Horizontal line (bottom)»,
Type = TYPE_LINE,
Color = RGB(221, 44, 44)
},
{
Name = «Bollinger Bands %B oscillator line»,
Type = TYPE_LINE,
Color = RGB(255, 255, 255)
}
},
Round = «off»,
Multiply = 1,
Horizontal_line=«0»
}
function Init()
func = BB_B()
return #Settings.line
end
function OnCalculate(Index)
local Out = ConvertValue(Settings, func(Index, Settings))
local HL = tonumber(Settings.Horizontal_line)
if HL then
return 1+HL,HL,Out
else
return nil,nil,Out
end
end
function BB_B() --Bollinger Bands %B oscillator («BB_B»)
local BB_MA=MA()
local BB_SD=SD()
local it = {p=0, l=0}
return function (I, Fsettings, ds)
local Fsettings=(Fsettings or {})
local P = (Fsettings.Period or 20)
local M = (Fsettings.Metod or SMA)
local S = (Fsettings.Shift or 2)
local VT = (Fsettings.VType or CLOSE)
if (P > 0) then
if I == 1 then
it = {p=0, l=0}
end
local b_ma = BB_MA(I, {Period=P, Metod = M, VType=VT}, ds)
local b_sd = BB_SD(I, {Period=P, Metod = SMA, VType=VT}, ds)
if CandleExist(I,ds) then
if I~=it.p then it={p=I, l=it.l+1} end
if it.l >= P and b_ma and b_sd then
Тем, кто не читал предыдущий топик этой темы, рекомендую для начала ознакомиться с ним [1].
В комментариях к предыдущему топику меня критиковали за неоптимальность кода Python. Однако, текст читают люди с совершенно разной подготовкой — от почти не знающих Python или знающих другие языки программирования, до продвинутых пользователей. Последние легко могут обнаружить неоптимальность кода и заменить его своим. Тем не менее, код должен быть доступен и новичкам, возможно не обладающим знанием пакетов и продвинутых методов. Поэтому, в коде я буду, по возможности, использовать только базовые конструкции Python, не требующие глубоких знаний, и которые могут легко читаться людьми, программирующими на других языках. Вместе с тем, по мере изложения, без фанатизма, буду вводить и новые элементы Python.
Если вы хотите как-то улучшить или оптимизировать код, приводите его в комментариях — это только расширит и улучшит изложенный материал.
Ну, а сейчас мы займемся разработкой и тестированием индикаторов. Для начала нам нужна простейшая стратегия с использованием МА — его и построим. Самой лучшей по характеристикам МА является ЕМА. Формула ЕМА: