Sumber dimuat naik... memuat...

Arahan FMZ API

Penulis:Sifar, Dicipta: 2020-04-20 10:19:00, Dikemas kini: 2023-04-12 14:44:56

dalam 10 log terakhir dan membersihkan selebihnya LogReset ((10)
}


```Python
def main():
    LogReset(10)
void main() {
    LogReset(10);
}

LogVacuum ((()

LogVacuum(), selepas memanggilLogReset()fungsi untuk membersihkan log, memulihkan ruang simpanan yang diduduki olehSQLiteFungsi ini tidak mempunyai nilai pulangan. Sebabnya ialahSQLitetidak mengambil semula ruang yang diduduki apabila memadam data, jadi anda perlu melakukanVACUUMuntuk membersihkan jadual, dan membebaskan ruang. Apabila fungsi ini dipanggil, operasi pemindahan fail akan berlaku dengan kelewatan yang besar. Adalah disyorkan untuk memanggilnya pada selang masa yang sesuai.

API Skor Pasaran

Fungsi antara muka pasaran utama:

Nama Fungsi Penerangan
GetTicker Dapatkan data tanda kutip
GetRecords Dapatkan data K-line
GetDepth Dapatkan data buku pesanan (data kedalaman pesanan)
GetTrades Dapatkan rekod perdagangan terkini di pasaran

Fungsi berikut boleh dipanggil melaluiexchangeatauexchanges[0]objek; contohnya: fungsi, sepertiexchange.GetTicker();atauexchanges[0].GetTicker();, mengembalikan sebut harga pasaran pasangan dagangan semasa dan kontrak penetapan.

Petua penting untuk memanggil fungsi API dengan akses rangkaian:Apabila memanggil mana-mana fungsi API yang mengakses antara muka platform (sepertiexchange.GetTicker(), exchange.Buy(Price, Amount), exchange.CancelOrder(Id), dan lain-lain), kegagalan akses mungkin disebabkan oleh pelbagai sebab. oleh itu, kita mesti melakukan pemprosesan toleransi ralat untuk panggilan fungsi ini.exchange.GetTicker()fungsi untuk mendapatkan data pasaran boleh, disebabkan oleh masalah pelayan platform dan masalah penghantaran rangkaian, dll menyebabkan nilai pulanganexchange.GetTicker()fungsi ialahnull. Kemudian, nilai pulanganexchange.GetTicker()mesti ditangani dengan pemprosesan toleransi ralat.

Data yang dikembalikan olehexchange.GetTicker()fungsi dalam kod berikut diberikan kepadatickerpemboleh ubah, dan kita perlu berurusan dengan toleransi ralat sebelum menggunakanticker variable.

function main() {
    var ticker = exchange.GetTicker()
    if(!ticker){
        // Recall once, or use other processing logic
        ticker = exchange.GetTicker()
    }
}
def main():
    ticker = exchange.GetTicker()
    if not ticker:
        ticker = exchange.GetTicker()
void main() {
    auto ticker = exchange.GetTicker();
    if(!ticker.Valid) {
        ticker = exchange.GetTicker();
        Log("Test");
    }
}

Di samping itu, untuk ujian prestasi toleransi kegagalan strategi, FMZ secara khusus telah menambah satumod toleransi ralatbacktest. Sistem backtest boleh secara rawak mengembalikan beberapa panggilan API yang akan berlaku apabila rangkaian diakses mengikut parameter yang ditetapkan, dan mengembalikan nilai pulangan beberapa panggilan yang gagal. Anda boleh dengan cepat menguji ketahanan program dalam bot. Bertukar ke halaman sistem backtest pada halaman penyuntingan strategi, kliksegitiga terbalikkawalan drop-down di sebelah kanan butang Start Backtest, dan butang Backtest Fault Tolerant akan muncul.

pertukaran.GetTicker()

exchange.GetTicker()mendapat sebut harga pasaran semasa pasangan dagangan semasa dan kontrak, dengan nilai pulangan:Tickerstruktur. Dalam sistem backtest,Tickerdata yang dikembalikan olehexchange.GetTicker()fungsi, di manaHighdanLowadalah nilai simulasi, diambil dari masa semasa jual 1 dan beli 1 dalam bot. cryptocurrency dalam berjalan sebenar adalah harga tertinggi dan harga terendah dalam tempoh tertentu yang ditentukan oleh bursaTick interface.

function main(){
    var ticker = exchange.GetTicker()
    /*
        The platform interface may not be accessible due to network problems (even if the device's docker program can open the platform website, the API may not be accessible)
        At this time, ticker is null, when accessing ticker. When it is "High", it will cause an error; so when testing, ensure that you can access the platform interface
    */
    Log("High:", ticker.High, "Low:", ticker.Low, "Sell:", ticker.Sell, "Buy:", ticker.Buy, "Last:", ticker.Last, "Volume:", ticker.Volume)
}
def main():
    ticker = exchange.GetTicker()
    Log("High:", ticker["High"], "Low:", ticker["Low"], "Sell:", ticker["Sell"], "Buy:", ticker["Buy"], "Last:", ticker["Last"], "Volume:", ticker["Volume"])
void main() {
    auto ticker = exchange.GetTicker();
    Log("High:", ticker.High, "Low:", ticker.Low, "Sell:", ticker.Sell, "Buy:", ticker.Buy, "Last:", ticker.Last, "Volume:", ticker.Volume);
}

Dalam bot sebenar (bukan backtest),Infoatribut dalam nilai pulanganexchange.GetTicker()fungsi menyimpan data asal yang dikembalikan apabila antara muka dipanggil.

pertukaran.GetDepth()

exchange.GetDepth()mendapat data buku pesanan pertukaran pasangan dagangan semasa dan kontrak.Depth structure.

Depthstruktur mengandungi dua susunan struktur, iaituAsks[]danBids[], AsksdanBidsmengandungi pembolehubah struktur berikut:

Jenis data Nama pembolehubah Penerangan
nombor Harga harga
nombor Jumlah jumlah

Sebagai contoh, jika saya mahu mendapatkan harga jualan kedua semasa, saya boleh menulis kod seperti ini:

function main(){
    var depth = exchange.GetDepth()
    /*
       The platform interface may not be accessible due to network reasons (even if the device's docker program can open the platform website, the API may not be accessible)
       At this time, depth is null. When accessing depth.Asks[1].Price, it will cause an error; so when testing, ensure that you can access the platform interface
    */
    var price = depth.Asks[1].Price
    Log("Sell 2 price is:", price)
}
def main():
    depth = exchange.GetDepth()
    price = depth["Asks"][1]["Price"]
    Log("Sell 2 price is:", price)
void main() {
    auto depth = exchange.GetDepth();
    auto price = depth.Asks[1].Price;
    Log("Sell 2 price is:", price);
}

pertukaran.GetTrades()

exchange.GetTrades()mendapat sejarah perdagangan platform (bukan anda sendiri).TradeData tertentu yang dikembalikan bergantung kepada rekod perdagangan dalam julat, mengikut keadaan tertentu. Data yang dikembalikan adalah array, di mana urutan masa setiap elemen adalah sama dengan urutan data balikexchange.GetRecordsfungsi, iaitu, elemen terakhir array adalah data yang paling dekat dengan masa semasa.

// In the simulated backtest, the data is empty; to have a trading history, there must be a real bot running
function main(){
    var trades = exchange.GetTrades()
    /*
        The platform interface may not be accessible due to network reasons (even if the device's docker program can open the platform website, the API may not be accessible)
        At this time, "trades" is null. When accessing trades[0].Id, it will cause an error; so when testing, ensure that you can access the platform interface
    */
    Log("id:", trades[0].Id, "time:", trades[0].Time, "Price:", trades[0].Price, "Amount:", trades[0].Amount, "type:", trades[0].Type)
}
def main():
    trades = exchange.GetTrades()
    Log("id:", trades[0]["Id"], "time:", trades[0]["Time"], "Price:", trades[0]["Price"], "Amount:", trades[0]["Amount"], "type:", trades[0]["Type"])
void main() {
    auto trades = exchange.GetTrades();
    Log("id:", trades[0].Id, "time:", trades[0].Time, "Price:", trades[0].Price, "Amount:", trades[0].Amount, "type:", trades[0].Type);
}

pertukaran.GetRecords()

exchange.GetRecords(Period)mengembalikan data K-garis. tempoh K-garis ditentukan apabila membuat bot; jika anda menentukan parameter apabilaexchange.GetRecords()Apabila fungsi dipanggil, data yang diperoleh akan menjadi data K-line yang sepadan dengan tempoh parameter. Jika tidak ada parameter yang ditentukan, data K-line dikembalikan mengikut tempoh K-line yang ditetapkan pada parameter bot atau tempoh K-line yang ditetapkan pada halaman backtest.

ParameterPeriod:

  • PERIOD_M1: merujuk kepada 1 minit
  • PERIOD_M5: merujuk kepada 5 minit
  • PERIOD_M15: merujuk kepada 15 minit
  • PERIOD_M30: merujuk kepada 30 minit
  • PERIOD_H1: merujuk kepada 1 jam
  • PERIOD_D1: merujuk kepada 1 hari Nilai parameterPeriodhanya boleh lulus tempoh standard yang ditakrifkan di atas, tetapi juga boleh lulus nombor, dalam unit saat.

Nilai pulanganexchange.GetRecords(Period)fungsi: Nilai pulangan adalah pelbagaiRecordstruktur, data K-garis yang dikembalikan akan terkumpul dari masa ke masa, had atas bar K-garis terkumpul dipengaruhi olehexchange.SetMaxBarLentetapan fungsi. had atas lalai adalah 5000 bar K-line apabila tidak ditetapkan. Apabila data K-Line mencapai had pengumpulan bar K-Line, ia akan dikemas kini dengan menambah bar K-Line dan memadam bar K-Line terdahulu (contohnya antrian masuk/keluar). Sesetengah pertukaran tidak menyediakan antara muka K-line, maka docker mengumpul data rekod transaksi pasaran dalam masa nyata untuk menjana K-line.

Bilangan bar K-garis yang diambil apabilaGetRecordsfungsi dipanggil pada mulanya.

  • 1000 bar K-garis pertama pada saat permulaan tempoh backtesting diambil terlebih dahulu dalam sistem backtesting sebagai data K-garis awal.
  • Bilangan bar K-line yang akan diperoleh semasa bot sebenar adalah berdasarkan jumlah maksimum data yang boleh diperoleh oleh antara muka K-line bursa.

Untukexchange.GetRecords(Period)fungsi, bot dan backtestmata wang kriptokedua-dua menyokong tempoh tersuai, dan parameterPeriodadalah bilangan saat. Sebagai contoh:

function main() {
    // Print K-line data with a K-line period of 120 seconds (2 minutes)
    Log(exchange.GetRecords(60 * 2))         
    // Print K-line data with a K-line period of 5 minutes
    Log(exchange.GetRecords(PERIOD_M5))      
}
def main():
    Log(exchange.GetRecords(60 * 2))
    Log(exchange.GetRecords(PERIOD_M5))
void main() {
    Log(exchange.GetRecords(60 * 2)[0]);
    Log(exchange.GetRecords(PERIOD_M5)[0]);
}

PengaturanPeriodParameter ke 5 adalah untuk meminta data K-line dengan tempoh 5 saat. JikaPeriodparameter tidak sama rata dibahagikan dengan 60 (iaitu tempoh yang diwakili adalah tempoh minit tidak tersedia), lapisan bawah sistem menggunakan antara muka yang berkaitan denganGetTradesuntuk mendapatkan data rekod dagangan dan meringkas data K-line yang diperlukan. JikaPeriodparameter dibahagikan secara merata dengan 60, maka data K-line yang diperlukan disintesis dengan menggunakan data K-line sekurang-kurangnya 1 minit (menggunakan tempoh yang lebih besar untuk mensintesis data K-line yang diperlukan jika mungkin).

function main(){
    var records = exchange.GetRecords(PERIOD_H1)
    /*
        The platform interface may not be accessible due to network reasons (even if the device's docker program can open the platform website, the API may not be accessible)
        At this time, "records" is null. When accessing records[0].Time, it will cause an error; so when testing, ensure that you can access the platform interface
    */
    Log("The first k-line data is, Time:", records[0].Time, "Open:", records[0].Open, "High:", records[0].High)
    Log("The second k-line data is, Time:", records[1].Time ,"Close:", records[1].Close)
    Log("Current K-line (latest)", records[records.length-1], "Current K-line (latest)", records[records.length-2])
}
def main():
    records = exchange.GetRecords(PERIOD_H1)
    Log("The first k-line data is, Time:", records[0]["Time"], "Open:", records[0]["Open"], "High:", records[0]["High"])
    Log("The second k-line data is, Time:", records[1]["Time"], "Close:", records[1]["Close"])
    Log("Current K-line (latest)", records[-1], "Current K-line (latest)", records[-2])
void main() {
    auto records = exchange.GetRecords(PERIOD_H1);
    Log("The first k-line data is, Time:", records[0].Time, "Open:", records[0].Open, "High:", records[0].High);
    Log("The second k-line data is, Time:", records[1].Time, "Close:", records[1].Close);
    Log("Current K-line (latest)", records[records.size() - 1], "Current K-line (latest)", records[records.size() - 2]);
}

exchange.GetRecords()Fungsi mempunyai dua syarat untuk mendapatkan data garis K:

  • Pertukaran menyediakan antara muka data K-line. Dalam kes ini, data yang diperoleh adalah data yang dikembalikan secara langsung oleh pertukaran.

  • Bursa tidak menyediakan antara muka data K-line. Program FMZ docker memperoleh rekod perdagangan terkini bursa setiap kali program strategi memanggilexchange.GetRecords(), iaitu, ia memanggilexchange.GetTrades()Fungsi untuk mendapatkan data dan menyintesis data K-line.

Pengujian semula tahap simulasi dalam sistem perlu menetapkantempoh garis K asas(apabila sistem backtesting mensimulasikan tahap backtesting, data K-line yang sepadan digunakan untuk menjana data tik mengikut settempoh garis K asas); perlu diperhatikan bahawa tempoh data K-line yang diperoleh dalam strategi tidak boleh kurang daripadatempoh garis K asasKerana dalam backtest tahap simulasi, data K-garis setiap tempoh disintesis oleh data K-garis yang sepadan dengan tempoh K-garis asas dalam sistem backtest.

Dalamcppbahasa, jika anda perlu membina data K-garis anda sendiri, terdapat contoh kod berikut:

#include <sstream>
void main() { 
    Records r;
    r.Valid = true;
    for (auto i = 0; i < 10; i++) {
        Record ele;
        ele.Time = i * 100000;
        ele.High = i * 10000;
        ele.Low = i * 1000;
        ele.Close = i * 100;
        ele.Open = i * 10;
        ele.Volume = i * 1;
        r.push_back(ele);
    }
    // Output display: Records[10]
    Log(r);                      
    auto ma = TA.MA(r,10);       
    // Output display: [nan,nan,nan,nan,nan,nan,nan,nan,nan,450]
    Log(ma);                     
}

pertukaran.GetPeriod()

Peraturanexchange.GetPeriod()fungsi mengembalikan tempoh K-garis yang ditetapkan pada halaman laman web platform FMZ apabila menjalankan strategi dalamUjian belakangdanbot. Nilai pulangan adalah bilangan bulat dalam unit saat. Nilai pulangan: jenis nombor.

function main() {
    // For example, in the backtest and bot, set the K-line period on the website page of FMZ platform to 1 hour
    var period = exchange.GetPeriod()
    Log("K-line period:", period / (60 * 60), "hour")
}
def main():
    period = exchange.GetPeriod()
    Log("K-line period:", period / (60 * 60), "hour")
void main() {
    auto period = exchange.GetPeriod();
    Log("K-line period:", period / (60 * 60.0), "hour");
}

pertukaran.SetMaxBarLen(Len)

Peraturanexchange.SetMaxBarLen(Len)fungsi mempengaruhi dua aspek semasa menjalankan strategi cryptocurrency:

  • Berkesan pada bilangan bar K-line (BAR) yang diperolehi buat pertama kalinya.
  • Mempengaruhi had atas bar K-line (BAR).
function main() {
    exchange.SetMaxBarLen(50)
    var records = exchange.GetRecords()
    Log(records.length, records)
}
def main():
    exchange.SetMaxBarLen(50)
    r = exchange.GetRecords()
    Log(len(r), r)
void main() {
    exchange.SetMaxBarLen(50);
    auto r = exchange.GetRecords();
    Log(r.size(), r[0]);
}

pertukaran.GetRawJSON()

exchange.GetRawJSON()mengembalikan kandungan mentah (string) yang dikembalikan oleh yang terakhirRESTpermintaan, yang boleh digunakan untuk menganalisis data sendiri. Nilai pulangan: jenis rentetan, hanya sah dalam persekitaran perdagangan langsung cryptocurrency. Backtest tidak menyokong fungsi. Strategi dalamcppBahasa tidak menyokong fungsi.

function main(){
    exchange.GetAccount(); 
    var obj = JSON.parse(exchange.GetRawJSON());
    Log(obj);
}
import json
def main():
    exchange.GetAccount()
    obj = json.loads(exchange.GetRawJSON())
    Log(obj)
void main() {
    auto obj = exchange.GetAccount();
    // C++ doe not support "GetRawJSON" function
    Log(obj);
}

pertukaran.GetRate()

exchange.GetRate()Mengembalikan kadar pertukaran mata wang yang kini digunakan dalam pertukaran dan mata wang harga yang kini dipaparkan, dan nilai yang dikembalikan 1 menunjukkan bahawa penukaran kadar pertukaran dimatikan.

Nota:

  • Jikaexchange.SetRate()tidak dipanggil untuk menetapkan kadar pertukaran, nilai kadar pertukaran dikembalikan olehexchange.GetRate()adalah 1 secara lalai, iaitu, penukaran kadar pertukaran yang dipaparkan pada masa ini tidak ditukar.
  • Jikaexchange.SetRate()telah digunakan untuk menetapkan nilai kadar pertukaran, seperti,exchange.SetRate(7), maka semua maklumat harga objek pertukaran semasa yang mewakili mata wang yang beredar di platform dagangan, seperti sebut harga, kedalaman, harga pesanan, dll, akan dikalikan dengan kadar pertukaran 7 yang ditetapkan sebelumnya untuk penukaran.
  • Jikaexchangesama dengan pertukaran dengan USD sebagai mata wang penetapan harga, selepas memanggilexchange.SetRate(7), semua harga bot akan ditukar kepada harga yang dekat dengan CNY dengan mengalikan dengan 7.exchange.GetRate()ialah 7.

pertukaran.GetUSDCNY()

exchange.GetUSDCNY()Mengembalikan kadar pertukaran terkini dolar AS (sumber data yang disediakan olehyahooNilai pulangan: jenis nombor.

exchange.SetData ((Key, Value)

Peraturanexchange.SetData(Key, Value)Fungsi ini digunakan untuk menetapkan data yang dimuatkan pada masa strategi berjalan, yang boleh menjadi mana-mana penunjuk ekonomi, data industri, indeks yang berkaitan, dan lain-lain. Ia boleh digunakan untuk mengukur semua maklumat yang boleh diukur untuk strategi perdagangan dan juga menyokong penggunaan dalam sistem backtest.

Kaedah panggilanexchange.SetData(Key, Value)fungsi:

  • Menulis data terus ke dalam strategi Format data diperlukan sebagaidatapembolehubah dalam contoh berikut.

    /*backtest
    start: 2020-01-21 00:00:00
    end: 2020-02-12 00:00:00
    period: 1d
    basePeriod: 1d
    exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
    */
    function main() {
        var data = [
            [1579536000000, "abc"],
            [1579622400000, 123],
            [1579708800000, {"price": 123}],
            [1579795200000, ["abc", 123, {"price": 123}]]
        ]
        exchange.SetData("test", data)
        while(true) {
            Log(exchange.GetData("test"))
            Sleep(1000)
        }
    }
    
    '''backtest
    start: 2020-01-21 00:00:00
    end: 2020-02-12 00:00:00
    period: 1d
    basePeriod: 1d
    exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
    '''  
    
    def main():
        data = [
            [1579536000000, "abc"],
            [1579622400000, 123],
            [1579708800000, {"price": 123}],
            [1579795200000, ["abc", 123, {"price": 123}]]
        ]
        exchange.SetData("test", data)
        while True:
            Log(exchange.GetData("test"))
            Sleep(1000)
    
    /*backtest
    start: 2020-01-21 00:00:00
    end: 2020-02-12 00:00:00
    period: 1d
    basePeriod: 1d
    exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
    */  
    
    void main() {
        json data = R"([
            [1579536000000, "abc"],
            [1579622400000, 123],
            [1579708800000, {"price": 123}],
            [1579795200000, ["abc", 123, {"price": 123}]]
        ])"_json;
        
        exchange.SetData("test", data);
        while(true) {
            Log(exchange.GetData("test"));
            Sleep(1000);
        }
    }
    

    Apabila kod ujian di atas dijalankan, data yang sepadan akan diperoleh pada masa yang sepadan, seperti yang ditunjukkan dalam gambar:

    img

    Seperti yang kita boleh lihat, masa setem masa yang sepadan1579622400000adalah2020-01-22 00: 00: 00; apabila program strategi berjalan selepas masa ini, sebelum stempel masa data seterusnya1579708800000, iaitu, sebelum masa2020-01-23 00: 00: 00Panggilexchange.GetData(Source)Semua yang diperolehi adalah kandungan[1579622400000, 123]Apabila program terus berjalan dan masa berubah, mendapatkan data sekeping data seperti ini.

  • Minta data melalui pautan luaran

    Format data yang diminta

    {
        "schema":["time","data"],
        "data":[
            [1579536000000, "abc"],
            [1579622400000, 123],
            [1579708800000, {"price": 123}],
            [1579795200000, ["abc", 123, {"price": 123}]]
        ]
    }
    

    Di mana?schemaadalah format data setiap rekod dalam badan utama data yang dimuatkan, format ditetapkan sebagai["time", "data"], bersamaan dengandataformat sifat data satu demi satu.dataatribut menyimpan badan utama data, dan setiap bahagian data terdiri daripada timestamp tahap milidetik dan kandungan data (kandungan data boleh menjadi mana-mana data yang dikodkan JSON).

    Program perkhidmatan untuk ujian ditulis dalamGoBahasa:

    package main
    import (
        "fmt"
        "net/http"
        "encoding/json"
    )  
    
    func Handle (w http.ResponseWriter, r *http.Request) {
        defer func() {
            fmt.Println("req:", *r)
            ret := map[string]interface{}{
                "schema": []string{"time","data"},
                "data": []interface{}{
                    []interface{}{1579536000000, "abc"},
                    []interface{}{1579622400000, 123},
                    []interface{}{1579708800000, map[string]interface{}{"price":123}},
                    []interface{}{1579795200000, []interface{}{"abc", 123, map[string]interface{}{"price":123}}},
                },
            }
            b, _ := json.Marshal(ret)
            w.Write(b)
        }()
    }  
    
    func main () {
        fmt.Println("listen http://localhost:9090")
        http.HandleFunc("/data", Handle)
        http.ListenAndServe(":9090", nil)
    }
    

    Selepas menerima permintaan, program ini bertindak balas terhadap data:

    {
        "schema":["time","data"],
        "data":[
            [1579536000000, "abc"],
            [1579622400000, 123],
            [1579708800000, {"price": 123}],
            [1579795200000, ["abc", 123, {"price": 123}]]
        ]
    }
    

    Kod strategi ujian:

    /*backtest
    start: 2020-01-21 00:00:00
    end: 2020-02-12 00:00:00
    period: 1d
    basePeriod: 1d
    exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
    */
    function main() {
        while(true) {
            Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"))
            Sleep(1000)
        }
    }
    
    '''backtest
    start: 2020-01-21 00:00:00
    end: 2020-02-12 00:00:00
    period: 1d
    basePeriod: 1d
    exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
    '''  
    
    def main():
        while True:
            Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"))
            Sleep(1000)
    
    /*backtest
    start: 2020-01-21 00:00:00
    end: 2020-02-12 00:00:00
    period: 1d
    basePeriod: 1d
    exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
    */  
    
    void main() {
        while(true) {
            Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"));
            Sleep(1000);
        }
    }
    

pertukaran.GetData ((Sumber)

Peraturanexchange.GetData(Source)fungsi digunakan untuk mendapatkan data dimuatkan olehexchange.SetData(Key, Value)data yang disediakan oleh pautan luaran, ia boleh digunakan dalam sistem backtest. data ini diperoleh pada satu masa semasa backtest, dan data ini disimpan dalam cache selama satu minit semasa perdagangan sebenar.

  • Mendapatkan kaedah panggilan data yang ditulis secara langsung

    /*backtest
    start: 2020-01-21 00:00:00
    end: 2020-02-12 00:00:00
    period: 1d
    basePeriod: 1d
    exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
    */
    function main() {
        exchange.SetData("test", [[1579536000000, _D(1579536000000)], [1579622400000, _D(1579622400000)], [1579708800000, _D(1579708800000)]])
        while(true) {
            Log(exchange.GetData("test"))
            Sleep(1000 * 60 * 60 * 24)
        }
    }
    
    '''backtest
    start: 2020-01-21 00:00:00
    end: 2020-02-12 00:00:00
    period: 1d
    basePeriod: 1d
    exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
    '''  
    def main():
        exchange.SetData("test", [[1579536000000, _D(1579536000000/1000)], [1579622400000, _D(1579622400000/1000)], [1579708800000, _D(1579708800000/1000)]])
        while True:
            Log(exchange.GetData("test"))
            Sleep(1000 * 60 * 60 * 24)
    
    /*backtest
    start: 2020-01-21 00:00:00
    end: 2020-02-12 00:00:00
    period: 1d
    basePeriod: 1d
    exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
    */    
    void main() {
        json arr = R"([[1579536000000, ""], [1579622400000, ""], [1579708800000, ""]])"_json;
        arr[0][1] = _D(1579536000000);
        arr[1][1] = _D(1579622400000);
        arr[2][1] = _D(1579708800000);
        exchange.SetData("test", arr);
        while(true) {
            Log(exchange.GetData("test"));
            Sleep(1000 * 60 * 60 * 24);
        }
    }
    
  • Kaedah memanggil data dari pautan luaran

    function main() {
        Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"))
        Log(exchange.GetData("https://www.fmz.com/upload/asset/32bf73a69fc12d36e76.json"))
    }
    
    def main():
        Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"))
        Log(exchange.GetData("https://www.fmz.com/upload/asset/32bf73a69fc12d36e76.json"))
    
    void main() {
        Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"));
        Log(exchange.GetData("https://www.fmz.com/upload/asset/32bf73a69fc12d36e76.json"));
    }
    
  • Gunakan data asas platform pusat data Gunakanexchange.GetData(Source)fungsi untuk mendapatkanData asas.

Apabila memanggilexchange.GetData(Source)fungsi, anda boleh lulus dalam parameter kedua untuk menetapkan masa tamat cache dalam mili saat. lalai adalah satu minit masa tamat cache dalam bot sebenar. Dalam sistem backtest, apabila menggunakan antara muka akses untuk meminta data, sistem backtest akan menambah parameter from (timestamp detik), untuk (timestamp saat), tempoh (yang mendasari tempoh K-garis, timestamp mili saat) dan parameter lain secara automatik kepada permintaan, untuk menentukan julat masa data yang akan diperoleh.

API Perdagangan

Fungsi berikut boleh dipanggil melaluiexchangeatauexchanges[0]objek. Contohnya:exchange.Sell(100, 1);menunjukkan pesanan seterusnya adalah pesanan jual dengan harga 100 dan kuantiti 1 di bursa.

pertukaran.Beli ((Harga, Jumlah)

exchange.Buy(Price, Amount)digunakan untuk meletakkan pesanan beli dan mengembalikan ID pesanan. Nilai parameter:Priceadalah harga pesanan dalam jenis nombor, danAmountadalah jumlah pesanan dalam jenis nombor. Nilai balik: jenis rentetan atau jenis nombor (jenis tertentu bergantung kepada jenis balik setiap platform pertukaran).

Nombor pesanan yang dikembalikan boleh digunakan untuk menyoal maklumat pesanan dan membatalkan pesanan.

function main() {
    var id = exchange.Buy(100, 1);
    Log("id:", id);
}
def main():
    id = exchange.Buy(100, 1)
    Log("id:", id)
void main() {
    auto id = exchange.Buy(100, 1);
    Log("id:", id);
}
  • Tarikh hadapan

    Apabila meletakkan pesanan untuk niaga hadapan, kita mesti memberi perhatian kepada sama ada arah dagangan ditetapkan dengan betul. Jika arah dagangan dan fungsi dagangan tidak sepadan, kesilapan akan dilaporkan. Bilangan pesanan yang diletakkan di bursa niaga hadapan cryptocurrency adalah bilangan kontrak kecuali dinyatakan sebaliknya. Contohnya:

    // The following is the wrong call
    function main() {
        exchange.SetContractType("quarter")
      
        // Set short direction
        exchange.SetDirection("sell")     
        // Place a buy order, and you will get an error, so you can only sell short
        var id = exchange.Buy(50, 1)      
    
        // Set short direction
        exchange.SetDirection("buy")      
        // Place a sell order, and you will get an error, so you can only buy long
        var id2 = exchange.Sell(60, 1)    
      
        // Set close long position direction
        exchange.SetDirection("closebuy")    
        // Place a buy order, and you will get an error, so you can only sell short
        var id3 = exchange.Buy(-1, 1)        
      
        // Set close short position direction
        exchange.SetDirection("closesell")   
        // Place a sell order, and you will get an error, so you can only buy long
        var id4 = exchange.Sell(-1, 1)       
    }
    
    # The following is the wrong call
    def main():
        exchange.SetContractType("quarter")
        exchange.SetDirection("sell")
        id = exchange.Buy(50, 1)
        exchange.SetDirection("buy")
        id2 = exchange.Sell(60, 1)
        exchange.SetDirection("closebuy")
        id3 = exchange.Buy(-1, 1)
        exchange.SetDirection("closesell")
        id4 = exchange.Sell(-1, 1)
    
    // The following is the wrong call
    void main() {
        exchange.SetContractType("quarter");
        exchange.SetDirection("sell");
        auto id = exchange.Buy(50, 1);
        exchange.SetDirection("buy");
        auto id2 = exchange.Sell(60, 1);
        exchange.SetDirection("closebuy");
        auto id3 = exchange.Buy(-1, 1);
        exchange.SetDirection("closesell");
        auto id4 = exchange.Sell(-1, 1);
    }
    

    Mesej ralat:

    direction is sell, invalid order type Buy
    direction is buy, invalid order type Sell
    direction is closebuy, invalid order type Buy
    direction is closesell, invalid order type Sell
    
  • Perintah pasaran

    Nota: Antara muka pesanan pertukaran diperlukan untuk menyokong pesanan pasaran (apabila jenis pesanan adalah pesanan beli, parameter jumlah pesanan adalah jumlah dalam mata wang sebut harga), dan kaedah pesanan pasaran niaga hadapan cryptocurrency digunakan untuk meletakkan pesanan, dan unit parameter kuantiti adalahbilangan kontrak. Beberapa pertukaran perdagangan langsung untuk mata wang digital tidak menyokong antara muka pesanan pasaran.

    // For example, trading pairs: ETH_BTC, bought in by market order
    function main() {
        // Buy a market order, and buy ETH coins equal to 0.1 BTC (quote currency) 
        exchange.Buy(-1, 0.1)    
    }
    
    def main():
        exchange.Buy(-1, 0.1)
    
    void main() {
        exchange.Buy(-1, 0.1);
    }
    

pertukaran.Menjual ((Harga, Jumlah)

exchange.Sell(Price, Amount)meletakkan pesanan jual dan mengembalikan ID pesanan. Nilai parameter:Priceadalah harga pesanan, jenis nombor.Amountadalah jumlah pesanan, jenis berangka. Nilai balik: jenis rentetan atau jenis berangka (jenis tertentu bergantung kepada jenis balik setiap pertukaran).

Nombor pesanan yang dikembalikan, yang boleh digunakan untuk menyoal maklumat pesanan dan membatalkan pesanan.

function main(){
    var id = exchange.Sell(100, 1)
    Log("id:", id)
}
def main():
    id = exchange.Sell(100, 1)
    Log("id:", id)
void main() {
    auto id = exchange.Sell(100, 1);
    Log("id:", id);
}
  • Tarikh hadapan

    Apabila meletakkan pesanan untuk niaga hadapan, anda mesti memberi perhatian kepada sama ada arah dagangan ditetapkan dengan betul. Jika arah dagangan dan fungsi dagangan tidak sepadan, kesilapan akan dilaporkan. Jumlah pesanan platform niaga hadapan cryptocurrency adalah jumlah kontrak kecuali dinyatakan sebaliknya.

  • Perintah pasaran

    Nota: antarmuka penempatan pesanan platform diperlukan untuk menyokong pesanan pasaran. (Apabila jenis pesanan adalah pesanan jual, parameter jumlah pesanan adalah bilangan syiling operasi yang dijual), dan masa hadapan cryptocurrency meletakkan pesanan mengikut bentuk pesanan pasaran, dan unit parameter jumlah pesanan adalahbilangan kontrak. Beberapa pertukaran mata wang digital dalam perdagangan sebenar tidak menyokong antara muka pesanan pasaran.

    // For example, trading pairs: ETH_BTC, sold out by market order 
    function main() {
        // Note: Sell by a market order, and sell 0.2 ETH coins 
        exchange.Sell(-1, 0.2)   
    }
    
    def main():
        exchange.Sell(-1, 0.2)
    
    void main() {
        exchange.Sell(-1, 0.2);
    }
    

pertukaran. Batalkan Perintah ((Id)

exchange.CancelOrder(orderId), tujuan fungsi ini adalah untuk membatalkan pesanan dengan Id. Nilai parameter:Idadalah nombor pesanan, dalam jenis rentetan atau jenis nombor (jenis tertentu bergantung kepada jenis pulangan apabila meletakkan pesanan pada setiap platform); nilai pulangan: jenis bool.

Mengembalikan hasil operasi;truebermakna permintaan pembatalan pesanan telah dihantar dengan berjaya;falsebermakna permintaan pesanan membatalkan gagal untuk menghantar (nilai pulangan hanya menunjukkan sama ada permintaan menghantar berjaya atau tidak, jadi ia adalah yang terbaik untuk memanggilexchange.GetOrders()untuk memeriksa sama ada platform membatalkan pesanan).

function main(){
    var id = exchange.Sell(99999, 1)
    exchange.CancelOrder(id)
}
def main():
    id = exchange.Sell(99999, 1)
    exchange.CancelOrder(id)
void main() {
    auto id = exchange.Sell(99999, 1);
    exchange.CancelOrder(id);
}

Fungsi API FMZ, yang boleh menghasilkan fungsi output log, sepertiLog(...), exchange.Buy(Price, Amount)danexchange.CancelOrder(Id). Anda boleh mengikuti parameter yang diperlukan dengan beberapa parameter output tambahan, sepertiexchange.CancelOrder(orders[j].Id, orders[j])Dengan cara ini, ia membatalkanorders[j]pesanan yang disertai dengan output maklumat pesanan ini, iaituOrderstrukturorders[j].

function main() {
    Log("data1", "data2", "data3", "...")
    var data2 = 200
    var id = exchange.Sell(100000, 0.1, "Incidental data1", data2, "...")
    exchange.CancelOrder(id, "Incidental data1", data2, "...")
    LogProfit(100, "Incidental data1", data2, "...")
}
def main():
    Log("data1", "data2", "data3", "...")
    data2 = 200
    id = exchange.Sell(100000, 0.1, "Incidental data1", data2, "...")
    exchange.CancelOrder(id, "Incidental data1", data2, "...")
    LogProfit(100, "Incidental data1", data2, "...")
void main() {
    Log("data1", "data2", "data3", "...");
    int data2 = 200;
    auto id = exchange.Sell(100000, 0.1, "Incidental data1", data2, "...");
    exchange.CancelOrder(id, "Incidental data1", data2, "...");
    LogProfit(100, "Incidental data1", data2, "...");
}

pertukaran.GetOrder ((Id)

exchange.GetOrder(orderId)mendapat butiran pesanan mengikut nombor pesanan. Nilai parameter:Idialah nombor siri yang akan diperoleh, danIdadalah jenis rentetan atau nombor (jenis tertentu bergantung kepada jenis pulangan setiap pertukaran).Orderstruktur. (Tidak disokong oleh beberapa pertukaran)

  • Orderstruktur
  • AvgPricemenunjukkan harga purata yang dilaksanakan (sebahagian bursa tidak menyokong medan ini; tetapkannya kepada 0 jika mereka tidak menyokong).
function main(){
    var id = exchange.Sell(1000, 1)
    // The parameter id is the order number, you need to fill in the number of the order you want to query
    var order = exchange.GetOrder(id)      
    Log("Id:", order.Id, "Price:", order.Price, "Amount:", order.Amount, "DealAmount:",
        order.DealAmount, "Status:", order.Status, "Type:", order.Type)
}
def main():
    id = exchange.Sell(1000, 1)
    order = exchange.GetOrder(id)
    Log("Id:", order["Id"], "Price:", order["Price"], "Amount:", order["Amount"], "DealAmount:", 
        order["DealAmount"], "Status:", order["Status"], "Type:", order["Type"])
void main() {
    auto id = exchange.Sell(1000, 1);
    auto order = exchange.GetOrder(id);
    Log("Id:", order.Id, "Price:", order.Price, "Amount:", order.Amount, "DealAmount:", 
        order.DealAmount, "Status:", order.Status, "Type:", order.Type);
}

pertukaran.GetOrders()

exchange.GetOrders()Dapatkan semua pesanan yang belum selesai.Ordersusunan struktur. UntukOrderstruktur, sila rujukexchange.GetOrder()Apabila akaun yang diwakili oleh objek pertukaranexchangeTidak ada pesanan yang menunggu, hubungiexchange.GetOrders()untuk mengembalikan barisan kosong, iaitu:[].

function main(){
    exchange.Sell(1000, 1)
    exchange.Sell(1000, 1)
    var orders = exchange.GetOrders()
    Log("Information for unfinished order 1, ID:", orders[0].Id, "Price:", orders[0].Price, "Amount:", orders[0].Amount,
        "DealAmount:", orders[0].DealAmount, "type:", orders[0].Type)
    Log("Information for unfinished order 2, ID:", orders[1].Id, "Price:", orders[1].Price, "Amount:", orders[1].Amount,
        "DealAmount:", orders[1].DealAmount, "type:", orders[1].Type)
}
def main():
    exchange.Sell(1000, 1)
    exchange.Sell(1000, 1)
    orders = exchange.GetOrders()
    Log("Information for unfinished order 1, ID:", orders[0]["Id"], "Price:", orders[0]["Price"], "Amount:", orders[0]["Amount"], 
        "DealAmount:", orders[0]["DealAmount"], "type:", orders[0]["Type"])
    Log("Information for unfinished order 2, ID:", orders[1]["Id"], "Price:", orders[1]["Price"], "Amount:", orders[1]["Amount"],
        "DealAmount:", orders[1]["DealAmount"], "type:", orders[1]["Type"])
void main() {
    exchange.Sell(1000, 1);
    exchange.Sell(1000, 1);
    auto orders = exchange.GetOrders();
    Log("Information for unfinished order 1, ID:", orders[0].Id, "Price:", orders[0].Price, "Amount:", orders[0].Amount, 
        "DealAmount:", orders[0].DealAmount, "type:", orders[0].Type);
    Log("Information for unfinished order 2, ID:", orders[1].Id, "Price:", orders[1].Price, "Amount:", orders[1].Amount,
        "DealAmount:", orders[1].DealAmount, "type:", orders[1].Type);
}

Peraturanexchange.GetOrders()fungsi mendapatkan maklumat pesanan belum selesai daripada set semasaPasangan daganganPerlu diperhatikan bahawa niaga hadapan cryptocurrency mempunyai perbezaan antara bukan sahaja pasangan perdagangan tetapi juga kod kontrak.

// Test OKX contract tradings, to know whether "GetOrders" gets all unfinished contract orders
function main(){
    // The next weekly buy order; the price of the order minus 50 guarantees no execution; pending orders
    exchange.SetContractType("this_week")
    exchange.SetDirection("buy")
    var ticker = exchange.GetTicker()
    Log(ticker)
    exchange.Buy(ticker.Last - 50, 1)

    // The next quarterly sell order; the price plus 50 guarantees that it will not be executed, and the pending order has been switched to a quarterly contract
    exchange.SetContractType("quarter")
    exchange.SetDirection("sell")
    ticker = exchange.GetTicker()
    Log(ticker)
    exchange.Sell(ticker.Last + 50, 1)

    // Get the unfinished orders
    Log("orders", exchange.GetOrders())
}
def main():
    exchange.SetContractType("this_week")
    exchange.SetDirection("buy")
    ticker = exchange.GetTicker()
    Log(ticker)
    exchange.Buy(ticker["Last"] - 50, 1)

    exchange.SetContractType("quarter")
    exchange.SetDirection("sell")
    ticker = exchange.GetTicker()
    Log(ticker)
    exchange.Sell(ticker["Last"] + 50, 1)

    Log("orders", exchange.GetOrders())
void main() {
    exchange.SetContractType("this_week");
    exchange.SetDirection("buy");
    auto ticker = exchange.GetTicker();
    Log(ticker);
    exchange.Buy(ticker.Last - 50, 1);

    exchange.SetContractType("quarter");
    exchange.SetDirection("sell");
    ticker = exchange.GetTicker();
    Log(ticker);
    exchange.Sell(ticker.Last + 50, 1);

    Log("orders", exchange.GetOrders());
}

Maklumat pesanan belum selesai yang diperoleh:

[{"Id":17116430886,"Amount":1,"Price":808.4,"DealAmount":0,"AvgPrice":0,"Status":0,"Type":1,"ContractType":"quarter"}]

Ia dapat dilihat bahawa dalam perdagangan cryptocurrency, pesanan yang diperoleh olehexchange.GetOrders()hanya pesanan yang belum selesai dalam kontrak yang ditetapkan pada masa ini.

pertukaran.SetPrecision(...)

exchange.SetPrecision(PricePrecision, AmountPrecision)menetapkan ketepatan perpuluhan harga dan jumlah pesanan simbol; ia akan dipotong secara automatik selepas ditetapkan. Nilai parameter:PricePrecisionadalah jenis nombor, digunakan untuk mengawal bilangan tempat perpuluhan dalam data harga;AmountPrecisionadalah jenis nombor, digunakan untuk mengawal titik perpuluhan selepas jumlah pesanan.PricePrecisiondanAmountPrecisionbacktest tidak menyokong fungsi, dan ketepatan nombor backtest akan diproses secara automatik.

function main(){
    // Set the decimal precision of the price to 2 digits, and set the precision of the quantity of the symbol order to 3 digits
    exchange.SetPrecision(2, 3)
}    
def main():
    exchange.SetPrecision(2, 3)
void main() {
    exchange.SetPrecision(2, 3);
}

pertukaran.SetRate(Rate)

exchange.SetRate(Rate)menetapkan kadar pertukaran mata wang yang beredar di bursa.Rateadalah daripadanumberNilai pulangan:number type.

function main(){
    Log(exchange.GetTicker())
    // Set the exchange rate conversion
    exchange.SetRate(7)
    Log(exchange.GetTicker())
    // Set to 1, without conversion
    exchange.SetRate(1)
}
def main():
    Log(exchange.GetTicker())
    exchange.SetRate(7)
    Log(exchange.GetTicker())
    exchange.SetRate(1)
void main() {
    Log(exchange.GetTicker());
    exchange.SetRate(7);
    Log(exchange.GetTicker());
    exchange.SetRate(1);
}

Nota:

  • Jika anda telah menetapkan nilai kadar pertukaran dengan menggunakanexchange.SetRate(Rate), seperti 7, maka semua maklumat harga, termasuk harga pasaran semasa, kedalaman, dan harga pesanan, mata wang peredaran yang diwakili oleh mata wang semasaexchangeobjek, akan didarabkan dengan kadar pertukaran ditetapkan 7 untuk penukaran.

  • Sebagai contoh,exchangeadalah kadar pertukaran dalam dolar AS.exchange.SetRate(7)Apabila harga perdagangan sebenar dipanggil, semua harga perdagangan sebenar akan dikalikan dengan 7 dan ditukar kepada harga yang dekat dengan CNY.

exchange.IO(…)

exchange.IO("api", httpMethod, resource, params, raw), memanggil antara muka fungsi lain pertukaran. Nilai parameter:httpMehodadalah jenis rentetan; ia mengisi jenis permintaan, sepertiPOSTatauGET. resourceadalah jenis rentetan, ia mengisi laluan permintaan.paramsadalah jenis rentetan, ia mengisi parameter permintaan.rawadalah parameter rentetan JSON asal dan ia boleh dihilangkan.exchange.IO("api", httpMethod, resource, params, raw)panggilan fungsi akan mengakses antara muka pertukaran. Apabila ralat berlaku dan panggilan gagal, ia mengembalikan nilai sifar (fungsi dengan permintaan rangkaian, sepertiGetTicker()danGetAccount(), dan lain-lain, mengembalikan nilai null apabila panggilan gagal). Hanya perdagangan langsung menyokong memanggilexchange.IO("api", ...) function.

Untuk contoh pesanan batch OKX, gunakan parameterrawuntuk lulus parameter perintah:

function main() {
    var arrOrders = [
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"},
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"2","posSide":"long"}
    ]
    
    // Call exchange.IO to directly access the platform batch ordering interface
    var ret = exchange.IO("api", "POST", "/api/v5/trade/batch-orders", "", JSON.stringify(arrOrders))
    Log(ret)
}
import json
def main():
    arrOrders = [
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"}, 
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"2","posSide":"long"}
    ]
    ret = exchange.IO("api", "POST", "/api/v5/trade/batch-orders", "", json.dumps(arrOrders))
    Log(ret)
void main() {
    json arrOrders = R"([
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"},
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"2","posSide":"long"}
    ])"_json;
    auto ret = exchange.IO("api", "POST", "/api/v5/trade/batch-orders", "", arrOrders.dump());
    Log(ret);
}

Untuk menggunakan fungsi ini, anda perlu pergi ke pertukaran untuk memahamiAPIantara muka pertukaran untuk memperluaskan fungsi yang FMZ tidak telah ditambah (anda tidak perlu risau tentang proses parameter penyulitan, tandatangan dan pengesahan apabila anda menghantarPOSTFMZ telah diproses sepenuhnya di lapisan bawah, jadi anda hanya perlu mengisi parameter yang sepadan).

Nota: Jika nilai kunci dalamparamsparameter (iaitu, parameter permintaan Http) adalah rentetan, ia perlu dibungkus dengan tanda petikan tunggal (simbol') di kedua-dua sisi nilai parameter. Contohnya:bitfinex exchange.

var amount = 1
var price = 10
var basecurrency = "ltc"
function main () {
    // Notice that amount.toString() and price.toString() both have a ' character on the left and right
    var message = "symbol=" + basecurrency + "&amount='" + amount.toString() + "'&price='" + price.toString() + "'&side=buy" + "&type=limit"
    var id = exchange.IO("api", "POST", "/v1/order/new", message)
}
amount = 1
price = 10
basecurrency = "ltc"
def main():
    message = "symbol=" + basecurrency + "&amount='" + str(amount) + "'&price='" + str(price) + "'&side=buy" + "&type=limit"
    id = exchange.IO("api", "POST", "/v1/order/new", message)
void main() {
    auto amount = 1.0;
    auto price = 10.0;
    auto basecurrency = "ltc";
    string message = format("symbol=%s&amount=\"%.1f\"&price=\"%.1f\"&side=buy&type=limit", basecurrency, amount, price);
    auto id = exchange.IO("api", "POST", "/v1/order/new", message);
}

Contoh aksesOKXantara muka:

function main(){
    var ret = exchange.IO("api", "GET", "/api/v5/trade/orders-pending", "instType=SPOT")
    Log(ret)
}
def main():
    ret = exchange.IO("api", "GET", "/api/v5/trade/orders-pending", "instType=SPOT")
    Log(ret)
void main() {
    auto ret = exchange.IO("api", "GET", "/api/v5/trade/orders-pending", "instType=SPOT");
    Log(ret);
}

Data yang dikembalikan semasa ujian:

{"code":"0","data":[],"msg":""}

Tetapan lainexchange.IOfungsi:

  • Tukar pasangan dagangan bursa semasa

    exchange.IO("currency", "ETH_BTC")

    function main() {
        // For example, set the current trading pair of the exchange object on the bot to BTC_USDT, and print the current trading pair market
        Log(exchange.GetTicker())
        // Switch trading pair to LTC_BTC      
        exchange.IO("currency", "LTC_BTC")
        Log(exchange.GetTicker())
    }
    
    def main():
        Log(exchange.GetTicker())
        exchange.IO("currency", "LTC_BTC")
        Log(exchange.GetTicker())
    
    void main() {
        Log(exchange.GetTicker());
        exchange.IO("currency", "LTC_BTC");
        Log(exchange.GetTicker());
    }
    

    Dengan cara ini,Pasangan dagangandisusunapabila bot ditambahkanatauUjian belakang dijalankanakan ditukar melalui kod.

    Nota:

      1. Sistem backtest kini menyokong menukar pasangan dagangan (hanya objek pertukaran spot cryptocurrency). Semasa backtest, perlu diperhatikan bahawa hanya pasangan dagangan mata wang sebut harga yang sama yang boleh ditukar. Sebagai contoh, pasangan dagangan semasa adalahETH_BTC, yang hanya boleh ditukar kepadaLTC_BTC, tidakLTC_USDT.
      1. Jikawebsocketmod protokol dihidupkan pada Huobi spot pertukaran objek, anda tidak boleh menggunakanexchange.IO("currency", "XXX_YYY")untuk menukar mata wang.
      1. Untuk pertukaran niaga hadapan mata wang kripto, jika pasangan dagangan ditukar, anda perlu menetapkan kontrak lagi untuk menentukan kontrak mana yang ingin anda dagangkan.
      1. Anda juga boleh menggunakanexchange.SetCurrency(Symbol)fungsi untuk menukar pasangan dagangan, dan menggunakanexchange.IO("currency","XXX_YYY")kaedah untuk mengekalkan keserasian.
  • exchange.IOfungsi menukar alamat asas API pertukaran (kontrak RESET; beberapa pertukaran tidak menyokong itu). Sekarang penggunaanexchange.SetBase(Base)fungsi telah disokong untuk menukar alamat pangkalan API pertukaran, dan menggunakanexchange.IO("base","https://xxx.xxx.xxx")kaedah untuk mengekalkan keserasian.

    Sebagai contoh: Apabila objek pertukaran dikapsulkan, alamat asas lalai adalahhttps://api.huobipro.com, untuk beralih kepada:https://api.huobi.pro, gunakan kod berikut.

    function main () {
        // exchanges[0] is the first exchange object added when the bot is added 
        exchanges[0].IO("base", "https://api.huobi.pro")        
    }
    
    def main():
        exchanges[0].IO("base", "https://api.huobi.pro")
    
    void main() {
        exchanges[0].IO("base", "https://api.huobi.pro");
    }
    

    Ubah alamat pangkalan kembali ke:https://api.huobipro.com.

    function main () {
        exchanges[0].IO("base", "https://api.huobipro.com")
    }
    
    def main():
        exchanges[0].IO("base", "https://api.huobipro.com")
    

Lebih lanjut