↑ Наверх

Пишу ThinkScript (Часть Четвертая)

[в начало] [предыдущая страница]

Теперь приступаю к расчетной части скрипта. Буду писать как представляю себе решение, а затем постараюсь максимально упростить и облегчить код.

Добавил блок определения первого и последнего торгового дня и количества дневных баров в исследуемом интервале.


def firstyyyymmdd = StartYear * 10000+101; # первый расчетный день в формате YyyyMmDd
def leap = if (getLastYear() / 4 - Floor(getLastYear() / 4) != 0, 0, 1); # високосный год = +1
rec lastday = getLastDay();                                              # последний день графика в виде 1-365(366)
def Inday;                                                               # день в месяце в виде 1-31
 
if      lastday between  32 and         59 + leap {Inday = lastday -  31;       } 
else if lastday between  60 + leap and  90 + leap {Inday = lastday -  59 - leap;} 
else if lastday between  91 + leap and 120 + leap {Inday = lastday -  90 - leap;} 
else if lastday between 121 + leap and 151 + leap {Inday = lastday - 120 - leap;} 
else if lastday between 152 + leap and 181 + leap {Inday = lastday - 151 - leap;}
else if lastday between 182 + leap and 212 + leap {Inday = lastday - 181 - leap;}
else if lastday between 213 + leap and 243 + leap {Inday = lastday - 212 - leap;}
else if lastday between 244 + leap and 273 + leap {Inday = lastday - 243 - leap;}
else if lastday between 274 + leap and 304 + leap {Inday = lastday - 273 - leap;}
else if lastday between 305 + leap and 334 + leap {Inday = lastday - 304 - leap;}
else if lastday between 335 + leap and 365 + leap {Inday = lastday - 334 - leap;}
else                                              {Inday = lastday;             }

def lastyyyymmdd = getLastYear() * 10000 + getLastMonth() * 100 + Inday; # последний торговый день в формате YyyyMmDd
def Ofset = countTradingDays(firstyyyymmdd, lastyyyymmdd); # подсчет кол-ва расчетных дневных баров


Теперь столкнулся с необходимостью обрезать количество уровней и ввести ограничение на диапазон цены. Проблема в том, что не вижу возможности создать динамический дву-мерный массив.
Т.е. необходимо добавить два параметра:
— диапазон цены в поинтах выше и ниже котировки;
— максимальное количество уровней, например 10 уровней.

Пока разбираюсь с массивами данных, добавил еще две переменных:

rec firstChartDay = If (barNumber() == 1, getYyyyMmDd(), firstChartDay[1]);  # первый день графика

rec Chartofset = If (barNumber() == 1, countTradingDays(getYyyyMmDd(), lastyyyymmdd), Chartofset[1]); # подсчет кол-ва дневных баров на графике


Сегодня в последний день лета спонтанно родился скрипт Indi_SMA, как побочный продукт. Более подробно о новом скрипте читайте здесь...

(продолжение следует...)
Related Posts Plugin for WordPress, Blogger...


Комментарии (11) Вконтакте (0) facebook ()

Комментарии (11) свернуть  |  развернуть

+1
хотя спасибо, можешь не трудиться, нашел архив, ты врошлом году мне уже делал — благодарствую :)
+2
да, можно, после выходных.
  • avatar
  • Stepa
  • 20 июня 2012, 23:02
0
Эдгар, привет, а в этот код можешь вставить «input limit 0.25»:

# @new
# @reference
#
# TD Ameritrade IP Company, Inc. © 2011-2012
#
 
input aggregationPeriod = AggregationPeriod.DAY;
input length = 1;
input displace = -1;
input showOnlyLastPeriod = no;
 
plot DailyHigh;
plot DailyLow;
if showOnlyLastPeriod and !IsNaN(close(period = aggregationPeriod)[-1]) {
    DailyHigh = Double.NaN;
    DailyLow = Double.NaN;
} else {
    DailyHigh = Highest(high(period = aggregationPeriod)[-displace], length);
    DailyLow = Lowest(low(period = aggregationPeriod)[-displace], length);
}
 
DailyHigh.SetDefaultColor(GetColor(4));
DailyHigh.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
DailyLow.SetDefaultColor(GetColor(4));
DailyLow.SetPaintingStrategy(PaintingStrategy.HORIZONTAL); 
  • avatar
  • Stepa
  • 30 августа 2011, 00:09
+1
ты кстати не знаешь, можно ли как-нибудь убрать линии с экрана? а то они уменьшают график. Я имею ввиду чтобы линии хай/лоу появлялись только когад цена подходит к ним, а не всегда висели и таким образом уменьшали экран.
imageshack.us/photo/my-images/4/2d0095dac16f446aa022939.png/
  • avatar
  • Edgar
  • 30 августа 2011, 01:00
+1
ну вот, теперь меня считают знатоком ThinkScriptа :)
я знаком с ним всего две недели :)
  • avatar
  • Edgar
  • 02 сентября 2011, 07:15
0
уже знаю))))
лови образец:

# не отображать пивот, если расстояние от цены открытия свечи больше 25 центов 
#def condition = AbsValue(pivot - open) < .25;
#plot Price = if condition then pivot else Double.NaN;
  • avatar
  • Stepa
  • 16 сентября 2011, 22:20
0
Эдгар, не подскажешь как бы мне этот твой код вставить вот сюда?
  • avatar
  • Stepa
  • 16 сентября 2011, 22:21
0
Эдгар, не подскажешь как бы мне этот твой код вставить вот сюда?

input time = 930;

input price=open;

rec time_value = if(secondstilltime(time)== 0,price,time_value[1]);

plot open = if(time_value==0, double.nan,time_value);
  • avatar
  • Edgar
  • 20 сентября 2011, 03:04
+1
Примерно так:

input time = 930;
input price = open;
input limit = 0.25;

rec time_value = if(secondstilltime(time) == 0, price, time_value[1]);
def condition = AbsValue(time_value - open) < limit;
plot Open_1 = if(time_value == 0 or condition == 0, Double.NaN, time_value); 

Не тестировал. Твой код искусственно обрезан…
  • avatar
  • Stepa
  • 20 сентября 2011, 13:18
0
все-равно спасибо… сегодня опробую…
  • avatar
  • Edgar
  • 30 августа 2011, 18:02
0
если заметите ошибку в коде, обязательно отпишитесь.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.