Правила в программных окнах выполняются перед командами buy и sell.
Каждая СЛЕДУЮЩАЯ выполненная команда(в программном окне), является отменой для предыдущей!
(если разумеется вы в коде не вставили оператор return(возврат не допускает выполнения кода ниже))
Если эта команда не работает: (попробуйте написать текст на английском языке, или на вашем национальном языке)
console.speak("Hello, world!");
console.speak("Здравствуй, мир!");
Возможно винодовс не полной версии(наиболее полный дистрибутив профессионал),
устанавливаем Microsoft Speech API (SAPI)
https://www.google.ru/search?q=microsoft+speech+api&ie=utf-8&oe=utf-8
http://jaws.tiflocomp.ru/synths/sapi_inst.php
Консультации по командам: https://t.me/simple_yobit_bot_simple_wex_bot (телеграм чат)
Бот может выводить информацию по балансу в текстовое окно, говорить информацию о балансе,
полный список переменных:
(команд управления закупом, продажей, расходом депозита - пока нет)
var b_e = new Object(); var count = new Object(); var t_r = new Object(); var here = new Object(); b_e.usd=0;
b_e.eur=0;
b_e.rub=1141.36523032;
b_e.pln=0;
b_e.uah=0;
b_e.btc=0;
b_e.ltc=0;
b_e.doge=0.69794132;
b_e.dash=0;
b_e.eth=0.01108888;
b_e.waves=0;
b_e.zec=0;
b_e.usdt=0;
b_e.xmr=0;
b_e.xrp=0;
b_e.kick=0;
b_e.etc=0;
b_e.bch=0;
count.ord_buy =0; count.ord_sell =0;
move =0.84; t_r.move =0.84;
t_r.last =11599.99;
here.pair ='btc_usd'; here.pair_slave='btc'; here.pair_master ='usd';
3.03.2018г., добавлена возможность проброса в скрипты информации об
ордерах на покупку и продажу, переменные(об ордерах) аналогичны тем что есть
в йобит боте
http://faq.pp.ru/soft/script_for_bot/yobit/global_podrobno.JPG
примеры смотрите в секции javascript в yobit боте
Консультации по командам: https://t.me/simple_yobit_bot_simple_wex_bot (телеграм чат)
РаЗоВыЕ и простые вопросы бесплатно, в остальных случаях придется делать оплату в зависимости от сложности вопрос(а|ов).
подробно: http://faq.pp.ru/soft/script_for_bot/yobit/
Есть возможность получения баланса по любой монете, и на основе этого баланса вы можете управлять
расходом депозита, закупом и продажей.
Проброс информации о кол-ве ордеров на закуп и продажу имеется.
//-------все команды аналогичны командам к остальным ботам
if(b_e.rur < 10){//если на балансе меньше 10 рублей, то срабатывает условие внутри фигурных скобок
console.log("Вот и лето прошло, как и денежки тоже.");
console.speak("Закончились деньги!");
}
//------
//------23.01.2017 here(здесь)
count.ord_buy =0;
count.ord_sell =0;
move =0.027; t_r.move =0.027; //движение цены в процентах (переменные дублируются)
t_r.last =0.01637945; //last price
here.pair ='ltc_btc'; //на какой монете бот
here.pair_slave='ltc'; //какую монеты вы покупаете(подчиненная монета)
here.pair_master ='btc'; //главная монета(какую вы используете для закупа)
console.log("На какой я паре? " + here.pair);
console.log("Что я покупаю? " + here.pair_slave);
console.log("На что я покупаю? " + here.pair_master);
console.log("прайс: " + t_r.last);
if(move < -7){
console.speak("Покупаем! " + here.pair_slave);
}
if(move > 7){
console.speak("Продаем! " + here.pair_slave);
}
//------23.01.2017
//------9.02.2017 были получены хорошие бонусы(шлите ещё),
в связи с чем добавлен в бот дополнительный график со свечами(15 минутный таймфрейм)
предполагается, что ваши программы на js будут иметь доступ к графику.
зеленая свеча будет иметь type: 1, красная: -1,
m15 - обозначает таймфрейм (в программе 15минутный таймфрейм),
m15[0] цифра в квадратных скобках это указатель бара(свечи),
самая свежая свеча(крайняя справа) имеет нулевой бар, счет баров идет от 0(а не единицы, не путайтесь).
m15[0].type = -1 такая ситуация обозначает что свеча красная(цена снизилась)
m15[0].type = 1 такая ситуация обозначает что свеча зеленая(цена выросла)
&& - (и) обозначает объединение условий
|| - (или)обозначает выполнение одного из условий
Как узнать что сейчас можно закупаться? Допустим закупаемся на трех красных свечах
//детектор красных свечей
if ( m15[0].type == -1 && m15[1].type == -1 && m15[2].type == -1 )
{
console.speak("Три идущих сподрят красных свечи");
//опции управления закупом
}
//детектор зеленых свечей
if ( m15[0].type == 1 && m15[1].type == 1 && m15[2].type == 1 )
{
console.speak("Три идущих сподрят зеленых свечи");
//опции управления продажей
}
//---------------------------------------------Скрипт дает совет, если последние свечи одного цвета.
console.clear(); var group_last=0; var br=0; var trand=0;
for(var i = 0;i < 10; i++){
if(m15[i].type > 0)trand++; if(m15[i].type < 0)trand--;
if(m15[i].type == 0)continue;
if(group_last == 0){ group_last=m15[i].type; continue;}
if(group_last > 0 && m15[i].type == 1 && br==0){group_last++;}
if(group_last < 0 && m15[i].type == -1 && br==0){group_last--;}
if(group_last > 0 && m15[i].type == -1){br=1;}
if(group_last < 0 && m15[i].type == 1){br=1;}
}
if(trand == 0)console.log("Трэнд формируется");
if(trand != 0 && trand <= 2 && trand >= -2)console.log("Текущий трэнд: "+trand);
if(trand > 2)console.log("Растущий трэнд: " + trand +" уровень(макс 10)");//максимальная оценка 10
if(trand < -2)console.log("Падающий трэнд: " + trand +" уровень(макс-10)");//максимальная оценка -10
if(group_last > 0)console.log("зеленые свечи их: "+group_last);
if(group_last < 0)console.log("красные свечи их: "+ Math.abs(group_last) );
if(group_last > 4)console.log("Продавай?");
if(group_last < -4)console.log("Покупай?");
//---------------------------------------------
//-------------10.02.2018 новые возможности
m15[0].type тип свечи
m15[0].move move на момент создания свечи
m15[0].m15_avg среднее значение за 15 минут
if(m15[0].m15_avg > m15[1].m15_avg){console.log("сила роста: " + ((m15[0].m15_avg / m15[1].m15_avg)-1)*100); }
if(m15[0].m15_avg < m15[1].m15_avg){console.log("сила падения: " + ((m15[1].m15_avg / m15[0].m15_avg)-1)*100); }
//-------------10.02.2018
//------9.02.2017
//------12.02.2017
появилась переменная var_load, в ней будет автоматически загружаемое значение,
которое вы сохранили при помощи команды console.var_save("что-то");
http://zametkinapolyah.ru/veb-programmirovanie/zametki-po-javascript/preobrazovanie-chislo-v-stroku-javascript-preobrazovanie-stroka-v-chislo-javascript.html
(как преобразовать строку в число)
--------пример использования:
console.clear();
console.log(var_load);
console.var_save("что-то");
--------
выведет:
что-то
-------------как сохранить несколько переменных в одной сохраняемой строке? Легко!
console.clear();
arr = var_load.split(',');//дробление строки, разделитель - запятая
console.log("первая переменная: "+arr[0]);
console.log("вторая переменная: "+arr[1]);
//запомни меня
var test_1=11;
var test_2=22;
console.var_save(test_1+ "," +test_2);//перечисляем переменные через ЗАПЯТУЮ
-------------выведет:
первая переменная: 11
вторая переменная: 22
-----
var str = "123456";
var n = Number(str);//преобразование строки в целое число
var x = parseInt("1000", 10);
var x = parseFloat("3.14");//преобразование строки в дробное число
//------
//------14.02.2017 грамотный мануал по свечам: http://tradelikeapro.ru/yaponskie-svechi/
Теперь вы можете получать информацию о 10 последних свечах:
пример получения данных из нулевого бара (крайней справа свечи)
m15[0].m15_start -цена на момент начала образования свечи
m15[0].m15_low -минимальная цена за время формирования свечи
m15[0].m15_high -максимальная цена за время формирования свечи
m15[0].m15_finish -цена на момент завершения формирования свечи
//------14.02.2017
//------24.02.2017 теперь вы можете покупать и продавать дороже или дешевле рынка,
//------ первая операция может понадобится для агрессивного закупа при пампе, а вторая для стоплосса.
console.c_buy("0.4 %");//недопустимо, что бы в скрипте были задействованы на выполнение обе команды сразу
console.c_sell("0.9 %");//если вам нужно выставление прайса на для продажи, в этот момент времени не трогайте console.c_buy
//------24.02.2017
//------25.02.2017
//------ Добавление новой переменной об ордере с максимальной ценой!
ord_sell_max список
ord_sell_max.price цена
ord_sell_max.amount кол-во монет
ord_sell_max.diff разница с текущей ценой в процентах
ord_sell_max.ord_id ордер ид
ord_sell_max.udata время создания ордера в юникс формате
if(ord_sell_max.diff > 5){//ловим ордер с разносью более 5%
console.log("Есть застойный ордер где текущая цена отличается от текущей на " + ord_sell_max.diff + " процентов");
}
//------26.02.2017, обновление yobit бота, появились новые переменные
появился список об ордере с минимальной ценой.
ord_sell_min(и все тоже самое, что и с ord_sell_max)
//------26.02.2017
//------27.02.2017
Появились новые переменные ord_buy_max(ордер на покупку с макс. ценой) и ord_buy_min(ордер на покупку с мин.ценой).
Переменные аналогичны ord_sell_max(см. выше)
//------27.02.2017
в бесплатном боте свечного графика и работы со свечами не будет,
потому что пользователей платного бота порядка 50 человек, а бесплатным пользуются тысячи.
Чем больше людей будет пользоваться одинаковым алгоритмом, тем ниже будут доходы.
читаем: javascript в wex боте, 16.01.2017г. (синтаксис команд 1 в 1)
подробно: http://faq.pp.ru/soft/script_for_bot/yobit/
Консультации по командам: https://t.me/simple_yobit_bot_simple_wex_bot (телеграм чат)
РаЗоВыЕ и простые вопросы бесплатно, в остальных случаях придется делать оплату в зависимости от сложности вопрос(а|ов).
На текущий монент бот имеет два многостроковых текстовых окна,
в одном выполняется код,
в другом отображается информация о переменых, которые выведенны через console.log("здравствую мир!");
доступные команды:
console.clear();//очистить окно логов, такая команда желательна в самом начале, иначе старые сообщения не будут затираться.
console.log();//вывести значение переменной, в скобках должно быть её имя
console.speak("ку,ку");//произнести фразу
Объекты:
b_e (сокращение от balance)
b_e.usd;//баланс usd
b_e.btc;//баланс btc
и так далее, независимо от пары от которой на текущий момент работает бот,
доступна информация по всем средствам что находятся вне ордеров.
if(b_e.usd < 100){//если на балансе меньше 100$, то срабатывает условие внутри фигурных скобок
console.log("А может снова на завод?");
console.speak("Барин, у тебя заканчиваются деньги!");
}
if(b_e.rur < 300){//если на балансе меньше чем 300 рублей
console.log("Подъем! Деньги кончились, пришло время их снова майнить!");
console.speak("Мусьё, вы просадили все деньги, что сэкономили на школьных обедах!");
}
if(move > 4){
console.log("Продавай все свои монеты, пока еще не поздно!");
console.speak("Продавай все свои монеты.");
}
if(move < 3 && move > -3){
console.log("Не лезь в торги, сходи попей пива.");
console.speak("Расслабься, время для торгов ещё не настало.");
}
if(move < -7){
console.log("Критическая ситуация, идет слив!");
console.speak("Закупайся с небольшим шагом снижения.");
}
if(move < -9){
console.log("Бери пока дешево!");
console.speak("Закупайся на всю котлету.");
}
//----------------------------------
function rnd(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
}
if(rnd(0,9) == 0){
console.speak("Вывод звуковых сообщений с вероятностью 1 к 9");
}
if(rnd(0,11) == 0){//что бы не говорило каждые две секунды (используется фукнция rnd)
var money = Math.floor(b_e.usd);//округлить до целых
console.speak("У тебя есть " + money + " баксов");
}
//----------------------------------
console.sound();//звуковой сигнал частотой 3кГц длительностью 200 миллисекунд
console.n_sound(2000, 500);//звуковой сигнал с заданными вами параметрами, первый параметр частота, второй длительность в миллисекундах
//----------------------------------
count.ord_buy //кол-во ордеров на закуп
count.ord_sell //кол-во ордеров на продажу
//----------------------------------
console.d_bs_buy();//---- в скобках должен быть номер колонки, на который надо перейти
console.d_bs_sell();//--- нумерация во всех таблицах начинается с 0 ноля!!!
console.d_dep();//--- таблица депозита(на сколько закупаться)
console.d_dep(-1);//сделать закуп невозможным(убрать активный элемент(желтый квадрат))
console.d_bs_buy(-1);//сделать закуп неактивным (запрет покупки)
console.d_bs_sell(-1);//сделать продажу неактивной (запрет продажи)
console.d_bs_buy(6);//перейти на шестую колонку, где снижение 1.5%//управление покупкой
console.d_bs_sell(6);//перейти на шестую колонку, где рост 1.5%//управление продажей
console.d_dep(0);//покупать минимально возможное кол-во монет //управление расходом депозита
----------------При загрузке программы, окно с кодом автоматически загружается и выполняется!
----------------Можете это использовать для загрузки стратегии.
https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D1%81%D1%8F%D1%82%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C
В числах разделителем в дробных числах является .(точка) !
(соответственно могут быть версии виндовс в которых не будет работать программа,
из-за региональных настроек, для решения проблемы, придется добавить английский язык - США, т.е. добавить региональные настройки США и запускать бот под ними)
Что бы не было путаницы в регистрах букв(большие, маленькие), все что относится архитектуре бота,
пишется строго в нижнем регистре!
Это выражение b_e.usd правильное, эти b_e.USD, B_E.USD нет.//всё относящееся к боту пишем в нижнем регистре
Редактировать программный код можно и вовремя работы бота,
если вам надо что бы программа произносила баланс, предварительно округлите его до нужных значащих цифр,
если вам надо что бы программа произносила его не так часто, сделайте генератор случайных чисел,
и программа будет его произности скажем в одном случае из 10.
Освежить знания можно здесь http://uroki-javascript.ru/js/js_operators.php
//----------------------------16.01.2018г.
возможно будут команды псевдонимы на русском языке:
console.d_bs_buy(6); = таблица_купить(6);
console.d_bs_sell(6); = таблица_продать(6);
console.d_dep(0); = таблица_депозит(0);
//------23.01.2017 here(здесь)
count.ord_buy =0;
count.ord_sell =0;
move =0.027; t_r.move =0.027; //движение цены в процентах (переменные дублируются)
t_r.last =0.01637945; //last price
here.pair ='ltc_btc'; //на какой монете бот
here.pair_slave='ltc'; //какую монеты вы покупаете(подчиненная монета)
here.pair_master ='btc'; //главная монета(какую вы используете для закупа)
console.log("На какой я паре? " + here.pair);
console.log("Что я покупаю? " + here.pair_slave);
console.log("На что я покупаю? " + here.pair_master);
console.log("прайс: " + t_r.last);
if(move < -7){
console.speak("Покупаем! " + here.pair_slave);
}
if(move > 7){
console.speak("Продаем! " + here.pair_slave);
}
//------23.01.2017
//------31.01.2017 добавлены команды получения last и move по всем парам:
t_r.zec_usd.last;
t_r.zec_usd.move;
if(t_r.zec_usd.last < 448){
//---------- условия
}
if(t_r.zec_usd.last < 0.039){
//---------- условия
}
if(t_r.zec_usd.move < -8){
console.log("может пора покупать?");
}
//------28.01.2017
Предполагается две команды, одна для одиночного ордера, вторая для вообще всех ордеров на продажу.
console.sl("10 %");//для одного ордера, где ценовой разрыв >=10%
console.sl_all("10 %");//если хоть один ордер вышел на этот уровень >=10%,
сливаются вообще все ордеры по рынку.
автоматический закуп при этом будет отключатся.//трейдер сам будет решать когда его включать,
если разумеется, в скрипте не будет сценария его включения.
Была реанимирована вот такая программа, до сегодняшнего дня, все графики были линейными,
теперь они в виде свечей, такие графики легко можно анализировать простыми скриптами,
в будущем, скрипты будет поддерживать сама эта программа и подавать сигналы покупай-продавай,
либо будет проброс информации о свечах в боты
(и в ботах ваши скрипты будут иметь возможность анализировать данные о нескольких последних свечах с каждого таймфрейма).
Логику типа - 5 красных = купил, 5 зеленых = продал, вы будет выстраивать сами.
обновление: 18.01.2017г.(идет унификация команд, в некоторых программах таблицы(закуп,покуп) отсутствует,
поэтому делается возможность редактировать значения других элементов)
Проброс значений тикеров... Это может выглядеть так:
t_r.usd
или
ticker.usd
или
ticker.get(usd)
или
ticker.usd.last
ticker.usd.bid
ticker.usd.ask
доступ к кнопкам
button
//----------------к окну логов, возможно будет завязан телеграм чат,
if(move > 5){
console.log("Идет памп, сливай монеты, не спи.");
}
//----------------и пользователь например набравший 0, увидит:
//----------------Идет памп, сливай монеты, не спи.
Продумывается схема управления таблицей закупа для wex бота(пока что).
Будет поддержка примерно таких команд:
Баланс будет чем-то вроде сокращения от слова - balance
b_e.pair_l - balance pair left
b_e.pair_r - balance pair right
//---------------один из вариантов, допустим пара btc_usd, ltc_btc
b_e.s - balance slave (btc), (ltc)
b_e.m - balance master (usd), (btc)
//---------------
b_e.usd свободно долларов
b_e.rur свободно рублей
if(b_e.rur > 1000)
{
//---------
}
информация по тикерам может выглядеть примерно так:
ticker.price() (текущая биржа, last на текущей бирже, на паре на которой вы торгуете сейчас)
ticker.wex_nz.btс_rur();//биржа wex.nz (вместо . и дефисов - нижнее подчеркивание) пара btс_rur
if(ticker.wex_nz.btr_rur() > ticker.price())
{
d_bs_buy(6);//перейти на закуп со снижением прайса монеты на 1.5% (в шестой колонке снижение 1.5%)
}
ну и сразу будет доступно что-то типа этого:
if(b_e.pair_r() < 100){//если кол-во денег по правой половине пары стало меньше чем 100, то срабатывает условие
d_bs_buy(6);//перейти на закуп со снижением прайса монеты на 1.5%
}
if(b_e.pair_r() < 90){//если кол-во денег по правой половине пары стало меньше чем 90, то срабатывает условие
d_bs_buy(7);//перейти на закуп со снижением прайса монеты на 2.0%
}
передача информации о кол-ве ордеров будет через count
count.ord_buy()
count.ord_sell()
if(count.ord_sell() > 10)//если ордеров на продажу больше 10, отключить закуп
{
d_t_bs_buy(-1);//не покупать
}
if(count.ord_sell() > 10 && be.pair_r() < 100)//если ордеров на продажу больше 10 И(условие связка) денег на балансе меньше 100, отключить закуп
{
d_t_bs_buy(-1);//не покупать
console.log("Начальник, у тебя бабло на исходе, закупаться не на что.");//написать в консоль текст
}
calculate//зарезервировано
комады для торгов по параллельным парам:
buy (pair,price,amount);//купить(пара,прайс,сколько_монет)
sell(pair,price,amount);//продать(пара,прайс,сколько_монет)
-----------------
условные обозначения, например
t textbox (текстовое поле)
c combobox (выпадающий список)
d_bs_sell
d таблица (сокращение от datagridview - сетка со значениями)
bs buy_sell
секция sell
то есть в данном случае имеется в виду таблица прайсов для закупа и продажи
!!! строки и колонки таблиц будут иметь нумерацию начиная с 0 !!!
Соответственно, крайняя левая и верхняя клетка в таблице, имеет 0 строку и 0 колонку,
колонки - это ячейки расположенные по вертикали(столбцы),
строки - это ячейки расположенные по горизонтали.
(надеюсь я объяснил доходчиво, для тех, для кого русский язык не является родным)
-------------------------
Есть предложение добавить стоплосс к программе, в самом простом варианте,
это продажа купленных монет, где позиции ордеров на продажу с большим ценовым разрывом по рынку...
Вроде ничего сложного?
Но я столкнулся с массовыми случаями падения монет, где оно длилось чуть-ли не неделю...
Получается что если не остановить закуп в момент создания события стоплосс,
бот будет тупо сливать депозит(он будет закупаться, и через стоплосс сливать депозит),
это при условии затяжного падения,
следовательно необходимо создать ячейку памяти на событие, допустим если сработало событие по стоплосс,
отключается закуп на 12 часов, сутки, двое, неделю, *** по выбору.
Внимательно следил за монетой TRON, многие трейдеры потеряли на ней до 80% проценов депозита,
потому что слив шел практически без отскоков
(это свойственно мусорным монетам(говнокоинам), которые не желают поддерживать даже сами её создатели,
создатели правильных монет, выкупают их часть при сильных падениях, что бы не допустить колоссальный слив),
а СМИ представили эту монету как новый тренд,
который в некотором смысле подвинет биткоин на рынке криптовалют.
Разумеется, спустя некоторое время потерянные позиции могут возвратится,
на на это нужно время и не у всех оно есть.