Penemu mengkuantifikasi dokumen API

Penulis:Mimpi kecil, Dibuat: 2017-11-27 09:05:08, Diperbarui: 2023-07-12 16:47:31

[TOC]

Penjelasan dasar

Masuk

Apa yang dapat dilakukan oleh platform perdagangan kuantitatif FMZ?

FMZ (penemu) platform perdagangan kuantitatifIni adalah komunitas kuantitatif yang paling profesional dalam bidang perdagangan kuantitatif, di mana Anda dapat belajar, menulis, berbagi, membeli, dan menjual strategi kuantitatif; mengulas online dan menggunakan piringan analog untuk melakukan perdagangan analog; menjalankan, publik, dan visualisasi piringan nyata; dan mendukung hampir semua pertukaran mata uang digital utama.

Tutorial lengkap

Foto-foto tutorial:

Video Tutorial:

Jika Anda mengalami masalah, Anda dapat mengirim pertanyaan, diskusi, mengajukan permintaan di forum, mengirim telegram di forum kapan saja.Telegram@Groups @Administrators, pertanyaan biasanya akan dijawab dengan cepat.

Dukungan untuk pengembangan tambahan ChatGPT

FMZ Quantitative Trading Platform memiliki akses ke ChatGPT sebagai alat pengembangan tambahan, dan Anda dapat mengklik "ChatGPT" di tombol jalan pintas "Control Center" untuk melompat ke "ChatGPT".Halaman Alat Bantu Chat GPT

Bahasa pemrograman mana yang bisa saya gunakan untuk menerapkan strategi saya?

FMZ mendukung penggunaan platform perdagangan kuantitatifJavaScriptTypeScriptPythonC++PINE麦语言Blockly可视化Menulis strategi desain.

DukunganTypeScriptBahasa, yang masih disetel sebagai strategi saat dibuatJavaScriptStrategi, lalu tulis di awal kode strategi.// @ts-checkAtau klik tombol "TypeScript" di pojok kanan atas area edit policy untuk beralih keTypeScript◦ Platform akan secara otomatis mengidentifikasi kode sebagai:TypeScriptUntuk mendapatkan informasi lebih lanjut, silakan kunjungi situs web kami.

  • Jenis keamanan:TypeScriptFungsi pengecekan tipe statis dapat membantu Anda menemukan kesalahan potensial saat menulis kode dan meningkatkan kualitas kode.
  • Kode yang diisi otomatis:TypeScriptSistem tipe ini memungkinkan Anda untuk menemukan sifat dan metode yang Anda inginkan lebih cepat saat menulis kode, meningkatkan efisiensi pengembangan.
  • Struktur kode yang lebih jelas: menggunakanTypeScriptAnda dapat mengatur dan memelihara kode Anda dengan lebih baik, membuatnya mudah dibaca dan dipahami.
  • Fitur-fitur yang kuat dalam programming berorientasi objek:TypeScriptFitur-fitur programming berorientasi objek yang kuat seperti antarmuka, kelas, dan generik, membantu Anda menulis kode kebijakan yang lebih kuat dan dapat digunakan kembali.

Kebijakan ini cukup untuk menguasai salah satu dari bahasa desain tersebut. Selain mendukung cara menulis kode, strategi desain dapat digunakan untuk membuat kebijakan pembuatan modul visualisasi (Blockly). Strategi pembuatan modul visualisasi menggunakan strategi desain dengan cara yang lebih intuitif, tanpa kode. Sangat cocok untuk mengembangkan minat desain strategi untuk memulai pemrograman dan transaksi kuantitatif dengan cepat.

BlocklyPelatihan visual:

PengaturanPythonPerangkat lunak yang digunakanPythonPenjelas

PenggunaanPythonKetika kebijakan ditulis, diuji ulang, atau real-time jika lingkungan sistem di mana host dipasang pada saat yang samaPython2danPython3, yang dapat dimulai saat kebijakan dimulai pada baris pertama pengaturan kebijakan berjalanPythonPerbedaan antara versi dan versi.#!python3#!python2Dengan cara ini, sistem akan secara otomatis mencari interpreter.#!/usr/bin/python3

Apa yang dimaksud dengan pengurus?

PengelolaDapat dimengerti sebagai pelaku strategi perdagangan Anda, yang bertanggung jawab atas permintaan data yang rumit, penerimaan data, tautan jaringan, pengalihan log, dll.LinuxWindowsMac OSandroidARM Linux yang berbasis pada pohon kurmaSaya tidak tahu apa yang akan terjadi.Halaman PengelolaLangkah-langkah pemasangan dan pembaruan administrator Linux◦ Log disk yang dikelola oleh administrator disimpan di direktori di mana program administrator berada./logs/storageDi dalamnya, dokumen tersebut adalahdb3PerbedaanSqliteAnda dapat menggunakan file database.SqlitePerangkat lunak manajemen mengedit secara langsung, dan ekstensi ini disebutdb3File database yang disebut dengan nama file adalah file yang disebut dengan nama disk.ID

Perjanjian yang didukung

  • Aset Blockchain: Lebih dari 50 bursa aset blockchain mainstream (mata uang digital) sekarang didukung.
  • Akses protokol umum:Perjanjian Umum

Keamanan Strategis

Dalam FMZ Quantitative Trading Platform, strategi yang dikembangkan hanya dapat dilihat oleh pemegang akun FMZ Quantitative Trading Platform.PythonPaket ini dimuat dalam kode kebijakan, yang memungkinkan lokalisasi kebijakan.

PythonKeamanan kode: KarenaPythonIni adalah bahasa yang sangat mudah dikompilasi dan terbuka, dan jika kebijakan tidak digunakan sendiri, maka akan disewa, jika ada kekhawatiran tentang kebocoran kebijakan, maka kebijakan dapat dijalankan pada host yang mereka terapkan dan disewa dalam bentuk sub-account atau manajemen seluruh host.

PythonIni adalah salah satu strategi yang paling efektif untuk mengenkripsi. Dia juga mengatakan bahwa dia tidak akan pernah melakukan hal yang sama.PythonKebijakan: Penulis kode tidak mengenkripsi ketika mereka menggunakannya sendiri, dan mengenkripsi ketika mereka menyewanya kepada orang lain.PythonKebijakan untuk memulai mengedit kode berikut, Anda dapat menentukan untuk digunakan sendiri atau disewaPythonApakah kebijakan mengenkripsi kode kebijakan saat dijalankan. Mendukung kode kebijakan yang dienkripsiPythonVersi adalah:Python 2.7Di sini ada beberapa artikel yang menarik.Python 3.5Di sini ada beberapa artikel yang menarik.Python 3.6Versi lainnya.

  • Penulis kebijakan mengoperasikan sendiri, dan menggunakan kode kode untuk mengenkripsi ke orang lain melalui kode pendaftaran:#!pythonGunakan koma untuk menentukan versi penerjemah Python,Interval, input perintah enkripsiencryptJika tidak ditentukan.PythonVersi langsung ditambahkan#!encrypt

    #!python,encrypt
    

    Atau

    #!encrypt
    
  • Penulis kebijakan menjalankan sendiri, tidak mengenkripsi kode kebijakan untuk digunakan oleh orang lain melalui kode pendaftaran:

    #!python,not encrypted
    

    Atau

    #!not encrypted
    

PenghakimanPythonApakah strategi kode enkripsi efektif menggunakan kode?os.getenv('__FMZ_ENV__')Kembali ke string"encrypt"Penjelasan sudah berlaku. Hanya valid pada hard disk, retest tidak mengenkripsi.PythonKode strategi.

#!encrypt
def main():
    ret = os.getenv('__FMZ_ENV__')
    # 打印变量ret为字符串encrypt或者ret == "encrypt"为真,即代表加密生效
    Log(ret, ret == "encrypt")

Keamanan Kunci

Informasi akun yang dikonfigurasi pada platform perdagangan kuantitatif FMZ, data sensitif seperti string enkripsi dalam parameter kebijakan, semuanya dienkripsi di sisi browser. Informasi yang disimpan di platform perdagangan kuantitatif FMZ adalah informasi yang dienkripsi ("data non-transkripsional"). Hanya perangkat pribadi pengguna yang dapat didekripsi, sehingga meningkatkan keamanan data sensitif. Jika informasi kode kebijakan, pengaturan parameter, deskripsi kebijakan, dan informasi lain yang berisi informasi sensitif, silakan jangan publik atau menjual kebijakan tersebut.

  • Platform ini mendukung konfigurasi lokal informasi sensitif seperti informasi akun, kunci rahasia, dan lain-lain.

    Pada halaman platform yang mengkonfigurasi informasi bursa, semua kontrol kotak teks terenkripsi yang disembunyikan mendukung cara dengan jalur profil yang digunakan untuk memuat file lokal pengelola.RSA KEYCara verifikasi adalah contoh, yang menjelaskan secara rinci bagaimana mengkonfigurasi informasi sensitif di perangkat lokal di mana program host berada.

    1, membuat kunci publik RSA, kunci pribadi.PKCS#8Ada banyak alat yang dapat Anda buat untuk membuat kunci publik dan kunci pribadi, seperti:opensslSaya tidak tahu. 2.Membuat di BursaRSA KEY, diunggah saat dibuatLangkah PertamaAnda dapat mengklik tombol ini untuk melihat gambar di bawah ini. 3, akanLangkah PertamaKunci pribadi yang dibuat ditxtFormat file menyimpan direktori pada tingkat peer administrator, dan juga dapat menyimpan jalur lain dalam direktori di mana program administrator berada. 4. Mengkonfigurasi bursa di FMZAccess KeyAnda dapat mengetikkan gambar yang dibuat di bursa.RSA KEYSaya tidak tahu. 5. Mengkonfigurasi bursa di FMZSecret KeyDi kotak editor, isiLangkah KetigaAnda dapat mengklik pada halaman ini.txtJalur file, misalnya nama file yang ditempatkan:rsaKey.txtDalam hal ini, Anda dapat memilih salah satu dari dua kategori ini.file:///rsaKey.txtJika dokumen tersebut berada di direktori tingkat berikutnya di mana proses administratorrsa_keyDi sana, Anda bisa membaca:file:///rsa_key//rsaKey.txt◦ Jika ditempatkanrsaKey.txtUntuk jalur lain, misalnya, perlu dicatat bahwa file ini hanya mendukung penempatan pada direktori tingkat pengelola atau sub-direktori.

    Dengan cara ini, penyimpanan kunci pribadi lebih aman dan prosesnya lebih rinci.Video penjelasan

Sistem pengukuran

Apa itu sistem retargeting, dan apa gunanya?

Setelah Anda menyelesaikan pekerjaan desain strategi perdagangan kuantitatif, bagaimana Anda bisa mengetahui dasar-dasar strategi Anda, seperti logika, arah keuntungan strategi? Tentu saja kita tidak bisa langsung mengambil emas dan perak asli untuk berdagang dengan strategi yang berjalan di pasar, kita dapat menguji strategi Anda dengan data historis.

Apakah data dari sistem retest akurat, dan seberapa akurat hasil retestnya?

FMZ Quantitative Trading Platform membagi pola retargeting menjadiPengujian ulang pada tingkat real diskdanPengujian ulang tingkat analog❖ Pembahasan tingkat real-disk sepenuhnya berdasarkan data historis yang lengkap; pembahasan tingkat analog dihasilkan berdasarkan data K-line yang sebenarnyatickData untuk melakukan retesting. Keduanya didasarkan pada data historis yang sebenarnya, tetapi data retesting pada tingkat real disk lebih akurat dan hasilnya lebih dapat dipercaya.Penjelasan tentang mekanisme FMZNamun, retrospeksi hanyalah strategi yang dilakukan di bawah data sejarah, dan data sejarah tidak sepenuhnya mewakili situasi di masa depan.

Perhatikan hal-hal berikut saat mengulas strategi bahasa yang berbeda:

JavaScriptdanC++Pembahasan kebijakan dilakukan di browser, pada hard drive atau di komputer.WexAppDi sini, Anda dapat melihat beberapa fitur baru dari FMZ.WexAppPertukaran simulasi) berjalan tanpa perlu menginstal perangkat lunak, pustaka atau modul lain.PythonPemantauan ulang dilakukan pada host, dapat dilakukan pada server umum yang diukur FMZ, atau dapat dilakukan pada host pengguna sendiri.PythonJika Anda ingin menggunakan beberapa pustaka, Anda harus menginstalnya sendiri (hanya mendukung pustaka umum pada server publik).

Data dalam sistem retesting

FMZ Quantified Trading Platform Retesting Score analog level retesting dan real disk level retesting dua jenis, analog level retesting berdasarkan dasar K line cycle generated analogtick, maka pada setiap siklus K-line dasar akan dihasilkan 12 titik waktu retest, sedangkan pada tingkat real disk akan benar-benar dikumpulkantickFMZ memungkinkan strategi untuk bertransaksi berkali-kali pada satu K-line, menghindari situasi yang hanya dapat menutup transaksi dengan harga jual, lebih akurat dan memperhitungkan kecepatan retargeting.Tautan

Kebijakan DEBUG dalam sistem penelusuran

Javascript kebijakan retest debugging di browser Chrome DevTools

Pertukaran yang didukung dalam sistem retesting

  • Cryptocurrency (mata uang digital)

    Nama Jenis Penjelasan
    Bitfinex Objek Bursa Langsung Perdagangan terbatas mendukung, misalnya:BTC_USD,ETH_USD,LTC_USDJadi, perhatikan bahwa transaksi terhadap mata uang adalahUSDHarga dalam dolar AS
    Binance Objek Bursa Langsung Perdagangan terbatas mendukung, misalnya:BTC_USDT,ETH_USDT,ETH_BTC,LTC_BTCDan sebagainya.
    OKX Objek Bursa Langsung Perdagangan terbatas mendukung, misalnya:BTC_USDT,ETH_USDT,ETH_BTC,LTC_BTCDan sebagainya.
    Token Objek Bursa Langsung Perdagangan terbatas mendukung, misalnya:BTC_USDT,ETH_USDT,ETH_BTC,LTC_BTCDan sebagainya.
    OKX Futures Objek Bursa Berjangka Perdagangan terbatas mendukung, misalnya:BTC_USD,ETH_USDJadi, transaksi terhadap mata uang adalah:USD, Mengatur kode kontrak khusus ((lihatexchange.SetContractTypeFungsi) kemudian, kontrak adalah kontrak mata uang asli.this_weeknext_weekquarterswap
    HuobiDM Objek Bursa Berjangka HuobiDM, yang berarti Token Futures (Token Contract), mendukung transaksi terbatas untuk pasangan seperti:BTC_USD,ETH_USDJadi, transaksi terhadap mata uang adalah:USD, Mengatur kode kontrak khusus ((lihatexchange.SetContractTypeFungsi) kemudian, kontrak adalah kontrak mata uang asli.this_weeknext_weekquarterswap
    BitMEX Objek Bursa Berjangka Pasangan transaksi adalah:XBT_USD, Mengatur kode kontrak khusus ((lihatexchange.SetContractTypeFungsi) kemudian, kontrak adalah kontrak mata uang asli.XBTUSD
    Futures Binance Objek Bursa Berjangka Perdagangan terbatas mendukung, misalnya:BTC_USDT,ETH_USDTJadi, transaksi terhadap mata uang adalah:USDT, Mengatur kode kontrak khusus ((lihatexchange.SetContractTypeJika kita menggunakan fungsi ini, maka kontrak akan menjadiUSDTKode kontrak yang didukung adalah:swap
    Opsi Deribit Objek Bursa Opsi Pasangan transaksi adalah:BTC_USD,ETH_USD, Mengatur kode kontrak khusus ((lihatexchange.SetContractTypeSetelah itu, kontrak akan menjadi kontrak mata uang lokal.

    Objek bursa berjangka untuk sementara waktu tidak mendukung pasangan pertukaran dalam kode strategi.

Tingkat simulasi

Analog level backscaling adalah backscaling yang dilakukan berdasarkan data garis K dasar dari sistem backscaling, sesuai dengan algoritma tertentu dalam kerangka yang terdiri dari nilai tertinggi, terendah, harga buka, harga tutup dari garis K dasar Bar.tickData, sebagai waktu nyatatickData yang dikembalikan pada saat permintaan antarmuka.Penemu menjelaskan mekanisme pengukuran kembali tingkat analog kuantitatif

Tingkat real disk

Pengujian tingkat real-time adalah real-timetickData tingkat dalam urutan waktu Bar.tickStrategi untuk data tingkat adalah menggunakan refrensi tingkat real yang lebih dekat dengan kenyataan.tickIni adalah data yang dicatat secara nyata, bukan yang dihasilkan secara analog. Mendukung data kedalaman, pemutaran data catatan transaksi pasar, dukungan kedalaman kustom, dukungan data pencetakan. Data pencetakan tingkat nyata mendukung maksimal 50MB, tidak membatasi rentang waktu pencetakan dalam batas data, jika perlu, Anda dapat meningkatkan rentang waktu pencetakan sebanyak mungkin.GetDepthGetTradesFungsi mendapatkan data transaksi yang diputar kembali. Pada saat data transaksi pada timeline, panggilanGetTickerGetTradesGetDepthGetRecords, tidak akan berulang kali mendorong waktu bergerak pada timeline reset (tidak akan memicu lompatan ke saat data pasar berikutnya). Untuk beberapa fungsi di atas, panggilan berulang akan mendorong waktu reset bergerak pada timeline reset (lumpat ke saat data pasar berikutnya).

Dukungan saat ini untuk pengujian ulang tingkat disk

  • Binance
  • OKX ((OKX langsung)
  • HuobiDM (token futures)

Perbaikan parameter sistem uji ulang

Fungsi pengeditan parameter sistem retesting FMZ adalah dengan mengatur pengeditan sesuai dengan opsi pengeditan masing-masing parameter pada saat retesting, sebagai berikut:

  • Nilai minimum: nilai awal parameter yang dibatasi.
  • Maksimal: Maksimal setelah perubahan parameter keterbatasan secara progresif.
  • Panjang langkah: parameter meningkat variabelnya.

Membuat kombinasi parameter dan mengulangnya (yaitu setiap kombinasi parameter diulang sekali). Parameter kebijakan hanya dapat dimodifikasi dalam sistem pengulangan untuk parameter dengan tipe ** digit ((number) **.

Misalnya, untuk mengatur opsi pengoptimalan parameter pada halaman retargeting:

img

Pembagian data yang digunakan adalah data yang digunakan untuk melakukan pengukuran.

img

Menyimpan pengaturan retest

Pada halaman penyuntingan kebijakan, pada bagian "Sistem penyuntingan", Anda dapat mengatur konfigurasi penyuntingan, parameter penyuntingan, dan lain-lain untuk melakukan penyuntingan kebijakan. Konfigurasi penyuntingan digunakan untuk mengatur rentang waktu penyuntingan, tempat perdagangan yang disuntingan, titik geser penyuntingan, biaya prosedur, dan lain-lain. Parameter penyuntingan adalah parameter penyuntingan kebijakan. Jika parameter penyuntingan ini disetel dengan baik, Anda dapat menyimpan informasi penyuntingan sesuai dengan kebijakan penyuntingan yang telah ditetapkan.

img

denganJavaScriptContoh kebijakan adalah dengan mengklik "Save Retrospect Set to Source File":

img

JavaScript/Python/C++/麦语言Setel Save Retrieval ke format file sumber sedikit berbeda:

/*backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
'''backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
'''
/*backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

Bahasa Melayu:

(*backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_OKCoin","currency":"BTC_USD"}]
*)

Sumber data khusus

Penggunaan sistemGETMetode meminta URL khusus (URL yang dapat diakses secara publik) untuk mendapatkan sumber data eksternal untuk ditelusuri kembali, dengan parameter permintaan tambahan sebagai berikut:

Parameter Makna Penjelasan
lambang Nama varietas Contoh: BTC_USD_OKCoin_EN
eid Bursa Contoh: OKCoin_EN
bulat Keakuratan Harga Jadi jika kita bilang 3, maka harga yang akan dikembalikan adalah harga yang akan dihitung dari 1000.
berkerut Akurasi kuantitatif Jadi jika kita bilang 2, maka jumlah yang dikembalikan adalah bilangan yang dihitung dengan bilangan bulat.
periode Periode bar (millisecond) Misalnya 60000 untuk permintaan bar per menit.
kedalaman Jumlah file dalam 1-20
perdagangan Apakah data perlu dipisahkan? benar/salah
dari Waktu Mulai Timeline Unix
untuk Waktu akhir Timeline Unix

Perhatikan:

round与vround是为了避免网络传输过程中浮点数的精度丢失设计的两个参数,价格数据和成交量、订单量数据都采用整型传输。

Contoh data yang digabungkan:

http://customserver:80/data?symbol=BTC_USD_OKCoin_EN&eid=OKCoin_EN&round=3&vround=3&period=900000&from=1564315200&to=1567267200

Format yang dikembalikan harus menjadi salah satu dari dua format berikut:

Pengukuran kembali tingkat Bar normal

{
    "schema":["time","open","high","low","close","vol"],
    "data":[[1564315200000,9531300,9531300,9497060,9497060,787],[1564316100000,9495160,9495160,9474260,9489460,338]]
}

Tick level retesting data ((mengandung informasi kedalaman pelataran, format kedalaman adalah [harga, kuantitas], dapat memiliki beberapa tingkat kedalaman, asks sebagai kenaikan harga, bids sebagai penurunan harga)

{
    "schema":["time","asks", "bids","trades","close","vol"],
    "data":[[1564315200000,[[9531300,10]], [[9531300,10]],[[1564315200000,0,9531300,10]],9497060,787]]
}

Penjelasan

Bidang Penjelasan
skema Atribut baris dalam data array ditentukan, dibedakan dengan huruf kecil, hanya terbatas pada time, open, high, low, close, vol, asks, bids
data Array yang menunjuk pada data yang disimpan pada suatu kolom berdasarkan skema

Format data

Bidang Penjelasan
permintaan/penawaran [Harga, kuantitas,...]
perdagangan [waktu, arah, 0: beli, 1: jual], harga, jumlah,...]

Untuk informasi lebih lanjut, lihat: Sebagai contoh, saat penyesuaian futures, data tingkat modal tambahan diperlukan dan sumber data yang disesuaikan harus disediakan.

{
	"detail": {},
	"symbol": "futures_binance.eth_usdt.funding",
	"schema": ["time", "open", "high", "low", "close", "vol"],
	"data": [
		[1582876800000, 25289, 25289, 25289, 25289, 0],
		[1582905600000, 30522, 30522, 30522, 30522, 0],
		[1582934400000, 40998, 40998, 40998, 40998, 0],
        ...
		[1626652800000, 198, 198, 198, 198, 0],
		[1626681600000, 691, 691, 691, 691, 0],                  // 相邻的周期间隔8小时
		[1626710400000, 310, 310, 310, 310, 0],                  // 币安资金费率8小时更新一次,资金费率数据为什么为310?
		[1626739200000, 310, 310, 310, 310, 0],                  // 因为和K线数据一样,为了避免网络传输过程中浮点数的精度丢,数据采用整型,所以需要根据round参数处理数据,处理后用于返回给回测系统的数据就为310
		[1626768000000, -41610, -41610, -41610, -41610, 0],      // 资金费率数据也可能为负值
		[1626796800000, -5125, -5125, -5125, -5125, 0],
        ...		
		[1627977600000, 10000, 10000, 10000, 10000, 0]
	]
}

Contoh permintaan data yang dikirimkan oleh sistem penelusuran adalah:

http://customserver:80/data?symbol=futures_binance.eth_usdt.funding&eid=Futures_Binance&round=8&vround=5&depth=20&trades=1&custom=0&period=3600000&from=1360771200&to=1628006400

Contoh sumber data khusus:

Mengidentifikasi sumber data, alamat:http://xxx.xx.x.xx:9090/dataPerangkat data server khusus yang ditulis menggunakan golang:

package main 
import (
    "fmt"
    "net/http"
    "encoding/json"
)

func Handle (w http.ResponseWriter, r *http.Request) {
    // e.g. set on backtest DataSourse: http://xxx.xx.x.xx:9090/data
    // r.URL: /data?depth=20&detail=true&eid=Binance&from=1566820800&period=900000&round=3&symbol=BTC_USDT_Binance&to=1569686400&trades=1&vround=5
    // response
    defer func() {
        // response data
        /* e.g. data
        {
            "schema":["time","open","high","low","close","vol"],
            "data":[
                [1564315200000,9531300,9531300,9497060,9497060,787],
                [1564316100000,9495160,9495160,9474260,9489460,338]
            ]
        }
        */
        ret := map[string]interface{}{
            "schema" : []string{"time","open","high","low","close","vol"},
            "data" : []interface{}{
                []int64{1564315200000,9531300,9531300,9497060,9497060,787},
                []int64{1564316100000,9495160,9495160,9474260,9489460,338},
            },
        }
        b, _ := json.Marshal(ret)
        w.Write(b)
    }()
}

func main () {
    fmt.Println("listen http://localhost:9090")
    http.HandleFunc("/data", Handle)
    http.ListenAndServe(":9090", nil)
}

Saya tidak tahu apa yang akan terjadi.JavaScriptContoh:

/*backtest
start: 2019-07-28 00:00:00
end: 2019-07-29 00:00:00
period: 1m
exchanges: [{"eid":"OKX","currency":"BTC_USDT","feeder":"http://120.24.2.20:9090/data"}]
*/

function main() {
    var ticker = exchange.GetTicker()
    var records = exchange.GetRecords()
    Log(ticker)
    Log(records)
}

Grafik yang dibuat dari data yang disesuaikan dalam sistem retesting:

Strategi untuk mencetak informasi:

Mesin Retesting Lokal

FMZ Quantitative Trading Platform Sudah TerbukaJavaScriptBahasa danPythonMesin retargeting asli untuk bahasa, mendukung pengaturan saat retargetingSiklus garis K bawah

Tombol pintasan halaman

  • Kunci cepat untuk mengubah halaman edit dan halaman review kebijakan

    PenggunaanCtrl + ,Tekan tombol, beralih ke halaman penelusuran dan halaman penyuntingan kebijakanCtrlSetelah mengetik, tekan,Tombol.

  • Kunci cepat untuk menyimpan kebijakan

    PenggunaanCtrl + sTombol, kebijakan simpan.

  • Tombol cepat untuk memulai penelusuran

    PenggunaanCtrl + bTombol, mulai uji ulang.

Penjelasan Kode

Fungsi input

Nama Fungsi Penjelasan
main() Untuk fungsi input.
onexit() Untuk fungsi sweep tail pada saat normal keluar, waktu pelaksanaan terpanjang adalah 5 menit, tidak dapat dinyatakan, jika waktu habis akan mengembalikan kesalahanmenggangguSalah.
onerror() Fungsi yang memicu eksekusi untuk keluar dari luar biasa, dengan waktu eksekusi maksimum 5 menit, tidak dapat dinyatakan, dan tidak dapat dihapus.PythonBahasa IndonesiaC++Kebijakan yang ditulis dalam bahasa tidak mendukung fungsi ini.
init() Untuk fungsi initialization, program kebijakan akan dipanggil secara otomatis pertama kali pada saat startup, tetapi tidak dapat dinyatakan.
  • Penjelasan:
    • Sistem retest tidak mendukungonerror()Fungsi tersebut.
    • Ini bisa menjadi salah satu penyebabnya.onerror()Jika kita tidak bisa mematikan fungsi, maka fungsi tidak akan bisa mematikan lagi.onexit()Fungsi tersebut.

satuxit ((()

onexit()Untuk mengatasinya, Anda bisa menggunakan aplikasi ini untuk mengatasinya.

function main(){
    Log("开始运行, 5秒后停止,并执行扫尾函数!")
    Sleep(1000 * 5)
}

// 扫尾函数实现
function onexit(){
    var beginTime = new Date().getTime()
    while(true){
        var nowTime = new Date().getTime()
        Log("程序停止倒计时..扫尾开始,已经过去:", (nowTime - beginTime) / 1000, "秒!")
        Sleep(1000)
    }
}
import time 
def main():
    Log("开始运行, 5秒后停止,并执行扫尾函数!")
    Sleep(1000 * 5)

def onexit():
    beginTime = time.time() * 1000
    while True:
        ts = time.time() * 1000
        Log("程序停止倒计时..扫尾开始,已经过去:", (ts - beginTime) / 1000, "秒!")
        Sleep(1000)
void main() {
    Log("开始运行, 5秒后停止,并执行扫尾函数!");
    Sleep(1000 * 5);
}

void onexit() {
    auto beginTime = Unix() * 1000;
    while(true) {
        auto ts = Unix() * 1000;
        Log("程序停止倒计时..扫尾开始,已经过去:", (ts - beginTime) / 1000, "秒!");
        Sleep(1000);
    }
}

Ini adalah

init(), pengguna menginisialisasi fungsi initializationinit(), kebijakan akan berjalan secara otomatis pertama kaliinit()Fungsi, menyelesaikan tugas inisialisasi yang dirancang dalam kebijakan.

function main(){
    Log("程序第一行代码执行!", "#FF0000")
    Log("退出!")
}

// 初始化函数
function init(){     
    Log("初始化!")
}
def main():
    Log("程序第一行代码执行!", "#FF0000")
    Log("退出!")

def init():
    Log("初始化!")
void main() {
    Log("程序第一行代码执行!", "#FF0000");
    Log("退出!");
}

void init() {
    Log("初始化!");
}

Kesalahan.

onerror()"Sebenarnya, saya tidak tahu apa yang akan terjadi.onerror()Mengeksekusi fungsi yang tidak didukungPythonC++Strategi bahasa.

function main() {
    var arr = []
    Log(arr[6].Close)
}

function onerror() {
    Log("错误")
}
# python不支持
// C++不支持

Kerangka Kerja Strategi Klasik

diJavaScriptPythonC++Kebijakan yang ditulis dalam bahasa membutuhkan panggilan dalam lingkaran utama kebijakanSleep()Fungsi ini digunakan untuk mengontrol kecepatan backtracking pada saat backtesting, dan interval waktu pada saat real disk untuk mengontrol strategi rounding, sehingga mengontrol frekuensi permintaan untuk mengakses antarmuka API pertukaran.

  • Contoh kerangka kerja dasar strategi mata uang digital:

    function onTick(){
        //在这里写策略逻辑,将会不断调用,例如打印行情信息
        Log(exchange.GetTicker())
    }
    
    function main(){
        while(true){
            onTick()
            // Sleep函数主要用于数字货币策略的轮询频率控制,防止访问交易所API接口过于频繁
            Sleep(60000)
        }
    }
    
    def onTick():
        Log(exchange.GetTicker())
    
    def main():
        while True:
            onTick()
            Sleep(60000)
    
    void onTick() {
        Log(exchange.GetTicker());
    }
    
    void main() {
        while(true) {
            onTick();
            Sleep(60000);
        }
    }
    

    Contoh yang paling sederhana adalah, jika saya ingin memasang harga 100 di bursa setiap 1 detik, maka pembayaran dengan jumlah 1 bisa ditulis seperti ini:

    function onTick(){
        // 这个仅仅是例子,回测或者实盘会很快把资金全部用于下单,实盘请勿使用
        exchange.Buy(100, 1)
    }
    
    function main(){
        while(true){
            onTick()
            // 暂停多久可自定义,单位为毫秒,1秒等于1000毫秒
            Sleep(1000)
        }
    }
    
    def onTick():
        exchange.Buy(100, 1)
    
    def main():
        while True:
            onTick()
            Sleep(1000)
    
    void onTick() {
        exchange.Buy(100, 1);
    }
    
    void main() {
        while(true) {
            onTick();
            Sleep(1000);
        }
    }
    

Perpustakaan template

Perpustakaan templateIni adalah modul kode yang dapat digunakan kembali di platform perdagangan kuantitatif FMZ dan merupakan kategori kode kebijakan.Perpustakaan templateDengan demikian, Anda dapat membuat template di dalam daftar kebijakan akun yang saat ini masuk ke platform perdagangan kuantitatif.

JavaScriptPerpustakaan template bahasa:

img

PythonPerpustakaan template bahasa:

img

C++Perpustakaan template bahasa:

img

  • Fungsi ekspor dari koleksi kelas template Fungsi ekspor adalah fungsi antarmuka dari sebuah perpustakaan kelas template, yang dapat disebut dengan kebijakan perpustakaan kelas template tersebut. Fungsi ekspor dinyatakan dalam perpustakaan kelas template dan contoh kode yang diimplementasikan adalah sebagai berikut:

    /*
    -- 策略引用该模板以后直接用 $.Test() 调用此方法
    -- main 函数在策略中不会触发, 只做为模板调试的入口
    */
    $.Test = function() {
        Log('Test')
    }
    
    function main() {
        $.Test()
    }
    
    def Test():
        Log("template call")
    
    # 导出Test函数, 主策略可以通过ext.Test()调用
    ext.Test = Test 
    
    // 策略引用该模板以后直接用 ext::Test() 调用此方法
    void Test() {
        Log("template call");
    }
    
  • Parameter untuk koleksi template Perpustakaan template juga dapat mengatur parameter antarmuka sendiri. Parameter perpustakaan template digunakan dalam bentuk variabel global dalam kode perpustakaan template.

    Setel parameter untuk perpustakaan kelas template:

    img

    Kode Kelas Template:

    $.SetParam1 = function(p1) {
        param1 = p1
    }
    
    $.GetParam1 = function() {
        Log("param1:", param1)
        return param1
    }
    
    def SetParam1(p1):
        global param1
        param1 = p1
    
    def GetParam1():
        Log("param1:", param1)
        return param1
    
    ext.SetParam1 = SetParam1
    ext.GetParam1 = GetParam1
    
    void SetParam1(float p1) {
        param1 = p1;
    }
    
    float GetParam1() {
        Log("param1:", param1);
        return param1;
    }
    

    Di atasPerpustakaan templateContoh kode strategi:

    function main () {
        Log("调用$.GetParam1:", $.GetParam1())
        Log("调用$.SetParam1:", "#FF0000")
        $.SetParam1(20)
        Log("调用$.GetParam1:", $.GetParam1())
    }
    
    def main():
        Log("调用ext.GetParam1:", ext.GetParam1())
        Log("调用ext.SetParam1:", "#FF0000")
        ext.SetParam1(20)
        Log("调用ext.GetParam1:", ext.GetParam1())
    
    void main() {
        Log("调用ext::GetParam1:", ext::GetParam1());
        Log("调用ext::SetParam1:", "#FF0000");
        ext::SetParam1(20);
        Log("调用ext::GetParam1:", ext::GetParam1());
    }
    

    img

  • Mengutip koleksi template

    Setelah memilih referensi di halaman template editor kebijakan, Anda dapat menyimpan kebijakan.

    img

Struktur internal

Variabel global

pertukaran

exchangeIni dapat dilihat sebagai objek pertukaran, yang secara default adalah objek pertukaran pertama yang ditambahkan dalam parameter kebijakan. Semua interaksi dengan pertukaran dilakukan melalui fungsi di dalam objek ini.

  • Periksa kembali untuk menambahkan objek bursa

  • Tambahkan objek bursa ke halaman desktop

Objek pertukaran yang ditambahkan sesuai dengan kodeexchangeObjek:

function main() {
    Log("实盘页面或者回测页面上,添加的第一个交易所对象名字:", exchange.GetName(), ",标签:", exchange.GetLabel())
}
def main():
    Log("实盘页面或者回测页面上,添加的第一个交易所对象名字:", exchange.GetName(), ",标签:", exchange.GetLabel())
void main() {
    Log("实盘页面或者回测页面上,添加的第一个交易所对象名字:", exchange.GetName(), ",标签:", exchange.GetLabel());
}
pertukaran

Jadi kita bisa memahami bahwa penyimpanan adalah sama.exchangeArray dari semua obyek bursa dapat berisi beberapa obyek bursa.exchanges[0]Ini adalahexchange

Objek pertukaran yang ditambahkan sesuai dengan kode kebijakanexchanges[0]exchanges[1]exchanges[2]、..., dan sebagainya.

function main() {
    for(var i = 0; i < exchanges.length; i++) {
        Log("添加的交易所对象索引(第一个为0以此类推):", i, "名称:", exchanges[i].GetName(), "标签:", exchanges[i].GetLabel())
    }
}
def main():
    for i in range(len(exchanges)):
        Log("添加的交易所对象索引(第一个为0以此类推):", i, "名称:", exchanges[i].GetName(), "标签:", exchanges[i].GetLabel())
void main() {
    for(int i = 0; i < exchanges.size(); i++) {
        Log("添加的交易所对象索引(第一个为0以此类推):", i, "名称:", exchanges[i].GetName(), "标签:", exchanges[i].GetLabel());
    }
}
Status pesanan

OrderStrukturStatusAtributnya.

Nama konstanta Definisi Nilai
Order_state_pending Belum selesai 0
ORDER_STATE_CLOSED Sudah selesai. 1
ORDER_STATE_CANCELED (Pengaturan_Pemerintahan_Batal) Sudah dibatalkan 2
ORDER_STATE_UNKNOWN Status tidak diketahui (tidak diketahui) 3

ORDER_STATE_UNKNOWNStatus, dapat dipanggilexchange.GetRawJSON()Untuk mendapatkan informasi tentang status pesanan asli, lihat dokumen bursa, dan lihat deskripsi spesifiknya. Nama variabel dalam tabel dapat digunakan secara langsung dalam kode kebijakan danOrderStrukturStatusPerbandingan atribut, menilai apakah sama untuk menentukan status pesanan. Mencetak nama konstanta ini akan menunjukkanNama konstantaPersamaanNilaiJika Anda tidak tahu apa yang akan terjadi, maka Anda tidak akan tahu apa yang akan terjadi.

Jenis pesanan

OrderStrukturTypeAtributnya.

Nama konstanta Definisi Nilai
Order_TYPE_Buy Membayar 0
Orde_Types_Sell Pesan jual 1
Jenis Posisi

PositionStrukturTypeAtributnya.

Nama konstanta Definisi Penjelasan Berlaku Nilai
PD_LONG Menunjukkan posisi multihead Fitur Futures Mata Uang Digitalexchange.SetDirection("closebuy")Mengatur arah posisi dan meratakan jenis posisi Futures Mata Uang Digital 0
PD_SHORT Menunjukkan posisi kepala kosong Fitur Futures Mata Uang Digitalexchange.SetDirection("closesell")Mengatur arah posisi dan meratakan jenis posisi Futures Mata Uang Digital 1
Futur terbuka arah pegangan

OrderStrukturOffsetAtributnya.

Nama konstanta Definisi Nilai
ORDER_OFFSET_OPEN Pemesanan yang dibuka 0
ORDER_OFFSET_CLOSE Pemesanan di gudang 1
Parameter Strategi

Parameter kebijakan yang ditetapkan pada antarmuka kebijakan dalam kode kebijakan, dinyatakan dalam bentuk variabel global.JavaScriptDalam bahasa ini, Anda dapat langsung mengakses atau memodifikasi parameter yang ditetapkan pada antarmuka kebijakan.PythonUntuk mengubah variabel global dalam fungsi kebijakanglobalKata Kunci:

Jenis parameter:

img

Variabel Deskripsi Penjelasan Jenis Nilai default Penjelasan
nomor Jenis angka Penjelasan Jenis angka (number) 1 Kebijakan C++ adalah tipe floating point.
string String Penjelasan String (bahasa Inggris) Halo FMZ Nilai default tidak memerlukan tanda kutip saat dimasukkan, dan input diperlakukan sebagai string.
kotak Pindang bawah Penjelasan Kotak gulung bawah (selected) 1|2|3 Variabel combox itu sendiri adalah nilai numerik yang mewakili indeks yang ditargetkan untuk pilihan kontrol dropbox, dengan isi dropbox pertama adalah 1, nilai indeksnya adalah 0, dan seterusnya.
bool Tanda kutip Penjelasan Bulu (true/false) benar Jika di pilih, variabel bool adalah true, jika tidak di pilih, variabel bool adalah false.
rahasiaString Senar Enkripsi Penjelasan Senar enkripsi (string) passwordWord Dengan menggunakan metode yang sama seperti string, string yang dienkripsi akan dikirim dengan kode dan tidak akan dikirim dengan teks terbuka.
  • Parameter antarmuka, yang diatur di area parameter kebijakan di bawah area editor kode halaman.
  • Parameter antarmuka ada dalam kode strategi dalam bentuk variabel global, yang berarti bahwa parameter antarmuka dapat dimodifikasi dalam kode.
  • Parameter antarmuka adalah nama variabel dalam kode strategi: yaitu dalam gambar di atasnumberstringcomboxboolsecretString
  • Deskripsi opsi: Nama parameter antarmuka pada antarmuka kebijakan.
  • Opsi Catatan: Deskripsi detail parameter antarmuka yang akan ditampilkan sesuai ketika mouse tinggal di atas parameter antarmuka.
  • Opsi tipe: Jenis parameter antarmuka ini.
  • Opsi default: parameter default untuk antarmuka ini.

Parameter tergantung pada pengaturan: Anda dapat mengatur satu parameter agar parameter lain yang dipilih berdasarkan parameter tersebut dapat menampilkan dan menyembunyikan.numberA, adalah tipe bilangan.numberA"Kami tidak bisa melihat apa yang terjadi di sana.isShowAKeputusan palsu (Bull-type)numberATampilkan dan sembunyikan.numberAVariabel diatur pada parameter antarmuka untuk:numberA@isShowA

img

Tidak ada pilihanisShowAParameter,numberAParameter disembunyikan. Untuk parameter jenis kontrol drop-down, parameter bergantung pada bagian untuk menentukan apakah sama dengan opsi drop-down.Nilai indeksSaya tidak tahu apa yang terjadi.isShowASebagai contoh, parameter, ketika parameter mengatur variabel ditulis sebagai:numberA@combox==2numberAParameter ini didasarkan padacomboxApakah parameter dipilih untuk ditampilkan atau disembunyikan untuk opsi ketiga (indeks 0 untuk opsi pertama, indeks 1 untuk opsi kedua, indeks 2 untuk opsi ketiga).

Parameter antarmuka strategi, kontrol interaktif, fungsi pengelompokan parameter pada template: Tambahkan dengan hanya memulai dengan deskripsi parameter di awal pengelompokan(?第一组)Seperti gambar di bawah ini.

img

Jika menggunakan strategi, parameter yang ditampilkan akan dikelompokkan:

img

Parameter default disimpan: Jika Anda ingin menyimpan parameter kebijakan secara default, Anda dapat mengkliknya setelah mengubah parameter kebijakan.保存回测设置Tombol tersebut.

img

img

Anda dapat menyimpan parameter kebijakan yang telah Anda atur dalam bentuk kode:

/*backtest
start: 2020-02-29 00:00:00
end: 2020-03-29 00:00:00
period: 1d
args: [["number",2],["string","Hello FMZ.COM"],["combox",2],["bool",false],["numberA@isShowA",666],["isShowA",true]]
*/
'''backtest
start: 2020-02-29 00:00:00
end: 2020-03-29 00:00:00
period: 1d
args: [["number",2],["string","Hello FMZ.COM"],["combox",2],["bool",false],["numberA@isShowA",666],["isShowA",true]]
'''
/*backtest
start: 2020-02-29 00:00:00
end: 2020-03-29 00:00:00
period: 1d
args: [["number",2],["string","Hello FMZ.COM"],["combox",2],["bool",false],["numberA@isShowA",666],["isShowA",true]]
*/

Struktur data

Fungsi tertentu akan dilengkapi dengan original yang diminta kembali saat dipanggil.JSONData, yang asliJSONData yang disimpan kembali ke objekInfoAtribut ini menyatakan bahwa tidak ada data yang dikembalikan pada saat retest karena tidak mengunjungi antarmuka suatu bursa.InfoProperties, berikut ini adalah deskripsi dari sifat utama dari setiap struktur data.

Perdagangan

Dapatkan semua riwayat transaksi (bukan milik Anda)exchange.GetTrades()Fungsi ini akan kembali.

{
    Id      : 9585306,          // 交易记录ID,如果交易所接口没有提供订单ID则使用时间戳填充
    Time    : 1567736576000,    // 时间(Unix timestamp 毫秒)
    Price   : 1000,             // 价格
    Amount  : 1,                // 数量
    Type    : 0                 // 订单类型,参考常量里的订单类型,0即为ORDER_TYPE_BUY,ORDER_TYPE_BUY的值为0
}
Tickle

Pasar yang dipimpin olehexchange.GetTicker()Fungsi ini akan kembali.

{
    Info    : {...},             // 请求交易所接口后,交易所接口应答的原始数据,回测时无此属性
    High    : 1000,              // 最高价,如果交易所接口没有提供24小时最高价则使用卖一价格填充
    Low     : 500,               // 最低价,如果交易所接口没有提供24小时最低价则使用买一价格填充
    Sell    : 900,               // 卖一价
    Buy     : 899,               // 买一价
    Last    : 900,               // 最后成交价
    Volume  : 10000000,          // 最近成交量,原则上现货成交量单位为交易币种(baseCurrency),期货成交量单位为合约张数。如果交易所接口没有提供此类数据则使用交易所接口现有的数据填充,例如可能为计价币(quoteCurrency)为单位的成交量
    Time    : 1567736576000      // 毫秒级别时间戳
}
Catatan

StandarOHLCStruktur, digunakan untuk menggambar garis K dan analisis perhitungan indikator.exchange.GetRecords()Fungsi mengembalikan suatu susunan dari struktur ini.RecordStruktur ini mewakili sebuah tiang garis K, yaitu garis KBARRecordSalah satunyaTimeWaktu awal siklus kolom K ini.

{
    Time    : 1567736576000,     // 一个时间戳,精确到毫秒,与Javascript的new Date().getTime()得到的结果格式一样
    Open    : 1000,              // 开盘价
    High    : 1500,              // 最高价
    Low     : 900,               // 最低价
    Close   : 1200,              // 收盘价
    Volume  : 1000000            // 交易量,原则上现货成交量单位为交易币(baseCurrency),期货成交量单位为合约张数,如果交易所接口没有提供此类数据则使用交易所接口现有的数据填充,例如可能为计价币(quoteCurrency)为单位的成交量
}
Perintah

Struktur pesanan dapat dibuat denganexchange.GetOrder()exchange.GetOrders()Fungsi ini akan kembali.exchange.GetOrders()Kembali adalah array dari struktur atau array kosong (jika tidak)Pemesanan yang belum selesaiKembali[], yaitu himpunan kosong) ≠

{
    Info        : {...},         // 请求交易所接口后,交易所接口应答的原始数据,回测时无此属性
    Id          : 123456,        // 交易单唯一标识
    Price       : 1000,          // 下单价格,注意市价单的该属性可能为0或者-1
    Amount      : 10,            // 下单数量,注意市价单的该属性可能为金额并非币数
    DealAmount  : 10,            // 成交数量,如果交易所接口不提供该数据则可能使用0填充
    AvgPrice    : 1000,          // 成交均价,注意有些交易所不提供该数据。不提供、也无法计算得出的情况该属性设置为0
    Status      : 1,             // 订单状态,参考常量里的订单状态,例如:ORDER_STATE_CLOSED
    Type        : 0,             // 订单类型,参考常量里的订单类型,例如:ORDER_TYPE_BUY
    Offset      : 0              // 数字货币期货的订单数据中订单的开平仓方向。ORDER_OFFSET_OPEN为开仓方向,ORDER_OFFSET_CLOSE为平仓方向
    ContractType : ""            // 现货订单中该属性为""即空字符串,期货订单该属性为具体的合约代码
}
MarketOrder

Di sini, Anda dapat menemukan beberapa cara untuk mendapatkan keuntungan dari ini.exchange.GetDepth()Fungsi kembali ke struktur dataPenawaranMenanyakanStruktur data dari elemen dalam aritmatika.

{
    Price   : 1000,              // 价格
    Amount  : 1                  // 数量
}
Kedalaman

Di sini Anda dapat menemukan beberapa tips untuk membantu Anda.exchange.GetDepth()Fungsi ini akan kembali.

{
    Asks    : [...],             // 卖单数组,MarketOrder数组,按价格从低向高排序
    Bids    : [...],             // 买单数组,MarketOrder数组,按价格从高向低排序
    Time    : 1567736576000      // 毫秒级别时间戳
}
Rekening

Informasi akun, olehexchange.GetAccount()Fungsi kembali. Data dalam struktur yang dikembalikan terkait dengan pasangan transaksi yang saat ini ditetapkan.

{
    Info            : {...},     // 请求交易所接口后,交易所接口应答的原始数据,回测时无此属性
    Balance         : 1000,      // 可用计价币数量,现货中如果交易对是BTC_USDT,Balance指的是当前可用USDT数量。U本位期货合约中Balance指的是可用保证金USDT的数量
    FrozenBalance   : 0,         // Balance表示的资产用于挂单的冻结数量
    Stocks          : 1,         // 可用交易币数量,现货中如果交易对是BTC_USDT,Stocks指的是当前可用BTC数量。币本位期货合约中Stocks指的是可用保证金的币(baseCurrency)的数量
    FrozenStocks    : 0          // Stocks表示的资产用于挂单的冻结数量
}
Posisi

Informasi tentang posisi yang dimiliki dalam perdagangan futures,exchange.GetPosition()Fungsi kembali ke sini.PositionStrukturArsitektur

{
    Info            : {...},     // 请求交易所接口后,交易所接口应答的原始数据,回测时无此属性
    MarginLevel     : 10,        // 持仓杆杠大小,如果交易所接口没有提供该数据则通过计算填充,可能会有误差
    Amount          : 100,       // 持仓量,持仓合约张数,通常是正整数。注意每个交易所的合约乘数、价值等合约规格可能不一样,下单规则也可能不一样,例如币安合约可以0.1张下单
    FrozenAmount    : 0,         // 仓位冻结量,用于平仓挂单时的临时冻结仓位数量
    Price           : 10000,     // 持仓均价,原则上该属性为仓位总体的平均价格(不参与结算),如果交易所接口没有提供该数据则用交易所接口现有的持仓均价填充(参与结算)
    Profit          : 0,         // 持仓浮动盈亏,原则上为持仓的未实现盈亏,如果交易所接口没有提供该数据则用交易所接口其它盈亏数据填充,盈亏数值的单位和当前合约保证金的单位相同
    Type            : 0,         // PD_LONG为多头仓位,PD_SHORT为空头仓位
    ContractType    : "quarter", // 合约代码,具体可以参看SetContractType函数描述中传入的参数
    Margin          : 1          // 仓位占用的保证金,如果交易所接口没有提供该数据则使用0填充
}

Di sisi lain, ada juga yang mengatakan bahwa Bitcoin adalah mata uang digital.exchange.GetPosition()Fungsi yang dikembalikanPositionArray struktural.FrozenAmountProfitMarginKarakteristik, karena data yang diberikan oleh bursa tidak seragam, objek yang berbeda di bursa dipanggilexchange.GetPosition()Definisi data yang dikembalikan pada saat antarmuka mungkin berbeda. Sebagai contoh, beberapa bursa menyimpan data tanpa posisi beku.FrozenAmountUntuk 0; dapat digunakan jika perlu menghitung data tertentuInfoAnalisis perhitungan data asli dalam atribut.

Pasar

Informasi pasar untuk varietas yang diperdagangkan,exchange.GetMarkets()Fungsi kembali berisi iniMarketStrukturKamus

{
    Symbol          : "btcusdt",       // 该交易品种在交易所的原始名称
    BaseAsset       : "BTC",           // baseCurrency 交易币,统一大写
    QuoteAsset      : "USDT",          // quoteCurrency 计价币,统一大写
    TickSize        : 0.01,            // 价格最小变动数值
    AmountSize      : 0.01,            // 下单量最小变动数值
    PricePrecision  : 2,               // 价格精度,表示价格精确到2位小数
    AmountPrecision : 3,               // 下单量精度,表示下单量精确到3位小数
    MinQty          : 0.001,           // 最小下单量
    MaxQty          : 1000,            // 最大下单量
    MinNotional     : 5,               // 最小下单金额
    MaxNotional     : 9999999,         // 最大下单金额
    CtVal           : 100,             // 合约价值
    Info            : {...}            // 交易所该品种的原始数据
}

Karena tingkat dukungan data informasi pasar yang berbeda dari satu bursa ke bursa lainnya, bidang yang tidak didukung oleh bursa akan diabaikan. Semua bidang di atas diambil dari data asli dari antarmuka bursa.InfoKonten kolom.

Fungsi global

Versi ((()

Version(), Mengembalikan nomor versi sistem saat ini.

Tidur ((Millisecond)

Sleep(Millisecond), fungsi tidur, membuat program berhenti sejenak.MillisecondUntuk jenis nilai. Parameter adalah milidetik, misalnya:Sleep(1000)"Saya tidak bisa tidur selama satu detik. Mendukung operasi dengan waktu tidur kurang dari 1 millisecond, seperti pengaturanSleep(0.1)◎ mendukung parameter minimum sebagai0.000001, tidur tidur pada tingkat nanodetik. 1 nanodetik sama dengan1e-6"Sudah tidak ada yang bisa dipastikan.

Perhatikan: Saat iniPythonKetika menulis strategi bahasa, operasi interval konsultasi, waktu tunggu harus digunakanSleep(Millisecond)Fungsi. Tidak disarankanPythonPerbedaantimeKebuntime.sleep(second)Fungsi. Karena digunakan dalam kebijakantime.sleep(second)Fungsi ini memungkinkan program kebijakan untuk benar-benar menunggu beberapa detik saat melakukan retest.secondParameter adalah jumlah detik yang diset pause), yang menyebabkan reboot kebijakan sangat lambat.

Apakah Virtual ((()

IsVirtual(), menentukan apakah kebijakan saat ini berjalan untuk uji ulang analog. Nilai yang dikembalikan: tipe boolean. Kembali ke status analogtrueKembali ke real diskfalse

Surat ((...)

Mail(smtpServer, smtpUsername, smtpPassword, mailTo, title, body), Mengirim fungsi surat. == Nilai parameter: semua parameter adalah tipe string == Nilai kembali: tipe bul, mengirim berhasil kembalitruesmtpServerUntuk mengirim emailsmtpLayanan,smtpUsernameSaya tidak tahu apa yang terjadi.smtpPasswordSMTP password untuk email (bukan password login email)mailToUntuk menerima email, Anda harus menggunakan akun email Anda.title"Saya tidak tahu apa yang akan terjadi", katanya.bodyUntuk email yang dikirim, misalnya:

function main(){
    Mail("smtp.163.com", "asdf@163.com", "password", "111@163.com", "title", "body")
}
def main():
    Mail("smtp.163.com", "asdf@163.com", "password", "111@163.com", "title", "body")

Lebih banyak

QQ89520Ada satu masalah, apakah fungsi_C akan mencoba lagi atau hanya sekali saja.

Haiwwhai_C ((function, args...) Apakah ini default 3s? Apakah Anda bisa mengubah default untuk langsung menempatkan _CDelay ((1000) sebelum _C ((function, args...)?

makan siangCluster: Jika Anda membuat 1000 robot secara bersamaan, dan tidak ada stres, Anda dapat membuat beberapa administrator untuk mendistribusikan tugas. Apakah ada contoh kode untuk membangun cluster? Bagaimana membangun beberapa host untuk mendistribusikan tugas

Wangij1Log ((talib.help (('MACD')); hanya dapat digunakan di bawah js, Python tidak memiliki atribut talib.help...

cjz140Apa perbedaan antara fungsi _C ((function, args...) dan fungsi Sleep, yang menurut saya berarti menunggu untuk mencoba lagi?

3263243yBagaimana cara menghapus ErrorFilter setelah SetErrorFilter? tanpa menyaring pesan kesalahan.

QQ47898077Apakah ada cara lain untuk menggunakan perpustakaan pihak ketiga?

QQ47898077Apa yang harus diisi oleh kelas induk jika Anda ingin mewarisi obyek bursa yang mendefinisikan kelas baru?

ethanwuApakah ada alat debugging lokal?

penglihengApa itu exange.IO (status)?

penglihengMengapa fungsi sell berwarna abu-abu, apakah fungsi representasi tidak tersedia lagi?

penglihengMengapa fungsi sell berwarna abu-abu, apakah fungsi representasi tidak tersedia lagi?

penglihengJS tidak bisa bahasa Inggris, haha, jadi saya ingin bertanya apakah Anda mendukung ES6.

penglihengJS tidak bisa bahasa Inggris, haha, jadi saya ingin bertanya apakah Anda mendukung ES6.

Don.Bagaimana cara menulis garis tengah volume?

TurtleJika tidak berhasil, apa yang akan dikembalikan jika Anda membeli di exchange.Buy.1000 dengan harga pasar?

Anak laki-laki NingFonts baru ini bagus.

kuda nilJaringan pengujian Bitmex ((testnet.bitmex.com) juga memiliki antarmuka API, tetapi saat ini pertukaran hanya dapat memilih Bitmex home station, alamat dokumen API adalah https://testnet.bitmex.com/app/apiOverview Bagaimana cara mendukungnya?

Cxjijinvar ret1 = exchanges[0].IO (("api", "future_estimated_price", "symbol=btc_usd"); Log (('ok futures estimated delivery price', ret1); https://dn-filebox.qbox.me/d1ed268c1e75753c5d289447d279aa9d81e41b5f.png Jika Anda menggunakan antarmuka yang berbeda, mengapa Anda menulis laporan kesalahan?

allenfrostlineApakah ada perbedaan antara realTicker dan Ticker? Baru-baru ini ada strategi untuk menulis ulang paket yang muncul pada saat yang sama, tetapi tampaknya tidak ada yang disebutkan dalam API yang pertama.

penglihatanHalo, sebagai seorang pengembang Python, apa yang menurut Anda ditulis dalam dokumen API Anda? Beberapa antarmuka fungsi bidang terlihat aneh, bisakah Anda menulis dokumen seperti githubpage dan readdocs?

allenfrostlineGetAccount: [EAPI:Rate limit exceeded] Mau tanya bagaimana cara mengatasinya? selain itu saya tidak punyaqq atau ada kelompok WeChat seperti itu? terima kasih

zhjx2314Tidak mendukung StochRSI, apakah bisa ditambahkan secepatnya?

yhfggPada saat itu, apakah skrip berada di server Ali Cloud sendiri atau di botvs cluster?

yhfggApa versi python yang Anda gunakan?

FkyslyGetFee harus diartikan sebagai sebuah struktur yang dikembalikan oleh Fee, dengan satu kata yang hilang.

ZkwapBagaimana cara memanggil talib menggunakan js?

yhfggMinta dokumentasi python

Wmjbs123Apakah background kode editor strategi bisa berwarna hitam? mata putih berbintik-bintik, menulis kode di malam hari, mudah dekat.

Don.Bagaimana cara menyetel ringkasan dalam pesan WeChat robot?

Angka-AngkaApakah saya bisa menambahkan bidang harga rata dalam struktur order?

Anak kecil.GetOrders: mendapatkan semua pesanan yang belum selesai, mengembalikan struktur Array Order, dalam perdagangan Bitcoin ETH di Cina, hanya mengembalikan 10 item terbaru.

yhfggFungsi matematika yang dibutuhkan untuk menggunakan probabilitas statistik, di mana?

jiebangApakah nilai yang dikembalikan dari fungsi $.Cross ((x, y) ini berarti apa?

Nama Ibu SayaLogReset ini akan mengosongkan semua log, dan dapat menggunakan parameter angka untuk menentukan jumlah catatan yang akan disimpan. Bagaimana cara menghapus beberapa log terbaru?

edwardgywFungsi CORRE di talib tampaknya tidak dipindahkan atau hilang?

Gunung miskin YangyangTampaknya tidak ada fitur referensi indikator!

KecilBagaimana waktu k-line yang dibaca diterjemahkan menjadi waktu sekarang oh, saya tidak mengerti, terlalu lama satu, diselesaikan, terima kasih

KecilBagaimana cara menulis angka di array, saya menggunakan records.remove (rekords[0]) sepertinya tidak bisa.

ularayuJika Anda ingin menggunakan ATR, Anda harus menggunakan ATR yang ada di jam-jam.

ularayuJika Anda ingin menggunakan ATR, Anda harus menggunakan ATR yang ada di jam-jam.

57278863Belajar bagaimana futures tradisional mendapatkan harga dan pesanan, maaf, akarnya tipis.

KirinIni adalah contoh dari perdagangan futures tradisional!

KecilApakah Anda bisa menulis contoh tentang perdagangan futures tradisional?

KecilBagaimana cara mencetak status kepemilikan, bagaimana cara saya mencetak adalah [object object], bagaimana cara mendapatkan status kepemilikan multi-objek dan kosong, dan juga GetTicker (), bagaimana cara mendapatkan minggu, minggu berikutnya, dan kuartal pada minggu itu.

CxjijinApakah bursa berjangka dapat mendapatkan pasar dengan GetTicker (??), dan apakah pasar yang dikembalikan adalah jenis kontrak (??) minggu ini, minggu berikutnya, dll.?

MenjualApakah ada indikator lain yang bisa ditambahkan untuk StochRSI?

MomoxCancelOrder ((orderId) Menghapus sebuah order berdasarkan nomor order, mengembalikan true atau false, tanya true= sel berhasil dibatalkan, kan?

Momox_G(K, V) Tabel global yang dapat disimpan Apakah metode ini menyimpan variabel global yang dapat digunakan untuk berbagi data antara kebijakan yang berbeda?

fluffy3dKeberhasilan yang luar biasa

Tidak adaAnda dapat mengatur ulang log pendapatan dengan LogProfitReset. Sejarah pada grafik pendapatan sebelumnya tidak ada.

xcyApakah Anda bisa menyalin EA secara langsung?

sjironmanSaya merasa platform ini luar biasa, luar biasa, lebih banyak interaksi dalam kelompok.

KecilBahasa apa itu, apakah ada bahan untuk belajar?

JxhbtcData error selama seminggu, tidak bisa terhubung ke robot, bagaimana cara menyelesaikannya?

DyahhuApakah indeks TA hanya untuk menghitung harga penutupan?

btcrobotHai, dunia.

Mimpi kecilFungsi _C akan mencoba lagi tanpa berpikir sampai hasilnya berhasil.

Mimpi kecilPerpustakaan talib untuk python perlu diinstal. https://www.botvs.com/bbs-topic/669 dapat dilihat di posting ini.

Mimpi kecilSleep adalah program yang tidak melakukan apa-apa, menunggu parameter yang ditetapkan dalam hitungan millisecond, _C adalah fungsi yang kembali memanggil parameter yang dikirimkan.

Mimpi kecilTanpa perlu mewarisi, JS langsung terbungkus pada objek {name: "objek baru", old_exchange : exchange[0],...... }

Mimpi kecilAda editor lokal, plugin sinkronisasi jarak jauh, yang pada dasarnya adalah editor lokal, debugging jarak jauh.

Mimpi kecilAnda bisa datang ke grup QQ, dan bisa mendiskusikannya.

Mimpi kecilDalam dokumentasi API, warna abu-abu berarti bahwa fungsi ini tidak memiliki penjelasan yang terlalu luas, menunjukkan representasi abu-abu dan biru. Ada lebih banyak penjelasan, itu saja.

Mimpi kecilES6 saat ini tidak didukung, ^^

Mimpi kecilAnda bisa masuk ke grup QQ Saya, jelaskan masalahnya, saya akan menjawabnya ^^

Mimpi kecilJika Anda tidak mau membeli, maka Anda harus membayarnya.

TurtleOKCoin, misalnya, jika jumlah yang dibeli melebihi jumlah yang dimiliki, apa yang akan dikembalikan?

Mimpi kecilSaya akan kembalikan nomor pesanan di OK Futures, dan saya akan kembalikan nomor pesanan di OK Futures.

Tidak adaSudah mendukung pertukaran transaksi pada saat berjalan, perlu mengunduh host terbaru. Dukungan Bter/Poloniex Rincian API dokumentasi Fungsi transaksi Tab deskripsi di bawah ((mengosongkan cache browser setelah refresh jika tidak terlihat)

Mimpi kecilQQ saya, saya akan membantu Anda mencari jawabannya.

Rumah Tangga yang BerkarirJika Anda ingin membuat daftar putih, saya akan mengatur IP host.

Mimpi kecilIni adalah tautan bawah tanah yang tidak dibuat. Server tidak merespons. Apakah alamat IP ditetapkan saat permintaan API KEY?

Rumah Tangga yang BerkarirIni sangat memalukan... saya tidak bisa menjalankan strategi yang telah gagal pada era bitcoin, GetAccount tidak dapat mengakses GetAccount: Post http://api.btc38.com/v1/getMyBalance.php: read tcp 192.168.0.227:58596->211.149.148.144:80: wsarecv: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. 2017-05-23 21:08:24 Era Bitcoin Kesalahan GetAccount: timeout 2017-05-23 21:08:02 Era Bitcoin Kesalahan GetAccount: timeout 2017-05-23 21:07:40 Era Bites Kesalahan GetAccount: timeout 2017-05-23 21:07:20 Membuat halaman berisi "Membuat halaman berisi 'Membuat halaman berisi 'Membuat halaman berisi 'Membuat halaman berisi 'Membuat halaman berisi 'Membuat halaman berisi 'Membuat halaman berisi 'Membuat halaman berisi 'Membuat halaman berisi 'Membuat halaman berisi 'Membuat halaman berisi 'Membuat halaman berisi 'Membuat halaman berisi 'Membuat halaman berisi ' Apakah itu masalah daftar putih IP???

Mimpi kecilServer bursa tidak merespon, protokol TCP tidak dibangun, tiga kali berjabat tangan tidak dilakukan.

Rumah Tangga yang BerkarirA connection attempt failed because the connected party did not properly respond after a period of time, atau "Percobaan koneksi gagal karena pihak yang terhubung tidak merespons dengan benar setelah periode waktu".

Mimpi kecilHalo! Ini adalah fungsi exchange.IO (api, ApiName, Args) yang tidak didukung, lihat https://www.botvs.com/bbs-topic/812

Rumah Tangga yang BerkarirPercobaan koneksi gagal karena pihak yang terhubung tidak merespon dengan benar setelah periode waktu,

Rumah Tangga yang BerkarirApakah Era Bitcoin Tidak Mendukung?

Mimpi kecilhttps://dn-filebox.qbox.me/a709b30c6cc0a3565234b9e0c99b073f7ba8b454.png Saya tidak tahu apa yang harus dilakukan.

Anak laki-laki NingSebagai contoh, saya ingin melakukan perdagangan mata uang penuh dengan poloniex, tetapi hanya beberapa mata uang yang didukung oleh BOTvs, dan exchange.IO tampaknya tidak mendukung Pnet.

Mimpi kecilAnda dapat memanggilnya sebagai exchange.IO.

Anak laki-laki NingBagaimana dengan API yang membutuhkan verifikasi akun?

Mimpi kecilJika API yang tidak memerlukan validasi akun dapat digunakan dengan httpQuery (lihat dokumentasi BotVS untuk lebih lanjut), API transaksi sebenarnya membutuhkan akses.

Mimpi kecilAnda dapat menggunakan HttpQuery untuk mengirim parameter API: https://www.okcoin.com/api/v1/future_estimated_price.do?symbol=btc_usd. Untuk API pertukaran yang tidak memerlukan verifikasi akun, langsung gunakan fungsi HttpQuery di platform, yang terkait dengan akun menggunakan IO API (IO tidak mendukung API pasar yang tidak memerlukan verifikasi ini). Posting: https://www.botvs.com/bbs-topic/850

penglihatanTerima kasih banyak, semoga ada dokumentasi API yang bagus.

Mimpi kecilSaya ingin tahu di mana saya melihat API realTicker?

Mimpi kecilhttps://dn-filebox.qbox.me/fe1a6f5563ed43a5357f858ecf8a50239619228e.png Dokumen API adalah bahasa JavaScript. Deskripsi, versi python. Deskripsi di bagian atas halaman Komunitas Komunitas.

Tidak adaHalo, terima kasih atas saran, dokumen API sedang dibangun ulang.

Mimpi kecilHello~ yang menunjukkan bahwa frekuensi akses telah melampaui batas. https://dn-filebox.qbox.me/a09498920d04cac62624b7438a058d2098d8fb00.png Apakah Anda menggunakan fungsi Sleep ((1000) dalam kebijakan?, 1000 ini adalah untuk membuat program berhenti sejenak per putaran, dapat diatur sendiri, tujuannya adalah untuk mengontrol program Akses frekuensi API, karena beberapa bursa menetapkan batas akses maksimum, waktu tertentu melebihi jumlah kunjungan tertentu akan menolak akses, memblokir alamat IP.

Mimpi kecilhttps://dn-filebox.qbox.me/c29ab7fc279e1b758355f137907cf52dc8257df6.png Saya sendiri menulis bahwa indikator STOCHRSI yang telah di bandingkan dengan OK, sepakat bahwa kecepatan agak lambat dan harus dioptimalkan, sementara tersedia.

Tidak adaAnda dapat memilih untuk meng-retest di server yang disediakan oleh botvs atau di server host Anda sendiri, versi adalah 2.7.5

Mimpi kecil"Mengharukan" adalah ungkapan yang sering diucapkan.

Mimpi kecilSekarang Anda dapat mengkonfigurasi gaya latar belakang Anda sendiri.

Mimpi kecilDokumen python sedang ditulis.

Mimpi kecilTalib Library mendukung ini.

hzzgood48 https://www.botvs.com/bbs-topic/276

Mimpi kecilTampaknya ada contoh di Strategy Square, https://www.botvs.com/strategy/15098

Tidak adaAkses properti AvergPrice untuk Order, yang didukung oleh pertukaran, dan yang tidak didukung oleh pertukaran akan selalu memiliki properti 0.

yhfggBagaimana sumber-sumber informasi pihak ketiga mengutip?

Tidak adaJika mathjs tidak dapat memuaskan kebutuhannya, maka hanya perlu mencari kebijakan copy-import dari library pihak ketiga. Untuk kecepatan kompilasi, sistem hanya memiliki sejumlah kecil library internal.

Mimpi kecilTidak sopan, ada masalah di grup Anda bisa M saya - saya pada dasarnya online.

jiebangTerima kasih.

Mimpi kecilAnda bisa melihat di kolom komentar, analisis kode dari perpustakaan perdagangan mata uang digital, dan di dalamnya ada komentar tentang fungsi $.Cross.

Tidak adaTidak dapat menghapus yang terbaru, hanya menyimpan beberapa yang terbaru... menghapus semua yang lama sebelum itu.

KirinUntuk mendapatkan setiap posisi dengan posisi [i], posisi adalah suatu array.

Anak laki-laki Ningexchange.GetRecords ((PERIOD_D1));

KirinFutur tradisional saya selalu berteriak "GetAccount: not login", "Password tidak salah, tidak bisa login", "GetAccount: not login", "GetAccount: not login", "Password tidak salah, tidak bisa login", "GetAccount: not login", "GetAccount: not login", "Password tidak salah, tidak bisa login", "GetAccount: tidak login", "GetAccount: not login", "Password tidak salah, tidak bisa login", "GetAccount: tidak login", "GetAccount: tidak login", "Password tidak salah, tidak bisa masuk", "GetAccount: tidak masuk", "GetAccount: tidak masuk", "GetAccount: tidak masuk", "GetAccount: tidak masuk", "GetAccount: tidak masuk", "Gain: tidak masuk"

Tidak adaJika Anda memilih untuk mengklik SetContractType, maka Anda akan mendapatkan SetContractType.

Tidak adaSeperti yang kita lihat, true adalah nilai yang dikembalikan dari tindakan membatalkan order yang dikembalikan oleh bursa, tetapi pembatalan sebenarnya tidak dibatalkan, tergantung pada bagaimana hal itu ditangani di dalam bursa.

Momox3q

Tidak ada(Tidak demikian) sampai suatu waktu (yang telah dipisahkan).

xuanxuanTentu saja tidak, itu eksklusif untuk MT4.

Tidak adaJavascript tersedia di mana-mana di internet.

MenjualApakah masalah Anda sudah diselesaikan?

Tidak adaSebagian besar dari data yang masuk bisa langsung menjadi rekaman atau sebuah array harga murni.