Jump to content

nlogo

Новички
  • Content Count

    16
  • Joined

  • Last visited

Community Reputation

0 Обычный

About nlogo

  • Rank
    Новичок
  1. как видно тут стали почему то выводится нули (когда выводится)....
  2. сделал вот вывод: 23:10:41> ----------------- QTBuy ----------------------- 23:10:41> BTC/USD: Buy 0.00004216 at 4749.18 23:10:41> balUsd_2= , boughtBtcFinal= 23:10:41> bought 0.00004216 BTC, boughtFor= 23:10:41> ggg= nan 23:10:42> test BTC/USD LastMyBuyPrice 4740.73 23:10:48> GetBtcBalance() boughtFor= 0 , boughtBtcFinal= 0.00022 23:10:48> GetUsdBalance() balUsd_2= 5532.28363396 , boughtFor= 0 скрипт был таким: var ggg; ggg = QTBuy(0.2); trader.log("ggg=", ggg); function QTBuy(buyUsdtValue){ trader.log("----------------- QTBuy -----------------------"); var balUsd_1; var balUsd_2; var balBtc; var askVolumePrice; var boughtFor; var lacksUsd; var lacksBtc; var nowPrice; var boughtBtcFinal; balBtc = trader.get("Balance","BTC") ; // trader.delay(5,"myDelay()"); balUsd_1 = trader.get("Balance","USD") ; lacksUsd = buyUsdtValue;// вычислим сколько осталось еще потратить до нужной суммы nowPrice = trader.get("AskPrice"); trader.delay(5,"myDelay()"); lacksBtc = lacksUsd / nowPrice; // приблизительный объем покупки askVolumePrice = trader.get("AsksPrice",lacksBtc); // AsksPrice показывет цену напротив суммарного объема битков trader.delay(5,"myDelay()"); trader.buy("BTC/USD" , lacksBtc , (8+askVolumePrice)); trader.on("LastMyBuyPrice").changed() { trader.log("test", symbol, name, value); } trader.delay(5,"myDelay()"); trader.delay(7,"GetUsdBalance()"); trader.delay(7,"GetBtcBalance()"); if(balUsd_2 == balUsd_1 || boughtBtcFinal == balBtc) { trader.cancelBids(); trader.delay(5,"myDelay()"); trader.delay(7,"GetUsdBalance()"); trader.delay(7,"GetBtcBalance()"); } trader.log("balUsd_2=",balUsd_2,", boughtBtcFinal=",boughtBtcFinal); trader.log("bought ", lacksBtc, " BTC, boughtFor=", boughtFor); boughtBtcFinal = boughtBtcFinal - balBtc; return ( MyRoundTo8(boughtBtcFinal) ); } //-------------------------------------------- function GetBtcBalance(){ boughtFor = trader.get("BTCUSD", "LastMyBuyPrice"); boughtBtcFinal = trader.get("Balance","BTC") ; trader.log("GetBtcBalance() boughtFor=",boughtFor,", boughtBtcFinal=",boughtBtcFinal); } //-------------------------------------------- function GetUsdBalance(){ boughtFor = trader.get("BTCUSD", "LastMyBuyPrice"); balUsd_2 = trader.get("Balance","USD") ; trader.log("GetUsdBalance() balUsd_2=",balUsd_2,", boughtFor=",boughtFor); } //-------------------------------------------- function MyRoundTo2(MyValue){ var result = Math.round(MyValue * 100) / 100; return result; } //-------------------------------------------- function MyRoundTo8(MyValue){ var result = Math.round(MyValue * 100000000) / 100000000; return result; } в "истории моих сделок" окошко цены показало правильную цену покупки... Биржа HitBTC в "истории моих сделок" окошко цены показало правильную цену покупки... - если вы это имели ввиду
  3. Вот вывод скрипта: 21:07:17> BTC/USD: Buy 0.0000425 at 4704.85 21:07:17> balUsd_2= , boughtBtcFinal= 21:07:17> bought 0.0000425 BTC, price= 21:07:17> ggg= nan 21:07:24> GetBtcBalance() boughtFor= 4704.85 , boughtBtcFinal= 0.00018 21:07:24> GetUsdBalance() balUsd_2= 32.47364242 , boughtFor= 4704.85 и "price= " и "boughtFor= 4704.85" получаются из запроса boughtFor = trader.get("LastMyBuyPrice"); ( trader.log("bought ", lacksBtc, " BTC, price=", boughtFor); trader.log("GetBtcBalance() boughtFor=",boughtFor,", boughtBtcFinal=",boughtBtcFinal); ) соответственно пока отрабатывала функция - значение не успело прийти, а потом вывелись результаты работы вызовов этих 2х дополнительных функций с делеем и там уже результат есть boughtFor= 4704.85 Что касается текущей пары - то у меня нет сретств на других монетах, ну и последующий приход данных, хоть и с опозданиемБ подтверждает что пара та самая.
  4. Как видно из вышеприведенного кода, в скрипте нет ни одного цикла. Может быть я не совсем понял - что вы имеете ввиду "в том случае если вы не блокируете поток в скрипте" ? Циклы не применяются, но переменные инициализируются уже после того, как функция вернула пустой результат. Подскажите пожалуйста, что именно в данном конкретном скрипте мне следует исправить, чтобы переменные были проинициализированы до завершения работы функции, и она смогла вернуть корректный результат?
  5. Добрый день! К сожалению, дебаг меню не сильно помогло. Но часть проблем решил другим способом. Однако, осталась одна вещь, обойти которую пока не удается... У меня сложилось впечатление что все, связанное с trader. ... обрабатывается программой в другом потоке, в силу чего сам скрипт выполняется автономно дальше, не дожидаясь получения ответа от допустим trader.get(...) Уверен, что это известный факт, но если не лень смотреть код, вот подтверждение var ggg; ggg = QTBuy(0.2); trader.log("ggg=", ggg); // ------------------------------------ ФУНКЦИИ --------------------------------- function QTBuy(buyUsdtValue){ trader.log("----------------- QTBuy -----------------------"); var balUsd_1; var balUsd_2; var balBtc; var askVolumePrice; var boughtFor; var lacksUsd; var lacksBtc; var nowPrice; var boughtBtcFinal; balBtc = trader.get("Balance","BTC") ; // trader.delay(5,"myDelay()"); balUsd_1 = trader.get("Balance","USD") ; lacksUsd = buyUsdtValue;// вычислим сколько осталось еще потратить до нужной суммы nowPrice = trader.get("AskPrice"); trader.delay(5,"myDelay()"); lacksBtc = lacksUsd / nowPrice; // приблизительный объем покупки askVolumePrice = trader.get("AsksPrice",lacksBtc); // AsksPrice показывет цену напротив суммарного объема битков trader.delay(5,"myDelay()"); trader.buy("BTC/USD" , lacksBtc , (8+askVolumePrice)); trader.delay(5,"myDelay()"); trader.delay(7,"GetUsdBalance()"); trader.delay(7,"GetBtcBalance()"); if(balUsd_2 == balUsd_1 || boughtBtcFinal == balBtc) { trader.cancelBids(); trader.delay(5,"myDelay()"); trader.delay(7,"GetUsdBalance()"); trader.delay(7,"GetBtcBalance()"); } trader.log("balUsd_2=",balUsd_2,", boughtBtcFinal=",boughtBtcFinal); trader.log("bought ", lacksBtc, " BTC, price=", boughtFor); boughtBtcFinal = boughtBtcFinal - balBtc; return ( MyRoundTo8(boughtBtcFinal) ); } //-------------------------------------------- function GetBtcBalance(){ boughtFor = trader.get("LastMyBuyPrice"); boughtBtcFinal = trader.get("Balance","BTC") ; trader.log("GetBtcBalance() boughtFor=",boughtFor,", boughtBtcFinal=",boughtBtcFinal); } //-------------------------------------------- function GetUsdBalance(){ boughtFor = trader.get("LastMyBuyPrice"); balUsd_2 = trader.get("Balance","USD") ; trader.log("GetUsdBalance() balUsd_2=",balUsd_2,", boughtFor=",boughtFor); } //-------------------------------------------- function MyRoundTo2(MyValue){ var result = Math.round(MyValue * 100) / 100; return result; } //-------------------------------------------- function MyRoundTo8(MyValue){ var result = Math.round(MyValue * 100000000) / 100000000; return result; } //////////////////////////////////////////////////////////////////////////// ВЫВОД СКРИПТА //////////////////////////////////////////////////////////////////////////// 21:07:17> ----------------- QTBuy ----------------------- 21:07:17> BTC/USD: Buy 0.0000425 at 4704.85 21:07:17> balUsd_2= , boughtBtcFinal= 21:07:17> bought 0.0000425 BTC, price= 21:07:17> ggg= nan 21:07:24> GetBtcBalance() boughtFor= 4704.85 , boughtBtcFinal= 0.00018 21:07:24> GetUsdBalance() balUsd_2= 32.47364242 , boughtFor= 4704.85 Таким образом, не удается ВОВРЕМЯ получить данные с биржи для дальнейшей обработки. При меньших значениях delay значения не всегда успевают обновляться. У меня к Вам вопрос: Посоветуйте пожалуйста, каким образом можно заставить скрипт дождаться обработки всех команд trader чтобы корректно получить данные для дальнейшей работы? Как видите переменная ggg возвращаемая функцией не определена, а данные с биржи получены в результате позднее, чем фукция отработала и вернула пустой результат. Заранее спасибо.
  6. Я использовал вышеозначенную function myDelay() но это не помогает. Если я правильно понял, вы советуете использование этой команды: trader.delay(секунды,"команда") Поначалу я пробовал ею пользоваться, но почему-то возникали проблемы... возможно делал что то неправильно. Не могли бы вы привести пару-тройку реально рабочих примеров использования? (В руководстве только один пример - trader.delay(1.5,"myFunction()"); Вроде бы это однократный вызов функции с задержкой 1.5сек. Не совсем ясно, годится ли любая функция, могут ли быть в ней другие события trader и т.д. Известны ли варианты НЕправильного ее использования...) Еще одно наблюдение - сложилось впечатление что не стоит пользоваться циклом while. Если for(){} по крайней мере отрабатывает, хоть и без результата, то while просто вешает программу... Есть ли какая-то специфика при его использовании? Насчет дебаг меню понял, попытаюсь. Спасибо.
  7. Добрый день! Столкнулся с необходимостью проверить, куплено ли на всю нужную сумму или же надо докупить чтобы было потрачено именно конкретное количество USD. Почему-то это вызывает серьезные проблемы, по крайней мере если идти путем на первый взгляд очевидным. Дело в том, что после покупки я хочу проверить, изменился ли баланс на искомую величину, или на величину меньшую, чем надо. Но! Проверить баланс по простому почему-то не удается... var i=0; var balBtc; var askVolumePrice; var boughtFor; var lacksUsd; var lacksBtc; var nowPrice; var boughtBtcFinal; var balUsd1; var balUsd2; balUsd1 = trader.get("Balance","USD") ; lacksUsd = 3.3;// вычислим сколько осталось еще потратить до нужной суммы nowPrice = trader.get("AskPrice"); lacksBtc = lacksUsd / nowPrice; // приблизительный объем покупки askVolumePrice = trader.get("AsksPrice",lacksBtc); // AsksPrice показывет цену напротив суммарного объема битков trader.buy("BTC/USD" , lacksBtc , askVolumePrice); balUsd2 = trader.get("Balance","USD") ; while(balUsd1 == balUsd2){ balUsd2 = trader.get("Balance","USD") ; i++; if(i==100) trader.log("no... i=", i); } trader.log("YES i=", i); К примеру вышеприведенный код скрипта подвешивает программу (уже на стадии проверки валидности кода)... Код само собой проверочный, поэтому выглядит несколько странно. Но пробовал и другими методами. К примеру цикл на 10000 итераций проверок не приводит к обновлению значения баланса (за 66 секунд переменная баланса так и не уменьшилась, хотя покупка совершилась). Не помогают почему-то и дополнительные задержки такого типа: function myDelay(){ var nothing=1; for (var j = 0; j < 1000000; j++) { nothing += j; } return; } Скажите пожалуйста, что я делаю неправильно? Может быть нужно пользоваться каким-то совершенно иным подходом? (все проверялось на Bittrex) И 2й вопрос. Если очень большая функция со значительным количеством всяких циклов проверок, покупок-продаж и т.п. вызывается при помощи trader.on("LastPrice").changed() { ... } то не может ли возникать конфликта в случае, когда цена на бирже изменилась, а вызванная функция еще не успела отработать? Заранее спасибо!
  8. Еще один вопрос если можно... В чем отличие trader.on("LastTrade").changed() от trader.on("LastPrice").changed() ? Мне показалось что это одно и то же... но может я не прав?
  9. Я было подумал, что можно вернуть объем ордеров от крайнего до указанной цены, или цену которую надо указать для покупки определенного объема... Это пока не реализовано?
  10. А где можно посмотреть подробное описание вот этих команд. которые были добавлены позже, какие аргументы и та.п., как пользоваться... Обновлено 2014-10-10 Добавлены новые события: OpenOrdersCount, OpenBidsCount, OpenAsksCount
  11. Здравствуйте! Подскажите пожалуйста, что именно делает команда trader.groupDone() которую можно увидеть при просмотре кода правил после продажи например. В руководстве находящемся здесь https://forum.centrabit.com/viewtopic.php?f=3&amp;t=4168# этой команды я не нашел... Может быть имеется более полное руководство по данному скриптовому языку? Спасибо.
  12. Конечно, я специально проверял, на сайте 0,00001 выставляется спокойно. Более того, через скрипт или правило (что одно и то же впрочем) Qt Bitcoin Trader тоже прекрасно ставит такой ордер, вчера поставил для проверки.... Не работают именно кнопки ручной торговли.
  13. Возможно вы не совсем поняли или я нечетко сформулировал. Никаких команд я не отправляю, потому что кнопка "Продать" остается серой (неактивной) если я ввожу сумму 0.009999 btc или меньше (это на ХитБТЦ). Только начиная с суммы 0.01 BTC кнопка активируется, надпись становится красной, фон оживает, и тогда можно отправить команду на сервер. В этом случае я полагаю в Debug это было бы отражено. Мой вопрос состоит в том, почему кнопка не активируется при вводе столь значительной суммы..?
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...