dikanevn
Newbie
Offline
Activity: 51
Merit: 0
|
|
January 20, 2015, 04:31:43 PM |
|
Доброго времени суток! Огромное спасибо автору за софт такого уровня. Наткнулся на этого клиента 2 дня назад, но до сих пор нахожусь под впечатлением. Интерфейс на 5+ Такое впечатление, что программа написана по твоему заказу. Жду дальнейших обновлений и добавления функционала, а также примеров скриптов. Т.к. сам не программист, то пытаюсь понять все с описания и примеров. Отдельное спасибо dikanevn за его стратегию. И маленький вопрос. Откуда берутся события такие как AskPrice, BidPrice и т.д.? Они заложены в программе или берутся с самой биржи? И полный ли их список на странице описания JL Script http://forum.centrabit.com/viewtopic.php?f=3&t=4168 и в самой программе? Просто сейчас пытаюсь писать какие-то простые примеры скриптов, и столкнулся с тем, что не могу, к примеру, вычислить усредненную цену 10 последних продаж. Буду благодарен, если кто подскажет, как это можно вычислить. Или без сохранения переменных это пока не возможно? Здравствуйте, AskPrice , BidPrice берутся с биржи, это цена продажи и покупки на данный момент,а вот вычислить усредненную цену 10 последних продаж, без сохранения и подсчёта в самом скрипте , если не ошибаюсь, пока не возможно.
|
|
|
|
|
|
|
|
You can see the statistics of your reports to moderators on the "Report to moderator" pages.
|
|
|
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
|
|
Andrey.M
Jr. Member
Offline
Activity: 46
Merit: 10
|
|
January 21, 2015, 03:13:27 PM |
|
Всем доброго времени суток. Подскажите пожалуйста, есть такое событие (надеюсь правильно выражаюсь), как changed: trader.on("LastPrice").changed() { //Ваш код тут } а можно ли как-то описать событие, которое бы срабатывало, когда изменения не произошли на протяжении 1 минуты, к примеру? Что-то типа nochanged. Или только через объявление переменной, задержкой на минуту и сравнения?
|
|
|
|
IGHOR (OP)
Legendary
Offline
Activity: 1035
Merit: 1065
|
|
January 21, 2015, 03:18:51 PM |
|
Всем доброго времени суток. Подскажите пожалуйста, есть такое событие (надеюсь правильно выражаюсь), как changed: trader.on("LastPrice").changed() { //Ваш код тут } а можно ли как-то описать событие, которое бы срабатывало, когда изменения не произошли на протяжении 1 минуты, к примеру? Что-то типа nochanged. Или только через объявление переменной, задержкой на минуту и сравнения? Только с помощью таймеров. trader.delay(.. trader.timer(.. И сравнение с сорханенными переменными
|
Qt Bitcoin TraderVerify digital signature of the app in the file properties every time you download it.
|
|
|
Andrey.M
Jr. Member
Offline
Activity: 46
Merit: 10
|
|
January 21, 2015, 03:27:57 PM |
|
Всем доброго времени суток. Подскажите пожалуйста, есть такое событие (надеюсь правильно выражаюсь), как changed: trader.on("LastPrice").changed() { //Ваш код тут } а можно ли как-то описать событие, которое бы срабатывало, когда изменения не произошли на протяжении 1 минуты, к примеру? Что-то типа nochanged. Или только через объявление переменной, задержкой на минуту и сравнения? Только с помощью таймеров. trader.delay(.. trader.timer(.. И сравнение с сорханенными переменными Спасибо, уже так и пытаюсь все это описать. Еще одна мысль возникла. А возможно как-то сделать вывод в файл ? Что-то вроде: trader.get("10MinBuyDivSell") > 1.txt И чтение из файла? И может лучше создать отдельную тему для обсуждения подобных вопросов? Как автор считает?
|
|
|
|
Serg5555
Newbie
Offline
Activity: 2
Merit: 0
|
|
January 27, 2015, 09:12:47 AM |
|
Для отмены ордеров на торгующей паре в Скрипт 1 НЕОБХОДИМО указать например trader.cancelOrders("LTCUSD"); вместо trader.cancelOrders(); последнее чревато отменой всех ордеров по всем вашим парам и использования всего появившегося фиата на текущей паре Для trader.cancelAsks(); также. Для BTCUSD начальные константы в Скрипт 1 будут конечно же другие. С наступившим НГ ! Решил написать стратегию для этой программы Внимание! Стратегия мало протестирована, используйте на свой страх и риск! Торговал на боте по ссылке ниже, в принципе сделал такой же (Надеюсь по судам меня не начнут таскать =), так что алгоритм читайте тут - https://ezhrd.wordpress.com/2014/06/05/%D0%BE%D0%B1%D1%89%D0%B8%D0%B9-%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B-%D0%B1%D0%BE%D1%82%D0%B0/Но там 5$ в месяц за одну пару на одной бирже, тут же всё бесплатно. как и в обновлении того бота,в алгоритм добавлена функция подтяжки таблицы ордеров вслед за курсом. Например, бот выставил таблицу закупок, ни одна закупка не исполнялась, но курс пошел вверх, а не вниз. Когда курс станет выше, чем цены покупки на указанный % , бот снимет всю таблицу закупок и выставит заново, отталкиваясь от нового курса. Я JavaScript вообще не знал, изучал всё с ходу и поэтому скрипт написан непрофессионально, присылайте глюки и баги если будут. по умолчанию скрипт написан для пары LTC/USD на бирже BTC-e, что бы настроить для другой пары на любой бирже, заменить на обоих скриптах в блокноте через ctrl+H все LTC на, например, BTC , и USD на ,например , EUR для запуска в разделе правила добавляем два скрипта с именами "Скрипт 1" и "Скрипт 2" и вставляем текст ,в начале ОБОИХ скриптов меняем параметры под свой вкус, и запускаем Скрипт 2. сумма на балансе должна быть вся на второй валюте в паре (для LTC/USD в USD),на первой должен быть ноль. текст для Скрипт 1 var otstup = 0.5 // в %, отступ первого шага,Насколько цена первого buy ордера в таблице закупке должна быть меньше текущей на момент расчета таблицы. Все остальные buy ордера будут еще дешевле var orders = 15 // от 2 до 20 , Сколько buy-ордеров помещать в объеме перекрытия. var perekr = 20 // в % , перекрытие хода цены,Глубина расчета таблицы buy ордеров. Например, при цене первого шага 10USD процент перекрытия 20% означает, что таблица будет выставлена в // диапазоне 8-10USD. var profit = 1 // в % , профит,Сколько профита закладывать в каждый sell ордер. var martin = 5 // в %, мартингейл, При расчете таблицы buy ордеров каждый следующий более дешевый ордер по объему больше предыдущего на это значение. var depo = 99 // в % , от 1 до 99, Использование депо, какую часть от USD (или второй валюты в паре) пускать в оборот // ниже если не шарите ничего не меняйте.
var kontr = 100000000 var komissiya = trader.get("Fee") otstup = otstup / 100 otstup = 1 - otstup
depo = depo / 100 martin = martin / 100 + 1
komissiya = komissiya *2 komissiya = komissiya / 100 + 1
perekr = perekr + otstup profit = profit / 100 + 1 var prceni = perekr / orders
prceni =1-( prceni / 100)
trader.cancelOrders(); var pric = trader.get("BidPrice") * otstup; var price=pric var cena = pric
function koa() { all = trader.get("Balance","USD") * depo yyy=0 for (var i = 0; i < orders ;) { yyy = yyy + Math.pow(martin,i) i = i + 1 }
var amount = all / yyy
for (var i = 0; i < orders;) { trader.buy("LTCUSD" , amount / price , price); price = price * prceni; amount = amount * martin i = i + 1 } }
trader.delay(25 ,"koa()");
function aaa() { trader.on("OpenBidsCount").changed() { trader.delay(3,"aac()"); trader.delay(6,"aab()"); } }
trader.delay(40 ,"aaa()");
function aac() { trader.cancelAsks(); }
function aab() { cenavsp = trader.get("LastMyBuyPrice") + pric cena = cenavsp / 2 * komissiya * profit trader.log("Ордер на продажу обновлён");
trader.sell("LTCUSD" , trader.get("Balance","LTC") , cena ); kontr = cena cena = cena / komissiya / profit }
trader.timer(45,"hjk()"); function hjk() { if (trader.get("OpenBidsCount") != orders ) {
if (trader.get("OpenAsksCount") < 1 ) { if (trader.get("Balance","LTC") < 0.000001){
trader.groupStop("Скрипт 2");
trader.groupStart("Скрипт 2"); }}}} текст для Скрипт 2 var vverh = 1 // в %, например, если стоит 2%, и на момент запуска скрипта цена покупки будет 100 USD , то при цене покупки 102 весь цикл перезапустится // ниже если не шарите ничего не меняйте.
var rest = 100000000000 trader.groupStop("Скрипт 1"); trader.groupStart("Скрипт 1"); sledcikl(); function sledcikl(){ rest = vverh / 100 + 1 rest = rest * trader.get("BidPrice") trader.log("restatr pri", rest );
trader.on("BidPrice").changed() { rrr(); function rrr(){ if (trader.get("BidPrice") >= rest) { if ( trader.get("OpenAsksCount") > 0 ) { if (trader.get("Balance","LTC")< 0.0000001) {
trader.groupStop("Скрипт 1"); trader.groupStart("Скрипт 1"); sledcikl(); }}}}}} небольшая история работы бота LTC/USD sell 0.130933 LTC 2.32617 USD 0.30457241 USD 03.01.15 15:45 LTC/USD buy 0.131195 LTC 2.30538 USD 0.30245432 USD 03.01.15 15:45 LTC/USD sell 2.27194 LTC 2.30637 USD 5.23993425 USD 03.01.15 15:44 LTC/USD buy 0.159373 LTC 2.19128 USD 0.34923086 USD 03.01.15 15:33 LTC/USD buy 0.156927 LTC 2.20339 USD 0.34577138 USD 03.01.15 15:16 LTC/USD buy 0.154519 LTC 2.21558 USD 0.3423492 USD 03.01.15 15:16 LTC/USD buy 0.152148 LTC 2.22783 USD 0.33895987 USD 03.01.15 15:16 LTC/USD buy 0.149813 LTC 2.24014 USD 0.33560209 USD 03.01.15 15:16 LTC/USD buy 0.147514 LTC 2.25253 USD 0.33227971 USD 03.01.15 15:07 LTC/USD buy 0.145251 LTC 2.26499 USD 0.32899206 USD 03.01.15 15:05 LTC/USD buy 0.143022 LTC 2.27751 USD 0.32573403 USD 03.01.15 15:05 LTC/USD buy 0.140827 LTC 2.2901 USD 0.32250791 USD 03.01.15 15:05 LTC/USD buy 0.138666 LTC 2.30277 USD 0.3193159 USD 03.01.15 15:05 LTC/USD buy 0.136538 LTC 2.3155 USD 0.31615373 USD 03.01.15 15:00 LTC/USD buy 0.134443 LTC 2.3283 USD 0.31302363 USD 03.01.15 14:53 LTC/USD buy 0.13238 LTC 2.34118 USD 0.3099254 USD 03.01.15 14:53 LTC/USD buy 0.130348 LTC 2.35412 USD 0.30685483 USD 03.01.15 14:35 LTC/USD buy 0.128348 LTC 2.36714 USD 0.30381768 USD 03.01.15 14:25 LTC/USD buy 0.126378 LTC 2.38023 USD 0.3008087 USD 03.01.15 13:01 Всем профита! и пишите всё что думаете по поводу бота )) UPD: 06.01 , исправил ошибки "Для BTCUSD начальные константы в Скрипт 1 другие" Какие именно константы? Замена LTC на BTC в скрипте толку не даёт
|
|
|
|
De Nikin
Newbie
Offline
Activity: 12
Merit: 0
|
|
January 27, 2015, 10:20:10 AM |
|
Serg5555 - уважаемый, цена у LTC и BTC отличается на порядок, поэтому и var otstup = 0.5 var perekr = 20 var profit = 1 var martin = 5 другие подбирать надо... 0,5 процента от лайта и от битка ой как отличаются друг от друга. Пробуйте методом "тыка", вдумчиво... Меняйте по одному и смотрите, что получается. Для начала сделайте 2-3 ордера, легче понять будет...
|
|
|
|
De Nikin
Newbie
Offline
Activity: 12
Merit: 0
|
|
January 27, 2015, 10:29:35 AM |
|
to IGHOR - вопросик есть, если можно тута ответить... Каждая функция (когда к ней обращаешься) "лезет" на биржу за данными, или прога получает, грубо говоря каждую 1 сек. поток данных, и потом, в течении секунды делает выборку по ней? ЗЫ: пример Ask=trader.get("LTCUSD","AskPrice"); ... цена устраивает ... trader.buy... - я куплю по Ask, или пока я делал свои дела (...) цена могла измениться
|
|
|
|
dikanevn
Newbie
Offline
Activity: 51
Merit: 0
|
|
January 27, 2015, 10:37:13 AM |
|
Serg5555 - уважаемый, цена у LTC и BTC отличается на порядок, поэтому и var otstup = 0.5 var perekr = 20 var profit = 1 var martin = 5 другие подбирать надо... 0,5 процента от лайта и от битка ой как отличаются друг от друга. Пробуйте методом "тыка", вдумчиво... Меняйте по одному и смотрите, что получается. Для начала сделайте 2-3 ордера, легче понять будет...
Перекрытие не маленькое? можно инвестором остаться, ещё и при мартине 5 =) тогда оставляйте запас депо. to IGHOR - вопросик есть, если можно тута ответить... Каждая функция (когда к ней обращаешься) "лезет" на биржу за данными, или прога получает, грубо говоря каждую 1 сек. поток данных, и потом, в течении секунды делает выборку по ней? ЗЫ: пример Ask=trader.get("LTCUSD","AskPrice"); ... цена устраивает ... trader.buy... - я куплю по Ask, или пока я делал свои дела (...) цена могла измениться Вы же задали переменную, trader.get("LTCUSD","AskPrice") меняется, а Ask теперь будет неизменная.
|
|
|
|
De Nikin
Newbie
Offline
Activity: 12
Merit: 0
|
|
January 27, 2015, 11:44:23 AM |
|
dikanevn - это понятно, я немного о другом. Я делаю Ask=trader.get..., затем допусти еще раз Buy=trader.get... - программа обращается опять на биржу, теряя иногда драгоценные милисекунды, или в течение определенного времени (Апи лаг показывает время между такими запросами) делает выборки из уже полученного ранее... ЗЫ: Надеюсь понятно "выписал" мыслю...
|
|
|
|
IGHOR (OP)
Legendary
Offline
Activity: 1035
Merit: 1065
|
|
January 27, 2015, 03:20:57 PM |
|
dikanevn - это понятно, я немного о другом. Я делаю Ask=trader.get..., затем допусти еще раз Buy=trader.get... - программа обращается опять на биржу, теряя иногда драгоценные милисекунды, или в течение определенного времени (Апи лаг показывает время между такими запросами) делает выборки из уже полученного ранее... ЗЫ: Надеюсь понятно "выписал" мыслю...
Программа обращается на биржу с интервалом приблизительно 400 мс. Интервал зависит от требований биржи. В смысле программа постоянно пытается получить все данные как можно быстрее. А использование функций в скрипте это всего лишь обращение к оперативной памяти с данными. Так что нет никаких ограничений в количестве и интервале использования функций скриптового языка. Ограничением можно назвать лишь нагрузку на ваш CPU.
|
Qt Bitcoin TraderVerify digital signature of the app in the file properties every time you download it.
|
|
|
hazarun
Legendary
Offline
Activity: 2128
Merit: 1019
|
|
January 27, 2015, 10:25:22 PM |
|
Программа обращается на биржу с интервалом приблизительно 400 мс. Интервал зависит от требований биржи. В смысле программа постоянно пытается получить все данные как можно быстрее.
Это Вы про какую биржу говорите, период опроса 400 мсек ? Можете уточнить, опрос БТЦЧина с каким интервалом идет ?
|
|
|
|
IGHOR (OP)
Legendary
Offline
Activity: 1035
Merit: 1065
|
|
January 27, 2015, 10:26:55 PM |
|
Программа обращается на биржу с интервалом приблизительно 400 мс. Интервал зависит от требований биржи. В смысле программа постоянно пытается получить все данные как можно быстрее.
Это Вы про какую биржу говорите, период опроса 400 мсек ? Можете уточнить, опрос БТЦЧина с каким интервалом идет ? BTC China - по умолчанию 500 мс. Интервал можете изменять в конфиг файлах.
|
Qt Bitcoin TraderVerify digital signature of the app in the file properties every time you download it.
|
|
|
Andrey.M
Jr. Member
Offline
Activity: 46
Merit: 10
|
|
January 28, 2015, 12:56:17 AM Last edit: January 28, 2015, 01:07:47 AM by Andrey.M |
|
Доброго времени суток! Помогите пожалуйста разобраться с проблемой в скрипте. Создал скрипт для автоматической продажи BTC при балансе BTC > 0.001 Сам скрипт: trader.timer(7,"Sell()"); Sell(); function Sell() { var AmountBTC = trader.get("Balance","BTC"); var price = trader.get("BTCCNY" , "AskPrice"); price += 0.5; if (AmountBTC >= 0.001) { trader.sell("BTCCNY" , AmountBTC , price); } else return; } При запуске скрипта, все ок, лог пустой. При изменении баланса BTC, скрипт выставляет ордер на продажу, но не прекращает свою работу. А баланс то уже > 0.001. И не прекращает попытки выставить новый ордер, даже при закрытом старом. А здесь уже баланс = 0 Думал, что он зацикливается и не обновляет состояние баланса. Но при новой покупке на другую сумму, скрипт опять нормально выставляет ордер. Лог скрипта: 2:42:29> BTCCNY: Sell 0.0024 at 1650.07 2:42:36> BTCCNY: Sell 0.0024 at 1651.1 2:42:43> BTCCNY: Sell 0.0024 at 1651.1 2:42:50> BTCCNY: Sell 0.0024 at 1652.5 2:42:57> BTCCNY: Sell 0.0032 at 1653.25 2:43:04> BTCCNY: Sell 0.0032 at 1653.26 2:43:11> BTCCNY: Sell 0.0032 at 1653.22 Уже перепробовал кучу вариантов. Толку ноль.
|
|
|
|
dikanevn
Newbie
Offline
Activity: 51
Merit: 0
|
|
January 28, 2015, 02:04:49 AM |
|
Доброго времени суток! Помогите пожалуйста разобраться с проблемой в скрипте. Создал скрипт для автоматической продажи BTC при балансе BTC > 0.001 Сам скрипт: trader.timer(7,"Sell()"); Sell(); function Sell() { var AmountBTC = trader.get("Balance","BTC"); var price = trader.get("BTCCNY" , "AskPrice"); price += 0.5; if (AmountBTC >= 0.001) { trader.sell("BTCCNY" , AmountBTC , price); } else return; } При запуске скрипта, все ок, лог пустой. При изменении баланса BTC, скрипт выставляет ордер на продажу, но не прекращает свою работу. А баланс то уже > 0.001. И не прекращает попытки выставить новый ордер, даже при закрытом старом. А здесь уже баланс = 0 Думал, что он зацикливается и не обновляет состояние баланса. Но при новой покупке на другую сумму, скрипт опять нормально выставляет ордер. Лог скрипта: 2:42:29> BTCCNY: Sell 0.0024 at 1650.07 2:42:36> BTCCNY: Sell 0.0024 at 1651.1 2:42:43> BTCCNY: Sell 0.0024 at 1651.1 2:42:50> BTCCNY: Sell 0.0024 at 1652.5 2:42:57> BTCCNY: Sell 0.0032 at 1653.25 2:43:04> BTCCNY: Sell 0.0032 at 1653.26 2:43:11> BTCCNY: Sell 0.0032 at 1653.22 Уже перепробовал кучу вариантов. Толку ноль. отписал в личку
|
|
|
|
Andrey.M
Jr. Member
Offline
Activity: 46
Merit: 10
|
|
January 28, 2015, 02:28:32 AM |
|
отписал в личку
Спасибо, но в личке: "No messages..."
|
|
|
|
dikanevn
Newbie
Offline
Activity: 51
Merit: 0
|
|
January 28, 2015, 07:25:36 AM |
|
отписал в личку
Спасибо, но в личке: "No messages..." глючу =D написал..
|
|
|
|
De Nikin
Newbie
Offline
Activity: 12
Merit: 0
|
|
January 28, 2015, 07:43:21 AM |
|
Доброго всем. Подскажите, как можно сделать задержку на 1-2 сек. Никак не соображу:
trader.buy("", , ); // ставим ордер
тут нужна задержка, иначе далее идет цикл
trader.on("LTCUSD","AskPrice").changed() {... if(trader.get("OpenBidsCount")<1) - тут я проверяю, если ли ордер, при первом входе не успевает ОНО поставить ордер и ... вылетает с цикла у меня...
|
|
|
|
dikanevn
Newbie
Offline
Activity: 51
Merit: 0
|
|
January 28, 2015, 08:20:49 AM |
|
Доброго всем. Подскажите, как можно сделать задержку на 1-2 сек. Никак не соображу:
trader.buy("", , ); // ставим ордер
тут нужна задержка, иначе далее идет цикл
trader.on("LTCUSD","AskPrice").changed() {... if(trader.get("OpenBidsCount")<1) - тут я проверяю, если ли ордер, при первом входе не успевает ОНО поставить ордер и ... вылетает с цикла у меня...
засовываешь все что надо задержать в функцию function xyz() { ... } и ставишь задержку trader.delay(3 ,"xyz()");
|
|
|
|
Andrey.M
Jr. Member
Offline
Activity: 46
Merit: 10
|
|
January 28, 2015, 08:31:51 AM |
|
отписал в личку
Спасибо, но в личке: "No messages..." глючу =D написал.. Спасибо, совет не помог. Цикл так и продолжается. Доброго всем. Подскажите, как можно сделать задержку на 1-2 сек. Никак не соображу:
trader.buy("", , ); // ставим ордер
тут нужна задержка, иначе далее идет цикл
trader.on("LTCUSD","AskPrice").changed() {... if(trader.get("OpenBidsCount")<1) - тут я проверяю, если ли ордер, при первом входе не успевает ОНО поставить ордер и ... вылетает с цикла у меня...
Я не программист, но все же: Попробуй это вставить в функцию: {... if(trader.get("OpenBidsCount")<1) а на функцию добавить задержку.
|
|
|
|
De Nikin
Newbie
Offline
Activity: 12
Merit: 0
|
|
January 28, 2015, 08:38:20 AM |
|
dikanevn - спасибо... переделал...
|
|
|
|
|