Transaq

СБО "Transaq" => Подсистема ATF => Topic started by: AlexeyNev on 14.04.2014, 13:28:54

Title: Алерт
Post by: AlexeyNev on 14.04.2014, 13:28:54
Привет, подскажите
Почему alert срабатывает по текущей цене клоуз , когда свеча ещё не закончилась. Как сделать так, чтобы он срабатывал на реальной цене close текущей свечки, то есть по окончанию расчета свечки (алерт нужен в тот момент когда свечка закрыла выше линии, а не проколола ее)?


if (close > line[1]) {
signal::alert("?????? ? LONG!");


Еще небольшой вопрос

функция isHistoryCalculated() принимает True когда начинается расчёт онлайн или наоборот?

есть ли где более подробная информация по её работе?
Title: Re: Алерт
Post by: klf302 on 21.04.2014, 10:31:16
Здраствуйте.В выходные на Intra я попробовал такой код.

function init()
{
   setInitCandles(1);
}
function calc(){

var pos1= getBought() ;
var pos2= getBoughtMoney() ;
var pos5=pos2/pos1;
var pos3= getSold() ;
var pos4= getSoldMoney() ;
var pos6=pos4/pos3;
signal::alert("купля"+"   "+pos1+"   "+pos2+"   "+substr(as_string(pos5),1,5)+"  продажа"+"   "+pos3+"   "+pos4+"   "+substr(as_string(pos6),1,5));
}

Работает нормально.Сегодня с утра я обновил Transaq до сборки  338.Вставил этот скрипт.Но не работает.Сначала при запуске отвечал: «Выход за границы при обращению к индикатору»,а теперь при запуске ничего не отвечает и не работает.
Title: Re: Алерт
Post by: Heller on 21.04.2014, 12:07:11
Из того, что вы написали ничего не понятно.

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

Вполне возможно, что у вас происходит деление на ноль - тут для этого много возможностей и после этого скрипт, естественно, работать не будет.
Title: Re: Алерт
Post by: klf302 on 22.04.2014, 17:50:40
Я пока так и не разобрался.Но одно не пойму:почему в Transaq Intra этот код работает нормально,а в Транзаке нет.
Title: Re: Алерт
Post by: klf302 on 25.04.2014, 16:34:07
Здраствуйте.Есть ли программа,которая обрабатывает таблицу сделок?Накапливает количество купленных акций по бумаге,на какую сумму куплено.То же по продаже.GetBoughtMoney,кажется ,не работает.
Title: Re: Алерт
Post by: White Noise on 25.04.2014, 20:40:46
substr(as_string(pos5),1,5) - обращаемся к строке,... в данной операции она рассматривается как массив , пусть даже символов,...ищите проблему тут....проверенно !!!

substr(as_string(pos6),1,5)) - ну и тут....

проконтролируйте pos5, и варьируйте параметрами 1,5) - станет понятно.

ну или в последних сборках отвалились getBoughtMoney() ; и все подобные по деньгам функции, которые выдают пустоту !!!
Title: Re: Алерт
Post by: klf302 on 28.04.2014, 10:48:28
Со строками еще не разобрался.Но дело в том,что  getBoughtMoney  не работает и эта программа не будет работать.Вот другой скрипт:
var moneyito;
var quanito;
var i;
function onTrade(var id)
{
 var trade = getTrade(id);   
 var pr = trade["price"];
 var quan = trade["quantity"];
 var money = pr*quan;
 if (i > 0)
 {
  quanito = quanito + quan;
  moneyito = moneyito + money;
  i = i + 1;
  }
else
{
 quanito=quan;
 moneyito = money;
 i =i + 1;
 }

signal::alert("куп"+pr+"  "+quanito+"  "+moneyito);
}
Работает не совсем правильно,видимо,переменные неправильно объявил.Накопленная сумма часто обнуляется.Хотя надо и номер сделки проверять и код бумаги.И самую первую сделку надо обрабатывать по другой ветке.Может есть подобная программа,чтобы не придумывать велосипед?
Title: Re: Алерт
Post by: klf302 on 28.04.2014, 15:25:52
Подскажите, как подкорректировать этот код ,чтобы количество купленного  по бумаге,а также на какую сумму куплено накапливалось с каждой сделкой нормально.То же и по продаже.
Title: Re: Алерт
Post by: DiveRSS on 28.04.2014, 15:29:31
getSecBalance() посмотри данную команду
Title: Re: Алерт
Post by: klf302 on 28.04.2014, 16:38:24
Эта команда не очень подходит.Как узнать  сколько я купил и на какую сумму я купил сегодня данной бумаги?Как накапливать эту самую сумму с каждой сделкой?
Title: Re: Алерт
Post by: DiveRSS on 28.04.2014, 17:13:33
В твоем вопросе заложен и ответ.
1 "сколько я купил"  Начнем с того что переменные должны быть static  в них мы будем хранить данные.
2 Количество ты можешь по последнему исполненному ордеру так же как и цену ( но тут не уверен что будет именно та цена что тебя интересует).
3. Если нужно конкретно накапливать смотри формулы вывода и забора данных из файла ( я если честно не использую их я работаю внутри дня)

Опять таки какой срок хранения для каких целей используются в дальнейшем данные.

Команды ну тут как бы тебе надо посмотреть статус ордера если он выполнен взять данные из него


function onOrder(var idl)

   status = getOrder(idl);
   status = status["status"];

if (status == 11)
{
Выполнение арифметики

}

Код выше приведен как направление в котором копать из ордера ты так же можешь получить количество и по идее цену ( но какую цену ты получишь я не знаю средние по сделке или последнюю не проверял не знаю).


З.Ы. В одном ордере может быть несколько трейдов так что функция onTrade ну как бы не особо хороша для подсчетов данных цифр.
Title: Re: Алерт
Post by: klf302 on 29.04.2014, 09:41:57
Спасибо.Насчет static подсказали,а то я все var пользуюсь.Вот этот код  получше работает, накапливает количество акций и сумму в рублях,хотя алерт не на каждую сделку исполняется.
static moneyito;
static quanito;
static money;
static i;
function onTrade(var id)
{
 var trade = getTrade(id);   
 var pr = trade["price"];
 var quan = trade["quantity"];
 money = pr*quan;
 if (i > 0)
 {
  quanito = quanito + quan;
  moneyito = moneyito + money;
  i = i + 1;
  }
else
{
 quanito=quan;
 moneyito = money;
 i =i + 1;
 }
 signal::alert("куп"+pr+"  "+quanito+"  "+moneyito);
 }
Title: Re: Алерт
Post by: DiveRSS on 29.04.2014, 09:54:51
signal::alertMultipe  <--  Вот Это ставь за место signal::alert

signal::alert<-- Срабатывает 1 раз в свечку.