()
Справочная информация


Как торговать крипто монетами на CrexSosft


Для начала работы на бирже CrexSoft надо пройти процедуру регистрации.
Так как биржа не привязывается к email адресам и телефонам - обязательно сохраните регистрационный код,
только с его помощью можно будет сменить пароль и доказать что Вы владелец аккаунта,
ели кто-то украдет у вас логин/пароль.
После регистрации будут доступны все возможности для торговли криптовалютами.
Чтобы что-то продать или купить на бирже, надо пополнить один из кошельков. У каждой криптовалюты свой кошелек,
каждому пользователю выделяется персональный адрес для пополнения этого кошелька.
Когда монеты приходят на этот адрес они становятся доступны для торговли.
Чтобы купить или продать криптовалюту, надо зайти на страницу "Торги" и выбрать криптовалютную пару.
Это делается в левом меню в таблице "МАРКЕТ". Например если вы хотите купить Bitcoin за рубли,
нужно в таблице МАРКЕТ выбрать в заголовке RUR и затем выбрать строку с BTC,
откроется информация по торгам по паре BTC/RUR.

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

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

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

Когда ордер на покупку исполнится то купленная криптовалюта окажется в кошельке пользователя,
 и ее можно продать подороже на бирже или вывести с биржи, вывод делается в меню "Кошельки".

При вводе и выводе монет семь раз проверяйте адреса ввода вывода, так как это операция необратимая,
и если вы укажете неверную информацию, криптовалюта уйдет в никуда.


Описание формата RPC API


Биржа предоставляет сервис API для автоматической торговли с помощью программ и торговых роботов.
Для работы с API нужно в меню "Настройки" сформировать API ключи, можно формировать несколько ключей,
например для каждой программы свой ключ.

Методы RPC API:

Информационные методы вызываются по адресу https://crexsoft.com/api/ и не требуют api ключей.

ticker
Метод для получения информации по указанной валютной паре за последние 24 часа.
Примеры вызова:
https://crexsoft.com/api/ticker/btc_rur
https://crexsoft.com/api/ticker/btc_rur-mdc_rur
Формат вывода:
{"mdc_rur":{"high":"1.00000000","low":"0.01500000","avg":"0.02984925","vol":"2.97000000","vol_cur":"99.50000000","last":"0.01500000","buy":"0.00000000","sell":"0.00000000","updated":1569165432}}

trades
Метод для получения информации о последних сделках указанных пар.
Пример вызова:
https://crexsoft.com/api/trades/btc_rur
Формат вывода:
{"mdc_rur":[{"type":"bid","price":0.015,"amount":98,"tid":3,"timestamp":1569165432},{"type":"bid","price":1,"amount":1.5,"tid":1,"timestamp":1569159695}]}

depth
Метод для получения информации о активных ордерах указанных пар.
Пример вызова:
https://crexsoft.com/api/depth/btc_rur
Формат вывода:
{"btc_rur":{"asks":[[645000,0.0163156],[646000,0.03]],"bids":[[644000,0.00232919],[643000,0.0021773]]}}


Торговые методы API вызываются по адресу https://crexsoft.com/tapi/ и требуют api ключи для доступа.

Trade
Метод для создания торгового ордера.
Обязательные параметры:
pair - валютная пара, строка вида "btc_rur"
type - buy или sell (buy - покупка, sell-продажа)
rate - цена ордера (формат 1234.12345678)
amount - количество монет для покупки или продажи (формат 1234.12345678)
Формат ответа:
Array
(
    [success] => 1
    [return] => Array
        (
            [received] => 0.00000000
            [remains] => 0.00100000
            [order_id] => 223512
        )
)
Формат сообщения о ошибке:
Array
(
    [success] => 0
    [error] => Minimal order amount for price 1.00000000 is 0.00001
)


CancelOrder
Метод для отмены торгового ордера.
Обязательные параметры:
order_id - целое число с номером ордера.
Формат ответа:
Array
(
    [success] => 1
    [return] => Array
        (
            [order_id] => 223145
        )
)

ActiveOrders
Метод для получения информации о активных ордерах пользователя.
Обязательные параметры:
pair - строка  с валютной парой вида btc_rur
Формат ответа:
Array
(
    [success] => 1
    [return] => Array
        (
            [23] => Array
                (
                    [pair] => btc_rur
                    [type] => sell
                    [amount] => 0.00100000
                    [rate] => 640000.00000000
                    [timestamp_created] => 1569253154
                    [status] => 0
                )
        )
)

OrderInfo
Метод для получения информации о указанном ордере.
Обязательные параметры:
order_id - целое число с номером ордера.
Формат ответа:
Array
(
    [success] => 1
    [return] => Array
        (
            [23] => Array
                (
                    [pair] => btc_rur
                    [type] => sell
                    [start_amount] => 0.00100000
                    [amount] => 0.00100000
                    [rate] => 640000.00000000
                    [timestamp_created] => 1569253154
                    [status] => 0
                )
        )
)

Где поле status :
StateOpen=0; // ордер открыт
StateCompleted=1; // ордер исполнен
StateCanceled=2; // ордер отменён
StateCanceledPartyally=3; // ордер отменён, но был частично исполнен

TradeHistory
Метод для получения информации о истории сделок.
Параметры:
pair - строка с валютной парой вида btc_rur
from или from_id - с какой сделки выводить информацию
end_id - до какой сделки выводить информацию
count - сколько сделок выводить
order - ASC или DESC (сортировка)
since - с какого времени выводить сделки, целое число в формате unix timestamp например 1569159695690
end - до какого времени выводить сделки, целое число в формате unix timestamp например 1569159695690
Формат вывода:
Array
(
    [success] => 1
    [return] => Array
        (
            [3 ] => Array
                (
                    [pair] => mdc_rur
                    [type] => buy
                    [amount] => 98.00000000
                    [rate] => 0.01500000
                    [order_id] => 15
                    [is_your_order] => 1
                    [timestamp_created] => 1569165433
                )
            [2 ] => Array
                (
                    [pair] => mdc_rur
                    [type] => sell
                    [amount] => 1.50000000
                    [rate] => 1.00000000
                    [order_id] => 10
                    [is_your_order] => 1
                    [timestamp_created] => 1569159696
                )

        )
)

getInfo
Метод для получения информации о балансах пользователя (количестве монет на кошельках)
Параметры не нужны.
Формат ответа:
Array
(
    [success] => 1
    [return] => Array
        (
            [funds] => Array
                (
                    [rur] => 30000
                    [btc] => 3.0453156
                    [eth] => 311.104
                    [doge] => 346246
                    [usdte] => 5121
                )

            [funds_incl_orders] => Array
                (
                    [rur] => 35000
                    [btc] => 3.3453156
                    [eth] => 411.104
                    [doge] => 546246
                    [usdte] => 6121
                )

            [rights] => Array
                (
                    [info] => 1
                    [trade] => 1
                    [withdraw] => 0
                )

            [transaction_count] => 0
            [open_orders] => 0
            [server_time] => 1569253346
        )

)

Примеры работы с API:




Пример на php демонстрирует вызов метода tradeHistory для валютной пары btc_rur

=== начало файла testapi.php ===
function request($req)
{
    $site='crexsoft.com';

    $api_key='a876a876a66a86a86a6a6a866a8a';
    $api_secret='a65a765a67a567a56a756a76a75a';
   
    $post_data = http_build_query($req, '', '&');
    $sign = hash_hmac("sha512", $post_data, $api_secret);
    $headers = array(
        'Sign: '.$sign,
        'Key: '.$api_key,
    );

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; SMART_API PHP client; '.php_uname('s').'; PHP/'.phpversion().')');
    curl_setopt($ch, CURLOPT_URL, 'https://'.$site.'/tapi/');
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
    curl_setopt($ch, CURLOPT_POST, true );
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_ENCODING , 'gzip');

    $res = curl_exec($ch);
    if($res === false)
    {
        $e = curl_error($ch);
        tolog3( "transaction error: ".print_r($e, true) );
        curl_close($ch);
        return null;
    }

    curl_close($ch);

    $result = json_decode($res, true);

    if($result['success']!=1){
        tolog2( "reply with error: ".print_r($result,true) );
    }
    return $result;
}

function tradeHistory($pair)
{
    $data['method']='TradeHistory';
    $data['pair']=$pair;
    $data['from_id']=0;
    $data['count']=3;
    //$data['order']='ASC';
    
    $ret=request($data);
    return $ret;
}

print_r( tradeHistory('btc_rur' );

=== конец файла testapi.php ===

Пример на JavaScript (node.js) демонстрирует создание ордера,удаление,получение информации о ордере и др.

=== начало файла testapi.js ===
const axios = require('axios');
const httpBuildQuery = require('http-build-query');
const crypto = require("crypto");

class CrexsoftApi {

    constructor(config) {
        this.config=config;
    }

    async get(method,params){
        let url = this.config.apiEndpoint + '/' + method+'/'+params;
        let response = await axios.get(url, {}, {
            headers: {
                'Content-Type': 'application/json',
            },
        });
        return response.data;
    }

    async doRequest(reqOpts) {
        let {url,method,body,headers} = reqOpts;
        let response = await axios.post(url, body, {
            headers
        });
        return response.data;
    }

    async makeSignedRequest(params){
        let signature = httpBuildQuery(params);
        let url=this.config.url;
        let reqUrl = 'https://' + url + '/tapi/';
        let hmacsignature = crypto.createHmac('sha512', this.config.secretkey).update(signature).digest('hex');
        let headers = {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Key': this.config.publickey,
            'Sign': hmacsignature,
            'Cache-Control': 'no-cache'
        };
        let reqOpts = {
            url: reqUrl,
            method: "POST",
            body: signature,
            headers: headers
        };
        let res = await this.doRequest(reqOpts);
        return res;
    }

    async OrderInfo({orderid}){
        let params={};
        params.method='OrderInfo';
        params.order_id=orderid;
        let res = await this.makeSignedRequest(params);
        return res;
    }
    async Trade({pair,type,rate,amount}){
        let params={};
        params.method='Trade';
        params.pair=pair;
        params.type=type;
        params.rate=rate;
        params.amount=amount;
        let res = await this.makeSignedRequest(params);
        return res;
    }
    async getInfo(){
        let params={};
        params.method='getInfo';
        let res = await this.makeSignedRequest(params);
        return res;
    }
    async CancelOrder({orderid}){
        let params={};
        params.method='CancelOrder';
        params.order_id=orderid;
        let res = await this.makeSignedRequest(params);
        return res;
    }
}

let config={};
config.apiEndpoint = 'https://crexsoft.com/api'
config.publickey='публичный ключ из настроек';
config.secretkey='секретный ключ из настроек';
let crexsoft=new CrexsoftApi(config);

// информационные методы
crexsoft.get('ticker','btc_rur').then( console.log ).catch(console.error);
crexsoft.get('trades','btc_rur').then( console.log ).catch(console.error);
crexsoft.get('depth','btc_rur').then( console.log ).catch(console.error);

// торговые методы
crexsoft.getInfo().then( console.log ).catch(console.error);
crexsoft.OrderInfo({orderid:12345}).then( console.log ).catch(console.error);
crexsoft.CancelOrder({orderid:12345}).then( console.log ).catch(console.error);
crexsoft.Trade({pair:'btc_rur',type:'buy',rate:0.00000001,amount:1000}).then( console.log ).catch(console.error);
=== конец файла testapi.js ===