Pages:
Author

Topic: Qt Bitcoin Trader [Клиент для безопасных торгов на Mac/Windows/Linux] - page 39. (Read 303480 times)

newbie
Activity: 17
Merit: 0
Намертво зависает на цикле while например while(!trader.get("OpenOrdersCount")){}

Замкнутые циклы всегда приведут к зависанию, Вам следует поставить таймер для проверки значения.
Я добавлю событие изменения OpenOrdersCount в следующем аппдейте, а пока можете использовать этот код:

Code:
var последнееКоличествоОрдеров=0;
function количествоОрдеровИзменилось()
{
trader.log("Количество открытых ордеров изменилось на ", последнееКоличествоОрдеров);
}

trader.timer(1,"if(trader.get('OpenOrdersCount')!= последнееКоличествоОрдеров){последнееКоличествоОрдеров =trader.get('OpenOrdersCount');количествоОрдеровИзменилось();}");
Ясно, спасибо! Еще я заметил, что иногда события не срабатывают. Можете объяснить почему?
P.S. А еще я заметил, что вы допустили множество ошибок при написании слов, которые отвечают на вопрос что делать/что сделать. Например вы пишете "создадуться" что сделают?-создадутся. На конце вопроса нет мягкого знака, поэтому "создадутся" пишется без мягкого знака. Конечно я не настаиваю на правильном написании, но при серьезном подходе к делу, нужно стараться допускать как можно меньше ошибок.  Smiley
legendary
Activity: 1034
Merit: 1065
Привет всем.
Я совсем забыл расказать вам про цветовые схемы Qt Bitcoin Trader.
В последнем билде вы можете менять цвета без перекомпиляции программы.

Вот как это сделать:
1) Откройте папку с данными Qt Bitcoin Trader. (Windows: %localappdata%\QtBitcoinTrader, Mac: ~/Application Support/QtBitcoinTrader или папку портабельной вресии QtBitcoinTrader)
2) Создайте новую папку там, назовите "Themes"
3) Запустите программу.

Там автоматически создадуться два файла Dark.thm и Light.thm.

Вы можете открыть их блокнотом или другим текстовым редакором, изменить темы и после перезапуска программы они будут использоваться вместо стандартных.
Все цвета записаны в RBGA формате, это 4 числа разделенные запятой (Красный,Зеленый,Синий,Прозрачность).

Редактируйте темы, подбирайте лучшие схемы для себя и отправляйте мне. Я добавлю их в стандартную сборку программы в следующих обновлениях.
Важно чтобы все тексты в таблицах и панелях были читаемы на подобранных цветах.
legendary
Activity: 1034
Merit: 1065
Намертво зависает на цикле while например while(!trader.get("OpenOrdersCount")){}

Замкнутые циклы всегда приведут к зависанию, Вам следует поставить таймер для проверки значения.
Я добавлю событие изменения OpenOrdersCount в следующем аппдейте, а пока можете использовать этот код:

Code:
var последнееКоличествоОрдеров=0;
function количествоОрдеровИзменилось()
{
trader.log("Количество открытых ордеров изменилось на ", последнееКоличествоОрдеров);
}

trader.timer(1,"if(trader.get('OpenOrdersCount')!= последнееКоличествоОрдеров){последнееКоличествоОрдеров =trader.get('OpenOrdersCount');количествоОрдеровИзменилось();}");
newbie
Activity: 17
Merit: 0
Намертво зависает на цикле while например while(!trader.get("OpenOrdersCount")){}
legendary
Activity: 1034
Merit: 1065
Почему то у меня не верно рассчитывается комиссия (в моем случае с namecoin) Там где большая синяя кнопка "купить" я пишу 1 в "объеме покупки" он выдает
1 = 0.99720670 хотя комиссия 0.002 то есть я должен получить (1-0.002)*1NMC = 0.998, но почему то там меньше  Huh

Спасибо, это баг в парах в которых количество знаков цены 3, исправлю.
newbie
Activity: 17
Merit: 0
Почему то у меня не верно рассчитывается комиссия (в моем случае с namecoin) Там где большая синяя кнопка "купить" я пишу 1 в "объеме покупки" он выдает
1 = 0.99720670 хотя комиссия 0.002 то есть я должен получить (1-0.002)*1NMC = 0.998, но почему то там меньше  Huh
legendary
Activity: 1034
Merit: 1065
Далее запускаем все скрипты и смотрим в консоль.
Смотрим : ничего не происходит.

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

Вывода у вас нет потому что значение первого скрипта транслируется при запуске а дальше при каждом изменении значения.

То что вы сделали:
1) запустилипервый скрипт, значение протранслировалось единожды и ждет изменений цен маркета.
2) запустили остальные скрипты, но они не получили значения потому что запущены после первого скрипта и пропустили трансляцию запуска.
Запустите сначала второй скрипт а потом первый и увидите результат сразу, или подождите когда изменяться цены маркета и увидите вывод в консоль второго скрипта.
Что вы хотите сделать в третем скрипте?

вопрос в том, где должна быть эта команда?
В отдельной группе? В отдельнойм скрипте?
И если мы высиляем среднее значение. то причем тут число? Оно же вычисляемое. Какая функция это числа?

Это был пример использования в двух вариантах.
sendEvent для одного индикатора должен быть только в одном скрипте.
Трансляция индикатора у вас в первом скрипте.
Теперь вы можете отлавливать изменения из любого другого скрипта (пример ваш второй скрипт).
member
Activity: 77
Merit: 10
то проверка кода ругается и выдает ошибку Не может найти переменную value
Если в отдельный скрипт-группу, то также результата нет?

Quote
У каждого события есть три переменные локального действия. Это: symbol, name, value.
symbol это пара, символ примером которой есть текст "BTCUSD"
name код индикатора, текстовое название, пример "LastPrice"
value дробное значение которое содержит последнее значение индикатора
Эти переменные могут быть использованы в любом месте события, а так же не использованы вовсе.

Эти переменные работают только внутри событий и сохраняют в себе значения события.
Вместо value подставьте число или переменную с результатом ваших вычислений.

Например:

Code:
trader.sendEvent("MidPrice",200.4);

Или:

Code:
var myVariable; // ваша переменная которая сохраняет  результат индикатора
myVariable=(trader.get("BidPrice")+trader.get("AskPrice"))/2; // присваиваем переменной среднее значение
trader.sendEvent("MidPrice",myVariable);// транслируем значение в индикатор под названием MidPrice
вопрос в том, где должна быть эта команда?
В отдельной группе? В отдельнойм скрипте?
И если мы высиляем среднее значение. то причем тут число? Оно же вычисляемое. Какая функция это числа?
legendary
Activity: 1034
Merit: 1065
то проверка кода ругается и выдает ошибку Не может найти переменную value
Если в отдельный скрипт-группу, то также результата нет?

Quote
У каждого события есть три переменные локального действия. Это: symbol, name, value.
symbol это пара, символ примером которой есть текст "BTCUSD"
name код индикатора, текстовое название, пример "LastPrice"
value дробное значение которое содержит последнее значение индикатора
Эти переменные могут быть использованы в любом месте события, а так же не использованы вовсе.

Эти переменные работают только внутри событий и сохраняют в себе значения события.
Вместо value подставьте число или переменную с результатом ваших вычислений.

Например:

Code:
trader.sendEvent("MidPrice",200.4);

Или:

Code:
var myVariable; // ваша переменная которая сохраняет  результат индикатора
myVariable=(trader.get("BidPrice")+trader.get("AskPrice"))/2; // присваиваем переменной среднее значение
trader.sendEvent("MidPrice",myVariable);// транслируем значение в индикатор под названием MidPrice
legendary
Activity: 1034
Merit: 1065
Вот эту команду куда вставлять? trader.sendEvent("MidPrice",значение);

В коде который вы процитировали эта команда уже есть. (trader.sendEvent("MidPrice",midPrice); - midPrice это переменная с вычисленным значением индикатора)
Ошибка у вас изза того что текст "значение" нужно заменить на число или переменную.
Команду надо выполнять в момент изменения вашего индикатора.

Если вы добавите строку "trader.sendEvent("MidPrice",100.3);" в начало кода, то команда будет выполнена единожды.
В результате вашему индикатору MidPrice будет присвоено значение 100.3 и оно не будет меняться.

Для того чтобы значение вашего индикатора менялось, надо вызывать эту команду с вторым параметром значения вашего индикатора в момент его изменения.
Для этого ваши вычисления надо поместить в таймер или событие.
member
Activity: 77
Merit: 10
Вот попыталсь воспроизвести пример скрипта вычисления среднего значения.
Всё сделала , как описано , но ничего не вышло.
Вот цитата, которая не понятна. Да написать команду, но КУДА? Где должна быть эта команда?
В JL Script можно создавать как свои индикаторы так и события к ним.
Для этого используеться одна команда trader.sendEvent("имя",значение);
Так же команда может быть вызвана с помощью трех параметров trader.sendEvent("символ","имя",значение);
Вы можете придумать любое уникальное имя которое не совпадает с существующими именами индикаторов и отправлять значение всем группам скриптов.
Например, вы хотите создать индикатор вычисления среднего чесла последних цен спроса и предложения AskPrice и BidPrice.
Назовем индикатор "MidPrice". Транслировать событие этого индикатора будет выше указанная функция trader.sendEvent("MidPrice",значение);


Вот эту команду куда вставлять? trader.sendEvent("MidPrice",значение);

Если в начало скрипта ?
[sup]trader.sendEvent("MidPrice",значение);
var lastMidPrice=0;
calculateMidPrice(); // Вызываем функцию при старте, чтобы не дожидаться изменения индикаторов

function calculateMidPrice()
{
var midPrice=(trader.get("BidPrice")+trader.get("AskPrice"))/2;
if(midPrice==lastMidPrice)return; // Останавливаемся если значение не изменилось
lastMidPrice=midPrice; // Сохраняем последнее значение
trader.sendEvent("MidPrice",midPrice); // Транслируем наше событие
}

trader.on("LastPrice").changed()
{
calculateMidPrice();
}

trader.on("AskPrice").changed()
{
calculateMidPrice();
}[/sup]

то проверка кода ругается и выдает ошибку.
Если в отдельный скрипт-группу, то также результата нет?
legendary
Activity: 1034
Merit: 1065
Знающие и понимающие, подскажите, пожалуйста.
Что такое API лаг? Как работать с ним в правилах?
Покажите на простеньком примере, для чего его можно применить?

Api Lag - это значение в секундах которое являеться промежутком времени между отправкой запроса и приемом результата. Используеться для определения доступности биржи. Например если лаг больше 15 секунд, значит возможности торговать нет, проблемы у биржи или у вас нет интернета.
Это для того чтобы вы могли определить когда запросы на открытие ордеров или отмену отправлять не желательно.

http://forum.centrabit.com/viewtopic.php?f=3&t=4168
member
Activity: 77
Merit: 10
Знающие и понимающие, подскажите, пожалуйста.
Что такое API лаг? Как работать с ним в правилах?
Покажите на простеньком примере, для чего его можно применить?
member
Activity: 77
Merit: 10
В 98-ой версии все правила с балансами работают, а в 99-ой нет. Это проблема программы.

Например, когда ордер исполняется. то мой баланс изменяется. вот на это событие создается правило:
Наример
Если баланс > xxx, то динь.

Это правило в 98-ой срабатывает, а в 99-ой нет.

Спасибо за баг репорт. Вот приватный билд с фиксом.
Добавил событие исполнения своих и маркет ордеров в правила.

https[Suspicious link removed]
https://dl.dropboxusercontent.com/u/860231/QtBitcoinTrader_Beta.dmg
Ураа! Заработало!! Спасибо Большое.
Большое спасибо создателю этой программы!!!
legendary
Activity: 1034
Merit: 1065
В 98-ой версии все правила с балансами работают, а в 99-ой нет. Это проблема программы.

Например, когда ордер исполняется. то мой баланс изменяется. вот на это событие создается правило:
Наример
Если баланс > xxx, то динь.

Это правило в 98-ой срабатывает, а в 99-ой нет.

Спасибо за баг репорт. Вот приватный билд с фиксом.
Добавил событие исполнения своих и маркет ордеров в правила.

https://dl.dropboxusercontent.com/u/860231/QtBitcoinTrader.exe
https://dl.dropboxusercontent.com/u/860231/QtBitcoinTrader_Beta.dmg
member
Activity: 77
Merit: 10
Кстати некоторые правила не срабатывают.
Например,
Когда баланс USD > 20 , то продать всё за XXX.
Ордер не выставляется.
В то же время правило с ценами вполне работает , тоесть правило
Когда Цена >< XXX то продать за XXX- ордер выставляется.

Получается, что правила с балансами не срабатывают.

Подтверждаю, правила с балансами срабатывают не всегда.

Это проблема всех бирж а не программы. Если у вас объем выходит за баланс и биржа отменяет ордер. Но это касаеться только ордеров на покупку. Для решения следует использовать в правиле "- коммисия". И будет число меньше, которое сработает. Но я все перепроверю.
В 98-ой версии все правила с балансами работают, а в 99-ой нет. Это проблема программы.

Например, когда ордер исполняется. то мой баланс изменяется. вот на это событие создается правило:
Наример
Если баланс > xxx, то динь.

Это правило в 98-ой срабатывает, а в 99-ой нет.
legendary
Activity: 1034
Merit: 1065
Вышел v1.07.99 багфикс релиз 9.

Исправлены баги с кодировкой.
Исправлен баг JL Script когда невозможно достать информацию с ордер бука.
Исправлен баг движка бирж, битфинекс опять работает.
Добавлено два новых события:

Code:
trader.on("MyLastTrade").changed() // Выполнился любой ордер в вашем аккаунте

trader.on("LastTrade").changed() // Выполнился любой ордер на бирже
legendary
Activity: 1034
Merit: 1065
Вышел багфикс 8, релиз кандидат.

Исправлены баги в JL Script когда ордер не выставлялся и еще пару багов.

Понемногу буду записывать видео документации, вот первое видео: https://www.youtube.com/watch?v=a02i_dKBN4k
Pages:
Jump to: