Sumber daya yang dimuat... Pemuatan...

Instruksi API FMZ

Penulis:Tidak ada, Dibuat: 2020-04-20 10:19:00, Diperbarui: 2023-04-12 14:44:56

dalam 10 log terakhir dan menghapus sisanya LogReset ((10)
}


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

LogVacuum ((()

LogVacuum(), setelah meneleponLogReset()fungsi untuk membersihkan log, memulihkan ruang penyimpanan yang diduduki olehSQLiteFungsi ini tidak memiliki nilai pengembalian. Alasannya adalah bahwaSQLitetidak merebut kembali ruang yang diduduki ketika menghapus data, sehingga Anda perlu melakukanVACUUMuntuk membersihkan tabel, dan membebaskan ruang. Ketika fungsi ini dipanggil, operasi pindahan file akan terjadi dengan penundaan yang besar. Disarankan untuk memanggilnya pada interval waktu yang tepat.

API kutipan pasar

Fungsi utama antarmuka pasar:

Nama Fungsi Deskripsi
GetTicker Dapatkan data tanda kutip
GetRecords Dapatkan data K-line
GetDepth Dapatkan data buku pesanan (data kedalaman pesanan)
GetTrades Dapatkan catatan perdagangan terbaru di pasar

Fungsi berikut dapat dipanggil melaluiexchangeatauexchanges[0]objek; misalnya: fungsi, sepertiexchange.GetTicker();atauexchanges[0].GetTicker();, mengembalikan harga pasar dari pasangan perdagangan saat ini dan kontrak pengaturan.

Tips penting untuk memanggil fungsi API dengan akses jaringan:Saat memanggil fungsi API yang mengakses antarmuka platform (sepertiexchange.GetTicker(), exchange.Buy(Price, Amount), exchange.CancelOrder(Id), dll), kegagalan akses mungkin disebabkan oleh berbagai alasan. oleh karena itu kita harus melakukan pemrosesan fault-tolerant untuk panggilan fungsi ini.exchange.GetTicker()fungsi untuk memperoleh data pasar dapat, karena masalah server platform dan masalah transmisi jaringan, dll menyebabkan hasil bahwa nilai kembali dariexchange.GetTicker()fungsi adalahnullKemudian, nilai kembali dariexchange.GetTicker()harus ditangani dengan pemrosesan toleransi kesalahan.

Data yang dikembalikan olehexchange.GetTicker()fungsi dalam kode berikut diberikan kepadatickervariabel, dan kita perlu menangani toleransi kesalahan 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");
    }
}

Selain itu, untuk pengujian kinerja toleransi kesalahan strategi, FMZ secara khusus telah menambahkanmodus toleransi kesalahanbacktest. sistem backtest dapat secara acak mengembalikan beberapa panggilan API yang akan terjadi ketika jaringan diakses sesuai dengan parameter yang ditetapkan, dan mengembalikan nilai pengembalian beberapa panggilan yang gagal. Anda dapat dengan cepat menguji ketahanan program di bot. Beralih ke halaman sistem backtest pada halaman editing strategi, kliksegitiga terbalikkontrol drop-down di sisi kanan tombol Start Backtest, dan tombol Backtest Fault Tolerant akan muncul.

pertukaran.GetTicker()

exchange.GetTicker()mendapatkan kutipan pasar saat ini dari pasangan perdagangan saat ini dan kontrak, dengan nilai pengembalian:Tickerstruktur. Dalam sistem backtest,Tickerdata yang dikembalikan olehexchange.GetTicker()fungsi, di manaHighdanLowadalah nilai simulasi, diambil dari waktu saat ini jual 1 dan beli 1 di bot. cryptocurrency dalam menjalankan nyata adalah harga tertinggi dan harga terendah dalam periode tertentu yang ditentukan oleh pertukaranTick 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 nyata (bukan backtest),Infoatribut dalam nilai kembali dariexchange.GetTicker()fungsi menyimpan data asli yang dikembalikan ketika antarmuka dipanggil.

Pertukaran.GetDepth ((()

exchange.GetDepth()mendapatkan data buku pesanan pertukaran dari pasangan perdagangan dan kontrak saat ini.Depth structure.

Depthstruktur terdiri dari dua susunan struktur, yaituAsks[]danBids[], AsksdanBidsmengandung variabel struktur berikut:

Jenis data Nama variabel Deskripsi
nomor Harga harga
nomor Jumlah jumlah

Misalnya, jika saya ingin mendapatkan harga jual kedua saat ini, saya bisa menulis kode 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()mendapatkan riwayat perdagangan platform (bukan milik Anda).Tradedata yang dikembalikan tergantung pada catatan perdagangan dalam kisaran, sesuai dengan keadaan tertentu. Data yang dikembalikan adalah array, di mana urutan waktu dari setiap elemen adalah sama dengan urutan data kembali dariexchange.GetRecordsfungsi, yaitu, elemen terakhir dari array adalah data terdekat dengan waktu saat ini.

// 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-line. Periode K-line ditentukan saat membuat bot; jika Anda menentukan parameter ketikaexchange.GetRecords()jika fungsi dipanggil, data yang diperoleh akan menjadi data K-line yang sesuai dengan periode parameter. Jika tidak ada parameter yang ditentukan, data K-line dikembalikan sesuai dengan periode K-line yang ditetapkan pada parameter bot atau periode K-line yang ditetapkan pada halaman backtest.

ParameterPeriod:

  • Periode_M1: mengacu pada 1 menit
  • Periode_M5: mengacu pada 5 menit
  • Periode_M15: mengacu pada 15 menit
  • Periode_M30: mengacu pada 30 menit
  • Periode_H1: mengacu pada 1 jam
  • Periode_D1: mengacu pada 1 hari Nilai parameter dariPeriodhanya dapat melewati periode standar yang didefinisikan di atas, tetapi juga dapat melewati angka, dalam satuan detik.

Nilai pengembalianexchange.GetRecords(Period)Fungsi: Nilai yang dikembalikan adalah array dariRecordstruktur, data K-line yang dikembalikan akan terkumpul dari waktu ke waktu, batas atas bar K-line terkumpul dipengaruhi olehexchange.SetMaxBarLensetting fungsi. Batas atas default adalah 5000 K-line bar ketika tidak ditetapkan. Ketika data K-Line mencapai batas akumulasi bar K-Line, akan diperbarui dengan menambahkan bar K-Line dan menghapus bar K-Line terdahulu (misalnya antrian masuk/keluar). Beberapa pertukaran tidak menyediakan antarmuka K-line, maka docker mengumpulkan data catatan transaksi pasar secara real time untuk menghasilkan K-line.

Jumlah batang K-line yang diambil ketikaGetRecordsfungsi awalnya dipanggil.

  • 1000 batang garis K pertama pada saat awal periode backtesting diambil sebelumnya dalam sistem backtesting sebagai data garis K awal.
  • Jumlah spesifik K-line bar yang akan diperoleh selama real bot didasarkan pada jumlah maksimum data yang dapat diperoleh oleh antarmuka K-line dari bursa.

Untukexchange.GetRecords(Period)fungsi, bot dan backtest daricryptocurrencybaik mendukung periode kustom, dan parameterPeriodadalah jumlah detik. Misalnya:

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 periode 5 detik. JikaPeriodParameter tidak dibagi rata dengan 60 (yaitu periode yang diwakili adalah periode menit yang tidak tersedia), lapisan bawah sistem menggunakan antarmuka yang relevan dariGetTradesuntuk memperoleh data catatan perdagangan dan mensintesis data K-line yang diperlukan. JikaPeriodparameter dibagi rata dengan 60, maka data K-line yang diperlukan disintesis dengan menggunakan minimal data K-line 1 menit (menggunakan periode yang lebih panjang untuk mensintesis data K-line yang diperlukan jika memungkinkan).

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 memiliki dua kondisi untuk mendapatkan data garis K:

  • Pertukaran menyediakan antarmuka data K-line. Dalam hal ini, data yang diperoleh adalah data yang dikembalikan langsung oleh pertukaran.

  • Pertukaran tidak menyediakan antarmuka data K-line. Program FMZ docker memperoleh catatan perdagangan terbaru dari pertukaran setiap kali program strategi memanggilexchange.GetRecords(), yaitu, itu disebutexchange.GetTrades()fungsi untuk mendapatkan data dan mensintesis data K-line.

Backtest tingkat simulasi dalam sistem perlu mengaturperiode garis K yang mendasarinya(ketika sistem backtesting mensimulasikan tingkat backtesting, data K-line yang sesuai digunakan untuk menghasilkan data tick sesuai dengan setperiode garis K yang mendasarinya); perlu dicatat bahwa periode data K-line yang diperoleh dalam strategi tidak dapat kurang dariperiode garis K yang mendasariKarena dalam backtest tingkat simulasi, data K-line dari setiap periode disintesis oleh data K-line yang sesuai dengan periode K-line yang mendasari dalam sistem backtest.

Di dalamcppbahasa, jika Anda perlu membangun data K-line Anda sendiri, ada contoh kode 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 periode K-line yang ditetapkan pada halaman situs web platform FMZ ketika menjalankan strategi dibacktestdanbot. Nilai yang dikembalikan adalah bilangan bulat dalam satuan detik. Nilai yang dikembalikan: tipe numerik.

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 selama runtime dari strategi cryptocurrency:

  • Mempengaruhi jumlah batang garis K (BAR) yang diperoleh untuk pertama kalinya.
  • Mempengaruhi batas atas batang garis K (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]);
}

exchange.GetRawJSON (()

exchange.GetRawJSON()mengembalikan konten mentah (string) yang dikembalikan oleh yang terakhirRESTrequest, yang dapat digunakan untuk menganalisis data sendiri. Nilai yang dikembalikan: jenis string, hanya valid di lingkungan perdagangan langsung cryptocurrency. Backtest tidak mendukung fungsi. Strategi dalamcppbahasa tidak mendukung 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);
}

exchange.GetRate (()

exchange.GetRate()mengembalikan nilai tukar mata uang yang saat ini digunakan di bursa dan mata uang harga yang saat ini ditampilkan, dan nilai yang dikembalikan 1 menunjukkan bahwa konversi nilai tukar dinonaktifkan.

Catatan:

  • Jikaexchange.SetRate()tidak dipanggil untuk menetapkan nilai tukar, nilai nilai tukar dikembalikan olehexchange.GetRate()adalah 1 secara default, yaitu konversi nilai tukar yang saat ini ditampilkan belum ditukar.
  • Jikaexchange.SetRate()telah digunakan untuk menetapkan nilai nilai nilai tukar, seperti,exchange.SetRate(7), maka semua informasi harga dari objek pertukaran saat ini yang mewakili mata uang yang beredar di platform perdagangan, seperti penawaran, kedalaman, harga pesanan, dll, akan dikalikan dengan nilai tukar 7 yang ditetapkan sebelumnya untuk konversi.
  • Jikaexchangesesuai dengan pertukaran dengan USD sebagai mata uang penetapan harga, setelah panggilanexchange.SetRate(7), semua harga bot akan dikonversi ke harga yang dekat dengan CNY dengan mengalikan dengan 7.exchange.GetRate()adalah 7.

pertukaran.GetUSDCNY()

exchange.GetUSDCNY()mengembalikan nilai tukar terbaru dari dolar AS (sumber data yang disediakan olehyahooNilai yang dikembalikan: tipe numerik.

exchange.SetData ((Key, Value)

Peraturanexchange.SetData(Key, Value)Fungsi ini digunakan untuk mengatur data yang dimuat pada saat strategi berjalan, yang bisa menjadi indikator ekonomi, data industri, indeks yang relevan, dll. Fungsi ini dapat digunakan untuk mengukur semua informasi yang dapat diukur untuk strategi perdagangan dan juga mendukung penggunaan sistem backtest.

Metode panggilan dariexchange.SetData(Key, Value)Fungsi:

  • Tulis data langsung ke dalam strategi Format data diperlukan sebagaidatavariabel 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);
        }
    }
    

    Ketika kode uji di atas dijalankan, data yang sesuai akan diperoleh pada waktu yang sesuai, seperti yang ditunjukkan pada gambar:

    img

    Seperti yang bisa kita lihat, waktu yang sesuai dari timestamp1579622400000adalah2020-01-22 00: 00: 00; ketika program strategi berjalan setelah waktu ini, sebelum data timestamp berikutnya1579708800000, yaitu sebelum waktu2020-01-23 00: 00: 00, hubungiexchange.GetData(Source)Semua yang diperoleh adalah isi dari[1579622400000, 123]Saat program terus berjalan dan waktu berubah, dapatkan data potongan-potongan data seperti ini.

  • Minta data melalui tautan eksternal

    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 dari setiap catatan dalam badan utama data yang dimuat, formatnya ditetapkan sebagai["time", "data"], yang sesuai dengandataAtribut format data satu per satu.dataatribut menyimpan badan utama data, dan setiap potongan data terdiri dari timestamp tingkat milidetik dan konten data (konten data dapat menjadi data yang dikodekan JSON).

    Program layanan untuk pengujian 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)
    }
    

    Setelah menerima permintaan, program menanggapi data:

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

    Kode strategi uji:

    /*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);
        }
    }
    

exchange.GetData ((Sumber)

Peraturanexchange.GetData(Source)fungsi digunakan untuk mendapatkan data yang dimuat olehexchange.SetData(Key, Value)data yang diberikan oleh tautan eksternal, dapat digunakan dalam sistem backtest. data diperoleh pada satu waktu selama backtest, dan data disimpan dalam cache selama satu menit selama perdagangan yang sebenarnya.

  • Mendapatkan metode 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);
        }
    }
    
  • Metode panggilan data dari tautan eksternal

    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"));
    }
    
  • Menggunakan data dasar dari platform pusat data Gunakanexchange.GetData(Source)fungsi untuk mendapatkanData Dasar.

Saat meneleponexchange.GetData(Source)fungsi, Anda dapat melewati parameter kedua untuk mengatur timeout cache dalam milidetik. Default adalah satu menit cache timeout di bot nyata. Dalam sistem backtest, ketika menggunakan antarmuka akses untuk meminta data, sistem backtest akan menambahkan parameter from (timestamp detik), untuk (timestamp detik), periode (yang mendasari K-line periode, timestamp milidetik) dan parameter lainnya secara otomatis untuk permintaan, untuk menentukan rentang waktu data yang akan diperoleh.

Trading API

Fungsi berikut dapat dipanggil melaluiexchangeatauexchanges[0]contohnya:exchange.Sell(100, 1);menunjukkan pesanan berikutnya adalah pesanan jual dengan harga 100 dan jumlah 1 di bursa.

pertukaran.Beli ((Harga, Jumlah)

exchange.Buy(Price, Amount)digunakan untuk menempatkan pesanan beli dan mengembalikan ID order. Nilai parameter:Priceadalah harga pesanan dalam bentuk nomor, danAmountadalah jumlah pesanan dalam jenis angka. Nilai yang dikembalikan: jenis string atau jenis numerik (jenis spesifik tergantung pada jenis pengembalian dari setiap platform pertukaran).

Nomor pesanan yang dikembalikan dapat digunakan untuk menanyakan informasi 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);
}
  • Perintah berjangka

    Ketika menempatkan pesanan untuk berjangka, kita harus memperhatikan apakah arah perdagangan ditetapkan dengan benar. Jika arah perdagangan dan fungsi perdagangan tidak cocok, kesalahan akan dilaporkan. Jumlah pesanan yang ditempatkan di bursa berjangka cryptocurrency adalah jumlah kontrak kecuali ditentukan sebaliknya. Misalnya:

    // 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);
    }
    

    Pesan kesalahan:

    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
    
  • Peraturan pasar

    Catatan: Antarmuka pesanan pertukaran diperlukan untuk mendukung pesanan pasar (ketika jenis pesanan adalah pesanan beli, parameter jumlah pesanan adalah jumlah dalam mata uang penawaran), dan metode pesanan pasar berjangka cryptocurrency digunakan untuk menempatkan pesanan, dan unit parameter kuantitas adalahJumlah kontrakBeberapa bursa perdagangan langsung untuk mata uang digital tidak mendukung antarmuka pesanan pasar.

    // 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)menempatkan pesanan jual dan mengembalikan ID pesanan. Nilai parameter:Priceadalah harga pesanan, jenis numerik.Amountadalah jumlah pesanan, jenis numerik. Nilai yang dikembalikan: jenis string atau jenis numerik (jenis spesifik tergantung pada jenis pengembalian setiap pertukaran).

Nomor pesanan yang dikembalikan, yang dapat digunakan untuk menanyakan informasi 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);
}
  • Perintah berjangka

    Saat menempatkan pesanan untuk berjangka, Anda harus memperhatikan apakah arah perdagangan ditetapkan dengan benar. Jika arah perdagangan dan fungsi perdagangan tidak cocok, kesalahan akan dilaporkan. Jumlah pesanan platform berjangka cryptocurrency adalah jumlah kontrak kecuali ditentukan sebaliknya.

  • Perintah pasar

    Catatan: antarmuka penempatan pesanan platform diperlukan untuk mendukung pesanan pasar. (Ketika jenis pesanan adalah pesanan jual, parameter jumlah pesanan adalah jumlah koin operasi yang terjual), dan berjangka cryptocurrency menempatkan pesanan dengan bentuk pesanan pasar, dan unit parameter jumlah pesanan adalahJumlah kontrakBeberapa pertukaran mata uang digital dalam perdagangan nyata tidak mendukung antarmuka pesanan pasar.

    // 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 Pesanan (Id)

exchange.CancelOrder(orderId), tujuan dari fungsi ini adalah untuk membatalkan pesanan dengan Id. Nilai parameter:Idadalah nomor pesanan, dalam jenis string atau tipe numerik (jenis spesifik tergantung pada jenis pengembalian ketika menempatkan pesanan pada setiap platform); nilai pengembalian: jenis bool.

Mengembalikan hasil operasi;trueberarti bahwa permintaan pembatalan pesanan telah berhasil dikirim;falseberarti bahwa permintaan perintah pembatalan gagal untuk mengirim (nilai kembali hanya menunjukkan apakah permintaan pengiriman berhasil atau tidak, jadi yang terbaik untuk memanggilexchange.GetOrders()untuk memeriksa apakah 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 dapat menghasilkan fungsi log output, sepertiLog(...), exchange.Buy(Price, Amount)danexchange.CancelOrder(Id). Anda dapat mengikuti parameter yang diperlukan dengan beberapa parameter output tambahan, sepertiexchange.CancelOrder(orders[j].Id, orders[j])Dengan cara ini, itu membatalkanorders[j]order yang disertai dengan output informasi order ini, yaituOrderstruktur dariorders[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)mendapatkan detail pesanan sesuai dengan nomor pesanan.Idadalah nomor deret yang akan diperoleh, danIdadalah jenis string atau numerik (jenis spesifik tergantung pada jenis pengembalian dari setiap pertukaran).Orderstruktur. (Tidak didukung oleh beberapa pertukaran)

  • Orderstruktur
  • AvgPricemenunjukkan harga rata-rata yang dieksekusi (beberapa bursa tidak mendukung bidang ini; atur menjadi 0 jika mereka tidak mendukung).
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()mendapatkan semua pesanan yang belum selesai.Orderarray struktur. UntukOrderstruktur, silakan lihatexchange.GetOrder()Ketika akun yang diwakili oleh objek pertukaranexchangeTidak ada pesanan yang menunggu, hubungiexchange.GetOrders()untuk mengembalikan array kosong, yaitu:[].

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 informasi pesanan yang belum selesai dari set saat inipasangan perdaganganHarus dicatat bahwa cryptocurrency berjangka memiliki perbedaan antara tidak hanya pasangan perdagangan tetapi juga kode 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());
}

Informasi pesanan belum selesai yang diperoleh:

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

Hal ini dapat dilihat bahwa dalam perdagangan cryptocurrency, pesanan yang diperoleh olehexchange.GetOrders()hanya pesanan yang belum selesai dari kontrak yang saat ini ditetapkan.

Pertukaran.SetPrecision(...)

exchange.SetPrecision(PricePrecision, AmountPrecision)menetapkan presisi desimal harga dan jumlah urutan simbol; akan dipotong secara otomatis setelah pengaturan. Nilai parameter:PricePrecisionadalah tipe angka, digunakan untuk mengontrol jumlah tempat desimal dalam data harga;AmountPrecisionadalah tipe angka, digunakan untuk mengontrol titik desimal setelah jumlah pesanan.PricePrecisiondanAmountPrecisionbacktest tidak mendukung fungsi, dan keakuratan numerik backtest akan diproses secara otomatis.

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);
}

exchange.SetRate ((Rate)

exchange.SetRate(Rate)menetapkan nilai tukar mata uang yang beredar di bursa.Rateadalah darinumberNilai pengembalian: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);
}

Catatan:

  • Jika Anda telah menetapkan nilai nilai nilai tukar dengan menggunakanexchange.SetRate(Rate), seperti 7, maka, semua informasi harga, termasuk harga pasar saat ini, kedalaman, dan harga pesanan, dari mata uang sirkulasi yang diwakili olehexchangeobjek, akan dikalikan dengan nilai tukar yang ditetapkan 7 untuk konversi.

  • Sebagai contoh,exchangeadalah nilai tukar dalam dolar AS.exchange.SetRate(7)disebut, semua harga perdagangan nyata akan dikalikan dengan 7 dan dikonversi ke harga yang dekat dengan CNY.

exchange.IO(…)

exchange.IO("api", httpMethod, resource, params, raw), memanggil antarmuka fungsional lain dari pertukaran. Nilai parameter:httpMehodadalah jenis string; itu mengisi tipe permintaan, sepertiPOSTatauGET. resourceadalah jenis string, itu mengisi jalur permintaan.paramsadalah jenis string, itu mengisi parameter permintaan.rawadalah parameter string JSON asli dan dapat dihilangkan.exchange.IO("api", httpMethod, resource, params, raw)panggilan fungsi akan mengakses antarmuka pertukaran. Ketika terjadi kesalahan dan panggilan gagal, itu mengembalikan nilai nol (fungsi dengan permintaan jaringan, sepertiGetTicker()danGetAccount(), dll, mengembalikan nilai nol ketika panggilan gagal).exchange.IO("api", ...) function.

Untuk contoh urutan batch OKX, gunakan parameterrawuntuk melewati parameter order:

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 memahamiAPIantarmuka pertukaran untuk memperluas fungsi yang FMZ belum ditambahkan (Anda tidak perlu khawatir tentang proses enkripsi parameter, tanda tangan dan verifikasi ketika Anda mengirimkanPOSTFMZ telah diproses sepenuhnya di lapisan bawah, jadi Anda hanya perlu mengisi parameter yang sesuai).

Catatan: Jika nilai kunci dalamparamsparameter (yaitu, parameter permintaan Http) adalah string, itu perlu dibungkus dengan tanda kutip tunggal (simbol') di kedua sisi nilai parameter. Misalnya: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 aksesOKXantarmuka

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 selama pengujian:

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

Pengaturan lain dariexchange.IOFungsi:

  • Ubah pasangan perdagangan dari bursa saat ini

    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 perdagangandikonfigurasiketika bot ditambahkanataubacktest dijalankanakan beralih melalui kode.

    Catatan:

      1. Sistem backtest sekarang mendukung switching trading pairs (hanya objek spot exchange cryptocurrency). Selama backtest, perlu dicatat bahwa hanya trading pairs dari quote currency yang sama yang dapat beralih.ETH_BTC, yang hanya bisa beralih keLTC_BTC, tidakLTC_USDT.
      1. Jikawebsocketprotokol mode dihidupkan pada Huobi spot exchange objek, Anda tidak dapat menggunakanexchange.IO("currency", "XXX_YYY")untuk menukar mata uang.
      1. Untuk bursa berjangka cryptocurrency, jika pasangan perdagangan ditukar, Anda perlu mengatur kontrak lagi untuk menentukan kontrak mana yang ingin Anda dagangkan.
      1. Anda juga bisa menggunakanexchange.SetCurrency(Symbol)fungsi untuk beralih pasangan perdagangan, dan menggunakanexchange.IO("currency","XXX_YYY")metode untuk menjaga kompatibilitas.
  • exchange.IOfungsi beralih alamat basis API pertukaran (kontrak RESET; beberapa pertukaran tidak mendukung itu). Sekarang penggunaanexchange.SetBase(Base)fungsi telah didukung untuk beralih alamat basis API pertukaran, dan menggunakanexchange.IO("base","https://xxx.xxx.xxx")metode untuk menjaga kompatibilitas.

    Misalnya: Ketika objek pertukaran dikapsulkan, alamat dasar default adalahhttps://api.huobipro.com, untuk beralih ke:https://api.huobi.pro, gunakan kode 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 dasar 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 banyak