Вы должны иметь некоторое количество валюты во всех 3-х валютах (USD / LTC / BTC), чтобы использовать его. Тогда, как вы запустите его, ваш USD / LTC баланс уменьшает и ваш BTC баланс будет увеличиваться.
Код:
PHP
// Параметры торговли API
$ ключ знак равно «»; // ваш API-ключ
$ секрет знак равно «»; // Ваш Секретный ключ
// Пределы для торгового размера (BTC)
// Установка инкремент слишком мал будет иметь негативное влияние на скорость
$ min_amount знак равно 0,1;
$ max_amount знак равно 0.6;
$ инкремент знак равно 0.02;
// Минимальная прибыль в процентах
// Должно быть выше, чем плата BTC-E * 3, чтобы быть прибыльным
$ min_profit знак равно 1,0;
// Маржа цены
// Торги будут выполняться это гораздо выше / ниже, чтобы «убедиться» они идут через
// 1,05 = 5% и так далее
$ price_margin знак равно 1,05;
// Задержка между запросами (мс), проверьте с BTC-E, как высокое значение они позволяют
// установка слишком высокое может привести к BTC-E потенциально блокировать бот.
$ задержка знак равно 100;
// Определяем минимальное время между 2 сделки (с). Всякий раз, когда InBalance между ценами существует
// мы хотим, чтобы быстро выполнить первую сделку, но пусть другие арбитражные боты (с большими противовесами)
// очистить все остальное. В противном случае, как представляется, большой риск для убыточных сделок.
$ time_between_trades знак равно 10;
$ last_trade_time знак равно 0;
// Требуется для BTC-E API
$ т знак равно взрываться(«», микропоры());
$ нонс знак равно $ т[1];
// http://pastebin.com/QyjS3U9M
функция btce_query($ метод, массив $ REQ = Массив ())
{
Глобальный $ ключ, $ секрет, $ нонс;
$ REQ[«Метод»знак равно $ метод;
$ REQ[«Одноразовое значение»знак равно $ нонс++;
// генерировать строку POST данных
$ post_data знак равно http_build_query($ REQ, «», '&');
знак $ знак равно hash_hmac("Sha512", $ post_data, $ секрет);
// генерировать дополнительные заголовки
$ заголовки = Массив (
'Знак: '.знак $,
«Ключ:».$ ключ,
);
// наш завиток ручки (инициализация, если это необходимо)
статический $ ч знак равно ноль;
если (нулевой($ ч)) {
$ ч знак равно curl_init();
curl_setopt($ ч, CURLOPT_RETURNTRANSFER, правда);
curl_setopt($ ч, CURLOPT_USERAGENT, 'Mozilla / 4.0 (совместимый; BTC-E PHP клиент;'.php_uname('S').«; PHP /».phpversion().')');
}
curl_setopt($ ч, CURLOPT_URL, 'Https://btc-e.com/tapi/');
curl_setopt($ ч, CURLOPT_POSTFIELDS, $ post_data);
curl_setopt($ ч, CURLOPT_HTTPHEADER, $ заголовки);
curl_setopt($ ч, CURLOPT_SSL_VERIFYPEER, ЛОЖНЫЙ);
// выполнить запрос
$ Рез знак равно curl_exec($ ч);
если ($ Рез === ложный)
Выход(«API ошибка торговли: Ошибка соединения:» . curl_error($ ч));
$ декабрь знак равно json_decode($ Рез, правда);
если (!$ декабрь)
Выход('Ошибка API торговли: Invalid JSON.);
вернуть $ декабрь;
}
функция perform_trade($ торговли, $ show_balance)
{
Глобальный $ last_trade_time;
$ last_trade_time знак равно время();
$ ответ знак равно btce_query('Сделка', $ торговли);
если ($ ответ[«Успех»знак равно 1)
Выход(«Торговая ошибка:» . $ ответ['ошибка']);
если ($ show_balance)
print_balance($ ответ);
}
функция print_balance($ ответ знак равно ложный)
{
если (!$ ответ)
$ ответ знак равно btce_query('получить данные');
$ ул знак равно «»;
для каждого ($ ответ['вернуть'] [«средства»] в виде $ ключ знак равно> $ Вэл)
{
если ($ Вэл > 0)
{
если (StrLen($ ул) > 0)
$ ул .знак равно "";
$ ул .знак равно «» . $ Вэл . «» . strtoupper($ ключ);
}
}
эхо Дата("Его"). ' Баланс:' . $ ул . «\ П»;
}
// Принесите книгу заказов для данной валютной пары
функция книга заказов($ пара)
{
$ заказов знак равно file_get_contents('Https://btc-e.com/api/2/' . $ пара . «/ Глубина»);
если ($ заказов === ложный)
Выход('Ошибка Public API: ошибка соединения.);
$ декабрь знак равно json_decode($ заказов);
если (!$ декабрь)
эхо Дата("Его"). «ОШИБКА: Невозможно получить заказ книгу» . $ пара . "\ П";
вернуть $ декабрь;
}
// Возвратить как большой объем, мы можем получить с данной суммой
функция ask_volume($ заказов, $ сумма)
{
$ т знак равно 0;
$ значение знак равно 0;
для ($ я знак равно 0; $ я < подсчитывать($ заказов->спрашивает) && $ значение < $ сумма; $ я++)
{
$ this_value знак равно мин($ заказов->спрашивает[$ я] [0] * $ заказов->спрашивает[$ я] [1], $ сумма - $ значение);
$ this_vol знак равно $ this_value / $ заказов->спрашивает[$ я] [0];
$ значение +знак равно $ this_value;
$ т +знак равно $ this_vol;
}
вернуть $ т;
}
функция bid_volume($ заказов, $ сумма)
{
$ т знак равно 0;
$ значение знак равно 0;
для ($ я знак равно 0; $ я < подсчитывать($ заказов->предложения) && $ значение < $ сумма; $ я++)
{
$ this_value знак равно мин($ заказов->предложения[$ я] [1], $ сумма - $ значение);
$ this_vol знак равно $ this_value * $ заказов->предложения[$ я] [0];
$ значение +знак равно $ this_value;
$ т +знак равно $ this_vol;
}
вернуть $ т;
}
функция best_bid($ заказов)
{
вернуть $ заказов->предложения[0] [0];
}
функция best_ask($ заказов)
{
вернуть $ заказов->спрашивает[0] [0];
}
// Основная функция программы
функция main_loop()
{
Глобальный $ min_amount, $ max_amount, $ инкремент, $ min_profit, $ задержка, $ price_margin, $ time_between_trades, $ last_trade_time;
// Печать некоторой начальной информации
эхо "BTC-E Арбитраж Bot v0.1 (CTRL + C для выхода) \ п";
эхо «Торговое количество (мин / прирост / макс):» . $ min_amount . "/" . $ инкремент . "/" . $ max_amount . «\ П»;
эхо «Минимальная прибыль:» . $ min_profit . "% \ П";
эхо «Маржа Цена:» . $ price_margin . «\ П»;
эхо «Задержка между проверками:» . $ задержка . «Мс \ п»;
эхо «Минимальное время между сделками:» . $ time_between_trades . "S \ п";
print_balance();
// Цикл до бесконечности (нажмите CTRL + C, чтобы выйти)
в то время как (правда)
{
// Fetch книги заказов по всем валютным парам
$ btc_usd_orders знак равно книга заказов('Btc_usd');
$ ltc_btc_orders знак равно книга заказов('Ltc_btc');
$ ltc_usd_orders знак равно книга заказов('Ltc_usd');
// Действуйте, если у нас есть заказы для всех пар
если ($ btc_usd_orders && $ ltc_btc_orders && $ ltc_usd_orders)
{
$ best_case знак равно 0;
$ best_profit знак равно 0;
$ best_amount знак равно 0;
$ best_trades = Массив ();
// Цикл через различных размеров для того, чтобы найти тот, который с большей прибылью
для ($ амт знак равно $ min_amount; $ амт <знак равно $ max_amount; $ амт +знак равно $ инкремент)
{
// Дело 1: BTC -> LTC -> ДОЛЛАР США -> BTC
$ c1_ltc знак равно ask_volume($ ltc_btc_orders, $ амт);
$ c1_usd знак равно bid_volume($ ltc_usd_orders, $ c1_ltc);
$ c1_btc знак равно ask_volume($ btc_usd_orders, $ c1_usd);
$ c1_profit знак равно $ c1_btc - $ амт;
$ c1_profit_percent знак равно$ c1_profit * 100) / $ амт;
если ($ c1_profit > $ best_profit && $ c1_profit_percent > $ min_profit)
{
$ best_case знак равно 1;
$ best_profit знак равно $ c1_profit;
$ best_amount знак равно $ амт;
$ best_trades = массив
(
массив («Пара» знак равно> 'Ltc_btc', 'тип' знак равно> 'купить', 'количество' знак равно> круглый($ c1_ltc, 6), 'ставка' знак равно> круглый(best_ask($ ltc_btc_orders) * $ price_margin, 3)),
массив («Пара» знак равно> 'Ltc_usd', 'тип' знак равно> «Продать», 'количество' знак равно> круглый($ c1_ltc, 6), 'ставка' знак равно> круглый(best_bid($ ltc_usd_orders) / $ price_margin, 3)),
массив («Пара» знак равно> 'Btc_usd', 'тип' знак равно> 'купить', 'количество' знак равно> круглый($ c1_btc, 6), 'ставка' знак равно> круглый(best_ask($ btc_usd_orders) * $ price_margin, 3))
);
}
// Дело 2: BTC -> ДОЛЛАР США -> LTC -> BTC
$ c2_usd знак равно bid_volume($ btc_usd_orders, $ амт);
$ c2_ltc знак равно ask_volume($ ltc_usd_orders, $ c2_usd);
$ c2_btc знак равно bid_volume($ ltc_btc_orders, $ c2_ltc);
$ c2_profit знак равно $ c2_btc - $ амт;
$ c2_profit_percent знак равно$ c2_profit * 100) / $ амт;
если ($ c2_profit > $ best_profit && $ c2_profit_percent > $ min_profit)
{
$ best_case знак равно 2;
$ best_profit знак равно $ c2_profit;
$ best_amount знак равно $ амт;
$ best_trades = массив
(
массив («Пара» знак равно> 'Btc_usd', 'тип' знак равно> «Продать», 'количество' знак равно> круглый($ амт, 6), 'ставка' знак равно> круглый(best_bid($ btc_usd_orders) / $ price_margin, 3)),
массив («Пара» знак равно> 'Ltc_usd', 'тип' знак равно> 'купить', 'количество' знак равно> круглый($ c2_ltc, 6), 'ставка' знак равно> круглый(best_ask($ ltc_usd_orders) * $ price_margin, 3)),
массив («Пара» знак равно> 'Ltc_btc', 'тип' знак равно> «Продать», 'количество' знак равно> круглый($ c2_ltc, 6), 'ставка' знак равно> круглый(best_bid($ ltc_btc_orders) / $ price_margin, 3))
);
}
}
// Выполнить торги, если мы нашли
если ($ best_case > 0)
{
эхо Дата("Его"). ($ best_case == 1 ? "LTC -> ДОЛЛАР США" : " ДОЛЛАР США -> LTC»). ", Количество " . $ best_amount .
«Ожидаемая прибыль» . number_format($ best_profit, 4).
"(" . number_format(($ best_profit * 100) / $ best_amount, 2). "%) \ П";
// Проверка, что прошло достаточно времени от последней сделки
если ((время() - $ last_trade_time) < $ time_between_trades)
{
эхо Дата("Его"). «Отклонено (не достаточно времени прошло с последней сделки. \ П»;
}
еще
{
perform_trade($ best_trades[0], ложный);
perform_trade($ best_trades[1], ложный);
perform_trade($ best_trades[2], правда);
}
}
}
// Сон для немного
ты спишь($ задержка * 1000);
}
}
// Выполнить функцию основного цикла
main_loop();
Кредит: MadAlpha// Параметры торговли API
$ ключ знак равно «»; // ваш API-ключ
$ секрет знак равно «»; // Ваш Секретный ключ
// Пределы для торгового размера (BTC)
// Установка инкремент слишком мал будет иметь негативное влияние на скорость
$ min_amount знак равно 0,1;
$ max_amount знак равно 0.6;
$ инкремент знак равно 0.02;
// Минимальная прибыль в процентах
// Должно быть выше, чем плата BTC-E * 3, чтобы быть прибыльным
$ min_profit знак равно 1,0;
// Маржа цены
// Торги будут выполняться это гораздо выше / ниже, чтобы «убедиться» они идут через
// 1,05 = 5% и так далее
$ price_margin знак равно 1,05;
// Задержка между запросами (мс), проверьте с BTC-E, как высокое значение они позволяют
// установка слишком высокое может привести к BTC-E потенциально блокировать бот.
$ задержка знак равно 100;
// Определяем минимальное время между 2 сделки (с). Всякий раз, когда InBalance между ценами существует
// мы хотим, чтобы быстро выполнить первую сделку, но пусть другие арбитражные боты (с большими противовесами)
// очистить все остальное. В противном случае, как представляется, большой риск для убыточных сделок.
$ time_between_trades знак равно 10;
$ last_trade_time знак равно 0;
// Требуется для BTC-E API
$ т знак равно взрываться(«», микропоры());
$ нонс знак равно $ т[1];
// http://pastebin.com/QyjS3U9M
функция btce_query($ метод, массив $ REQ = Массив ())
{
Глобальный $ ключ, $ секрет, $ нонс;
$ REQ[«Метод»знак равно $ метод;
$ REQ[«Одноразовое значение»знак равно $ нонс++;
// генерировать строку POST данных
$ post_data знак равно http_build_query($ REQ, «», '&');
знак $ знак равно hash_hmac("Sha512", $ post_data, $ секрет);
// генерировать дополнительные заголовки
$ заголовки = Массив (
'Знак: '.знак $,
«Ключ:».$ ключ,
);
// наш завиток ручки (инициализация, если это необходимо)
статический $ ч знак равно ноль;
если (нулевой($ ч)) {
$ ч знак равно curl_init();
curl_setopt($ ч, CURLOPT_RETURNTRANSFER, правда);
curl_setopt($ ч, CURLOPT_USERAGENT, 'Mozilla / 4.0 (совместимый; BTC-E PHP клиент;'.php_uname('S').«; PHP /».phpversion().')');
}
curl_setopt($ ч, CURLOPT_URL, 'Https://btc-e.com/tapi/');
curl_setopt($ ч, CURLOPT_POSTFIELDS, $ post_data);
curl_setopt($ ч, CURLOPT_HTTPHEADER, $ заголовки);
curl_setopt($ ч, CURLOPT_SSL_VERIFYPEER, ЛОЖНЫЙ);
// выполнить запрос
$ Рез знак равно curl_exec($ ч);
если ($ Рез === ложный)
Выход(«API ошибка торговли: Ошибка соединения:» . curl_error($ ч));
$ декабрь знак равно json_decode($ Рез, правда);
если (!$ декабрь)
Выход('Ошибка API торговли: Invalid JSON.);
вернуть $ декабрь;
}
функция perform_trade($ торговли, $ show_balance)
{
Глобальный $ last_trade_time;
$ last_trade_time знак равно время();
$ ответ знак равно btce_query('Сделка', $ торговли);
если ($ ответ[«Успех»знак равно 1)
Выход(«Торговая ошибка:» . $ ответ['ошибка']);
если ($ show_balance)
print_balance($ ответ);
}
функция print_balance($ ответ знак равно ложный)
{
если (!$ ответ)
$ ответ знак равно btce_query('получить данные');
$ ул знак равно «»;
для каждого ($ ответ['вернуть'] [«средства»] в виде $ ключ знак равно> $ Вэл)
{
если ($ Вэл > 0)
{
если (StrLen($ ул) > 0)
$ ул .знак равно "";
$ ул .знак равно «» . $ Вэл . «» . strtoupper($ ключ);
}
}
эхо Дата("Его"). ' Баланс:' . $ ул . «\ П»;
}
// Принесите книгу заказов для данной валютной пары
функция книга заказов($ пара)
{
$ заказов знак равно file_get_contents('Https://btc-e.com/api/2/' . $ пара . «/ Глубина»);
если ($ заказов === ложный)
Выход('Ошибка Public API: ошибка соединения.);
$ декабрь знак равно json_decode($ заказов);
если (!$ декабрь)
эхо Дата("Его"). «ОШИБКА: Невозможно получить заказ книгу» . $ пара . "\ П";
вернуть $ декабрь;
}
// Возвратить как большой объем, мы можем получить с данной суммой
функция ask_volume($ заказов, $ сумма)
{
$ т знак равно 0;
$ значение знак равно 0;
для ($ я знак равно 0; $ я < подсчитывать($ заказов->спрашивает) && $ значение < $ сумма; $ я++)
{
$ this_value знак равно мин($ заказов->спрашивает[$ я] [0] * $ заказов->спрашивает[$ я] [1], $ сумма - $ значение);
$ this_vol знак равно $ this_value / $ заказов->спрашивает[$ я] [0];
$ значение +знак равно $ this_value;
$ т +знак равно $ this_vol;
}
вернуть $ т;
}
функция bid_volume($ заказов, $ сумма)
{
$ т знак равно 0;
$ значение знак равно 0;
для ($ я знак равно 0; $ я < подсчитывать($ заказов->предложения) && $ значение < $ сумма; $ я++)
{
$ this_value знак равно мин($ заказов->предложения[$ я] [1], $ сумма - $ значение);
$ this_vol знак равно $ this_value * $ заказов->предложения[$ я] [0];
$ значение +знак равно $ this_value;
$ т +знак равно $ this_vol;
}
вернуть $ т;
}
функция best_bid($ заказов)
{
вернуть $ заказов->предложения[0] [0];
}
функция best_ask($ заказов)
{
вернуть $ заказов->спрашивает[0] [0];
}
// Основная функция программы
функция main_loop()
{
Глобальный $ min_amount, $ max_amount, $ инкремент, $ min_profit, $ задержка, $ price_margin, $ time_between_trades, $ last_trade_time;
// Печать некоторой начальной информации
эхо "BTC-E Арбитраж Bot v0.1 (CTRL + C для выхода) \ п";
эхо «Торговое количество (мин / прирост / макс):» . $ min_amount . "/" . $ инкремент . "/" . $ max_amount . «\ П»;
эхо «Минимальная прибыль:» . $ min_profit . "% \ П";
эхо «Маржа Цена:» . $ price_margin . «\ П»;
эхо «Задержка между проверками:» . $ задержка . «Мс \ п»;
эхо «Минимальное время между сделками:» . $ time_between_trades . "S \ п";
print_balance();
// Цикл до бесконечности (нажмите CTRL + C, чтобы выйти)
в то время как (правда)
{
// Fetch книги заказов по всем валютным парам
$ btc_usd_orders знак равно книга заказов('Btc_usd');
$ ltc_btc_orders знак равно книга заказов('Ltc_btc');
$ ltc_usd_orders знак равно книга заказов('Ltc_usd');
// Действуйте, если у нас есть заказы для всех пар
если ($ btc_usd_orders && $ ltc_btc_orders && $ ltc_usd_orders)
{
$ best_case знак равно 0;
$ best_profit знак равно 0;
$ best_amount знак равно 0;
$ best_trades = Массив ();
// Цикл через различных размеров для того, чтобы найти тот, который с большей прибылью
для ($ амт знак равно $ min_amount; $ амт <знак равно $ max_amount; $ амт +знак равно $ инкремент)
{
// Дело 1: BTC -> LTC -> ДОЛЛАР США -> BTC
$ c1_ltc знак равно ask_volume($ ltc_btc_orders, $ амт);
$ c1_usd знак равно bid_volume($ ltc_usd_orders, $ c1_ltc);
$ c1_btc знак равно ask_volume($ btc_usd_orders, $ c1_usd);
$ c1_profit знак равно $ c1_btc - $ амт;
$ c1_profit_percent знак равно$ c1_profit * 100) / $ амт;
если ($ c1_profit > $ best_profit && $ c1_profit_percent > $ min_profit)
{
$ best_case знак равно 1;
$ best_profit знак равно $ c1_profit;
$ best_amount знак равно $ амт;
$ best_trades = массив
(
массив («Пара» знак равно> 'Ltc_btc', 'тип' знак равно> 'купить', 'количество' знак равно> круглый($ c1_ltc, 6), 'ставка' знак равно> круглый(best_ask($ ltc_btc_orders) * $ price_margin, 3)),
массив («Пара» знак равно> 'Ltc_usd', 'тип' знак равно> «Продать», 'количество' знак равно> круглый($ c1_ltc, 6), 'ставка' знак равно> круглый(best_bid($ ltc_usd_orders) / $ price_margin, 3)),
массив («Пара» знак равно> 'Btc_usd', 'тип' знак равно> 'купить', 'количество' знак равно> круглый($ c1_btc, 6), 'ставка' знак равно> круглый(best_ask($ btc_usd_orders) * $ price_margin, 3))
);
}
// Дело 2: BTC -> ДОЛЛАР США -> LTC -> BTC
$ c2_usd знак равно bid_volume($ btc_usd_orders, $ амт);
$ c2_ltc знак равно ask_volume($ ltc_usd_orders, $ c2_usd);
$ c2_btc знак равно bid_volume($ ltc_btc_orders, $ c2_ltc);
$ c2_profit знак равно $ c2_btc - $ амт;
$ c2_profit_percent знак равно$ c2_profit * 100) / $ амт;
если ($ c2_profit > $ best_profit && $ c2_profit_percent > $ min_profit)
{
$ best_case знак равно 2;
$ best_profit знак равно $ c2_profit;
$ best_amount знак равно $ амт;
$ best_trades = массив
(
массив («Пара» знак равно> 'Btc_usd', 'тип' знак равно> «Продать», 'количество' знак равно> круглый($ амт, 6), 'ставка' знак равно> круглый(best_bid($ btc_usd_orders) / $ price_margin, 3)),
массив («Пара» знак равно> 'Ltc_usd', 'тип' знак равно> 'купить', 'количество' знак равно> круглый($ c2_ltc, 6), 'ставка' знак равно> круглый(best_ask($ ltc_usd_orders) * $ price_margin, 3)),
массив («Пара» знак равно> 'Ltc_btc', 'тип' знак равно> «Продать», 'количество' знак равно> круглый($ c2_ltc, 6), 'ставка' знак равно> круглый(best_bid($ ltc_btc_orders) / $ price_margin, 3))
);
}
}
// Выполнить торги, если мы нашли
если ($ best_case > 0)
{
эхо Дата("Его"). ($ best_case == 1 ? "LTC -> ДОЛЛАР США" : " ДОЛЛАР США -> LTC»). ", Количество " . $ best_amount .
«Ожидаемая прибыль» . number_format($ best_profit, 4).
"(" . number_format(($ best_profit * 100) / $ best_amount, 2). "%) \ П";
// Проверка, что прошло достаточно времени от последней сделки
если ((время() - $ last_trade_time) < $ time_between_trades)
{
эхо Дата("Его"). «Отклонено (не достаточно времени прошло с последней сделки. \ П»;
}
еще
{
perform_trade($ best_trades[0], ложный);
perform_trade($ best_trades[1], ложный);
perform_trade($ best_trades[2], правда);
}
}
}
// Сон для немного
ты спишь($ задержка * 1000);
}
}
// Выполнить функцию основного цикла
main_loop();
Если вам нравится этот пост вы можете отправить мне пожертвование.
BTC: 1DB5BC85mqwdQbJaed47tWFpmn96i1YyWn
LTC: LahP2YUhSiJQaupn2AYB2iUgRSFg3n57uZ