Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
Сентября 17, 2024, 06:07:56 am
Начало Помощь Поиск Войти Регистрация
Новости:

Просмотр сообщений

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - nxz

Pages: 1 ... 13 14 [15] 16 17
211
Подсистема ATF / Re: Новые сборки Transaq
« on: Ноября 09, 2010, 12:26:53 pm »
Что-то эта тема потерялась.!
Товарищи разработчики, пишите сюда пожалуйста про те изменения которые произошли в сборках, а то не понятно учтены ли замечания и предложения которые всплывают на форуме. Сегодня появилась новая сборка (271) и после ее загрузки не понятно что нового добавилось, чтоб потестить.
Спасибо.

212
Подсистема ATF / Re: Условные заявки в новом ATF
« on: Ноября 09, 2010, 12:08:13 pm »
Скажите, а эта функция уже реализована в той версии ATF, которая у вас сейчас работает на виртуальной бирже? Т.к я попытался ее использовать в своем скрипте, но у меня терминал выдает ошибку и зависает. Редактор кода при проверке ошибок не выдает.
Выложили обновление
После обновления программа сразу вылетает в дамп, как только на графике щелкаю правой кнопкой мыши, для входа в контекстное меню

213
getBought()=17 getSold=18  т.е. текущие -1

а в транзаке входящие  -1
                      куплено      3
                      продано     2
                      текущие     0

    Когда это будет исправлено!!!!!          
Тестировал две неделе, ошибок не заметил

214
Подсистема ATF / Re: Условные заявки в новом ATF
« on: Ноября 01, 2010, 08:50:00 am »
Пропустили оказывается эту функцию при написании документации. Теперь доступна функция trade_action::cancelOrder(id). Дополним хелп на сайте.
Скажите, а эта функция уже реализована в той версии ATF, которая у вас сейчас работает на виртуальной бирже? Т.к я попытался ее использовать в своем скрипте, но у меня терминал выдает ошибку и зависает. Редактор кода при проверке ошибок не выдает.

215
Подсистема ATF / Работа с заявками
« on: Октября 30, 2010, 01:40:47 pm »
    Товарищи разработчики, можно попросить вас привести развернутый пример (применимый к реалной торговле) по работе с заявками.
    Допустим наш скрипт при наступлении события "А" выставляет на биржу условную заявку с опреленными параметрами.
    Затем при наступлении условия "Б" мы изменяем параметры нашей заявки или при наступлении события "С" снимаем нашу заявку.
    При этом мы регулярно следим за состоянием заявки и при переходе ее из состояния OS_WATCHING(Ожидание наступления условия) в состояние OS_ACTIVE (Активная заявка) должно произойди событие "Д", а при переходе из состояния OS_ACTIVE (Активная заявка) в состояние OS_MATCHED (Исполнена) должно произойди событие "Е".

216
Подсистема ATF / Re: Как получить время?
« on: Октября 29, 2010, 05:55:59 pm »
signal::output("Время = " + getHour(getCandleTime())+ ":" + getMinute(getCandleTime()));

217
    Есть еще замечание. Если выставить несколько условных заявок с одинаковой ценой выполнения условия, а потом курсор мыши навести на пунктирную линию на графике, обозначающую условную заявку, то в всплывающем окне не будет видно сколько условных заявок вы выставили, всегда показывается условие и количество первой условной заявки. Можно это как-нибудь исправить.
    Т.к. у меня скрипт выставлят несколько условных заявок по одинаковой цене выполнения условия, но с разной ценой исполнения и направлением (покупка или продажа), а на графике я вижу информацию только о первой заявке.

    И еще вопрос, как я понимаю зеленый-красный робот внизу влияет только на выполнение заявок, если он выключен заявки на биржу не идут, а скрипт выполняется, если он включен заявки идут на биржу. Как с помощью функции isTradingAllowed() можно управлять им из скрипта.

218
Я так смотрю     

   bal = getBought() - getSold();
   signal::output("Кол. контрактов = " + bal);

219
Вопрос. Выставляю заявку на продажу по хешу как в примере

var order = new_object("hash");
order["price"] = 1.72;
order["quantity"] = 10;
order["operation"] = OP_BUY;
order["usecredit"] = true;
order["condition"] = COND_LAST_DOWN;
order["condvalue"] = 1.75;
trade_action::transact(order);

Заявка не принимается. Окно вывода ATF мне сообщает что "Сбербанк (vol2): Некорректный ордер: Не хватает собственных бумаг - 2 штук (макс. допустимое количество - 0 лот.)."

Я же в параметрах заявки указал что буду использовать кредит (выделено), почему не продается? Если заявку выставляю руками, с использованием кредита, то заявка принимается.

А если выставлять заявку таким образом trade_action::sell(2*lot, ::lots); то все замечательно, продается 2 лота? Где ошибка?

Пожалуйста исправте ошибку в документации на странице "Константы в языке ATF"


220
Чего-то я совсем запутался, если честно. Проблемы с вашим скриптом я вижу только в том, что calc может выполняться несколько раз до того, как собственно заявка дойдет до биржи, и в этом случае выставленные перевернутые позиции тут же закроются. Проблема с этим?

Если да, то можно завести отдельную переменную, которая контролировала бы вашу позицию. Можно например выставлять переменную revereted = 1, и при снятии заявкии проверять выставлена ли она или нет (соответственно занулять при входе в позицию). Вообще мы подумаем над тем, как сделать миграцию с MetaStock более простой, в одной из ближайших версий что-нибудь сделаем удобное.

Еще сразу не заметил вашего вопроса о том как смотреть переменные. В новой версии появилась новая функция "Показать переменные ATF" - для вызова кликните на индикатор ATF правой кнопкой. Она отобразит все глобальные внутренние переменные. Удобно для отладки. Ну а для распечатки можно использовать signal::outputMultiple - она печатается при каждом вызове calc.

    Да проблема именно в этом. И я пытаюсь как-то контролировать этот момент. Т.е. я хочу отправить заявку на биржу и потом дождаться того момента чтобы получить подтверждение о о сделке и потом продолжить выполнение скрипта, но до получения поддтверждения я должен ждать, выполня программу цикла ХХ (холостого хода) или как-то по другому можно организовать задержку.
    И еще вопрос, как я понимаю зеленый-красный робот внизу влияет только на выполнение заявок, если он выключен заявки на биржу не идут, а скрипт выполняется, если он включен заявки идут на биржу. Как с помощью функции isTradingAllowed() можно управлять им из скрипта.

221
Честно говоря не понял что вы пытаетесь сделать этим кодом. Тут явно где-то ошибка в логике. Можете описать желаемый результат словами?
У меня этот код работает неделю на вашей виртуальной бирже. Я его планирую использовать на FORTS.

        if (high[-3] > high[-4] and high[-3] > high[-5] and high[-3] > high[-2] and high[-3] > high[-1]) { hi=high[-3]; } // вычисляем фракталы максимумов
        line[0] = hi; // построение верхней линии канала
        if (low[-3] < low[-4] and low[-3] < low[-5] and low[-3] < low[-2] and low[-3] < low[-1]) { lo=low[-3]; } // вычисляем фракталы минимумов
        line[1] = lo; // построение нижней линии канала

         bal = getBought() - getSold(); //получаем информацию о количестве бумаг в наличии

     if (bal == 0) { // если количество бумаг = 0 (их нет)
     if (line[0] < high) { // и при этом максмум свечи пересек верхнюю линию канала

         trade_action::buy(lot, ::lots); // то покупаем 1 лот (контракт) по рынку
         trade_action::sell(lot, ::lots, close + 30); //  и выставляем заявку на продажу - как тэйк-профит

     if (line[1] > low) { // или, если минимум свечи пересек нижнюю линию канала
         trade_action::sell(lot, ::lots); // то продаем 1 лот  по рынку
         trade_action::buy(lot, ::lots, close + 30); //  и выставляем заявку на покупку - как тэйк-профит

т.е. при выходе из канала мы покупаем или продаем 1 лот и выставляет активную заявку TP, после этого у нас изменяется баланс бумаг он становится или положительным, если мы покупаем в лонг или отрицательным, если в шорт.

else if (bal < 0) {// если наш баланс по бумагам отрицательный, т.е. у нас был шорт
     if (line[0] < high) {// и при этом максмум свечи пересек верхнюю линию канала

         trade_action::cancelAllOrders(); // то мы снимаем все предыдущие активные заявки, не реализованные TP, чтоб они не мешались
         trade_action::buy(2*abs(bal), ::lots);// и переворачиваемся, т.е. покупаем бумаг в 2 раза больше, чтоб откупить шорт и встать в лонг
         trade_action::sell(abs(bal), ::lots, close + 30); // при этом так же выставляем заявку TP

else if (bal > 0) {   // в оставшейся секции наоборот.

Логика конечно тут запутана, но суть в том что я ее применил из Metastock, используя обычный фрактальный канал, только я его перенес на ATF.
Я запускаю transaq с роботом и цеплю Metasctok, т.е. котировки меняются и там и там. И обе системы работают синхронно, только Metasctok мне выдает alert на пакупку или продажу, а транзак должен выставлять заявки, вот здесь у меня и затык с задержками...

222
По второму вопросу. Просто в onATFTrade или onATFOrder перенесите вашу логику снятия/выставления заявок. Я не вижу всего кода и не знаю принципа вашей торговой системы, поэтому подробно не могу ничего подсказать.
Вот мой код. Посмотрите пожалуйста.
#samewindow
#line 0 solid red
#line 1 solid green

extern lot = 1;  // Первоначальное количество лотов
var hi;
var lo;
var bal;

function init()
{
   setInitCandles(5);
}

function calc()
{
        if (high[-3] > high[-4] and high[-3] > high[-5] and high[-3] > high[-2] and high[-3] > high[-1]) { hi=high[-3]; }
        line[0] = hi;
        if (low[-3] < low[-4] and low[-3] < low[-5] and low[-3] < low[-2] and low[-3] < low[-1]) { lo=low[-3]; }
        line[1] = lo;    
  
         bal = getBought() - getSold();
         signal::output("Кол. контрактов = " + bal);

    if (bal == 0) {
     if (line[0] < high) {

    signal::alert("Пробой линии сопротивлении в ВЕРХ. ПОКУПАЕМ!!!");
         trade_action::buy(lot, ::lots);
         trade_action::sell(lot, ::lots, close + 30); // Заявка на продажу - TP  ***
}
     if (line[1] > low) {

    signal::alert("Пробой линии поддержки в ВНИЗ. ПРОДАЕМ!!!");
         trade_action::sell(lot, ::lots);
         trade_action::buy(lot, ::lots, close - 30); // Заявка на покупку - TP ***
}}

else if (bal < 0) {
     if (line[0] < high) {

         trade_action::cancelAllOrders();

         signal::alert("Пробой линии сопротивлении в ВЕРХ. ПОКУПАЕМ!!!");
         trade_action::buy(2*abs(bal), ::lots);
         trade_action::sell(abs(bal), ::lots, close + 30); // Заявка на продажу - TP ***
}}
else if (bal > 0) {   
     if (line[1] > low) {

         trade_action::cancelAllOrders();

    signal::alert("Пробой линии поддержки в ВНИЗ. ПРОДАЕМ!!!");
         trade_action::sell(2*abs(bal), ::lots);
         trade_action::buy(abs(bal), ::lots, close - 30); // Заявка на покупку - TP ***
}}

}

*** - это я добавил, т.к. в первый раз при вставке они у меня выпали

223
nxz, идея с циклами не особо хорошая. Пока индикатор не просчитает calc целиком, он не примет новых данных от сервера. Лучше полагаться на функции onATFTrade или onATFOrder - они вызываются сразу же как только информация о сделке или заявке станет доступна Transaq.

Не совсем понятно как применить функции onATFTrade или onATFOrder в моем случае, т.к. я пытаюсь получить обратную связь с количеством бумаг в наличии (после выставления заявки) и в зависимости от того какой баланс (положительный или отрицательный) выставляю противоположную заявку. Из-за задержки вытавления заявки на бирже у меня и проиходит неправильная работа calc(). Цикл calc() происходит быстрее и ко мне приходит неверное значение  getBought() . Подскажите как это можно исправить на моем примере пожалуйста! :(


         bal = getBought() - getSold(); // Вычисляем количество контрактов
         signal::output("Кол. контрактов = " + bal);
 
     if (bal == 0) {
     if (line[0] < high) {

         signal::alert("Пробой линии сопротивлении в ВЕРХ. ПОКУПАЕМ!!!");

         trade_action::buy(lot, ::lots);
}
     if (line[1] > low) {

         signal::alert("Пробой линии поддержки в ВНИЗ. ПРОДАЕМ!!!");

         trade_action::sell(lot, ::lots);
}}

else if (bal < 0) {
     if (line[0] < high) {

         trade_action::cancelAllOrders(); // Снятие всех заявок
 
         signal::alert("Пробой линии сопротивлении в ВЕРХ. ПОКУПАЕМ!!!");

         trade_action::buy(2*abs(bal), ::lots);
}}

else if (bal > 0) {
     if (line[1] > low) {

         trade_action::cancelAllOrders(); // Снятие всех заявок

         signal::alert("Пробой линии поддержки в ВНИЗ. ПРОДАЕМ!!!");

         trade_action::sell(2*abs(bal), ::lots);

224
Дело в том, что скрипт ATF выполняется довольно быстро, не дожидаясь пока транзакция пройдет. Поэтому если вы последовательно выставляете заявку из ATF, и тут же проверяете баланс, то почти наверняка, даже если сделка пройдет сразу же, к моменту выполнения функции getBought() она не успеет дойти до биржи. Скорее всего даже заявка

Для того, чтобы отслеживать сделку в момент ее совершения или заявку в момент ее выставления, используйте переопределяемые функции onATFTrade и onATFOrder соответственно.

Т.е. надо организовать временную задержку между выставлением заявки на биржу и проверкой баланса функцией getBought(), что бы заявка гарантированно дошла до биржи.
Если я между этими командами организую цикл
     var i = 0;
     while (i < del) {i += 1;}
то какую временную задержку он даст в секундах. Каким должен быть параметр del? чтоб получить задержку 1 сек.

225
Окно вывода ATF, куда выводятся переменные обновляется только при создании новой свечи. Функция calc() выпоняется при каждом трейде, т.е. переменные изменяющиеся внутри функции при этом не видны. Как их можно посмотреть. Хотелось бы видить что происходит с переменными.

Pages: 1 ... 13 14 [15] 16 17


Войти

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