[TOC]
Apa yang boleh dilakukan oleh platform dagangan kuantitatif FMZ?
FMZ (pencipta) Platform Perdagangan KuantitatifIni adalah komuniti kuantitatif yang paling profesional dalam bidang perdagangan kuantitatif, di mana anda boleh belajar, menulis, berkongsi, membeli dan menjual strategi kuantitatif; mengulas semula dalam talian dan menggunakan piringan analog untuk berdagang analog; menjalankan, terbuka, melihat piringan sebenar; menyokong hampir semua pertukaran mata wang digital utama.
Kumpulan tutorial lengkap
Tutorial gambar:
Video tutorial:
JavaScript
Tutorial, penggunaan platform dan penulisan strategi. Jika anda mempunyai asas pengaturcaraan dan perdagangan, anda boleh menulis strategi mudah dalam masa dua hari, jika anda tidak mempunyai asas pengaturcaraan, anda hanya perlu belajar asas pengaturcaraan selama satu atau dua minggu.bilibili
Terdapat juga tutorial video:Pencipta Platform Dagangan Kuantitatif - Konsep Pengurus
Pencipta Platform Dagangan Kuantitatif - Ringkasan Laman Web
Pencipta Platform Dagangan Kuantitatif - Pengurus Penghantaran
Pencipta Platform Dagangan Kuantitatif - Mencipta Komputer
Pencipta Platform Dagangan Kuantitatif - Strategi Pendaftaran, Penulisan Kod
Pencipta Platform Dagangan Kuantitatif - Strategi Lengkap, Persediaan Parameter, Import dan Import
Pencipta Platform Dagangan Kuantitatif - Alat Penyesuaian dan Fungsi Penyuntingan JauhJika anda menghadapi masalah, anda boleh melapor ke forum untuk bertanya, membincangkan, membuat permohonan kerja di platform, telegraf di forum.Telegram@Groups @Administrators, soalan biasanya akan dijawab dengan cepat.
Menyokong pembangunan tambahan ChatGPT
Platform dagangan kuantitatif FMZ mempunyai akses kepada ChatGPT sebagai alat pembangunan tambahan, dan anda boleh mengklik "ChatGPT" dalam butang jalan pintas di Pusat Kawalan untuk melompat keHalaman Alat Bantuan Chat GPT。
Bahasa mana yang boleh digunakan untuk melaksanakan strategi saya?
Perdagangan Kuantitatif FMZ DisokongJavaScript
、TypeScript
、Python
、C++
、PINE
、麦语言
、Blockly可视化
Menulis strategi reka bentuk.
SokonganTypeScript
Bahasa, yang masih ditetapkan sebagai bahasa utama semasa membuat strategiJavaScript
Kemudian anda akan menulis pada permulaan kod strategi.// @ts-check
Atau klik butang "TypeScript" di sudut kanan atas kawasan penyuntingan dasar untuk beralih keTypeScript
◎ Platform akan mengenal pasti kod secara automatik sebagai:TypeScript
Perisian ini mempunyai ciri-ciri yang berbeza.
TypeScript
Fungsi pemeriksaan jenis statik boleh membantu anda mencari kesilapan yang berpotensi semasa menulis kod dan meningkatkan kualiti kod.TypeScript
Sistem jenis yang lebih baik membolehkan anda mencari sifat dan kaedah yang anda perlukan lebih cepat semasa menulis kod, meningkatkan kecekapan pembangunan.TypeScript
Dengan cara ini, anda dapat mengatur dan mengekalkan kod anda dengan lebih baik, menjadikannya mudah dibaca dan difahami.TypeScript
Ia menawarkan ciri-ciri pemrograman berorientasikan objek yang kuat seperti antara muka, kelas, dan generik untuk membantu anda menulis kod dasar yang lebih kukuh dan boleh digunakan semula.Mengetahui salah satu daripada bahasa reka bentuk strategi ini adalah cukup. Selain menyokong cara menulis kod, strategi reka bentuk juga boleh digunakan untuk membuat strategi pembinaan modul visual (Blockly). Strategi pembinaan modul visual menggunakan strategi reka bentuk dengan cara yang lebih intuitif, tidak memerlukan pengekodan. Sangat sesuai untuk memupuk minat reka bentuk strategi untuk pemrograman awal yang cepat, transaksi kuantiti.
Blockly
Tutorial visual:
Tetapan
Python
Penggunaan program strategiPython
Penerjemah
PenggunaanPython
Menulis dasar, mengulas semula atau mendisk jika persekitaran sistem di mana tuan rumah dipasang pada masa yang samaPython2danPython3, boleh dimulakan apabila dasar mula berjalan pada baris pertamaPython
Perkembangan. contoh:#!python3
,#!python2
, maka sistem akan mencari penafsir secara automatik.#!/usr/bin/python3
。
Apakah pengurus?
PengurusDifahami sebagai pelaku strategi dagangan anda, bertanggungjawab untuk permintaan data yang rumit, penerimaan data, sambungan rangkaian, pemulangan log, dan lain-lain. Hoster berjalan di pelayan anda, walaupun kegagalan rangkaian di laman web FMZ Quantum Trading Platform tidak menjejaskan operasi hoster anda. Hoster boleh berjalan diLinux,Windows,Mac OS,Android,ARM LinuxDi mana-mana sahaja di dunia.Halaman Pengurus,Langkah-langkah pemasangan hos Linux dan langkah-langkah kemas kini hos. Log cakera yang dikendalikan oleh pengurus disimpan dalam direktori di mana prosedur pengurus berada./logs/storage
Di dalam, fail adalah:db3
PerbezaanSqlite
Boleh digunakan dalam fail pangkalan data.Sqlite
Perisian pentadbiran mengedit secara langsung, untuk pelanjutan ini dipanggildb3
Nama fail adalah nama fail pada cakera sebenar.ID
。
Perjanjian yang disokong
Mengembangkan strategi di platform dagangan kuantitatif FMZ, yang hanya boleh dilihat oleh pemegang akaun kuantitatif FMZ.Python
Paket dimuat dalam kod dasar, yang membolehkan penyetempatan dasar.
Python
Perlindungan kod:
KeranaPython
Ia adalah bahasa sumber terbuka dan sangat mudah dikompilasi, jika dasar tidak digunakan sendiri tetapi disewa, jika terdapat kebimbangan mengenai kebocoran dasar yang membolehkan dasar berjalan pada hos yang mereka terbitkan dan disewa dalam bentuk pengurusan anak akaun atau keseluruhan hos.
Python
Di sini, anda boleh melihat gambar di bawah.
Di bawah ini adalah senarai gambar:Python
Strategi: Penulis kod tidak mengenkripsi apabila mereka menggunakannya sendiri dan mengenkripsi apabila mereka meminjamkannya kepada orang lain.Python
Dasar permulaan: Edit kod berikut, anda boleh menetapkan kegunaan sendiri atau sewaPython
Adakah kod dasar disulitkan semasa ia dijalankan. Sokongan kod dasar disulitkanPython
Versi ialah:Python 2.7
Perkataan ini tidak boleh diterima.Python 3.5
Perkataan ini tidak boleh diterima.Python 3.6
Versi.
Penulis sendiri yang menjalankan kod dasar penyulitan, menggunakan kod pendaftaran untuk memberi kepada orang lain:#!python
Menggunakan koma untuk menentukan versi penerjemah Python,
Jeda, input arahan penyulitanencrypt
◦ Jika tidak ditentukanPython
Versi ditambahkan terus#!encrypt
。
#!python,encrypt
atau
#!encrypt
Penulis strategi menjalankan sendiri, tidak menggunakan kod dasar tanpa enkripsi untuk digunakan oleh orang lain melalui kod pendaftaran:
#!python,not encrypted
atau
#!not encrypted
PenghakimanPython
Adakah kod kod yang digunakan untuk mengenkripsi strategi berkesanos.getenv('__FMZ_ENV__')
, kembalikan strings"encrypt"
Penegasan sudah berkuatkuasa. Hanya disket sebenar yang sah, pengesanan semula tidak berenkripsiPython
Kode taktikal.
#!encrypt
def main():
ret = os.getenv('__FMZ_ENV__')
# 打印变量ret为字符串encrypt或者ret == "encrypt"为真,即代表加密生效
Log(ret, ret == "encrypt")
Maklumat akaun yang dikonfigurasikan di platform dagangan kuantitatif FMZ, data sensitif seperti senar enkripsi dalam parameter dasar, disulitkan di hujung pelayar. Maklumat yang disimpan di platform dagangan kuantitatif FMZ adalah maklumat yang disulitkan ("data tidak tertulis"). Hanya peranti peribadi pengguna yang dapat didekripsi dan digunakan, yang meningkatkan keselamatan data sensitif dengan ketara. Jika maklumat seperti kod dasar, tetapan parameter, atau penerangan dasar mengandungi maklumat sensitif lain, sila jangan mendedahkan atau menjual dasar tersebut.
Platform ini menyokong konfigurasi tempatan maklumat sensitif seperti maklumat berkaitan akaun bursa, kunci rahsia
Pada halaman maklumat penyesuaian bursa platform, semua kawalan kotak teks yang disamarkan disokong untuk memuat fail tempatan pengurus dengan cara laluan fail profil.RSA KEY
Cara pengesahan adalah contoh, yang menerangkan secara terperinci bagaimana untuk mengkonfigurasi maklumat sensitif di peranti di mana program hos berada.
1. mencipta kunci awam RSA, kunci peribadi.PKCS#8
Terdapat banyak alat yang boleh dicipta, seperti:openssl
Saya tidak tahu apa yang berlaku.
2. Dicipta di bursaRSA KEY
, diunggah semasa diciptaLangkah PertamaIa adalah satu-satunya kunci awam yang dicipta di Malaysia.
3. akanLangkah PertamaKunci persendirian yang dicipta ditxt
Format fail disimpan dalam direktori peer-to-peer hoster, dan juga boleh menyimpan laluan lain dalam direktori di mana program hoster berada.
4. Mengkonfigurasi pertukaran di FMZAccess Key
Di dalam kotak editor, isi di dalam akaun yang dicipta di bursa.RSA KEY
Saya tidak tahu apa yang berlaku.
5. Mengkonfigurasi pertukaran di FMZSecret Key
Di dalam kotak sunting, isiLangkah KetigaDiletakkan dalam direktori peer admintxt
Laluan untuk fail, contohnya, nama fail yang diletakkan adalah:rsaKey.txt
Dalam direktori yang sama, dokumen dan pengurus akan mengisi:file:///rsaKey.txt
. jika dokumen itu berada di dalam direktori peringkat seterusnya dalam prosedur pengurusrsa_key
Di sini, anda boleh menulis:file:///rsa_key//rsaKey.txt
◦ Jika diletakkanrsaKey.txt
File di laluan lain, yang ditetapkan dengan cara ini, perlu diperhatikan bahawa fail ini hanya menyokong penempatan di dalam direktori atau sub-katalog pada peringkat pelayan.
Oleh itu, penempatan kunci peribadi lebih selamat, dan proses terperinci boleh dilihat.Video menerangkan
Apa itu sistem retesting dan apa gunanya?
Apabila anda telah menyelesaikan kerja reka bentuk strategi dagangan kuantitatif, bagaimana anda dapat mengetahui asas-asas strategi anda, seperti logik, arah keuntungan strategi? Sudah tentu kita tidak boleh langsung menjalankan strategi untuk berdagang emas dan perak sebenar di pasaran, kita boleh menggunakan data sejarah untuk menguji strategi anda. Lihat bagaimana strategi anda menang dalam data sejarah.
Adakah data sistem retest adalah tepat, dan bagaimana dengan hasil retest?
Platform dagangan kuantitatif FMZ membahagikan mod pengukuran semula menjadiUjian semula pada tahap cakeradanUjian semula tahap analog❖ Pemindaian semula pada tahap cakera sebenar dibuat sepenuhnya berdasarkan data sejarah yang lengkap; pemindaian semula pada tahap analog dihasilkan berdasarkan data K-line sebenartick
Data digunakan untuk mengkaji semula. Kedua-duanya berdasarkan data sejarah yang sebenar, tetapi data yang lebih tepat dan lebih dipercayai.Maklumat mengenai mekanisme FMZTetapi retrospektif hanya merupakan strategi dalam data sejarah, dan data sejarah tidak sepenuhnya mewakili keadaan masa depan.
Masalah yang perlu diperhatikan semasa mengulas semula strategi bahasa yang berbeza:
JavaScriptdanC++Pembacaan semula dasar dilakukan di hujung pelayar, cakera atau komputer.WexAppPertukaran palsu (iaitu FMZ Quantum Trading Platform)WexAppPertukaran simulasi) berjalan tanpa memasang sebarang perisian, perpustakaan atau modul lain.PythonUjian semula dilakukan pada hoster, boleh dilakukan di pelayan awam yang diukur FMZ, atau boleh dilakukan di hoster pengguna sendiri.PythonJika anda memerlukan beberapa pustaka, anda perlu memasang sendiri (hanya menyokong pustaka yang biasa digunakan pada pelayan awam).
Data dalam sistem pengesanan semula
FMZ kuantitized trading platform retesting dua jenis retesting peringkat analog dan retesting peringkat cakera sebenar, retesting peringkat analog berdasarkan baseline K-line cycle yang dihasilkan oleh analogtick
, 12 titik masa pengulangan akan dihasilkan pada setiap kitaran garis K bawah, sedangkan tahap cakera sebenar dikumpulkantick
, kira-kira beberapa saat sekali, jumlah data yang besar, kelajuan ulangan lambat, oleh itu tidak boleh ulangan untuk masa yang sangat lama. FMZ's ulangan mekanisme boleh membuat strategi berdagang dalam satu K-line beberapa kali, mengelakkan keadaan yang hanya boleh menutup urus niaga harga, lebih tepat dan mengambil kira kelajuan ulangan.Pautan。
Kaedah DEBUG untuk dasar dalam sistem penyesuaian
Kaedah Javascript dihubungi semula dalam penyemak imbas Chrome di DevTools。
Cryptocurrency (mata wang digital)
Nama | Jenis | Pencerahan |
---|---|---|
Bitfinex | Objek Bursa Saham | Perdagangan terhad disokong untuk contoh:BTC_USD ,ETH_USD ,LTC_USD Jadi, perhatikan bahawa transaksi terhadap mata wang adalahUSD Harga dalam dolar |
Binance | Objek Bursa Saham | Perdagangan terhad disokong untuk contoh:BTC_USDT ,ETH_USDT ,ETH_BTC ,LTC_BTC dan sebagainya. |
OKX | Objek Bursa Saham | Perdagangan terhad disokong untuk contoh:BTC_USDT ,ETH_USDT ,ETH_BTC ,LTC_BTC dan sebagainya. |
Token | Objek Bursa Saham | Perdagangan terhad disokong untuk contoh:BTC_USDT ,ETH_USDT ,ETH_BTC ,LTC_BTC dan sebagainya. |
OKX niaga hadapan | Objek bursa niaga hadapan | Perdagangan terhad disokong untuk contoh:BTC_USD ,ETH_USD Dan sebagainya, transaksi terhadap mata wang adalahUSD , Tetapkan kod kontrak khusus (lihatexchange.SetContractType Kontrak yang disokong oleh kod kontrak ialah:this_week 、next_week 、quarter 、swap 。 |
HuobiDM | Objek bursa niaga hadapan | HuobiDM, yang bermaksud Token Futures (Token Contract), menyokong pasangan dagangan terhad seperti:BTC_USD ,ETH_USD Dan sebagainya, transaksi terhadap mata wang adalahUSD , Tetapkan kod kontrak khusus (lihatexchange.SetContractType Kontrak yang disokong oleh kod kontrak ialah:this_week 、next_week 、quarter 、swap 。 |
BitMEX | Objek bursa niaga hadapan | Pasangan transaksi adalah:XBT_USD , Tetapkan kod kontrak khusus (lihatexchange.SetContractType Kontrak yang disokong oleh kod kontrak ialah:XBTUSD 。 |
Futures Binance | Objek bursa niaga hadapan | Perdagangan terhad disokong untuk contoh:BTC_USDT ,ETH_USDT Dan sebagainya, transaksi terhadap mata wang adalahUSDT , Tetapkan kod kontrak khusus (lihatexchange.SetContractType Fungsi) kemudian kontrak adalahUSDT Kod kontrak yang disokong oleh kontrak ini ialah:swap 。 |
Pilihan Deribit | Objek Bursa Pilihan | Pasangan transaksi adalah:BTC_USD ,ETH_USD , Tetapkan kod kontrak khusus (lihatexchange.SetContractType Fungsi) kemudian, kontrak adalah kontrak tempat mata wang. |
Objek bursa niaga hadapan sistem penilaian tidak menyokong pasangan pertukaran dalam kod strategi buat sementara waktu.
Pemantauan semula peringkat analog adalah berdasarkan data K-line bawah sistem pemantauan semula, mengikut algoritma tertentu dalam rangka yang terdiri daripada nilai tertinggi, minimum, harga buka, harga tutup Bar K-line bawah yang diberikan.tick
Data, sebagai masa nyatatick
Data yang dikembalikan apabila permintaan antara muka dibuat.Pencipta menerangkan mekanisme pengukuran semula tahap analog kuantitatif。
Ujian semula tahap rak sebenar adalah benar.tick
Data peringkat adalah dalam urutan masa Bar.tick
Strategi untuk data peringkat adalah menggunakan pengulangan peringkat cakera yang lebih dekat kepada realiti.tick
Adalah data yang direkodkan secara sebenar, bukan penjanaan analog; menyokong data kedalaman, pemutaran data rekod urus niaga pasaran, menyokong kedalaman tersuai, menyokong data penulisan; data penulisan peringkat cakera sebenar menyokong maksimum 50MB, tidak mengehadkan jangka masa penulisan semula dalam had data, boleh meningkatkan jangka masa penulisan semula sebanyak mungkin jika diperlukan, boleh menurunkan tetapan nilai digit dalaman, tidak menggunakan data penulisan semula untuk meningkatkan jangka masa penulisan semula.GetDepth
、GetTrades
Fungsi mendapatkan data transaksi yang dikembalikan. Pada saat data transaksi pada garis masa, panggilanGetTicker
,GetTrades
,GetDepth
,GetRecords
, tidak akan berulang kali memaksa masa bergerak pada timeline penjumlahan semula ((tidak akan mencetuskan lompatan ke masa data pasaran seterusnya)); untuk satu fungsi di atas, panggilan berulang akan memaksa masa penjumlahan semula bergerak pada timeline penjumlahan semula ((lompatan ke masa data pasaran seterusnya)); untuk penjumlahan semula, tidak boleh memilih masa yang terlalu awal, mungkin tidak ada data peringkat pasaran yang terlalu awal;
Pengesanan semula tahap cakera sebenar kini disokong:
Fungsi penyesuaian parameter sistem penyesuaian FMZ adalah untuk menetapkan pilihan penyesuaian untuk setiap parameter semasa penyesuaian, seperti berikut:
Menghasilkan kombinasi parameter dan mengulang semula (iaitu, setiap kombinasi parameter diulang semula); parameter dasar hanya boleh disesuaikan dalam sistem pengulang.
Sebagai contoh, untuk menetapkan pilihan penyesuaian parameter pada halaman penyesuaian:
Pengukuran semula mod pengoptimuman parameter:
Dalam halaman penyuntingan dasar, dalam bahagian "Sistem penyuntingan semula", anda boleh menetapkan pilihan seperti konfigurasi penyuntingan semula, parameter strategi untuk melakukan penyuntingan semula. Konfigurasi penyuntingan semula digunakan untuk menetapkan jangka masa penyuntingan semula, tempat dagangan yang disuntingan semula, titik kali penyuntingan semula, kos prosedur, dan lain-lain. Parameter strategi adalah pilihan parameter untuk menetapkan dasar. Apabila parameter penyuntingan ini ditetapkan dengan baik, anda boleh mengikut parameter penyuntingan semula yang ditetapkan, maka bagaimana untuk menyimpan maklumat konfigurasi yang ditetapkan dengan baik?
DenganJavaScript
Sebagai contoh, klik "Simpan tetapan semula ke fail sumber":
JavaScript
/Python
/C++
/麦语言
Setup untuk menyimpan semula ke format fail sumber adalah sedikit berbeza:
/*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
Kaedah meminta URL tersuai (yang boleh diakses secara terbuka) untuk mendapatkan sumber data luaran untuk ditinjau semula, dengan parameter permintaan tambahan seperti berikut:
Parameter | Makna | Pencerahan |
---|---|---|
simbol | Nama jenis | Contohnya: BTC_USD_OKCoin_EN |
eid | Bursa | Contohnya: OKCoin_EN |
bulat | Kecekapan harga | Jadi jika 3 adalah nilai yang akan dikembalikan, maka harga yang akan dikembalikan adalah nilai yang akan didapatkan apabila anda mengalikan 1000 dengan bilangan bulat. |
berpusing | Kecekapan kuantitatif | Jadi jika 2 adalah bilangan dalam data yang dikembalikan, maka bilangan yang dikembalikan adalah bilangan 100 atau bilangan bulat. |
tempoh | Jangka masa bar (mm) | Sebagai contoh, 60000 untuk permintaan bar minit |
kedalaman | Pengukuran kedalaman | 1-20 |
perdagangan | Adakah perlu memisahkan data? | benar/salah |
daripada | Masa permulaan | Jadual masa UNIX |
kepada | Masa tamat | Jadual masa UNIX |
Perhatikan:
round与vround是为了避免网络传输过程中浮点数的精度丢失设计的两个参数,价格数据和成交量、订单量数据都采用整型传输。
Contoh data yang dijumpai:
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 mestilah salah satu daripada dua format berikut (yang diiktiraf secara automatik oleh sistem):
Pengukuran semula tahap Bar biasa
{
"schema":["time","open","high","low","close","vol"],
"data":[[1564315200000,9531300,9531300,9497060,9497060,787],[1564316100000,9495160,9495160,9474260,9489460,338]]
}
Data yang diulas semula pada tahap tik (mengandung maklumat kedalaman cetak, format kedalaman adalah [harga, kuantiti], boleh mempunyai pelbagai tahap 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]]
}
Pencerahan
Bidang | Pencerahan |
---|---|
skim | Tentukan sifat baris dalam data array, berbeza dengan huruf kecil, hanya untuk time, open, high, low, close, vol, asks, bids |
data | Array yang merujuk kepada satu barisan data yang disimpan mengikut skema |
Format data
Bidang | Pencerahan |
---|---|
Permintaan/Tawaran | [Harga, kuantiti,...] |
perdagangan | [Waktu, Arah, 0: Beli, 1: Jual], Harga, Kuantiti,...] |
Maklumat mengenai kadar pembiayaan: Sebagai contoh, data kadar modal tambahan diperlukan untuk penyesuaian niaga hadapan. Sumber data yang disesuaikan diperlukan. Sebagai contoh, struktur data kadar modal yang diminta untuk penyesuaian niaga hadapan adalah seperti berikut.
{
"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 dikeluarkan oleh sistem pengesanan 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 tersuai:
Tentukan sumber data, alamat:http://xxx.xx.x.xx:9090/data
Perkhidmatan data tersuai, 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)
}
Percubaan strategi: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 digambarkan oleh data yang disesuaikan dalam sistem pengukuran:
Strategi untuk mencetak maklumat:
Platform Perdagangan Kuantitatif FMZ Sudah TerbukaJavaScript
Bahasa danPython
Enjin ulangan asli bahasa yang menyokong tetapan masa ulanganSiklus garis K bawah。
Tombol cepat untuk menukar halaman penyuntingan dasar dan halaman penarikan balik dasar
PenggunaanCtrl + ,
Tekan dan tahan butang, beralih ke halaman Ulasan semula dan halaman Penyuntingan DasarCtrl
Tekan sahaja selepas mengetik.,
Tombol.
Tombol pintasan untuk menyimpan dasar
PenggunaanCtrl + s
Tombol, simpan dasar.
Tombol pintasan untuk memulakan pengalihan semula
PenggunaanCtrl + b
Tombol, mulakan pengesanan semula.
Nama fungsi | Pencerahan |
---|---|
main() |
Untuk fungsi input. |
onexit() |
Untuk fungsi sweep tail pada masa keluar normal, masa pelaksanaan terpanjang adalah 5 minit, boleh tidak dinyatakan, jika masa berlalu akan memberikan kesalahanmenggangguKesilapan. |
onerror() |
Fungsi yang mencetuskan pelaksanaan untuk keluar dari luar biasa mempunyai masa pelaksanaan maksimum 5 minit dan tidak boleh dinyatakan, tetapi boleh digunakan untuk menghidupkan atau mematikan fail.Python Bahasa MalaysiaC++ Kaedah yang ditulis dalam bahasa tidak menyokong fungsi ini. |
init() |
Untuk fungsi inisialisasi, program dasar akan dipanggil secara automatik pada permulaan, tetapi tidak boleh diisytiharkan. |
onerror()
Fungsi tersebut.onerror()
Fungsi tidak akan mencetuskan lagi.onexit()
Fungsi tersebut.onexit()
, Mengurus kerja mengepam, yang paling lama dilakukan selama 5 minit, dilaksanakan oleh pengguna.
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 melaksanakan fungsi inisialisasiinit()
, akan dijalankan secara automatik apabila dasar mula berjalaninit()
Fungsi, menyelesaikan tugas inisialisasi yang direka dalam dasar.
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()
Apabila berlaku sesuatu yang luar biasa, ia akan mencetuskanonerror()
Fungsi yang tidak disokongPython
、C++
Strategi bahasa.
function main() {
var arr = []
Log(arr[6].Close)
}
function onerror() {
Log("错误")
}
# python不支持
// C++不支持
DalamJavaScript
、Python
、C++
Kaedah yang ditulis dalam bahasa memerlukan panggilan dalam gelung utama strategiSleep()
Fungsi ini digunakan untuk mengawal kelajuan kemunduran semasa pengukuran semula, dan digunakan untuk mengawal selang masa dalam rundingan strategi semasa pemasangan semula untuk mengawal kekerapan permintaan untuk mengakses antara muka API bursa.
Contoh kerangka kerja asas untuk strategi mata wang 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);
}
}
Sebagai contoh yang paling mudah, jika saya ingin memaparkan harga 100 setiap satu saat di bursa dan jumlah pembayaran 1 boleh 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 Templatadalah modul kod yang boleh digunakan semula dalam platform dagangan kuantifikasi FMZ dan merupakan satu kategori kod dasar. Jika kategori ditetapkan sebagaiPerpustakaan TemplatApabila anda membuat perpustakaan kelas templat dalam perpustakaan dasar akaun yang kini didaftarkan oleh pencipta, anda tidak boleh mengubahnya menjadi dasar biasa.
JavaScript
Perpustakaan templat bahasa:
Python
Perpustakaan templat bahasa:
C++
Perpustakaan templat bahasa:
Fungsi eksport untuk perpustakaan kelas templat Fungsi eksport adalah fungsi antara muka untuk perpustakaan kelas templat, yang boleh dipanggil dengan rujukan kepada perpustakaan kelas templat tersebut. Fungsi eksport diisytiharkan dalam perpustakaan kelas templat dan contoh kod yang dilaksanakan 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 perpustakaan kelas templat Perpustakaan template juga boleh menetapkan parameter antara muka sendiri, parameter perpustakaan template digunakan dalam kod perpustakaan template dalam bentuk pembolehubah global.
Set parameter untuk perpustakaan kelas templat:
Kod perpustakaan 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;
}
Dipetik di atasPerpustakaan TemplatContoh kod 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 perpustakaan templat
Setelah memilih rujukan dalam tetingkap templat halaman penyuntingan dasar, anda boleh menyimpan dasar.
exchange
Ia boleh dilihat sebagai objek bursa, objek bursa pertama yang ditambahkan dalam parameter dasar secara lalai. Semua interaksi dengan bursa dilaksanakan melalui fungsi dalam objek ini.
Tambah objek pertukaran
Tambah objek bursa pada halaman cakera sebenar
Objek bursa yang ditambahkan adalah yang sesuai dengan kod.exchange
Objek:
function main() {
Log("实盘页面或者回测页面上,添加的第一个交易所对象名字:", exchange.GetName(), ",标签:", exchange.GetLabel())
}
def main():
Log("实盘页面或者回测页面上,添加的第一个交易所对象名字:", exchange.GetName(), ",标签:", exchange.GetLabel())
void main() {
Log("实盘页面或者回测页面上,添加的第一个交易所对象名字:", exchange.GetName(), ",标签:", exchange.GetLabel());
}
Ia boleh difahami sebagai penyimpanan yang sama.exchange
Matriks semua objek pertukaran yang mempunyai objek pertukaran mungkin mengandungi beberapa objek pertukaran, tetapi tidak semua objek yang mempunyai objek pertukaran.exchanges[0]
Maksudnyaexchange
。
Objek bursa yang ditambahkan sesuai dengan kod dasarexchanges[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
dalam strukturStatus
Sifat-sifat.
Nama pemalar | Definisi | Nilai |
---|---|---|
ORDER_STATE_PENDING | Tidak selesai | 0 |
ORDER_STATE_CLOSED | Sudah selesai | 1 |
ORDER_STATE_CANCELED | Sudah dibatalkan | 2 |
ORDER_STATE_UNKNOWN | Status tidak diketahui (yang lain) | 3 |
ORDER_STATE_UNKNOWNStatus, boleh dipanggilexchange.GetRawJSON()
Untuk mendapatkan maklumat mengenai status pesanan asal, lihat dokumen bursa dan lihat perihalan.
Nama pemalar dalam jadual boleh digunakan secara langsung dalam kod dasar danOrder
StrukturStatus
Perbandingan sifat, menilai sama ada sama untuk menentukan status pesanan. Mencetak nama pemalar ini akan menunjukkan iniNama pemalarBersepaduNilaiPerbezaan dalam nama konstan yang lain tidak lagi dijelaskan.
Order
dalam strukturType
Sifat-sifat.
Nama pemalar | Definisi | Nilai |
---|---|---|
ORDER_TYPE_BUY | Bayar | 0 |
ORDER_TYPE_SELL | Penjualan | 1 |
Position
dalam strukturType
Sifat-sifat.
Nama pemalar | Definisi | Pencerahan | Berlaku | Nilai |
---|---|---|---|---|
PD_LONG | Tunjukkan kedudukan berbilang kepala | Penggunaan niaga hadapan mata wang digitalexchange.SetDirection("closebuy") Tetapkan hala tuju pegangan untuk meratakan jenis pegangan |
Masa hadapan mata wang digital | 0 |
PD_SHORT | Tunjukkan kedudukan kepala kosong | Penggunaan niaga hadapan mata wang digitalexchange.SetDirection("closesell") Tetapkan hala tuju pegangan untuk meratakan jenis pegangan |
Masa hadapan mata wang digital | 1 |
Order
dalam strukturOffset
Sifat-sifat.
Nama pemalar | Definisi | Nilai |
---|---|---|
ORDER_OFFSET_OPEN | Perintah pembukaan | 0 |
ORDER_OFFSET_CLOSE | Perintah untuk simpanan | 1 |
Parameter strategi yang ditetapkan pada antara muka strategi dalam kod strategi adalah dalam bentuk pembolehubah global.JavaScript
Dalam bahasa ini, anda boleh mengakses atau mengubah nilai parameter yang ditetapkan pada antara muka dasar secara langsung.Python
digunakan untuk mengubah suai global dalam fungsi dasarglobal
Kata Kunci:
Jenis parameter:
Variabel | Penerangan | Nota: | Jenis | Nilai lalai | Pencerahan |
---|---|---|---|---|---|
nombor | Jenis nombor | Nota: | Jenis nombor (number) | 1 | Kaedah C++ adalah jenis titik terapung. |
senar | String | Nota: | String (string) | Halo FMZ | Nilai lalai tidak memerlukan tanda petik apabila dimasukkan, dan semua input akan diproses sebagai strings. |
kotak | Lemparan bawah | Nota: | Leret bawah (selected) | 1|2|3 | Variabel combox itu sendiri adalah nilai numerik yang mewakili indeks sasaran yang dipilih oleh kawalan dropbox, dengan kandungan tajuk dropbox pertama adalah 1, nilai indeksnya adalah 0, dan seterusnya. |
bool | Pilih pilihan | Nota: | Bulat (true/false) | betul | Jika anda memilih, variabel bool adalah benar, jika anda tidak memilih, variabel bool adalah salah. |
rahsiaString | Senar Enkripsi | Nota: | Senar penyulitan (string) | kata laluan | Penggunaan yang sama seperti senar, senar penyulitan akan dihantar dengan enkripsi dan tidak menghantar teks yang jelas. |
number
、string
、combox
、bool
、secretString
。Parameter bergantung pada tetapan:
Anda boleh menetapkan satu parameter supaya parameter lain berdasarkan pilihan parameter itu dapat menunjukkan dan menyembunyikan; contohnya kita menetapkan parameternumberA
, adalah jenis bilangan.numberA
Ini berdasarkan satu parameter:isShowA
(Bull Type) keputusan palsunumberA
Tunjukkan dan sembunyikan.numberA
Variabel ditetapkan pada parameter antara muka sebagai:numberA@isShowA
。
Jadi, tidak ada pilihan.isShowA
ParameternumberA
Parameter disembunyikan. Untuk jenis parameter kawalan drop-down, parameter bergantung sebahagian untuk menentukan sama ada sama dengan pilihan drop-down.Nilai indeks❖ Sama juga denganisShowA
Sebagai contoh, parameter, apabila parameter menetapkan pembolehubah, ia ditulis sebagai:numberA@combox==2
。numberA
Parameter adalah berdasarkancombox
Apakah parameter dipilih untuk menunjukkan atau menyembunyikan pilihan ketiga ((indeks 0 untuk pilihan pertama, indeks 1 untuk pilihan kedua, indeks 2 untuk pilihan ketiga)).
Parameter antara muka dasar, kawalan interaksi, fungsi pengumpulan parameter pada templat:
Tambah dengan hanya memulakan dengan penerangan parameter yang digabungkan pada permulaan.(?第一组)
Walaupun begitu, ia adalah satu perkara yang sangat penting untuk difahami.
Apabila menggunakan strategi, parameter akan dipaparkan dalam kumpulan:
Nilai lalai parameter disimpan:
Jika anda ingin menyimpan parameter dasar secara lalai, anda boleh mengklik selepas mengubah parameter dasar semasa mengulang.保存回测设置
Tombol.
Walau bagaimanapun, parameter dasar yang ditetapkan boleh disimpan dalam bentuk kod dalam dasar:
/*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]]
*/
Sesetengah fungsi akan disertakan dengan asal permintaan yang dikembalikan apabila dipanggilJSON
Data, yang semula jadiJSON
Data yang disimpan di objek yang dikembalikanInfo
Dalam sifat tersebut. Oleh kerana ia bukan antara muka yang dikunjungi oleh sebuah bursa, tiada data yang dikembalikan pada masa pengembalianInfo
Sifat, berikut adalah penerangan sifat utama bagi setiap struktur data.
Dapatkan semua sejarah transaksi (bukan milik anda)exchange.GetTrades()
Fungsi ini akan kembalikan.
{
Id : 9585306, // 交易记录ID,如果交易所接口没有提供订单ID则使用时间戳填充
Time : 1567736576000, // 时间(Unix timestamp 毫秒)
Price : 1000, // 价格
Amount : 1, // 数量
Type : 0 // 订单类型,参考常量里的订单类型,0即为ORDER_TYPE_BUY,ORDER_TYPE_BUY的值为0
}
Pasaran pasaran adalahexchange.GetTicker()
Fungsi ini akan kembalikan.
{
Info : {...}, // 请求交易所接口后,交易所接口应答的原始数据,回测时无此属性
High : 1000, // 最高价,如果交易所接口没有提供24小时最高价则使用卖一价格填充
Low : 500, // 最低价,如果交易所接口没有提供24小时最低价则使用买一价格填充
Sell : 900, // 卖一价
Buy : 899, // 买一价
Last : 900, // 最后成交价
Volume : 10000000, // 最近成交量,原则上现货成交量单位为交易币种(baseCurrency),期货成交量单位为合约张数。如果交易所接口没有提供此类数据则使用交易所接口现有的数据填充,例如可能为计价币(quoteCurrency)为单位的成交量
Time : 1567736576000 // 毫秒级别时间戳
}
StandardOHLC
Struktur, digunakan untuk melukis garis K dan analisis pengiraan penunjuk.exchange.GetRecords()
Fungsi akan kembali kepada susunan struktur ini.Record
Struktur ini mewakili tiang K, iaitu garis K.BAR
。Record
AntaraTime
Waktu permulaan untuk kitaran tiang K ini.
{
Time : 1567736576000, // 一个时间戳,精确到毫秒,与Javascript的new Date().getTime()得到的结果格式一样
Open : 1000, // 开盘价
High : 1500, // 最高价
Low : 900, // 最低价
Close : 1200, // 收盘价
Volume : 1000000 // 交易量,原则上现货成交量单位为交易币(baseCurrency),期货成交量单位为合约张数,如果交易所接口没有提供此类数据则使用交易所接口现有的数据填充,例如可能为计价币(quoteCurrency)为单位的成交量
}
Struktur pesanan boleh diukur denganexchange.GetOrder()
、exchange.GetOrders()
Fungsi ini akan kembalikan.exchange.GetOrders()
Kembali adalah array struktur atau array kosong jika tiadaPerintah yang belum selesaiKembali[]
, iaitu himpunan bilangan 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 : "" // 现货订单中该属性为""即空字符串,期货订单该属性为具体的合约代码
}
Perintah kedalaman pasaran.exchange.GetDepth()
Fungsi kembali ke struktur dataTawaran、TanyakanStruktur data elemen dalam aritmatik.
{
Price : 1000, // 价格
Amount : 1 // 数量
}
Di sini, anda boleh melihat apa yang berlaku.exchange.GetDepth()
Fungsi ini akan kembalikan.
{
Asks : [...], // 卖单数组,MarketOrder数组,按价格从低向高排序
Bids : [...], // 买单数组,MarketOrder数组,按价格从高向低排序
Time : 1567736576000 // 毫秒级别时间戳
}
Maklumat akaun, olehexchange.GetAccount()
Fungsi kembali; data dalam struktur yang dikembalikan berkaitan dengan pasangan urus niaga yang sedang ditetapkan; kod kontrak yang 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表示的资产用于挂单的冻结数量
}
Maklumat kedudukan yang dipegang dalam dagangan niaga hadapanexchange.GetPosition()
Fungsi kembali ke sini.Position
StrukturKumpulan。
{
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 samping itu, ia juga boleh menjadi salah satu faktor yang menyebabkan pencemaran.exchange.GetPosition()
Fungsi yang dikembalikanPosition
Array struktur. Untuk struktur data yang disimpanFrozenAmount
、Profit
、Margin
Sifat, kerana data yang diberikan oleh bursa tidak seragam, objek yang berbeza dipanggil oleh bursaexchange.GetPosition()
Definisi data yang dikembalikan pada antara muka mungkin berbeza. Sebagai contoh, beberapa bursa menyimpan data beku tanpa kedudukan, ketikaFrozenAmount
Untuk 0; jika perlu, data tertentu boleh digunakanInfo
Pengkajian pengiraan data mentah dalam sifat.
Maklumat pasaran untuk jenis dagangan,exchange.GetMarkets()
Fungsi yang dikembalikan mengandungiMarket
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 : {...} // 交易所该品种的原始数据
}
Oleh kerana tahap sokongan untuk data maklumat pasaran berbeza di setiap bursa, bidang yang tidak disokong oleh bursa akan diabaikan. Semua bidang di atas diambil dari data mentah antara muka bursa, dan secara khusus boleh ditanyakan.Info
Kandungan halaman.
Version()
, Mengembalikan nombor versi sistem semasa.
Sleep(Millisecond)
, fungsi tidur, untuk menghentikan program untuk sementara waktu. Nilai parameter:Millisecond
Untuk jenis nilai. Parameter adalah bilangan mili saat, contohnya:Sleep(1000)
Untuk tidur sejenak.
Menyokong operasi dengan masa henti kurang daripada 1 ms, seperti menetapkanSleep(0.1)
◎ Menyokong parameter minimum ialah0.000001
, tidur tidur pada tahap nanodetik. 1 nanodetik sama dengan1e-6
Permulaan:
Perhatikan:
digunakanPython
Apabila menulis strategi bahasa, operasi untuk julat rundingan, masa menunggu harus digunakanSleep(Millisecond)
Fungsi. Tidak disyorkanPython
Perbezaantime
Ku.time.sleep(second)
Fungsi. Kerana digunakan dalam dasartime.sleep(second)
Fungsi ini membolehkan program dasar untuk menunggu beberapa saat semasa mengulangi.second
Parameter adalah bilangan saat untuk menetapkan hentian), yang menyebabkan ulangan dasar sangat lambat.
IsVirtual()
, menentukan sama ada dasar semasa dijalankan untuk ujian semula analog. Nilai pulangan: jenis Boolean.
Kembali ke status simulantrue
, diska sebenar kembalifalse
。
Mail(smtpServer, smtpUsername, smtpPassword, mailTo, title, body)
, menghantar e-mel fungsi. Parameter nilai: semua parameter adalah jenis senar. Kembali nilai: Burr jenis, menghantar berjaya kembalitrue
。
smtpServer
Untuk menghantar melsmtp
Perkhidmatan,smtpUsername
Di sini, anda boleh melihat gambar di bawah.smtpPassword
Kata laluan SMTP untuk e-mel (bukan kata laluan log masuk e-mel)mailTo
Untuk mendapatkan akaun e-mel, anda perlu mendaftarkan akaun e-mel anda.title
Di samping itu, ia juga boleh digunakan untuk mengemas kini laman web.body
Isi e-mel yang dihantar, contohnya:
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")
qq89520Terdapat satu masalah, adakah fungsi C akan cuba semula atau hanya sekali sahaja.
Haiwwhai_C ((function, args...) ini adalah 3s secara lalai? Adakah anda boleh menukar secara lalai untuk meletakkan _CDelay ((1000) sebelum _C ((function, args...)?
makan malamKluster: Jika anda mencipta 1000 bot secara serentak, tanpa tekanan, anda boleh mencipta beberapa pengurus untuk menyebarkan tugas. Terdapat contoh kod untuk membina kluster? Bagaimana untuk membina pelbagai hos untuk mengagihkan tugas
wangyj1Log ((talib.help (('MACD')); hanya boleh digunakan di bawah js, Python tidak mempunyai sifat talib.help...
cjz140Apakah perbezaan antara fungsi _C (function, args...) dan fungsi Sleep, yang saya rasa bermaksud menunggu untuk mencuba semula?
3263243yBagaimana untuk mengosongkan ErrorFilter selepas SetErrorFilter? tanpa menapis mesej ralat.
qq47898077Adakah ada cara lain untuk menggunakan perpustakaan pihak ketiga?
qq47898077Apakah yang harus diisi oleh kelas induk jika anda ingin mewarisi kelas baru yang ditakrifkan oleh objek bursa?
ethanwuAdakah terdapat alat debugging tempatan?
penglihengApakah exange.IO (("status") itu?
penglihengAdakah fungsi sell tidak boleh digunakan lagi? by boleh digunakan, bagaimana untuk menjual?
penglihengAdakah fungsi sell tidak boleh digunakan lagi? by boleh digunakan, bagaimana untuk menjual?
penglihengJS tak pandai bahasa Inggeris, haha, nak tanya support ES6 tak?
penglihengJS tak pandai bahasa Inggeris, haha, nak tanya support ES6 tak?
Don.Bagaimana kita menulis garis tengah bagi volume?
ZjuturtleApakah yang akan dikembalikan jika tidak berjaya membeli pada harga pasaran?
Lelaki NingFonts baru ini nampak cantik.
ikan hippopotamusRangkaian ujian Bitmex ((testnet.bitmex.com) juga mempunyai antara muka API, tetapi pada masa ini pertukaran hanya boleh memilih stesen utama Bitmex, alamat dokumen API adalah https://testnet.bitmex.com/app/apiOverview Bagaimana anda boleh menyokongnya?
cxjijinvar ret1 = exchanges[0].IO (("api", "future_estimated_price", "symbol=btc_usd"); Log (('ok niaga hadapan anggaran harga penghantaran', ret1); https://dn-filebox.qbox.me/d1ed268c1e75753c5d289447d279aa9d81e41b5f.png Jika anda menggunakan antara muka lain untuk membuat laporan kesalahan, mengapa?
AllenfrostlineSaya ingin bertanya apa perbezaan antara realTicker dan Ticker? Strategi untuk menulis semula suite baru-baru ini muncul pada masa yang sama tetapi tidak kelihatan ada sebutan dalam API yang pertama.
penglihatanHalo, sebagai pemaju Python, apa yang anda rasa dokumen API anda menulis? beberapa antara muka fungsi bidang kelihatan pelik, bolehkah anda menulis dokumen seperti githubpage dan readdocs?
AllenfrostlineGetAccount: [EAPI: Rate limit exceeded] Nak tanya bagaimana ini boleh diselesaikan?
zhjx2314Tidak menyokong StochRSI, boleh ditambah secepat mungkin
yhfggAdakah skrip di pelayan awan Ali sendiri atau botvs cluster?
yhfggApakah versi python yang anda gunakan?
FkyslyPenerangan GetFee sepatutnya ialah yang mengembalikan struktur Fee, minus satu kata.
zkwapAdakah cara memanggil talib menggunakan js?
yhfggMemeriksa dokumentasi Python
Wmjbs123Adakah latar belakang kod editor strategi boleh menjadi hitam? mata putih yang menusuk, menulis kod pada waktu malam, mudah rabun.
Don.Bagaimana untuk menetapkan ringkasan dalam akhbar WeChat robot?
Bilangan: GilaBolehkah anda menambah satu bidang dengan harga sama dalam struktur pesanan?
Anak kecil.GetOrders: Dapatkan semua pesanan yang belum selesai, kembalikan struktur array Order, dalam perdagangan Bitcoin ETH di China, hanya mengembalikan 10 item yang paling baru, apakah terdapat fungsi yang mengembalikan semua pesanan yang belum selesai di China Bitcoin ETH, yang bermaksud platform lain boleh menggunakan GetOrders untuk mengembalikan semua, hanya hantu ini Cina Bitcoin kembali 10 item,
yhfggFungsi matematik yang diperlukan untuk teori kebarangkalian statistik, di mana ia digunakan?
jiebangApakah maksud nilai pulangan fungsi $.Cross ((x, y)?
Nama ibu sayaLogReset akan mengosongkan semua log, dengan parameter nombor untuk menentukan rekod yang akan disimpan Bagaimana untuk memadamkan beberapa log terkini?
EdwardgywAdakah fungsi CORRE dalam talib seolah-olah tidak dipindahkan atau terlepas?
Gunung miskin Yang YangTidak kelihatan ada ciri rujukan penunjuk!
KecilSaya tidak faham, terlalu lama, selesai, terima kasih
KecilBagaimana untuk menulis nombor dalam array, saya menggunakan records.remove ((records[0]) seolah-olah tidak berfungsi
ularayuJika anda menggunakan ATR, anda boleh menggunakan ATR pada hari-hari.
ularayuJika anda menggunakan ATR, anda boleh menggunakan ATR pada hari-hari.
57278863Belajar bagaimana untuk mendapatkan harga dan pesanan pada niaga hadapan tradisional, maaf, asasnya tipis.
kirinContoh perdagangan niaga hadapan tradisional!
KecilBolehkah anda menulis contoh perdagangan niaga hadapan tradisional?
KecilBagaimana saya boleh mencetak status simpanan, bagaimana saya boleh mencetak status simpanan obyek, bagaimana saya boleh mendapatkan status simpanan simpanan simpanan dan simpanan kosong, dan juga GetTicker (), bagaimana saya boleh mendapatkan harga minggu, minggu berikutnya, dan suku pada minggu itu. Saya menulis minggu, minggu berikutnya, dan suku pada minggu itu.
cxjijinAdakah bursa niaga hadapan boleh menggunakan GetTicker untuk mendapatkan pasaran? Apakah jenis pasaran kontrak yang dikembalikan (minggu, minggu seterusnya...)?
MenjualAdakah anda boleh menambah StochRSI?
momoxCancelOrder ((orderId) untuk membatalkan pesanan berdasarkan nombor pesanan, kembalikan true atau false, tanya true= sel telah berjaya dibatalkan, betul?
momox_G(K, V) boleh disimpan global dictionary Adakah kaedah ini menyimpan global variabel yang boleh digunakan untuk berkongsi data antara dasar yang berbeza?
flufy3dKemasukan
SifarAnda boleh menetapkan semula log pendapatan dengan menggunakan LogProfitReset.
xyBolehkah anda menyalin EA secara langsung?
sjironmanSaya rasa platform ini sangat hebat, lebih banyak interaksi dalam kumpulan.
KecilBahasa apa ini, ada bahan untuk belajar?
jxhbtcData error seminggu tidak boleh disambungkan ke bot.
DyahhuAdakah indeks TA hanya untuk mengira harga penutupan?
btcrobotHai, dunia.
Mimpi kecilFungsi _C akan mencuba semula tanpa berfikir sehingga hasil yang berjaya diperoleh.
Mimpi kecilPerpustakaan talib untuk python memerlukan pemasangan.https://www.botvs.com/bbs-topic/669 boleh lihat catatan ini.
Mimpi kecilSleep ialah program yang tidak melakukan apa-apa, menunggu parameter ditetapkan dalam beberapa mili saat, _C ialah fungsi yang dipanggil semula sekali parameter yang dihantar.
Mimpi kecilTanpa mewarisi, JS langsung dibungkus pada objek {name: "objek baru", old_exchange : exchange[0],...... }
Mimpi kecilTerdapat penyunting tempatan, pemalam sinkronisasi jauh, yang pada dasarnya adalah penyunting tempatan, debugging jauh.
Mimpi kecilBoleh datang ke kumpulan QQ,^^ mudah dibincangkan~
Mimpi kecilDalam dokumentasi API, warna kelabu bermaksud fungsi ini tidak mempunyai banyak penjelasan yang terbuka, menunjukkan wakil kelabu, biru mempunyai lebih banyak penjelasan, dan itu sahaja.
Mimpi kecilES6 tidak disokong buat masa ini ^^
Mimpi kecilBoleh ke kumpulan QQ saya, jelaskan soalan saya, saya akan menjawab ^^
Mimpi kecilJika anda membeli barang yang tidak sesuai dengan harga yang anda inginkan, anda akan mendapat satu kesilapan dan anda tidak akan membuat pesanan (yang sebenarnya adalah membeli, tidak cukup wang!)
ZjuturtleSebagai contoh, OKCoin, jika jumlah yang dibeli melebihi jumlah yang dipegang, apa yang akan dikembalikan?
Mimpi kecilSaya akan kembalikan satu nombor pesanan di OK Futures.
SifarSudah menyokong pertukaran transaksi pada masa berjalan, memerlukan muat turun hos terkini. Sokongan Bter/Poloniex Perincian API dokumentasi Fungsi urus niaga gambar di bawah ((bersihkan cache penyemak imbas dan kemas semula jika tidak dapat dilihat)
Mimpi kecilQQ saya, saya akan membantu anda mencari soalan anda.
Ibu bapa profesionalJika anda ingin membuat senarai putih, saya akan menetapkan IP hos?
Mimpi kecilIni adalah pautan bawah tanah yang tidak dibuat pelayan tidak bertindak balas. Adakah anda menetapkan alamat IP semasa meminta API KEY?
Ibu bapa profesionalIni memalukan... Saya ok boleh menjalankan strategi yang telah gagal pada zaman 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 Zaman Bitcoin Kesilapan GetAccount: timeout 2017-05-23 21:08:02 Zaman Bitcoin Kesilapan GetAccount: timeout 2017-05-23 21:07:40 Zaman Bitcoin Kesilapan GetAccount: timeout 2017-05-23 21:07:20 Mulakan semula Adakah masalah senarai putih IP???
Mimpi kecilPelayan pertukaran tidak bertindak balas, protokol TCP tidak ditubuhkan dan tiga kali berjabat tangan tidak dilakukan.
Ibu bapa profesionalA connection attempt failed because the connected party did not properly respond after a period of time. A connection attempt failed because the connected party did not properly respond after a period of time. A connection attempt failed because the connected party did not properly respond after a period of time.
Mimpi kecilHello! Saya bercakap mengenai fungsi exchange.IO (
Ibu bapa profesionalPercubaan sambungan gagal kerana pihak yang disambungkan tidak bertindak balas dengan betul selepas tempoh masa,
Ibu bapa profesionalAdakah Zaman Bit tidak menyokong?
Mimpi kecilhttps://dn-filebox.qbox.me/a709b30c6cc0a3565234b9e0c99b073f7ba8b454.png Mungkin boleh.
Lelaki NingSebagai contoh, saya ingin melakukan perdagangan semua mata wang untuk poloniex, tetapi hanya beberapa mata wang yang disokong oleh BOTvs, dan exchange.IO nampaknya tidak menyokong Pnet.
Mimpi kecilIa boleh dipanggil sebagai exchange.IO.
Lelaki NingBagaimana pula dengan API yang memerlukan pengesahan akaun?
Mimpi kecilJika API yang tidak memerlukan pengesahan akaun boleh digunakan dengan httpQuery (lihat dokumentasi BotVS), API urus niaga sebenar memerlukan akses.
Mimpi kecilParameter boleh dihantar menggunakan API HttpQuery: https://www.okcoin.com/api/v1/future_estimated_price.do?symbol=btc_usd. Untuk API pertukaran yang tidak memerlukan pelaksanaan pengesahan akaun, gunakan fungsi HttpQuery di platform secara langsung, yang berkaitan dengan akaun hanya menggunakan IO API (IO tidak menyokong API pelaksanaan yang tidak memerlukan pengesahan ini). Posting: https://www.botvs.com/bbs-topic/850
penglihatanTerima kasih, saya berharap anda mempunyai dokumentasi API yang baik.
Mimpi kecilDi mana anda boleh melihat API realTicker?
Mimpi kecilhttps://dn-filebox.qbox.me/fe1a6f5563ed43a5357f858ecf8a50239619228e.png Dokumen API adalah bahasa JavaScript. Disebutkan, versi python dijelaskan di bahagian atas halaman Komuniti Komuniti Perbuatan.
SifarHi, terima kasih atas cadangan, dokumen API sedang dibina semula.
Mimpi kecilSelamat datang ~ menunjukkan bahawa frekuensi akses melebihi had. https://dn-filebox.qbox.me/a09498920d04cac62624b7438a058d2098d8fb00.png Adakah anda menggunakan fungsi Sleep (1000) dalam dasar anda?, 1000 ini adalah untuk menghentikan program selama satu saat setiap pusingan, yang boleh ditetapkan sendiri, tujuan adalah untuk mengawal frekuensi program mengakses API, kerana beberapa bursa menetapkan had akses maksimum, masa tertentu melebihi jumlah lawatan tertentu akan menolak akses, menyekat alamat IP.
Mimpi kecilhttps://dn-filebox.qbox.me/c29ab7fc279e1b758355f137907cf52dc8257df6.png Saya sendiri menulis bahawa STOCHRSI yang telah dibandingkan dengan OK adalah agak perlahan dan perlu dioptimumkan sementara.
SifarAnda boleh memilih untuk mengulang semula pada pelayan yang disediakan oleh botvs atau pelayan hos anda sendiri, versi adalah 2.7.5
Mimpi kecilSaya tidak tahu apa yang akan berlaku.
Mimpi kecilSekarang anda boleh menyesuaikan gaya latar belakang anda sendiri.
Mimpi kecilDokumen python sedang ditulis.
Mimpi kecilTalib Library boleh disokong.
hzzgood48 https://www.botvs.com/bbs-topic/276
Mimpi kecilRupanya terdapat contoh di Strategy Square, https://www.botvs.com/strategy/15098
SifarAkses kepada sifat AvergPrice Order, yang boleh disokong oleh bursa, dan yang tidak disokong oleh bursa akan sentiasa mempunyai sifat 0.
yhfggBagaimana sumber pihak ketiga mengutip?
SifarJika mathjs tidak dapat memuaskan permintaan, maka ia hanya boleh mencari dasar penyalinan salinan dari perpustakaan pihak ketiga. Untuk mempercepatkan penyusunan, sistem hanya membina beberapa perpustakaan.
Mimpi kecilTidak sopan, ada masalah dalam kumpulan boleh M saya - saya pada dasarnya online.
jiebangTerima kasih.
Mimpi kecilAnda boleh lihat nota-nota mengenai perpustakaan kod pertukaran mata wang digital, di mana terdapat nota mengenai fungsi $.Cross.
SifarTidak dapat memadamkan yang terbaru, hanya menyimpan beberapa yang terkini... memadamkan semua yang lama sebelum ini.
kirinUntuk mendapatkan setiap pegangan dengan posisi [i], kedudukan adalah satu aritmatika
Lelaki Ningpertukaran.GetRecords ((PERIOD_D1));
kirinFitur niaga hadapan tradisional saya selalu memberi isyarat: "GetAccount: not login", "Password tidak salah, tidak boleh log masuk", "GetAccount: not login", "Password tidak salah, tidak boleh log masuk".
SifarSetContractType diperlukan untuk mendapatkan SetContractType yang ditentukan.
SifarSeperti yang anda lihat, ini adalah nilai pulangan untuk tindakan membatalkan pesanan yang dikembalikan oleh bursa, tetapi pembatalan sebenarnya tidak dibatalkan, bergantung kepada bagaimana ia diuruskan di dalam bursa.
momox3q
Sifar"Tidaklah demikian, kerana ia adalah tempat yang terpencil.
xuanxuanSudah tentu tidak, itu eksklusif untuk MT4.
SifarJavascript ada di mana-mana di internet.
MenjualAdakah masalah anda diselesaikan?
SifarKebanyakan data yang anda masukkan boleh berupa rekod secara langsung atau merupakan satu set harga murni.