Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
27.03.2025, 19:50:34
Начало Помощь Поиск Войти Регистрация
Новости: ООО «Скрин маркет системз», правообладатель программы «Система брокерского обслуживания «TRANSAQ» официально заявляет, что не ведет никакой деятельности в мессенджерах или социальных сетях. 
Подробности на нашем сайте  WWW.TRANSAQ.RU.

Transaq  |  СБО "Transaq"  |  Подсистема ATF  |  Topic: Вопрос по индикатору « предыдущая тема следующая тема »
Страниц: [1] 2 Печать
Автор Тема: Вопрос по индикатору  (Прочитано 10787 раз)
AlexeyNev
Jr. Member
**
Сообщений: 53


Просмотр профиля Email
« : 11.02.2014, 13:17:25 »

Добрый день!

Подскажите возможно ли реализовать в индикаторе способ отсчета от начала периода. Причем этот период выбирался бы пользователем.

Возьмем например скользящую среднюю. Пользователь выбирает год. И СС будет рассчитывать среднее от начала года, если пользователем выбран месяц, то СС рассчитывается от начала месяца, причем в феврале прекращается расчет за январь.

Возможно ли реализовать это в ATF?
Записан
White Noise
Full Member
***
Сообщений: 164


White Noise

ICQ Messenger - 411196569
Просмотр профиля Email
« Ответ #1 : 11.02.2014, 13:35:53 »

extern year = 2014; // год
extern mounth = 1; // январь

function calc()


{         var time = getCandleTime();    var y = getYear(time);   var m = getMonth(time);     

     if(y >= year and m >= mounth ){  ................           здесь вся основа индикатора     ................          }
                             
}


Записан
AlexeyNev
Jr. Member
**
Сообщений: 53


Просмотр профиля Email
« Ответ #2 : 11.02.2014, 13:53:37 »

Огромное спасибо!
Записан
White Noise
Full Member
***
Сообщений: 164


White Noise

ICQ Messenger - 411196569
Просмотр профиля Email
« Ответ #3 : 11.02.2014, 14:02:18 »

Но я не тестировал, - по сути должно работать,...
Записан
AlexeyNev
Jr. Member
**
Сообщений: 53


Просмотр профиля Email
« Ответ #4 : 11.02.2014, 14:20:21 »

У меня вопросы возникли уже.
Мне нужен %% изменения от цены начала периода и ее средняя.
То есть если я ставлю 2014 то вижу изменение цены от начала 2014 года. Это изменение заканчивается когда начнется 2015 год, и в 2015 году начинается новый отсчет от начала 2015.

А если я еще и выбираю месяц, то тоже самое только от начала месяца происходит расчет.


Вы написали:

extern year = 2014; // год
extern mounth = 1; // январь

function calc()


{         var time = getCandleTime();    var y = getYear(time);   var m = getMonth(time);     

     if(y >= year and m >= mounth ){         line[0] = ((close[1]/close)-1)*100;        }    // моя основа индикатора
                             
}

подскажите, корректно написан индикатор?
Записан
AlexeyNev
Jr. Member
**
Сообщений: 53


Просмотр профиля Email
« Ответ #5 : 11.02.2014, 14:37:54 »

не могу сообразить как сделать среднюю нарастающим итогом.

пробовал close[y] и close[time] (чтобы постоянно брал цену закрытия на начала периода), но возникает ошибка что ссылка за границами массива.
Записан
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #6 : 11.02.2014, 16:04:48 »

Чтобы это сработало, у вас должно быть закачано достаточное количество истории это во-первых.

Затем, можно найти номер свечи, соответствующей какой-то дате с помощью getCandleByTime(). Здесь можно уточнить, что поиск будет вестись с конца истории, и будет возвращен первый номер свечи, время которой меньше указанного. Например, так можно получить номер последней свечи 2013-го года:

n = getCandleByTime(parseTime("00:00 01.01.14"));

Значение закрытия свечи с таким номером можно получить, например, так:

x = close[n - nCandles() + 1];

Теперь разница в процентах между текущей свечкой и закрытием 2013-го года будет выглядеть так:

r = 100 * (close / x - 1);

В квадратных скобках у close указывается смещение относительно текущей свечи в количестве свечей, видимых на графике. Функции времени работают с количеством секунд, прошедших с 1 января 1970 года. Поэтому когда вы написали close[time], то вы попытались получить какую-то очень далёкую свечку в будущем.
« Последнее редактирование: 11.02.2014, 16:06:51 от Heller » Записан
micstura
Full Member
***
Сообщений: 104


Просмотр профиля Email
« Ответ #7 : 11.02.2014, 16:05:14 »

extern year = 2014; // год
extern mounth = 1; // январь

function calc()


{         var time = getCandleTime();    var y = getYear(time);   var m = getMonth(time);     

     if(y >= year and m >= mounth ){         line[0] = ((close[1]/close)-1)*100;        }    // моя основа индикатора
                             
}
Работать начинает когда запустив тестирование повторно заходишь в скрипт проверить ок и начинает рисовать на графике.
« Последнее редактирование: 11.02.2014, 16:08:05 от micstura » Записан
AlexeyNev
Jr. Member
**
Сообщений: 53


Просмотр профиля Email
« Ответ #8 : 11.02.2014, 16:21:03 »

Спасибо. Буду пробовать.
Записан
AlexeyNev
Jr. Member
**
Сообщений: 53


Просмотр профиля Email
« Ответ #9 : 11.02.2014, 18:43:41 »


x = close[n - nCandles() + 1];



Может бы вы имели ввиду это :   var x = close[n - noCandle() + 1];


function calc()
{     
var n = getCandleByTime(parseTime("00:00 01.01.13"));   
var x = close[n - nCandles() + 1];
var r = 100 * (close / x - 1);
line[0] = r;     
                             
}

редактор выдает ошибку в строке var x = close[n - nCandles() + 1];
« Последнее редактирование: 11.02.2014, 19:05:11 от AlexeyNev » Записан
White Noise
Full Member
***
Сообщений: 164


White Noise

ICQ Messenger - 411196569
Просмотр профиля Email
« Ответ #10 : 12.02.2014, 06:35:10 »

extern year = 2014; // год
extern mounth = 1; // январь
static c;
static price;

function calc()


{         var time = getCandleTime();    var y = getYear(time);   var m = getMonth(time);     

     if(y >= year and m >= mounth ){   if(c == 0){ c = 1;  price = close; }     .......... ну а тут считать проц. изменения от price (она тут фиксированна для периода)...............     }    // моя основа индикатора
                             
}
Записан
AlexeyNev
Jr. Member
**
Сообщений: 53


Просмотр профиля Email
« Ответ #11 : 12.02.2014, 09:18:09 »

А Вы могли бы пояснить значение это строки? if(c == 0){ c = 1;  price = close;} ?
Записан
White Noise
Full Member
***
Сообщений: 164


White Noise

ICQ Messenger - 411196569
Просмотр профиля Email
« Ответ #12 : 12.02.2014, 13:09:35 »

По умолчанию значение переменной с = 0, ....когда произошел запуск скрипта, функция calc() - слева на право начинает калькулировать историю, пока мы не добрались добрались до нужной даты,...как только добрались - зашли в скобки, а там условие - смотрим = выполняется,....тогда в этот самый момент меняем условие с = 1, чтобы больше в эти внутренние скобки не заходило и соответственно присваиваем (фиксируем в статик) цену close - закрытие этой свечки - а это у нас начало нашего периода,....после чего  скрипт выполняется имея цену начала периода в переменной price.
Записан
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #13 : 13.02.2014, 11:44:04 »

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

Если я конечно правильно понял задачу что вам требуется.

Code: [Select]
static n;
static x;

function init()
{
  n = getCandleByTime(parseTime("00:00 12.02.14"));
  x = close[n];
  setInitCandles(n);
  setBounds(0, n, 0);
}

function calc()
{
  line[0] = 100 * (close / x - 1);
}
Записан
AlexeyNev
Jr. Member
**
Сообщений: 53


Просмотр профиля Email
« Ответ #14 : 13.02.2014, 12:49:10 »

Спасибо большое!

А подскажите, еще такой момент. Как прикрутить сюда среднюю, которая будет суммировать цены закрытия за выбранный период и делить их на количество свечей.

То есть это SMA, но в качестве периода всегда будет период расчета кривой (line[0] которая)
Записан
Страниц: [1] 2 Печать 
Transaq  |  СБО "Transaq"  |  Подсистема ATF  |  Topic: Вопрос по индикатору « предыдущая тема следующая тема »
Перейти в:  


Войти

Powered by MySQL Powered by PHP Powered by SMF 2.0.10 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS!