[TOC]
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:
JavaScript
Tutorial, penggunaan platform, dan strategi menulis. Jika Anda memiliki dasar pemrograman dan perdagangan, Anda dapat memulai menulis strategi sederhana dalam waktu sekitar dua hari, jika Anda tidak memiliki dasar pemrograman, Anda hanya perlu satu atau dua minggu untuk mempelajari dasar pengetahuan pemrograman.bilibili
Video tutorial juga tersedia:Penemu Platform Perdagangan Kuantitatif - Konsep Penjaga
Penemu Platform Perdagangan Kuantitatif - Tinjauan Situs
Penemu Quantitative Trading Platform - Pengelola Pengelolaan
Penemu Platform Perdagangan Kuantitatif - Membuat Virtual
Penemu Platform Perdagangan Kuantitatif - Strategi Pendaftaran, Penjelasan Kode Kopia
Penemu Quantitative Trading Platform - Strategi Lengkap, Konfigurasi Parameter, Import dan Export
Penemu Quantitative Trading Platform - alat debugging dan kemampuan pengeditan jarak jauhJika 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 kuantitatifJavaScript
、TypeScript
、Python
、C++
、PINE
、麦语言
、Blockly可视化
Menulis strategi desain.
DukunganTypeScript
Bahasa, yang masih disetel sebagai strategi saat dibuatJavaScript
Strategi, lalu tulis di awal kode strategi.// @ts-check
Atau klik tombol "TypeScript" di pojok kanan atas area edit policy untuk beralih keTypeScript
◦ Platform akan secara otomatis mengidentifikasi kode sebagai:TypeScript
Untuk mendapatkan informasi lebih lanjut, silakan kunjungi situs web kami.
TypeScript
Fungsi pengecekan tipe statis dapat membantu Anda menemukan kesalahan potensial saat menulis kode dan meningkatkan kualitas kode.TypeScript
Sistem tipe ini memungkinkan Anda untuk menemukan sifat dan metode yang Anda inginkan lebih cepat saat menulis kode, meningkatkan efisiensi pengembangan.TypeScript
Anda dapat mengatur dan memelihara kode Anda dengan lebih baik, membuatnya mudah dibaca dan dipahami.TypeScript
Fitur-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.
Blockly
Pelatihan visual:
Pengaturan
Python
Perangkat lunak yang digunakanPython
Penjelas
PenggunaanPython
Ketika 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 berjalanPython
Perbedaan antara versi dan versi.#!python3
,#!python2
Dengan 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.Linux,Windows,Mac OS,android,ARM Linux yang berbasis pada pohon kurmaSaya tidak tahu apa yang akan terjadi.Halaman Pengelola,Langkah-langkah pemasangan dan pembaruan administrator Linux◦ Log disk yang dikelola oleh administrator disimpan di direktori di mana program administrator berada./logs/storage
Di dalamnya, dokumen tersebut adalahdb3
PerbedaanSqlite
Anda dapat menggunakan file database.Sqlite
Perangkat lunak manajemen mengedit secara langsung, dan ekstensi ini disebutdb3
File database yang disebut dengan nama file adalah file yang disebut dengan nama disk.ID
。
Perjanjian yang didukung
Dalam FMZ Quantitative Trading Platform, strategi yang dikembangkan hanya dapat dilihat oleh pemegang akun FMZ Quantitative Trading Platform.Python
Paket ini dimuat dalam kode kebijakan, yang memungkinkan lokalisasi kebijakan.
Python
Keamanan kode:
KarenaPython
Ini 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.
Python
Ini adalah salah satu strategi yang paling efektif untuk mengenkripsi.
Dia juga mengatakan bahwa dia tidak akan pernah melakukan hal yang sama.Python
Kebijakan: Penulis kode tidak mengenkripsi ketika mereka menggunakannya sendiri, dan mengenkripsi ketika mereka menyewanya kepada orang lain.Python
Kebijakan untuk memulai mengedit kode berikut, Anda dapat menentukan untuk digunakan sendiri atau disewaPython
Apakah kebijakan mengenkripsi kode kebijakan saat dijalankan. Mendukung kode kebijakan yang dienkripsiPython
Versi adalah:Python 2.7
Di sini ada beberapa artikel yang menarik.Python 3.5
Di sini ada beberapa artikel yang menarik.Python 3.6
Versi lainnya.
Penulis kebijakan mengoperasikan sendiri, dan menggunakan kode kode untuk mengenkripsi ke orang lain melalui kode pendaftaran:#!python
Gunakan koma untuk menentukan versi penerjemah Python,
Interval, input perintah enkripsiencrypt
Jika tidak ditentukan.Python
Versi 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
PenghakimanPython
Apakah 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.Python
Kode strategi.
#!encrypt
def main():
ret = os.getenv('__FMZ_ENV__')
# 打印变量ret为字符串encrypt或者ret == "encrypt"为真,即代表加密生效
Log(ret, ret == "encrypt")
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 KEY
Cara 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#8
Ada banyak alat yang dapat Anda buat untuk membuat kunci publik dan kunci pribadi, seperti:openssl
Saya 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 ditxt
Format 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 Key
Anda dapat mengetikkan gambar yang dibuat di bursa.RSA KEY
Saya tidak tahu.
5. Mengkonfigurasi bursa di FMZSecret Key
Di kotak editor, isiLangkah KetigaAnda dapat mengklik pada halaman ini.txt
Jalur file, misalnya nama file yang ditempatkan:rsaKey.txt
Dalam hal ini, Anda dapat memilih salah satu dari dua kategori ini.file:///rsaKey.txt
Jika dokumen tersebut berada di direktori tingkat berikutnya di mana proses administratorrsa_key
Di sana, Anda bisa membaca:file:///rsa_key//rsaKey.txt
◦ Jika ditempatkanrsaKey.txt
Untuk 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
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 sebenarnyatick
Data 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 dikumpulkantick
FMZ 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。
Cryptocurrency (mata uang digital)
Nama | Jenis | Penjelasan |
---|---|---|
Bitfinex | Objek Bursa Langsung | Perdagangan terbatas mendukung, misalnya:BTC_USD ,ETH_USD ,LTC_USD Jadi, perhatikan bahwa transaksi terhadap mata uang adalahUSD Harga dalam dolar AS |
Binance | Objek Bursa Langsung | Perdagangan terbatas mendukung, misalnya:BTC_USDT ,ETH_USDT ,ETH_BTC ,LTC_BTC Dan sebagainya. |
OKX | Objek Bursa Langsung | Perdagangan terbatas mendukung, misalnya:BTC_USDT ,ETH_USDT ,ETH_BTC ,LTC_BTC Dan sebagainya. |
Token | Objek Bursa Langsung | Perdagangan terbatas mendukung, misalnya:BTC_USDT ,ETH_USDT ,ETH_BTC ,LTC_BTC Dan sebagainya. |
OKX Futures | Objek Bursa Berjangka | Perdagangan terbatas mendukung, misalnya:BTC_USD ,ETH_USD Jadi, transaksi terhadap mata uang adalah:USD , Mengatur kode kontrak khusus ((lihatexchange.SetContractType Fungsi) kemudian, kontrak adalah kontrak mata uang asli.this_week 、next_week 、quarter 、swap 。 |
HuobiDM | Objek Bursa Berjangka | HuobiDM, yang berarti Token Futures (Token Contract), mendukung transaksi terbatas untuk pasangan seperti:BTC_USD ,ETH_USD Jadi, transaksi terhadap mata uang adalah:USD , Mengatur kode kontrak khusus ((lihatexchange.SetContractType Fungsi) kemudian, kontrak adalah kontrak mata uang asli.this_week 、next_week 、quarter 、swap 。 |
BitMEX | Objek Bursa Berjangka | Pasangan transaksi adalah:XBT_USD , Mengatur kode kontrak khusus ((lihatexchange.SetContractType Fungsi) kemudian, kontrak adalah kontrak mata uang asli.XBTUSD 。 |
Futures Binance | Objek Bursa Berjangka | Perdagangan terbatas mendukung, misalnya:BTC_USDT ,ETH_USDT Jadi, transaksi terhadap mata uang adalah:USDT , Mengatur kode kontrak khusus ((lihatexchange.SetContractType Jika kita menggunakan fungsi ini, maka kontrak akan menjadiUSDT Kode kontrak yang didukung adalah:swap 。 |
Opsi Deribit | Objek Bursa Opsi | Pasangan transaksi adalah:BTC_USD ,ETH_USD , Mengatur kode kontrak khusus ((lihatexchange.SetContractType Setelah itu, kontrak akan menjadi kontrak mata uang lokal. |
Objek bursa berjangka untuk sementara waktu tidak mendukung pasangan pertukaran dalam kode strategi.
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.tick
Data, sebagai waktu nyatatick
Data yang dikembalikan pada saat permintaan antarmuka.Penemu menjelaskan mekanisme pengukuran kembali tingkat analog kuantitatif。
Pengujian tingkat real-time adalah real-timetick
Data tingkat dalam urutan waktu Bar.tick
Strategi untuk data tingkat adalah menggunakan refrensi tingkat real yang lebih dekat dengan kenyataan.tick
Ini 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.GetDepth
、GetTrades
Fungsi mendapatkan data transaksi yang diputar kembali. Pada saat data transaksi pada timeline, panggilanGetTicker
,GetTrades
,GetDepth
,GetRecords
, 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:
Fungsi pengeditan parameter sistem retesting FMZ adalah dengan mengatur pengeditan sesuai dengan opsi pengeditan masing-masing parameter pada saat retesting, sebagai berikut:
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:
Pembagian data yang digunakan adalah data yang digunakan untuk melakukan pengukuran.
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.
denganJavaScript
Contoh kebijakan adalah dengan mengklik "Save Retrospect Set to Source File":
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"}]
*)
Penggunaan sistemGET
Metode 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/data
Perangkat 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.JavaScript
Contoh:
/*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:
FMZ Quantitative Trading Platform Sudah TerbukaJavaScript
Bahasa danPython
Mesin retargeting asli untuk bahasa, mendukung pengaturan saat retargetingSiklus garis K bawah。
Kunci cepat untuk mengubah halaman edit dan halaman review kebijakan
PenggunaanCtrl + ,
Tekan tombol, beralih ke halaman penelusuran dan halaman penyuntingan kebijakanCtrl
Setelah mengetik, tekan,
Tombol.
Kunci cepat untuk menyimpan kebijakan
PenggunaanCtrl + s
Tombol, kebijakan simpan.
Tombol cepat untuk memulai penelusuran
PenggunaanCtrl + b
Tombol, mulai uji ulang.
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.Python Bahasa 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. |
onerror()
Fungsi tersebut.onerror()
Jika kita tidak bisa mematikan fungsi, maka fungsi tidak akan bisa mematikan lagi.onexit()
Fungsi tersebut.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);
}
}
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("初始化!");
}
onerror()
"Sebenarnya, saya tidak tahu apa yang akan terjadi.onerror()
Mengeksekusi fungsi yang tidak didukungPython
、C++
Strategi bahasa.
function main() {
var arr = []
Log(arr[6].Close)
}
function onerror() {
Log("错误")
}
# python不支持
// C++不支持
diJavaScript
、Python
、C++
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 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.
JavaScript
Perpustakaan template bahasa:
Python
Perpustakaan template bahasa:
C++
Perpustakaan template bahasa:
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:
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());
}
Mengutip koleksi template
Setelah memilih referensi di halaman template editor kebijakan, Anda dapat menyimpan kebijakan.
exchange
Ini 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 kodeexchange
Objek:
function main() {
Log("实盘页面或者回测页面上,添加的第一个交易所对象名字:", exchange.GetName(), ",标签:", exchange.GetLabel())
}
def main():
Log("实盘页面或者回测页面上,添加的第一个交易所对象名字:", exchange.GetName(), ",标签:", exchange.GetLabel())
void main() {
Log("实盘页面或者回测页面上,添加的第一个交易所对象名字:", exchange.GetName(), ",标签:", exchange.GetLabel());
}
Jadi kita bisa memahami bahwa penyimpanan adalah sama.exchange
Array 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());
}
}
Order
StrukturStatus
Atributnya.
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 danOrder
StrukturStatus
Perbandingan 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.
Order
StrukturType
Atributnya.
Nama konstanta | Definisi | Nilai |
---|---|---|
Order_TYPE_Buy | Membayar | 0 |
Orde_Types_Sell | Pesan jual | 1 |
Position
StrukturType
Atributnya.
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 |
Order
StrukturOffset
Atributnya.
Nama konstanta | Definisi | Nilai |
---|---|---|
ORDER_OFFSET_OPEN | Pemesanan yang dibuka | 0 |
ORDER_OFFSET_CLOSE | Pemesanan di gudang | 1 |
Parameter kebijakan yang ditetapkan pada antarmuka kebijakan dalam kode kebijakan, dinyatakan dalam bentuk variabel global.JavaScript
Dalam bahasa ini, Anda dapat langsung mengakses atau memodifikasi parameter yang ditetapkan pada antarmuka kebijakan.Python
Untuk mengubah variabel global dalam fungsi kebijakanglobal
Kata Kunci:
Jenis parameter:
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. |
number
、string
、combox
、bool
、secretString
。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.isShowA
Keputusan palsu (Bull-type)numberA
Tampilkan dan sembunyikan.numberA
Variabel diatur pada parameter antarmuka untuk:numberA@isShowA
。
Tidak ada pilihanisShowA
Parameter,numberA
Parameter 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.isShowA
Sebagai contoh, parameter, ketika parameter mengatur variabel ditulis sebagai:numberA@combox==2
。numberA
Parameter ini didasarkan padacombox
Apakah 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.
Jika menggunakan strategi, parameter yang ditampilkan akan dikelompokkan:
Parameter default disimpan:
Jika Anda ingin menyimpan parameter kebijakan secara default, Anda dapat mengkliknya setelah mengubah parameter kebijakan.保存回测设置
Tombol tersebut.
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]]
*/
Fungsi tertentu akan dilengkapi dengan original yang diminta kembali saat dipanggil.JSON
Data, yang asliJSON
Data yang disimpan kembali ke objekInfo
Atribut ini menyatakan bahwa tidak ada data yang dikembalikan pada saat retest karena tidak mengunjungi antarmuka suatu bursa.Info
Properties, berikut ini adalah deskripsi dari sifat utama dari setiap struktur data.
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
}
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 // 毫秒级别时间戳
}
StandarOHLC
Struktur, digunakan untuk menggambar garis K dan analisis perhitungan indikator.exchange.GetRecords()
Fungsi mengembalikan suatu susunan dari struktur ini.Record
Struktur ini mewakili sebuah tiang garis K, yaitu garis KBAR
。Record
Salah satunyaTime
Waktu awal siklus kolom K ini.
{
Time : 1567736576000, // 一个时间戳,精确到毫秒,与Javascript的new Date().getTime()得到的结果格式一样
Open : 1000, // 开盘价
High : 1500, // 最高价
Low : 900, // 最低价
Close : 1200, // 收盘价
Volume : 1000000 // 交易量,原则上现货成交量单位为交易币(baseCurrency),期货成交量单位为合约张数,如果交易所接口没有提供此类数据则使用交易所接口现有的数据填充,例如可能为计价币(quoteCurrency)为单位的成交量
}
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 : "" // 现货订单中该属性为""即空字符串,期货订单该属性为具体的合约代码
}
Di sini, Anda dapat menemukan beberapa cara untuk mendapatkan keuntungan dari ini.exchange.GetDepth()
Fungsi kembali ke struktur dataPenawaran、MenanyakanStruktur data dari elemen dalam aritmatika.
{
Price : 1000, // 价格
Amount : 1 // 数量
}
Di sini Anda dapat menemukan beberapa tips untuk membantu Anda.exchange.GetDepth()
Fungsi ini akan kembali.
{
Asks : [...], // 卖单数组,MarketOrder数组,按价格从低向高排序
Bids : [...], // 买单数组,MarketOrder数组,按价格从高向低排序
Time : 1567736576000 // 毫秒级别时间戳
}
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表示的资产用于挂单的冻结数量
}
Informasi tentang posisi yang dimiliki dalam perdagangan futures,exchange.GetPosition()
Fungsi kembali ke sini.Position
StrukturArsitektur。
{
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 dikembalikanPosition
Array struktural.FrozenAmount
、Profit
、Margin
Karakteristik, 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.FrozenAmount
Untuk 0; dapat digunakan jika perlu menghitung data tertentuInfo
Analisis perhitungan data asli dalam atribut.
Informasi pasar untuk varietas yang diperdagangkan,exchange.GetMarkets()
Fungsi kembali berisi iniMarket
StrukturKamus。
{
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.Info
Konten kolom.
Version()
, Mengembalikan nomor versi sistem saat ini.
Sleep(Millisecond)
, fungsi tidur, membuat program berhenti sejenak.Millisecond
Untuk 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 iniPython
Ketika menulis strategi bahasa, operasi interval konsultasi, waktu tunggu harus digunakanSleep(Millisecond)
Fungsi. Tidak disarankanPython
Perbedaantime
Kebuntime.sleep(second)
Fungsi. Karena digunakan dalam kebijakantime.sleep(second)
Fungsi ini memungkinkan program kebijakan untuk benar-benar menunggu beberapa detik saat melakukan retest.second
Parameter adalah jumlah detik yang diset pause), yang menyebabkan reboot kebijakan sangat lambat.
IsVirtual()
, menentukan apakah kebijakan saat ini berjalan untuk uji ulang analog. Nilai yang dikembalikan: tipe boolean.
Kembali ke status analogtrue
Kembali ke real diskfalse
。
Mail(smtpServer, smtpUsername, smtpPassword, mailTo, title, body)
, Mengirim fungsi surat. == Nilai parameter: semua parameter adalah tipe string == Nilai kembali: tipe bul, mengirim berhasil kembalitrue
。
smtpServer
Untuk mengirim emailsmtp
Layanan,smtpUsername
Saya tidak tahu apa yang terjadi.smtpPassword
SMTP password untuk email (bukan password login email)mailTo
Untuk menerima email, Anda harus menggunakan akun email Anda.title
"Saya tidak tahu apa yang akan terjadi", katanya.body
Untuk 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")
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 (
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.