Скрипты в бинанс боте

support

Administrator
Staff member
#1
1556513366800.png


-------------информация о текущей паре
var t_r = new Object(); t_r.symbol='ltcusdt'; t_r.buy=70.16; t_r.last=70.2; t_r.sell=70.19; t_r.low_5=70.17; t_r.high_5=70.2; t_r.slave='ltc'; t_r.master='usdt';
-------------информация о текущей паре

--------информация о балансе по слэйв и мастер коину
var b_e=new Object(); b_e.slave=0; b_e.master=0;
--------информация о балансе по слэйв и мастер коину

--------скользящие средние
var m5=new Object(); m5.high=70.20000000; m5.avg=70.15625000; m5.low=70.09000000;
var m15=new Object(); m15.high=70.25000000; m15.avg=70.16543478; m15.low=70.09000000;
var m30=new Object(); m30.high=70.25000000; m30.avg=70.15675824; m30.low=70.04000000;
var h1=new Object(); h1.high=70.31000000; h1.avg=70.11577348; h1.low=69.91000000;
var h2=new Object(); h2.high=70.31000000; h2.avg=70.02731391; h2.low=69.86000000;
var h4=new Object(); h4.high=70.31000000; h4.avg=69.83435994; h4.low=69.46000000;
--------скользящие средние

--------лимиты
var lim=new Object(); lim.min_amount=0.16407; lim.min_step_price=0.01; lim.min_step_amount=1E-05;
--------лимиты

--------команды
console.log
console.clear
console.sound
console.n_sound
console.mem_get
console.mem_set
console.mem_color
-----------------рыночные ордера
console.sell_market(монет);//кол-во монет должно быть выровнено согласно правил биржи, иначе ордер будет отброшен биржей
console.buy_market(монет);
-----------------рыночные ордера

---------------лимитные ордера, ОН НЕ СРАБОТАЕТ если цена будет рыночной, только для лимитных ордеров
console.trade_buy(цена, монет);//цена и кол-во монет должны быть выравнены согласно правил биржи,
console.trade_sell(цена, монет);//ордера без выравнивания биржа не принимает, см. скрипт ниже
---------------лимитные ордера, для ордеров по рынку команды другая

console.ord_rst
count.ord_buy
count.ord_sell

------------------------------ордера
ord_buy_max_price.id ид_ордера
ord_buy_max_price.utime время создания
ord_buy_max_price.price прайс
ord_buy_max_price.amount кол-во монет

тоже самое и для
ord_buy_min_price
ord_sell_max_price
ord_sell_min_price
------------------------------ордера

--------команды

Все числа в таблице считаются строками, поэтому для получения числа надо делать преобразования.
var pr = parseInt(console.mem_get(1,1), 10);//преобразовать в целое число, значение находящиеся в строке 1 и колонке 1. (если считать с единиц, координаты будут 2,2)
(строки и колонки считаются от значения 0)
 
Last edited:

support

Administrator
Staff member
#2
var min_for_sell=0;
var min_for_buy=0;
if(t_r.master == "usdt"){
//минимальное кол-во монет что можно продать
min_for_sell=10/t_r.buy;
//минимальное кол-во монет что можно купить
min_for_buy=10/t_r.sell;
}

if( min_for_sell <= b_e.slave && и_другие_условия_для_продажи )
{
//округление
var coin_for_sell = b_e.slave - b_e.slave % lim.min_step_amount;
console.sell_market(coin_for_sell);
}
if(min_for_buy <= b_e.master && t_r.move < -3)
{
//округление
var coin_for_buy = min_for_buy - min_for_buy % lim.min_step_amount;
console.buy_market(coin_for_buy);
}




//------------------------
get_ticker(btc_usdt);
buy,sell,last,move
 
Last edited:

support

Administrator
Staff member
#3
1557205508909.png

торги на этом скрипте
//скрипт заготовка 1
----------------------------------устройство (t_r.move = отклонение текущей цены от средней цены за сутки)
1. определение условий для слива купленных монет(возможно началось падение)
if(t_r.move < 0)

2. определение условий для продажи купленных монет
if(t_r.move > 1.5)

3. определение условий для покупки монет
if(t_r.move > 0.4 && t_r.move < 1.0)

"страховка" -
1. если правило купить и продать наступило одновременно,
не выполнять никаких действий, такое может возникать в неправильно спроектированных скриптах
if(can_buy == 1 && can_sell == 1)

2. задействуем таймер при покупке, что бы исключить циклический закуп
console.mem_set(3,1,60);//след. ордер(60сек=1минута,900=15min)
----------------------------------устройство

var sell_all=0;//продай все
var min_for_sell=0;//мин.монет что возможно продать
var min_for_buy=0;//мин.монет что возможно купить
var can_buy=0;//можно покупать
var can_sell=0;//можно продавать
var lock=0;//блокировка, если 1, то ничего не делать
var log="";//для логов
//------------таблица
var check = console.mem_get(0,0);
if(check == "0"){//инициализация
console.mem_set(0,0,"last_op");//buy or sell
console.mem_set(1,0,"last_op_time");//вермя посл.операции
console.mem_set(2,0,"last_op_price");//прайс покупки или прод.
console.mem_set(3,0,"next_order(sec)");//через сколько сек.,ставить новый ордер
console.mem_set(3,1,900);//след. ордер(60сек=1минута,900=15min)
console.mem_set(1,1,0);
console.mem_set(2,1,0);
}
//------------

if(t_r.master == "usdt"){
min_for_sell=10/t_r.buy;
min_for_buy=11/t_r.sell;//закупаемся на чуть большую сумму
}

function f_buy(){
console.mem_set(0,1,"buy");
console.mem_set(2,1,t_r.sell);
console.mem_set(1,1,utime);
var coin_for_buy = min_for_buy - min_for_buy % lim.min_step_amount;
var s_out=console.buy_market(coin_for_buy);
log+=s_out+"\r\n";
}

function f_sell(){
if( min_for_sell <= b_e.slave)
{
console.mem_set(0,1,"sell");
console.mem_set(2,1,t_r.buy);
console.mem_set(1,1,utime);
var amount = b_e.slave + 0.00000001;
var coin_for_sell = amount - amount % lim.min_step_amount;
//var coin_for_sell = b_e.slave - b_e.slave % lim.min_step_amount;
var s_out=console.sell_market(coin_for_sell);
log+=s_out+"\r\n";
}
}

function f_sell_all(){
if( min_for_sell <= b_e.slave)
{
console.mem_set(0,1,"sell");
console.mem_set(1,1,utime);
var coin_for_sell = b_e.slave - b_e.slave % lim.min_step_amount;
var s_out=console.sell_market(coin_for_sell);
log+=s_out+"\r\n";
}
}
//-----------продать все, на падениях не закупаемся
if(t_r.move < 0){
sell_all=1;
f_sell_all();
lock=1;//заблокировать операции ниже
}else{
log+=t_r.move+" не подходящие условия для продать всё\r\n";
}
//-----------продать все, на падениях не закупаемся

//-----------условия для покупки
if(t_r.move > 0.4 && t_r.move < 0.6){
var cmd=console.mem_get(2,1);//buy,sell
var kogda=parseInt(console.mem_get(1,1), 10);//время пред.ордера,преобр.в число
var cherez=parseInt(console.mem_get(3,1), 10);//через какой пр.след.орд.,преобр.в число
//console.log(utime);
//console.log(kogda + cherez);
if(utime > kogda + cherez){
can_buy = 1;//разрешить закуп
}
}else{
log+=t_r.move+" не подходящие условия для покупки\r\n";
}
//-----------условия для покупки

//-----------условия для продажи
if(t_r.move > 1.0){
can_sell = 1;
}
//-----------условия для продажи
if(can_buy == 1 && can_sell == 1){//не покупаем, и не продаем, если оба правила активны
can_buy = 0;
can_sell = 0;
lock=1;//заблокировать операции ниже
}

if(can_buy == 1 && lock == 0){
f_buy();
lock=1;//заблокировать операции ниже
}
if(can_sell == 1 && lock == 0){
f_sell();
lock=1;//заблокировать операции ниже
}
//-----вывод логов
console.clear(20);//20строк оставляем
console.log(log);
//-----вывод логов
 
Last edited:

support

Administrator
Staff member
#4
отлов пересечений скользящих средних

вывести сообщение в консоль, когда m30.avg = h2.avg
if(m30.avg == h2.avg) {
console.log("m30.avg h2.avg "+t_r.last+" "+m30.avg+" "+h2.avg);
}

вывести сообщение в консоль, когда h2.avg = h4.avg
if(h4.avg == h2.avg) {
console.log("h4.avg h2.avg "+t_r.last+" "+h2.avg+" "+h4.avg);
}
 
Last edited:

support

Administrator
Staff member
#5
Скоро будет поддержка шифрованных скриптов, вы сможете продавать свои скрипты(или модификацию бесплатного) через модераторов телеграм канала.
Альтернативный вариант - https://habr.com/ru/post/112530/

Условия продажи платных скриптов!
1. защита от сильного падения
2. защита от циклического закупа
3. регулировка опции где продавать, покупать и объем покупки-продажи
4. положительная история торгов, хотя бы за несколько дней.

Защита скриптов!
В переменной api6 хранится первые 6 символов апи.
 
Last edited:

support

Administrator
Staff member
#6
1557634045283.png


итог работы беспатного скрипта за 24 часа, скрипт тестировался на нескольких парах сразу.
 

support

Administrator
Staff member
#7
---------вариант с частичной продажей (пока не протестирован)

var sell_all=0;//продай все
var min_for_sell=0;//мин.монет что возможно продать
var min_for_buy=0;//мин.монет что возможно купить
var can_buy=0;//можно покупать
var can_sell=0;//можно продавать
var lock=0;//блокировка, если 1, то ничего не делать
var log="";//для логов
//------------таблица
var check = console.mem_get(0,0);
if(check == "0"){//инициализация
console.mem_set(0,0,"last_op");//buy or sell
console.mem_set(1,0,"last_op_time");//вермя посл.операции
console.mem_set(2,0,"last_op_price");//прайс покупки или прод.
console.mem_set(3,0,"next_order(sec)");//через сколько сек.,ставить новый ордер
console.mem_set(3,1,900);//след. ордер(60сек=1минута,900=15min)
console.mem_set(1,1,0);
console.mem_set(2,1,0);
}
//------------

if(t_r.master == "usdt"){
min_for_sell=10/t_r.buy;
min_for_buy=11/t_r.sell;//закупаемся на чуть большую сумму
}

if(t_r.master == "btc"){
min_for_sell=0.0010/t_r.buy;
min_for_buy=0.0011/t_r.sell;//закупаемся на чуть большую сумму
}

function f_buy(){
console.mem_set(0,1,"buy");
console.mem_set(2,1,t_r.sell);
console.mem_set(1,1,utime);
var coin_for_buy = min_for_buy - min_for_buy % lim.min_step_amount;
var s_out=console.buy_market(coin_for_buy);
log+=s_out+"\r\n";
}

function f_sell(){
if( min_for_sell <= b_e.slave)
{
console.mem_set(0,1,"sell");
console.mem_set(2,1,t_r.buy);
console.mem_set(1,1,utime);
var amount = b_e.slave + 0.00000001;
var coin_for_sell = amount - amount % lim.min_step_amount;
//var coin_for_sell = b_e.slave - b_e.slave % lim.min_step_amount;
if(amount >= min_for_sell * 2){
coin_for_sell = min_for_sell - min_for_sell % lim.min_step_amount;//частичная продажа
}
var s_out=console.sell_market(coin_for_sell);
log+=s_out+"\r\n";
}
}

function f_sell_all(){
if( min_for_sell <= b_e.slave)
{
console.mem_set(0,1,"sell");
console.mem_set(1,1,utime);
var coin_for_sell = b_e.slave - b_e.slave % lim.min_step_amount;
var s_out=console.sell_market(coin_for_sell);
log+=s_out+"\r\n";
}
}
//-----------продать все, на падениях не закупаемся
if(t_r.move < 0){
sell_all=1;
f_sell_all();
lock=1;//заблокировать операции ниже
}else{
log+=t_r.move+" не подходящие условия для продать всё\r\n";
}
//-----------продать все, на падениях не закупаемся

//-----------условия для продажи
if(t_r.move > 1.2){
var kogda=parseInt(console.mem_get(1,1), 10);//время пред.ордера,преобр.в число
var cherez=parseInt(console.mem_get(3,1), 10);//через какой пр.след.орд.,преобр.в число
if(utime > kogda + cherez){
can_sell = 1;//разрешить закуп
}
}
//-----------условия для продажи

//-----------условия для покупки
if(t_r.move > 0.4 && t_r.move < 0.6){
var cmd=console.mem_get(2,1);//buy,sell
var kogda=parseInt(console.mem_get(1,1), 10);//время пред.ордера,преобр.в число
var cherez=parseInt(console.mem_get(3,1), 10);//через какой пр.след.орд.,преобр.в число
//console.log(utime);
//console.log(kogda + cherez);
if(utime > kogda + cherez){
can_buy = 1;//разрешить закуп
}
}else{
log+=t_r.move+" не подходящие условия для покупки\r\n";
}
//-----------условия для покупки

if(can_buy == 1 && can_sell == 1){//не покупаем, и не продаем, если оба правила активны
can_buy = 0; can_sell = 0; lock=1;//заблокировать операции ниже
}

if(can_buy == 1 && lock == 0){
f_buy(); lock=1;//заблокировать операции ниже
}
if(can_sell == 1 && lock == 0){
f_sell(); lock=1;//заблокировать операции ниже
}
//-----вывод логов
console.clear(20);//20строк оставляем
console.log(log);
//-----вывод логов
 

support

Administrator
Staff member
#8
27 мая, в сриптах появилась возможность обрабатывать нажатие кнопок
Скрипт пример для ваших ботов(меняйте как угодно код по своему разумению).
При нажатии на bn_1 мониторится m15 и h1),
при bn_2 мониторится m30 и h2, при совпадении цены на скользящих средних, раздастся звуковой сигнал.

1558968826451.png


//-----------скрипт пример
if(counter=="0")
{//инициализация
console.mem_set(0,0,"Время");
console.mem_set(1,0,"avg_5m");
console.mem_set(2,0,"avg_15m");
console.mem_set(3,0,"avg_30m");
console.mem_set(4,0,"avg_1h");
console.mem_set(5,0,"avg_2h");
console.mem_set(6,0,"avg_4h");
console.mem_set(7,0,"команда");
console.log('мониторинг bn_1(m15=h1), bn_2(m30=h2)');
}
if(cmd != ""){
console.mem_set(7,1,cmd);
console.mem_set(7,0,"сигнал");
if(cmd == "bn_1")console.mem_set(7,1,"m15=h1");
if(cmd == "bn_2")console.mem_set(7,1,"m30=h2");
}
var cmd_in=console.mem_get(7,1);
if(cmd_in == "0")cmd_in="";

//-------выполнять при каждом рефреше
var date = new Date(utime * 1000);
var hours = date.getHours();
var minutes = "0" + date.getMinutes();
var seconds = "0" + date.getSeconds();
var formattedTime = hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2);
console.mem_set(0,1,formattedTime);

console.mem_set(1,1, m5.avg);
console.mem_set(2,1, m15.avg);
console.mem_set(3,1, m30.avg);
console.mem_set(4,1, h1.avg);
console.mem_set(5,1, h2.avg);
console.mem_set(6,1, h4.avg);
if(cmd_in == "m15=h1"){
if(m15.avg == h1.avg) console.sound();
}
if(cmd_in == "m30=h2"){
if(m30.avg == h2.avg) console.sound();
}
//-------выполнять при каждом рефреше
 

support

Administrator
Staff member
#9
1559829186329.png


скрипт выявления возможности арбитража и демонстрации обмена информацией между торговыми окнами

Направления
eos->usdt->btc->eos
eos->btc->usdt->eos

eos_usdt (запускаем бота на этой паре)
console.var_stat_set("ed_1",t_r.last);

eos_btc (запускаем бота на этой паре)
console.var_stat_set("ed_2",t_r.last);

btc_usdt (запускаем бота на этой паре)
var eos_usdt = console.var_stat_get("ed_1");
var eos_btc = console.var_stat_get("ed_2");
var btc_usdt = t_r.last;
//eos->usdt->btc->eos
var way_1=(btc_usdt/eos_usdt)*eos_btc;
//eos->btc->usdt->eos
var way_2=eos_usdt / (eos_btc * btc_usdt);
if(way_1 > 1.0001){
console.log((way_1*eos_usdt-eos_usdt).toFixed(8) +"$ eos->usdt->btc->eos");
}
if(way_2 > 1.0001){
console.log((way_2*eos_usdt-eos_usdt).toFixed(8) +"$ eos->btc->usdt->eos");
}

1559829239963.png

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

usdt->btc->matic->usdt
usdt->one->btc->usdt
usdt->nuls->btc->usdt
usdt->nuls->btc->usdt
usdt->nuls->btc->usdt
usdt->btc->nano->usdt
usdt->btc->nuls->usdt
usdt->tfuel->btc->usdt
usdt->zil->btc->usdt
usdt->zil->btc->usdt
На нормальных монетах арбитражные ситуации практически не возникают.
 
Last edited:

support

Administrator
Staff member
#10
1560143147267.png


//-------------заготовка для скриптов, пример получения информации от нажатых кнопках
Code:
if(counter==0)
{//инициализация
    console.log('это первый запуск');
    console.mem_set(0,0, 'Время');
    console.mem_set(2,0, 'sell opt. ');
    console.mem_set(2,1, '0.9');
    console.mem_set(3,0, 'buy opt. ');
    console.mem_set(3,1, '0.9');

    console.bn_set('bn_1','sell','продажа');
    console.bn_set('bn_2',';-)','продаем на небольших колебаниях в верх');
    console.bn_set('bn_3',':-)','продаем на колебаниях в верх');
    console.bn_set('bn_4',':-|','продаем на сильных колебаниях в верх');
    console.bn_set('bn_5','buy','покупка');
    console.bn_set('bn_6',';-)','покупаем на небольших колебаниях вниз');
    console.bn_set('bn_7',':-)','покупаем на колебаниях вниз');
    console.bn_set('bn_8',':-|','покупаем на сильных колебаниях вниз');
    console.mem_set(11,0, 'Ver.script :');
    console.mem_set(11,1, '1.0 alfa');
}
//--нажитие кнопок
switch(cmd){
    case'bn_2':
    console.mem_set(2,1, '0.9');
    console.mem_set(2,0, 'sell opt. ;-)');
    break;
    case'bn_3':
    console.mem_set(2,1, '1.1');
    console.mem_set(2,0, 'sell opt. :-)');
    break;
    case'bn_4':
    console.mem_set(2,1, '1.2');
    console.mem_set(2,0, 'sell opt. :-|');
    break;
    case'bn_6':
    console.mem_set(3,1, '0.9');
    console.mem_set(3,0, 'buy opt. ;-)');
    break;
    case'bn_7':
    console.mem_set(3,1, '1.1');
    console.mem_set(3,0, 'buy opt. :-)');
    break;
    case'bn_8':
    console.mem_set(3,1, '1.2');
    console.mem_set(3,0, 'buy opt. :-|');
    break;
}
//--
var date = new Date(utime * 1000);
var hours = date.getHours();
var minutes = '0' + date.getMinutes();
var seconds = '0' + date.getSeconds();
var formattedTime = hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2);
console.mem_set(0,1, formattedTime);
 
Top