Готовые коды сканеров, фильтров и индикаторов для торговой и графической платформы ThinkOrSwim. Все коды предоставляются компанией Dolphin Traders абсолютно бесплатно. Список будет постоянно дополнятся новыми сканерами, фильтрами, индикаторами.
Индикаторы
Индикаторы представляют собой удобную и наглядную визуализацию математических формул на графике, которые работают с ценой, объемом и временем.
Ярлыки с информацией (label)
Average True Range — средне дневное движение акции за определенный период в центах.
ATR In Play — показывает в процентном отношении, сколько акция прошла своих ATR в текущую торговую сессию.
#Проп-трейдинговая компания Dolphin Traders #https://dolphin-traders.com #Pyrogov Timofii #Average True Range label #ATR in play - Сколько своих ATR акция прошла сегодня input ATRInPlay = {default "1", "0"}; input ATR = {default "1", "0"}; def iATR = Round(MovingAverage (AverageType.WILDERS, TrueRange(high(period = AggregationPeriod.DAY )[1], close(period = AggregationPeriod.DAY)[1], low(period = AggregationPeriod.DAY )[1]), 14), 2); AddLabel (!ATR, "ATR " + iATR, if iATR <= 0.5 then Color.RED else if iATR <= 2 then Color.DARK_GREEN else Color.WHITE); def iATRPlay = Round((high(period = "DAY") - low(period = "DAY")) / iATR, 2); AddLabel (!ATRInPlay, "ATRInPlay " + iATRPlay, if iATRPlay <= 0.5 then Color.DARK_RED else if iATRPlay <= 1 then Color.WHITE else Color.DARK_GREEN);
Average Volume — средний объем проторгованных акций за 14 денй.
Volume — индикатор показывает сколько акций протарговано в текущую торговую сессию.
Volume In Play — сколько проторговано объема в процентах, от среднего показателя (Volume).
#Проп-трейдинговая компания Dolphin Traders #https://dolphin-traders.com #Pyrogov Timofii #Average True Range label input AvgVolume = {default "1", "0"}; #средний объем за 65 дней input VolumeInPlay = {default "1", "0"}; #Сколько сегодня проторговалась акция своих средних объемов за 65 дней input Volume_ = {default "1", "0"}; #Объем за сегодня def iAvgVolume = Round(Average (volume(period = "DAY")[1], 65) / 1000, 0); AddLabel (!AvgVolume, "AV " + iAvgVolume + "k", if iAvgVolume <= 500 then Color.DARK_RED else Color.WHITE); def iVolume = Round(volume(period = "DAY") / 1000, 0); AddLabel (!Volume_, "Vol " + iVolume + "k", if iVolume <= 200 then Color.RED else Color.WHITE); def iVolumePlay = Round(iVolume * 1000 / Average(volume(period = "DAY"), 60), 2); AddLabel (!VolumeInPlay , "VolPlay " + iVolumePlay, if iVolumePlay <= 0.8 then Color.RED else if iVolumePlay <= 1.5 then Color.WHITE else Color.DARK_GREEN);
Correlation SPX — показывает корреляцию акции со SPX в процентном соотношении.
#Проп-трейдинговая компания Dolphin Traders #https://dolphin-traders.com #Pyrogov Timofii input SPY = {default "1", "0"}; def iSpy_50 = Round(Correlation(close(period = AggregationPeriod.DAY), close("SPX", period = AggregationPeriod.DAY), length = 50), 2); AddLabel (!SPY , "With SPX " + iSpy_50, if iSpy_50 >= 0.7 then Color.DARK_GREEN else Color.WHITE);
Market Change — показывает процентное изменение рынка (SPX). При положительном изменение, лейбел подкрашивается зеленым, при отрицательном, красным.
#Проп-трейдинговая компания Dolphin Traders #https://dolphin-traders.com #Pyrogov Timofii input market = {default "1", "0"}; def imarket = Round((close("SPX", period = AggregationPeriod.DAY)[0] - close("SPX", period = AggregationPeriod.DAY)[1]) * 100 / close("SPX", period = AggregationPeriod.DAY)[1], 2); AddLabel (!market, "Market " + imarket + "%", if imarket >= 0 then Color.GREEN else Color.RED);
Up Tick Rule показывает применено ли к акции правило NBBO — Uptick. Отображает процентное изменение акции за вчерашний и сегодняшний день. Если у акции включено правило Uptick, то день включения правила подсвечивается красным.
#Проп-трейдинговая компания Dolphin Traders #https://dolphin-traders.com #Pyrogov Timofii input Down_last = {default "1", "0"}; input Down_now = {default "1", "0"}; def iDown = Round(((low(period = "DAY")[1]-(close(period = "DAY")[2]))/Close(period = "DAY")[2])*100,2); AddLabel (!Down_last, "" + iDown + "%", if iDown < -10 then Color.red else color.light_gray); def iDown2 = Round(((low(period = "DAY")-close(period = "DAY")[1])/close(period = "DAY")[1])*100,2); AddLabel (!Down_now, "" + iDown2 + "%", if iDown2 < -10 then Color.red else color.light_gray);
На графике
Индикатор (HLC), показывает максимальные цены, минимальные цены, и цены закрытия предыдущей торговой сессии.
#Проп-трейдинговая компания Dolphin Traders #https://dolphin-traders.com #Pyrogov Timofii input timeFrame = {default DAY, WEEK, MONTH}; plot High = high(period = timeFrame)[1]; plot Low = low(period = timeFrame)[1]; plot Close = close(period = timeFrame)[1]; High.SetDefaultColor (Color.GREEN); High.SetPaintingStrategy(PaintingStrategy.DASHES); Low.SetDefaultColor(Color.RED); Low.SetPaintingStrategy(PaintingStrategy.DASHES); Close.SetDefaultColor (Color.GRAY); Close.SetPaintingStrategy(PaintingStrategy.DASHES);
Фракталы в акции.
#Проп-трейдинговая компания Dolphin Traders #https://dolphin-traders.com #Pyrogov Timofii input TimeFrame = AggregationPeriod.FIVE_MIN; def isupfractal; def isdownfractal; rec hicount = if (high(period=TimeFrame) == high(period=TimeFrame)[1], hicount[1] + 1, 0); rec hivalid = if ((hicount[1] == 0 and hicount == 1 and high(period=TimeFrame) > high(period=TimeFrame)[2] and high(period=TimeFrame) > high(period=TimeFrame)[3]) or (hicount[1] and hicount and hivalid[1] ) or (hicount[2] and hivalid[2] and high(period=TimeFrame) == high(period=TimeFrame)[2] and high(period=TimeFrame) > high(period=TimeFrame)[1]), 1, 0) ; rec locount = if (low(period=TimeFrame) == low(period=TimeFrame)[1], locount[1] + 1, 0); rec lovalid = if ((locount[1] == 0 and locount == 1 and low(period=TimeFrame) < low(period=TimeFrame)[2] and low(period=TimeFrame) < low(period=TimeFrame)[3]) or (locount[1] and locount and lovalid[1] ) or (locount[2] and lovalid[2] and low(period=TimeFrame) == low(period=TimeFrame)[2] and low(period=TimeFrame) < low(period=TimeFrame)[1]), 1, 0) ; isupfractal = if(((hicount and hivalid) or (high(period=TimeFrame) > high(period=TimeFrame)[1] and high(period=TimeFrame) > high(period=TimeFrame)[2])) and high(period=TimeFrame) > high(period=TimeFrame)[-1] and high(period=TimeFrame) > high(period=TimeFrame)[-2], high(period=TimeFrame), 0); isdownfractal = if(((locount and lovalid) or (low(period=TimeFrame) < low(period=TimeFrame)[1] and low(period=TimeFrame) < low(period=TimeFrame)[2])) and low(period=TimeFrame) < low(period=TimeFrame)[-1] and low(period=TimeFrame) < low(period=TimeFrame)[-2], low(period=TimeFrame), 0); plot upfractal = if( isupfractal, isupfractal, double.nan); plot downfractal = if( isdownfractal, isdownfractal, double.nan); upfractal.setPaintingStrategy(PaintingStrategy.HORIZONTAL); downfractal.setPaintingStrategy(paintingStrategy.HORIZONTAL);
Индикатор показывает предполагаемый потенциал движения акции, в зависимости от ее среднего значения ATR за 14 дней.
#Проп-трейдинговая компания Dolphin Traders #https://dolphin-traders.com #Pyrogov Timofii input price = FundamentalType.CLOSE; input aggregationPeriod = AggregationPeriod.DAY; input n = 20; input displace = 0; input length = 14; input averageType = AverageType.WILDERS; def iATR = round(MovingAverage (averageType, TrueRange(high(period = aggregationPeriod )[-displace], close(period = aggregationPeriod)[-displace], low(period = aggregationPeriod )[-displace]), length),2); plot Sell_1 = low(period = aggregationPeriod) + iATR; plot buy_1 = high(period = aggregationPeriod) - iATR; Sell_1.SetDefaultColor(Color.red); buy_1.SetDefaultColor(Color.green);
Фильтры
Фильтры в TOS используются для фильтрации списков акций в Watchlists.
Фильтр фильтрует акции по наличию так называемой базы. Заданный диапазон в центах.
#Проп-трейдинговая компания Dolphin Traders #https://dolphin-traders.com #Pyrogov Timofii #ищет базы из N последних свечей, на любых уровнях. def iDiff = 0.01; #максимальное отклонение в центах def iBars = 5; #число баров для просмотра def iLowest = lowest(low,iBars); def iHighest = highest(high,iBars); def bBaseLow = fold Lbar = 0 to iBars with Ls=1 do if ((low[Lbar]-iLowest)<=iDiff) then Ls*1 else Ls*0; def bBaseHigh = fold Hbar = 0 to iBars with Hs=1 do if ((iHighest-high[Hbar])<=iDiff) then Hs*1 else Hs*0; plot bBase = if bBaseLow then 1 else if bBaseHigh then 2 else 100; AssignBackgroundColor (if (bBase == 1) then Color.LIGHT_GREEN else if (bBase == 2) then Color.LIGHT_RED else Color.black); bBase.AssignValueColor (if bBase <> 100 then Color.black else Color.CURRENT);
Фильтр показывает базу на круглых числах.
#Проп-трейдинговая компания Dolphin Traders #https://dolphin-traders.com #Pyrogov Timofii def delta = 0.01; #максимальное отклонение в центах от поджатия def bars = 5; #число баров для просмотра def highest = Highest(high, bars); def lowest = Lowest(low, bars); def pressHigh = fold Hbar = 0 to bars with Hsumm = 1 do if ((highest - high[Hbar]) <= delta) then Hsumm * 1 else Hsumm * 0; def pressLow = fold Lbar = 0 to bars with Lsumm = 1 do if ((low[Lbar] - lowest) <= delta) then Lsumm * 1 else Lsumm * 0; def figureHigh = fold FHbar = 1 to bars+1 with FHsumm do if (high[FHbar] == (Ceil(high[FHbar]*2))/2) then FHsumm+1 else FHsumm; def figureLow = fold FLbar = 1 to bars+1 with FLsumm do if (low[FLbar] == (Floor(low[FLbar]*2))/2) then FLsumm+1 else FLsumm; plot bBase = if figureHigh and pressHigh then 1 else if figureLow and pressLow then 2 else 10; AssignBackgroundColor (if pressHigh then Color.DARK_GREEN else if pressLow then Color.DARK_RED else Color.BLACK);
Сканеры
Сканеры в ThinkOrSwim позволяют сканировать и находить акции по заданным критериям.
Сканер ищет акции, которые отчитывались вчера, либо будут отчитываться сегодня.
#Проп-трейдинговая компания Dolphin Traders #https://dolphin-traders.com #Pyrogov Timofii def yesterday= HasEarnings(EarningTime.AFTER_MARKET)[1]; def today= HasEarnings(EarningTime.BEFORE_MARKET)[0]; plot res = if yesterday or today then 1 else 0;
Сканер ищет акции, у которых включилось правила Uptick.
Правило Uptick включается после потери 10% от стоимости и сохраняется на следующий день. При условии, если акция не потеряет более 10% стоимости и на следующий день. Если это произойдет, правило сохранится и на третий день.
#Проп-трейдинговая компания Dolphin Traders #https://dolphin-traders.com #Pyrogov Timofii def yesterday = if (close[2] - low[1]) / close[2] >= 0.1 then 1 else 0; def today = if (close[1] - low()[0]) / close[1] >= 0.1 then 1 else 0; plot res = if yesterday or today then 1 else 0;
Сканер ищет акции, которые за предыдущую торговую сессию превысили средние объемы в два раза.
#Проп-трейдинговая компания Dolphin Traders #https://dolphin-traders.com #Pyrogov Timofii def AverageVolume = Average (volume(period = "DAY")[1], 20); def LastVolume = volume[1]; plot result = if (LastVolume / AverageVolume > 2) then 1 else 0;
Dolphin™
Доброго всем времени суток)
Поправьте меня если я ошибаюсь ..
По теме «Ярлыки с информацией (label)»
Но я не нашёл различия в программном коде между DAY RANGE и Market Change..
кроме как в начальной строчке input range = {default «1», «0»}; ;o/
Олег Волков
Обновлено, спасибо)