2.1 Menggunakan API untuk mendapatkan maklumat akaun, mendapatkan data pasaran, mendapatkan data K-line, mendapatkan maklumat mendalam pasaran

Penulis:Mimpi kecil, Dicipta: 2016-11-05 16:41:04, Dikemas kini: 2019-08-01 09:31:23

2.1 Menggunakan API untuk mendapatkan maklumat akaun, mendapatkan data pasaran, mendapatkan data K-line, mendapatkan maklumat mendalam pasaran

Akhirnya sampai pada bab kedua, melalui lawatan ke bab sebelumnya, anda harus mempunyai beberapa pemahaman tentang pelbagai fungsi pencipta kuantitatif; kemudian mula menulis kod!


  • Menggunakan API untuk mendapatkan maklumat akaun

    Misalkan pelawat melalui bab 1 telah menambah penjaga, pertukaran, tentu saja kita boleh menggunakan Inventor Quantify Simulator untuk menguji kod.

    Pertama, kita buat satu strategi, kita panggilnya ujian 1.img

    Antara muka penyuntingan strategiimg img

    Kodnya ialah:

function main() {
    Log(exchange.GetAccount()); // 看过API 文档后知道, exchange就是交易所对象,实际上策略有个全局变量
                                // exchanges 数组,这个数组存放的就是你创建机器人或者回测时添加的交易所(可以是多个)
                                // 添加1个交易所 exchanges 数组就只包含1个交易所对象,即添加的交易所对象。
                                // 那么 exchange 和 exchanges 是什么关系呢? 其实 exchange 就是 exchanges[0] ,
                                // exchange 就是 exchanges 数组的第一个元素(这里这个元素是交易所对象)。
                                
                                // Log()函数应该也不陌生吧,这个API 就是输出一条日志,日志内容就是Log括号里面的参数。
}

Mencipta sebuah robot juga dipanggil Test1 yang dinamakan Test1Binding. Strategi ini dikenali sebagai Test1Binding.img img

Rancangan ini selesai dengan segera dan menunjukkan maklumat akaun.img

Di sini, kita akan melihat maklumat akaun yang terdapat pada cakera analog.img

  • Mendapatkan data pasaran

function main() {
    Log(exchange.GetAccount()); // 已经知道怎么获取 主交易所 账户信息了
    //下面我们来试试 不停的获取行情数据。 
    while(true){ // 这里用一个无限循环的结构来不停的获取 交易所行情数据。
        Log("行情数据:", exchange.GetTicker()); // 哇! Log() 函数的括号里面可以写2个参数,第一个参数是: "行情数据:"
                                               // 第二个参数是 exchange.GetTicker() 这个函数的返回值。就是主交易所的行情数据。
                                               // 注意 Log() 函数的参数要用 逗号分隔。
        Sleep(1000);   // 咦~ 这个又是什么? 答:机器人程序 执行循环也需要休息!它可是执行很快的哦!(一秒N次)
                       // Sleep 函数的作用就是让程序暂停一会儿,括号里面的参数 1000 是 毫秒数, 1秒 = 1000毫秒。Sleep(1000);就是暂停1000毫秒。
                       // 不要小看这个参数,这个参数控制了程序的轮询频率,间接影响访问 交易所API 的频率,有些交易所API访问过于频繁可是会拒绝访问的。
    }
}

img Nota:Mungkin anda akan mendapati bahawa harga tertinggi dan minimum yang diperoleh oleh fungsi GetTicker sangat berbeza. Dengan kata lain, harga tertinggi dan rendah yang dikembalikan oleh GetTicker adalah harga tertinggi dan terendah dalam tempoh yang dipersetujui oleh bursa.

  • Mengambil data garis K

    Kita lihat dulu penerangan dalam dokumen API:
GetRecords(Period)	返回一个K线历史, K线周期在创建机器人时指定, Record数组结构
不加参数, 默认返回添加机器人时时指量的K线周期, 但也可以自定义K线周期
支持: PERIOD_M1 指1分钟, PERIOD_M5 指5分钟, PERIOD_M15 指15分钟, PERIOD_M30 指30分钟, PERIOD_H1 指1小时, PERIOD_D1 指一天

Kami menulis satu kod untuk menguji data garis K untuk kitaran lalai ((5 minit).

function main() {
    Log(exchange.GetAccount()); // 已经知道怎么获取 主交易所 账户信息了
    //下面我们来试试 不停的获取行情数据。 
    var records = exchanges[0].GetRecords();  // 按照默认周期获取K线数据
    Log("records:", records);  // 在日志中输出 获取到的K线数据。
}

Tunjukkan output: Rekod: [{Time:1478260200000,Open:4765.14,High:4773,Low:4764.54,Close:4769.47,Volume:5211.5399999999} {Time:1478260500000,Open:4769.47,High:4773.01,Low:4764,Close:4764.78,Volume:3742.250000000002} {Time:1478260800000,Open:4764.78,High:4782,Low:4764,Close:4781.28,Volume:7929.090000000004} {Time:1478261100000,Open:4781.28,High:4795,Low:4774,Close:4792.02,Volume:11793.540000000006} {Time:1478261400000,Open:4792.02,High:4792.96,Low:4781,Close:4786.78,Volume:9204.90000000001} {Time:1478261700000,Open:4786.51,High:4788.66,Low:4775,Close:4775.31,Volume:7722.33999999965}

Seperti yang dapat dilihat, rekod pembolehubah adalah satu susunan struktur yang disusun mengikut urutan masa K baris dari jauh ke dekat. Kita boleh lihat garis K: ((Beberapa grafik adalah merah untuk sinar matahari, hijau untuk sinar kemaluan, dan beberapa lagi adalah warna yang bertentangan.))imgLihat di bawah grafik contoh garis K yang berputar selama 5 minit di platform.img Perhatikan:Apabila satu kitaran K baris selesai, nilainya hanya ditentukan. Dalam penggunaan sebenar, kita memanggil var records = exchanges[0].GetRecords ((); elemen terakhir dalam array rekod data yang dikembalikan iaitu: records[records.length - 1], berubah tanpa henti sehingga kitaran selesai. Bahkan mungkin pada saat terakhir, dari sinar matahari menjadi sinar zakar.

Fungsi GetRecords mengembalikan data mengikut kitaran lalai yang ditetapkan oleh dasar tanpa menambah parameter. Ia juga boleh menghantar parameter untuk menentukan kitaran pada K baris. Sistem pengulangan kini telah menyokong GetRecords menghantar parameter untuk menentukan kitaran (tidak memasukkan parameter untuk mengembalikan data mengikut kitaran lalai), yang membolehkan anda menggunakan kitaran berbeza pada masa yang sama semasa pengulangan dasar.

  • Mendapatkan maklumat mendalam mengenai pasaran

    GetDepth mengembalikan struktur kedalaman
function main() {
    var depth = exchanges[0].GetDepth();   //获取市场深度信息,  返回订单薄信息,一个对象包含2个属性,每个属性是一个对象数组。
    Log("depth:", depth);    // 日志中输出,一下的输出是 整理过的格式,是方便读者理解,实际上是所有内容都在一行显示的。
}

Periksa semula kod di atas menunjukkan:

depth: 
{"Asks":[{"Price":4726.07,"Amount":15},   // 卖单数组,回测时,数据都是模拟出来的,所以Amount 都是 15,索引为0的是卖一,依次类推。
         {"Price":4726.08,"Amount":15},
         {"Price":4726.09,"Amount":15},
         {"Price":4726.1,"Amount":15},
         {"Price":4726.11,"Amount":15},
         {"Price":4726.12,"Amount":15},
         {"Price":4726.13,"Amount":15},
         {"Price":4726.14,"Amount":15},
         {"Price":4726.15,"Amount":15},
         {"Price":4726.16,"Amount":15},
         {"Price":4726.17,"Amount":15}],
"Bids":[{"Price":4726.05,"Amount":15},   //  买单数组,索引为0的是买一, 向后依次类推。
        {"Price":4726.04,"Amount":15},
        {"Price":4726.03,"Amount":15},
        {"Price":4726.02,"Amount":15},
        {"Price":4726.01,"Amount":15},
        {"Price":4726,"Amount":15},
        {"Price":4725.99,"Amount":15},
        {"Price":4725.98,"Amount":15},
        {"Price":4725.97,"Amount":15},
        {"Price":4725.96,"Amount":15},
        {"Price":4725.95,"Amount":15}]
}

Perintah yang sesuai adalah seperti ini (ini adalah data sebenar OKCoin) ⇒ Maklumat mendalam pasaran semasa proses sebenar (perintah yang rendah) berubah dengan cepat, pelajar yang berminat boleh mendaftar OKCoin dan kemudian log masuk untuk melihat.

img

Data tinjauan mempunyai banyak kegunaan, contohnya, untuk membeli-belah (walaupun tentu ada juga menu-menu yang dipasang).

function main() {    
    var depth = exchanges[0].GetDepth();    // 获取市场深度
    Log("depth:", depth);                   // 日志输出显示
    Log(exchanges[0].GetAccount());         // 输出 吃单前的 账户信息
    var buyPrice = depth.Asks[0].Price;     // 设置吃卖单的价格,即卖一,
                                            // 有时为确保吃单成功,这样处理:var buyPrice = depth.Asks[0].Price + slidePrice;
    var buyAmount = depth.Asks[0].Amount;   // 吃卖单的量
    exchanges[0].Buy(buyPrice, buyAmount);  // 执行买入操作, 吃掉卖一 这个单子
    Log(exchanges[0].GetAccount());         // 显示买入后的  账户信息,对比初始账户信息。可以对比出 买入操作的成交的数量。
}

Hasil dalam pelaksanaan cakera analog pencipta kuantitatif:img


Lebih lanjut

anjing terbangDan yang kedua, apabila saya memilih hos awam di Amerika Syarikat, bot itu tidak mempunyai tanda amaran dalam senarai, tetapi apabila ia berjalan, ia tidak mempunyai sebarang maklumat dalam log, yang menunjukkan tiada maklumat log.

anjing terbangMenambah penemuan masalah: dalam senarai bot, status adalah berwarna merah kemerahan di atas segitiga mempunyai tanda tanya, seolah-olah isyarat yang luar biasa.

anjing terbangHai, saya sedang menguji simulasi dengan platform, langkah pertama adalah menguji maklumat akaun, tidak ada output log, menunjukkan kesilapan, tidak tahu di mana masalah itu muncul? Kod ujian robot: fungsi utama (() { Log ((exchange.GetAccount (())); Log (("test"); {C:$0000FF} Hasilnya: Ujian 1 Strategi: Ujian 1 (Kemas kini 2018-09-13 14:25:33) Tarikh: Dicipta pada 2018-09-13 14:07:57 Terbaru bermula pada 2018-09-13 14:40:24 Berhenti pada 2018-09-13 14:40:25 Status: Kesilapan dalam kitaran talian K 1 minit Dihoskan di China: 42.236.82.38 - linux/amd64 (umum), ID: 118025 Platform Perdagangan: BotVS/BTC_USD

anjing terbangHai, saya sedang menguji simulasi dengan platform, langkah pertama adalah menguji maklumat akaun, tidak ada output log, menunjukkan kesilapan, tidak tahu di mana masalah itu muncul? Kod ujian robot: fungsi utama (() { Log ((exchange.GetAccount (())); Log (("test"); {C:$0000FF} Hasilnya: Ujian 1 Strategi: Ujian 1 (Kemas kini 2018-09-13 14:25:33) Tarikh: Dicipta pada 2018-09-13 14:07:57 Terbaru bermula pada 2018-09-13 14:40:24 Berhenti pada 2018-09-13 14:40:25 Status: Kesilapan dalam kitaran talian K 1 minit Dihoskan di China: 42.236.82.38 - linux/amd64 (umum), ID: 118025 Platform Perdagangan: BotVS/BTC_USD

hokshelatoJika anda memanggil `exchange.GetTicker (() ` semasa simulasi, **GetTicker: timeout** sering muncul, mengapa?

DyahhuHai, data simulasi sebenar menggunakan data sebenar dari bursa itu?

bijiasuoXuexizhong

ShandianliyuAdakah exchange.GetDepth (()) akan mengembalikan semua maklumat yang diunggah di bursa semasa? Adakah ia akan kembali hanya sebahagian daripada data kerana terlalu banyak pesanan yang diunggah?

MaohbaoGetRecords ((Period) mengembalikan sejarah baris K, tetapi berapa bar baris K yang terdapat dalam data sejarah baris K ini, di mana ini ditentukan?

penglihengBaiklah, saya silap kunci, saya betulkan.

penglihengGetAccount: Tanda tangan tidak sepadan Bagaimana boleh, abang?

Andy2simpleMengapa jumlah kedalaman cakera analog adalah 15? Cakera analog adalah data masa lalu yang diambil atau data yang dihasilkan secara rawak? Jika data masa lalu, jumlah boleh bernilai.

cjz140record adalah fungsi, length adalah apa? depth adalah objek? bagaimana objek dan fungsi berbeza? contohnya depth (Asks (Price, Amount)), di mana depth adalah objek, asks adalah array? price dan amount adalah sifat?

FangBeiSlidePrice ialah apa?

Mimpi kecilBaiklah, jika anda mempunyai masalah, anda boleh menambah kumpulan rasmi QQ @administrator

anjing terbangTerima kasih kerana banyak jawapan, saya akan cuba lagi mengikut petua.

Mimpi kecilSaya tidak tahu sama ada ia adalah masalah hos awam, anda boleh menguji dengan hos persendirian, hos persendirian sepatutnya boleh, anda boleh memasang satu di komputer anda sendiri.

Mimpi kecilCubalah dengan hos peribadi anda sendiri.

Mimpi kecilIni mungkin untuk melihat secara spesifik apa yang dilakukan oleh logik pelaksanaan, atau mungkin ia berfungsi dengan baik tetapi tidak mencetuskan apa-apa tindakan.

Mimpi kecilTerdapat tanda merah yang menunjukkan bahawa bot sedang menjalankan kesalahan, dan perlu memeriksa log bot, atau maklumat log pengurus.

Mimpi kecilMasalah rangkaian baru-baru ini, di samping itu, adalah ketinggalan zaman apabila dialog tidak dikemas kini pada cakera analog, yang boleh digunakan untuk menyesuaikan mode pengambilan dialog dengan menggunakan exchange.IO (mode).

Mimpi kecilSimulator sebenar adalah simulator yang beroperasi 24 jam, yang mengikuti pasaran beberapa bursa utama. Semua pengguna yang menggunakan simulator ini adalah peserta dalam simulator ini, pasaran tidak akan sama sepenuhnya dengan bursa rujukan, tetapi mungkin trendnya sama.

ShandianliyuBaiklah, saya faham, terima kasih.

Mimpi kecilPerkiraan semula pada tahap rak sebenar, jual beli 1 baris adalah data sebenar.

ShandianliyuTerima kasih banyak. Selain itu, jika anda ingin tahu, apabila simulasi tahap cakera sebenar yang dilakukan dengan analogi retest, exchange.GetDepth () akan mengembalikan data yang sesuai dengan BotVS atau data sejarah sebenar?

Mimpi kecilJumlah file yang dikembalikan Lihat berapa banyak yang disediakan oleh antara muka API bursa, beberapa pertukaran yang dikembalikan lebih banyak ada yang kurang, dan beberapa pertukaran yang menyokong antara muka Penggabungan mendalam, ada yang tidak menyokong, secara khusus melihat apa yang dilaksanakan oleh bursa, BotVS dibungkus dengan semula data secara lalai, jika anda ingin memanggil secara langsung, anda boleh menggunakan fungsi exchange.IO, menetapkan parameter Panggilan ( ((fungsi ini bebas tandatangan, lihat dokumentasi API lebih lanjut)).

Mimpi kecilIni tidak dapat menentukan, berapa banyak baris K yang dikembalikan oleh bursa tertentu, setiap bursa mungkin mempunyai jumlah yang berbeza, beberapa bursa lain tidak menyediakan antara muka K, pengurus akan mengumpul sendiri rekod urus niaga bursa, menghasilkan K baris, yang K baris akan bertambah dari akar pertama.

Mimpi kecil^^ Pada mulanya, saya juga selalu silap~

Mimpi kecilBaiklah, mari kita fikirkan, ada dua perkara utama dalam masalah ini: - 1, data dalaman sangat besar, berubah setiap saat, dan berubah dengan pantas, dan piringan sebenar yang kita lihat hanyalah data yang terpotong. - 2, walaupun data kedalaman sebenar dibuat, tetapi kerana peserta dalam retesting pada masa ini hanya diri kita sendiri dan tidak ada peserta lain, ia tidak dapat mensimulasikan dengan tepat persekitaran kedalaman yang tipis; sebenarnya tidak jauh berbeza dengan sistem retesting semasa. Kami akan cuba mengoptimumkan yang paling dekat dengan realiti, terima kasih untuk cadangan ^^

Andy2simpleData mendalam belum berlaku, dan kurva harga telah berlaku pada masa lalu. Individu percaya bahawa data masa lalu dan masa depan bersama-sama lebih dipercayai untuk menilai pembelian dan penjualan semasa. Ia sangat disyorkan untuk mencatat data mendalam juga.

Mimpi kecilData mendalam terlalu besar jika semua dicatatkan. Oleh itu, data mendalam adalah nilai analog kecuali gred pertama.

Mimpi kecilrecords adalah satu pemboleh ubah yang digunakan untuk menerima data baris K yang dikembalikan oleh fungsi API GetRecords, panjang adalah sifat panjang dari pemboleh ubah jenis aritmatika dalam bahasa JS, yang mewakili panjang array (iaitu bilangan elemen di dalamnya), dan kedalaman seperti records juga merupakan pemboleh ubah yang digunakan untuk menerima data kedalaman yang dikembalikan oleh fungsi GetDepth, struktur data untuk records, depth, ticker boleh didapati dalam dokumentasi API.

Mimpi kecilHarga licin, diterjemahkan agak terus terang, adalah untuk makan sedikit ditambah sedikit harga, lebih mudah berurusan.