2.1 Menggunakan API untuk mendapatkan informasi akun, mendapatkan data pasar, mendapatkan data K-line, mendapatkan informasi mendalam pasar

Penulis:Mimpi kecil, Dibuat: 2016-11-05 16:41:04, Diperbarui: 2019-08-01 09:31:23

2.1 Menggunakan API untuk mendapatkan informasi akun, mendapatkan data pasar, mendapatkan data K-line, mendapatkan informasi mendalam pasar

Akhirnya sampai pada bab 2, dan dengan melihat ke bagian sebelumnya, Anda harus memiliki pemahaman tentang berbagai fungsi inventor kuantitas; kemudian mulailah menulis kode!


  • Menggunakan API untuk mendapatkan informasi akun

    Dengan asumsi bahwa kita telah menambahkan pengelola, atau bursa, melalui kunjungan ke bab 1, tentu saja kita bisa menggunakan inventor untuk menguji kode.

    Pertama, kita membuat strategi, kita sebut itu tes 1.img

    Antarmuka editor strategiimg img

    Kode adalah sebagai berikut:

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

Menciptakan sebuah robot yang juga disebut Test1 adalah sebuah strategi yang disebut Test1Binding, yang digunakan oleh para penemu untuk mengkuantifikasi dan menguji piringan analog.img img

Kebijakan ini berjalan dengan cepat dan menampilkan informasi akun.img

Setelah itu, kita akan melihat bahwa data yang ada di dalam akun tersebut adalah data dari akun yang ada di dalam analog disk.img

  • Mendapatkan data pasar

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 Catatan:Beberapa siswa mungkin akan menemukan bahwa harga tertinggi dan harga minimum yang diperoleh oleh fungsi GetTicker sangat berbeda. Dengan kata lain, harga tertinggi dan rendah dari data pasar yang dikembalikan oleh GetTicker adalah harga tertinggi dan terendah dalam siklus yang disepakati oleh bursa, tergantung pada pengaturan bursa.

  • Mendapatkan data K-line

    Pertama, mari kita lihat deskripsi dari 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 指一天

Kita menulis kode untuk menguji data K-line yang memiliki siklus default ((5 menit)).

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

Tampilkan output: Rekaman: [{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}, dan yang lainnya. {Time:1478261100000,Open:4781.28,High:4795,Low:4774,Close:4792.02,Volume:11793.540000000006}, dan yang lainnya. {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, variabel records adalah suatu susunan struktural yang disusun dalam urutan waktu K-line dari jauh (index0) ke dekat (indexrecords.length-1). Kita tahu tentang garis K: ((Beberapa grafik adalah merah untuk sinar matahari, hijau untuk sinar vagina, dan beberapa lainnya adalah warna yang berlawanan)).imgBerikut adalah contoh grafik K-line yang berputar selama 5 menit.img Perhatikan:Setelah siklus K selesai, nilainya ditentukan. Dalam penggunaan praktis, kita memanggil var records = exchanges.GetRecords (); elemen terakhir dalam arsip data record yang dikembalikan, yaitu: records[records.length-1], terus berubah sampai siklusnya selesai. Bahkan mungkin pada detik terakhir, dari sinar matahari menjadi sinar vagina.

Fungsi GetRecords mengembalikan data sesuai dengan siklus default yang ditetapkan oleh kebijakan tanpa menambahkan parameter. Anda juga dapat mengirim parameter untuk menentukan siklus pada K baris. Saat ini sistem retargeting telah mendukung GetRecords mengirim parameter untuk menentukan siklus (tidak menambahkan parameter untuk mengembalikan data sesuai dengan siklus default), sehingga kebijakan retargeting dapat menggunakan periode yang berbeda pada saat yang sama.

  • Mendapatkan informasi lebih dalam tentang pasar

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

Di sini kita akan melihat beberapa contoh dari beberapa contoh di atas.

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}]
}

Orde yang sama terlihat seperti ini (ini adalah data nyata OKCoin) Informasi kedalaman pasar dalam proses yang sebenarnya (Orde yang sama) berubah dengan cepat, siswa yang tertarik dapat mendaftar OKCoin dan kemudian masuk dan melihat.

img

Dengan informasi pasar yang mendalam (data transaksi), bagaimana cara menggunakannya? Data transaksi memiliki banyak kegunaan, misalnya seperti menu makan (tentu saja ada menu yang digantung).

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 dari operasi Inventor Quantified Analog Disks:img


Lebih banyak

anjing terbangYang kedua, setelah saya memilih administrator publik AS, bot tidak memiliki tanda peringatan dalam daftar, tapi setelah berjalan, tidak ada yang mengekspor informasi apa pun ke log, yang menunjukkan tidak ada informasi log.

anjing terbangTambahkan penemuan masalah: dalam daftar robot, status adalah segitiga merah di atas, dengan tanda tanya, seolah-olah ini adalah petunjuk yang luar biasa.

anjing terbangHallo, saya sedang menguji simulasi dengan platform, langkah pertama adalah menguji informasi akun, tidak ada output log, menunjukkan kesalahan, tidak tahu di mana masalahnya? Kode tes robot: fungsi main (() { Log ((exchange.GetAccount (())); Log (("test"); Aku tidak tahu. Hasilnya: Uji coba 1 Strategi: Tes 1 (Terakhir diperbarui 2018-09-13 14:25:33) Tanggal: dibuat pada 2018-09-13 14:07:57 Terbaru dimulai pada 2018-09-13 14:40:24 Henti pada 2018-09-13 14:40:25 Status: K line cycle 1 menit Ada kesalahan Di-host di China: 42.236.82.38 - linux/amd64 (umum), ID: 118025 Platform perdagangan: BotVS/BTC_USD

anjing terbangHallo, saya sedang menguji simulasi dengan platform, langkah pertama adalah menguji informasi akun, tidak ada output log, menunjukkan kesalahan, tidak tahu di mana masalahnya? Kode tes robot: fungsi main (() { Log ((exchange.GetAccount (())); Log (("test"); Aku tidak tahu. Hasilnya: Uji coba 1 Strategi: Tes 1 (Terakhir diperbarui 2018-09-13 14:25:33) Tanggal: dibuat pada 2018-09-13 14:07:57 Terbaru dimulai pada 2018-09-13 14:40:24 Henti pada 2018-09-13 14:40:25 Status: K line cycle 1 menit Ada kesalahan Di-host di China: 42.236.82.38 - linux/amd64 (umum), ID: 118025 Platform perdagangan: BotVS/BTC_USD

HokshelatoJika Anda menggunakan `exchange.GetTicker during simulasi, Anda akan sering mendapatkan **GetTicker: timeout**, mengapa?

DyahhuHalo, apakah data simulasi real-time menggunakan data real-time dari bursa itu?

bijiasuoXuexizhong

ShandianliyuApakah exchange.GetDepth (()) mengembalikan semua informasi yang ada di bursa saat ini?

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

penglihengBaiklah, aku salah kunci, sudah diperbaiki.

penglihengGetAccount: Tanda tangan tidak cocok Apa yang kau lakukan, Monk?

Andy2simpleMengapa jumlah kedalaman analog selalu 15? Disk analog adalah data masa lalu yang diambil atau data yang dihasilkan secara acak? Jika data masa lalu, jumlah dapat memiliki nilai.

cjz140record adalah fungsi, length adalah apa? depth adalah objek? bagaimana perbedaan antara objek dan fungsi? contohnya depth ((Asks ((price,amount)), di mana depth adalah objek, asks adalah array? price dan amount adalah atribut?

FangBeiApa itu slidePrice?

Mimpi kecilBaiklah, jika ada pertanyaan, Anda bisa menambahkannya ke grup resmi QQ @administrator

anjing terbangTerima kasih atas banyaknya tanggapan, saya mengikuti petunjuk dan mencoba lagi.

Mimpi kecilTidak tahu apakah itu masalah dengan host publik, Anda dapat menguji dengan host pribadi, host pribadi seharusnya bisa, Anda mendistribusikan salah satu di komputer Anda sendiri.

Mimpi kecilAnda bisa mencoba dengan host pribadi Anda sendiri.

Mimpi kecilIni mungkin untuk melihat secara spesifik apa yang dilakukan oleh strategi, atau mungkin kebijakan berjalan dengan baik, tetapi tidak memicu tindakan apa pun.

Mimpi kecilDengan tanda merah adalah robot yang menjalankan kesalahan, perlu memeriksa log robot, atau informasi log administrator.

Mimpi kecilMasalah jaringan baru-baru ini, selain itu ketika disk analog tidak memperbarui mode, dapat digunakan untuk menyesuaikan mode pengambilan mode dengan menggunakan exchange.IO (mode).

Mimpi kecilSimulator Forex adalah simulasi Forex yang berjalan 24 jam, mengikuti beberapa pasar utama. Semua pengguna yang menggunakan simulasi Forex adalah peserta dalam simulasi ini. Pasar tidak akan sepenuhnya konsisten dengan bursa referensi, tetapi kemungkinan besar akan konsisten.

ShandianliyuBaiklah, saya mengerti, terima kasih.

Mimpi kecilPerhitungan tingkat real-time, penjualan dan penjualan 1 file adalah data yang sebenarnya.

ShandianliyuTerima kasih banyak. Selain itu, tolong tanyakan, ketika simulasi tingkat real-disk yang dilakukan untuk analogi retesting, exchange.GetDepth (()) mengembalikan data yang sesuai dengan BotVS atau data sejarah yang sebenarnya?

Mimpi kecilJumlah file yang dikembalikan Lihat berapa banyak yang disediakan oleh antarmuka API, beberapa pertukaran yang dikembalikan lebih banyak ada yang lebih sedikit, dan beberapa pertukaran yang mendukung antarmuka Penggabungan mendalam, ada yang tidak mendukung, secara khusus melihat implementasi pertukaran, BotVS dibungkus dengan data yang dikembalikan secara default, jika Anda ingin memanggil langsung, Anda dapat menggunakan fungsi exchange.IO, mengatur parameter Panggilan ((fungsi ini bebas tanda tangan, lihat dokumentasi API lebih lanjut)).

Mimpi kecilIni tidak dapat menentukan, berapa banyak jalur K yang dikembalikan yang didorong oleh bursa tertentu, masing-masing bursa mungkin memiliki jumlah push yang berbeda, beberapa bursa lain tidak menyediakan antarmuka K-line, pengelola akan mengumpulkan sendiri catatan transaksi bursa, menghasilkan K-line, yang K-line ini akan bertambah dari root pertama.

Mimpi kecilPada awalnya, aku juga selalu salah.

Mimpi kecilBaiklah, mari kita pertimbangkan, ada dua hal utama dalam masalah ini: - 1, data dalam sangat besar, berubah setiap detik, dan berubah dengan kecepatan yang sangat cepat, dan piringan yang sebenarnya kita lihat hanyalah potongan data. - 2, bahkan jika data kedalaman yang sebenarnya dibuat, namun karena pada saat ini peserta dalam retesting hanya diri kita sendiri dan tidak ada peserta lain, tidak dapat secara akurat mensimulasikan lingkungan kedalaman yang tipis; sebenarnya tidak jauh berbeda dengan sistem retesting saat ini. Tapi kami akan mempertimbangkan untuk mengoptimalkan yang paling dekat dengan kenyataan, terima kasih atas saran Anda ^^

Andy2simpleData mendalam belum terjadi, dan kurva harga telah terjadi di masa lalu. Individu percaya bahwa data masa lalu dan masa depan bersama-sama lebih dapat diandalkan untuk menilai pembelian dan penjualan saat ini. Sangat disarankan untuk mencatat data mendalam juga.

Mimpi kecilData dalam sangat besar Jika semua dicatat, akan sangat banyak. Oleh karena itu data dalam kecuali kelas satu adalah angka analog.

Mimpi kecilrecords adalah variabel yang digunakan untuk menerima data baris K yang dikembalikan oleh fungsi API GetRecords, length adalah atribut panjang dari variabel tipe aritmatika dalam bahasa JS, yang mewakili panjang array (yaitu jumlah elemen yang ada di dalamnya), depth seperti records juga merupakan variabel yang digunakan untuk menerima data kedalaman yang dikembalikan oleh fungsi GetDepth. Struktur data records, depth, ticker dapat ditemukan di dokumen API.

Mimpi kecilHarga yang lebih murah, terjemahan yang agak langsung, adalah untuk makan sedikit ditambah sedikit harga, lebih mudah bertransaksi.