Pencipta Kuantiti API Dokumen

Penulis:Mimpi kecil, Dicipta: 2017-11-27 09:05:08, Dikemas kini: 2023-07-12 16:47:31

[TOC]

Maklumat asas

Masuk

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:

Jika 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 DisokongJavaScriptTypeScriptPythonC++PINE麦语言Blockly可视化Menulis strategi reka bentuk.

SokonganTypeScriptBahasa, yang masih ditetapkan sebagai bahasa utama semasa membuat strategiJavaScriptKemudian anda akan menulis pada permulaan kod strategi.// @ts-checkAtau klik butang "TypeScript" di sudut kanan atas kawasan penyuntingan dasar untuk beralih keTypeScript◎ Platform akan mengenal pasti kod secara automatik sebagai:TypeScriptPerisian ini mempunyai ciri-ciri yang berbeza.

  • Jenis keselamatan:TypeScriptFungsi pemeriksaan jenis statik boleh membantu anda mencari kesilapan yang berpotensi semasa menulis kod dan meningkatkan kualiti kod.
  • Kod yang dipenuhi secara automatik:TypeScriptSistem jenis yang lebih baik membolehkan anda mencari sifat dan kaedah yang anda perlukan lebih cepat semasa menulis kod, meningkatkan kecekapan pembangunan.
  • Struktur kod yang lebih jelas: menggunakanTypeScriptDengan cara ini, anda dapat mengatur dan mengekalkan kod anda dengan lebih baik, menjadikannya mudah dibaca dan difahami.
  • Perisian ini mempunyai ciri-ciri yang kuat untuk program berorientasikan objek:TypeScriptIa 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.

BlocklyTutorial visual:

TetapanPythonPenggunaan program strategiPythonPenerjemah

PenggunaanPythonMenulis 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 pertamaPythonPerkembangan. 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 diLinuxWindowsMac OSAndroidARM LinuxDi mana-mana sahaja di dunia.Halaman PengurusLangkah-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/storageDi dalam, fail adalah:db3PerbezaanSqliteBoleh digunakan dalam fail pangkalan data.SqlitePerisian pentadbiran mengedit secara langsung, untuk pelanjutan ini dipanggildb3Nama fail adalah nama fail pada cakera sebenar.ID

Perjanjian yang disokong

  • Aset Blockchain: Kini menyokong lebih daripada 50 bursa aset blockchain mainstream (mata wang digital).
  • Akses protokol umum:Perjanjian Umum

Keselamatan Strategik

Mengembangkan strategi di platform dagangan kuantitatif FMZ, yang hanya boleh dilihat oleh pemegang akaun kuantitatif FMZ.PythonPaket dimuat dalam kod dasar, yang membolehkan penyetempatan dasar.

PythonPerlindungan kod: KeranaPythonIa 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.

PythonDi sini, anda boleh melihat gambar di bawah. Di bawah ini adalah senarai gambar:PythonStrategi: Penulis kod tidak mengenkripsi apabila mereka menggunakannya sendiri dan mengenkripsi apabila mereka meminjamkannya kepada orang lain.PythonDasar permulaan: Edit kod berikut, anda boleh menetapkan kegunaan sendiri atau sewaPythonAdakah kod dasar disulitkan semasa ia dijalankan. Sokongan kod dasar disulitkanPythonVersi ialah:Python 2.7Perkataan ini tidak boleh diterima.Python 3.5Perkataan ini tidak boleh diterima.Python 3.6Versi.

  • Penulis sendiri yang menjalankan kod dasar penyulitan, menggunakan kod pendaftaran untuk memberi kepada orang lain:#!pythonMenggunakan koma untuk menentukan versi penerjemah Python,Jeda, input arahan penyulitanencrypt◦ Jika tidak ditentukanPythonVersi 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
    

PenghakimanPythonAdakah 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 berenkripsiPythonKode taktikal.

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

Keselamatan Kunci

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 KEYCara 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#8Terdapat banyak alat yang boleh dicipta, seperti:opensslSaya 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 ditxtFormat 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 KeyDi dalam kotak editor, isi di dalam akaun yang dicipta di bursa.RSA KEYSaya tidak tahu apa yang berlaku. 5. Mengkonfigurasi pertukaran di FMZSecret KeyDi dalam kotak sunting, isiLangkah KetigaDiletakkan dalam direktori peer admintxtLaluan untuk fail, contohnya, nama fail yang diletakkan adalah:rsaKey.txtDalam direktori yang sama, dokumen dan pengurus akan mengisi:file:///rsaKey.txt. jika dokumen itu berada di dalam direktori peringkat seterusnya dalam prosedur pengurusrsa_keyDi sini, anda boleh menulis:file:///rsa_key//rsaKey.txt◦ Jika diletakkanrsaKey.txtFile 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

Sistem pengesanan

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 sebenartickData 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

Pertukaran yang disokong dalam sistem pengesanan semula

  • Cryptocurrency (mata wang digital)

    Nama Jenis Pencerahan
    Bitfinex Objek Bursa Saham Perdagangan terhad disokong untuk contoh:BTC_USD,ETH_USD,LTC_USDJadi, perhatikan bahawa transaksi terhadap mata wang adalahUSDHarga dalam dolar
    Binance Objek Bursa Saham Perdagangan terhad disokong untuk contoh:BTC_USDT,ETH_USDT,ETH_BTC,LTC_BTCdan sebagainya.
    OKX Objek Bursa Saham Perdagangan terhad disokong untuk contoh:BTC_USDT,ETH_USDT,ETH_BTC,LTC_BTCdan sebagainya.
    Token Objek Bursa Saham Perdagangan terhad disokong untuk contoh:BTC_USDT,ETH_USDT,ETH_BTC,LTC_BTCdan sebagainya.
    OKX niaga hadapan Objek bursa niaga hadapan Perdagangan terhad disokong untuk contoh:BTC_USD,ETH_USDDan sebagainya, transaksi terhadap mata wang adalahUSD, Tetapkan kod kontrak khusus (lihatexchange.SetContractTypeKontrak yang disokong oleh kod kontrak ialah:this_weeknext_weekquarterswap
    HuobiDM Objek bursa niaga hadapan HuobiDM, yang bermaksud Token Futures (Token Contract), menyokong pasangan dagangan terhad seperti:BTC_USD,ETH_USDDan sebagainya, transaksi terhadap mata wang adalahUSD, Tetapkan kod kontrak khusus (lihatexchange.SetContractTypeKontrak yang disokong oleh kod kontrak ialah:this_weeknext_weekquarterswap
    BitMEX Objek bursa niaga hadapan Pasangan transaksi adalah:XBT_USD, Tetapkan kod kontrak khusus (lihatexchange.SetContractTypeKontrak yang disokong oleh kod kontrak ialah:XBTUSD
    Futures Binance Objek bursa niaga hadapan Perdagangan terhad disokong untuk contoh:BTC_USDT,ETH_USDTDan sebagainya, transaksi terhadap mata wang adalahUSDT, Tetapkan kod kontrak khusus (lihatexchange.SetContractTypeFungsi) kemudian kontrak adalahUSDTKod 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.SetContractTypeFungsi) kemudian, kontrak adalah kontrak tempat mata wang.

    Objek bursa niaga hadapan sistem penilaian tidak menyokong pasangan pertukaran dalam kod strategi buat sementara waktu.

Tingkat analog

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.tickData, sebagai masa nyatatickData yang dikembalikan apabila permintaan antara muka dibuat.Pencipta menerangkan mekanisme pengukuran semula tahap analog kuantitatif

Tingkat rak sebenar

Ujian semula tahap rak sebenar adalah benar.tickData peringkat adalah dalam urutan masa Bar.tickStrategi untuk data peringkat adalah menggunakan pengulangan peringkat cakera yang lebih dekat kepada realiti.tickAdalah 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.GetDepthGetTradesFungsi mendapatkan data transaksi yang dikembalikan. Pada saat data transaksi pada garis masa, panggilanGetTickerGetTradesGetDepthGetRecords, 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

  • Binance
  • OKX ((OKX dalam talian)
  • HuobiDM (token niaga hadapan)

Penyesuaian parameter sistem penyesuaian

Fungsi penyesuaian parameter sistem penyesuaian FMZ adalah untuk menetapkan pilihan penyesuaian untuk setiap parameter semasa penyesuaian, seperti berikut:

  • Nilai minimum: nilai permulaan parameter terhad.
  • Nilai maksimum: Nilai maksimum selepas perubahan parameter terhad meningkat.
  • Panjang langkah: parameter meningkat dalam kuantiti perubahan.

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:

img

Pengukuran semula mod pengoptimuman parameter:

img

Simpan tetapan semula

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?

img

DenganJavaScriptSebagai contoh, klik "Simpan tetapan semula ke fail sumber":

img

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"}]
*)

Sumber data tersuai

Penggunaan sistemGETKaedah 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/dataPerkhidmatan 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:JavaScriptContoh:

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

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

Grafik yang digambarkan oleh data yang disesuaikan dalam sistem pengukuran:

Strategi untuk mencetak maklumat:

Enjin pengulangan tempatan

Platform Perdagangan Kuantitatif FMZ Sudah TerbukaJavaScriptBahasa danPythonEnjin ulangan asli bahasa yang menyokong tetapan masa ulanganSiklus garis K bawah

Penjarakan Cepat untuk Ulasan Halaman

  • 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 DasarCtrlTekan sahaja selepas mengetik.,Tombol.

  • Tombol pintasan untuk menyimpan dasar

    PenggunaanCtrl + sTombol, simpan dasar.

  • Tombol pintasan untuk memulakan pengalihan semula

    PenggunaanCtrl + bTombol, mulakan pengesanan semula.

Penjelasan kod

Fungsi input

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.PythonBahasa 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.
  • Menjelaskan:
    • Sistem pengesanan tidak disokongonerror()Fungsi tersebut.
    • Ia mula bertukar pada masa yang sama.onerror()Fungsi tidak akan mencetuskan lagi.onexit()Fungsi tersebut.

satuxit ((()

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);
    }
}

mulakan

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("初始化!");
}

Kesalahan

onerror()Apabila berlaku sesuatu yang luar biasa, ia akan mencetuskanonerror()Fungsi yang tidak disokongPythonC++Strategi bahasa.

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

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

Rangka Kerja Strategi Klasik

DalamJavaScriptPythonC++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 Templat

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.

JavaScriptPerpustakaan templat bahasa:

img

PythonPerpustakaan templat bahasa:

img

C++Perpustakaan templat bahasa:

img

  • 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:

    img

    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());
    }
    

    img

  • Mengutip perpustakaan templat

    Setelah memilih rujukan dalam tetingkap templat halaman penyuntingan dasar, anda boleh menyimpan dasar.

    img

Struktur terbina dalam

Variabel global

pertukaran

exchangeIa 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.exchangeObjek:

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

Ia boleh difahami sebagai penyimpanan yang sama.exchangeMatriks 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());
    }
}
Status pesanan

Orderdalam strukturStatusSifat-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 danOrderStrukturStatusPerbandingan 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.

Jenis pesanan

Orderdalam strukturTypeSifat-sifat.

Nama pemalar Definisi Nilai
ORDER_TYPE_BUY Bayar 0
ORDER_TYPE_SELL Penjualan 1
Jenis Posisi

Positiondalam strukturTypeSifat-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
Pemasaran hadapan

Orderdalam strukturOffsetSifat-sifat.

Nama pemalar Definisi Nilai
ORDER_OFFSET_OPEN Perintah pembukaan 0
ORDER_OFFSET_CLOSE Perintah untuk simpanan 1
Parameter strategi

Parameter strategi yang ditetapkan pada antara muka strategi dalam kod strategi adalah dalam bentuk pembolehubah global.JavaScriptDalam bahasa ini, anda boleh mengakses atau mengubah nilai parameter yang ditetapkan pada antara muka dasar secara langsung.Pythondigunakan untuk mengubah suai global dalam fungsi dasarglobalKata Kunci:

Jenis parameter:

img

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.
  • Parameter antara muka, yang ditetapkan di bahagian parameter dasar di bawah bahagian penyuntingan kod halaman Edit Dasar.
  • Parameter antara muka wujud dalam kod dasar dalam bentuk pembolehubah global, iaitu parameter antara muka boleh diubah dalam kod.
  • Parameter antara muka dalam kod dasar nama pembolehubah: iaitu dalam gambar di atasnumberstringcomboxboolsecretString
  • Menjelaskan pilihan: Nama parameter antara muka pada antara muka dasar.
  • Opsi nota: penerangan terperinci parameter antara muka yang akan dipaparkan apabila tetikus tinggal di atas parameter antara muka.
  • Pilihan jenis: Jenis parameter antara muka ini.
  • Pilihan nilai lalai: Nilai lalai parameter antara muka ini.

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.numberAIni berdasarkan satu parameter:isShowA(Bull Type) keputusan palsunumberATunjukkan dan sembunyikan.numberAVariabel ditetapkan pada parameter antara muka sebagai:numberA@isShowA

img

Jadi, tidak ada pilihan.isShowAParameternumberAParameter disembunyikan. Untuk jenis parameter kawalan drop-down, parameter bergantung sebahagian untuk menentukan sama ada sama dengan pilihan drop-down.Nilai indeks❖ Sama juga denganisShowASebagai contoh, parameter, apabila parameter menetapkan pembolehubah, ia ditulis sebagai:numberA@combox==2numberAParameter adalah berdasarkancomboxApakah 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.

img

Apabila menggunakan strategi, parameter akan dipaparkan dalam kumpulan:

img

Nilai lalai parameter disimpan: Jika anda ingin menyimpan parameter dasar secara lalai, anda boleh mengklik selepas mengubah parameter dasar semasa mengulang.保存回测设置Tombol.

img

img

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]]
*/

Struktur data

Sesetengah fungsi akan disertakan dengan asal permintaan yang dikembalikan apabila dipanggilJSONData, yang semula jadiJSONData yang disimpan di objek yang dikembalikanInfoDalam sifat tersebut. Oleh kerana ia bukan antara muka yang dikunjungi oleh sebuah bursa, tiada data yang dikembalikan pada masa pengembalianInfoSifat, berikut adalah penerangan sifat utama bagi setiap struktur data.

Perdagangan

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

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      // 毫秒级别时间戳
}
Rekod

StandardOHLCStruktur, digunakan untuk melukis garis K dan analisis pengiraan penunjuk.exchange.GetRecords()Fungsi akan kembali kepada susunan struktur ini.RecordStruktur ini mewakili tiang K, iaitu garis K.BARRecordAntaraTimeWaktu permulaan untuk kitaran tiang K ini.

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

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 : ""            // 现货订单中该属性为""即空字符串,期货订单该属性为具体的合约代码
}
MarketOrder

Perintah kedalaman pasaran.exchange.GetDepth()Fungsi kembali ke struktur dataTawaranTanyakanStruktur data elemen dalam aritmatik.

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

Di sini, anda boleh melihat apa yang berlaku.exchange.GetDepth()Fungsi ini akan kembalikan.

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

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表示的资产用于挂单的冻结数量
}
Kedudukan

Maklumat kedudukan yang dipegang dalam dagangan niaga hadapanexchange.GetPosition()Fungsi kembali ke sini.PositionStrukturKumpulan

{
    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 dikembalikanPositionArray struktur. Untuk struktur data yang disimpanFrozenAmountProfitMarginSifat, 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, ketikaFrozenAmountUntuk 0; jika perlu, data tertentu boleh digunakanInfoPengkajian pengiraan data mentah dalam sifat.

Pasaran

Maklumat pasaran untuk jenis dagangan,exchange.GetMarkets()Fungsi yang dikembalikan mengandungiMarketStrukturKamus

{
    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.InfoKandungan halaman.

Fungsi global

Versi ((()

Version(), Mengembalikan nombor versi sistem semasa.

Tidur ((Millisecond)

Sleep(Millisecond), fungsi tidur, untuk menghentikan program untuk sementara waktu. Nilai parameter:MillisecondUntuk 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-6Permulaan:

Perhatikan: digunakanPythonApabila menulis strategi bahasa, operasi untuk julat rundingan, masa menunggu harus digunakanSleep(Millisecond)Fungsi. Tidak disyorkanPythonPerbezaantimeKu.time.sleep(second)Fungsi. Kerana digunakan dalam dasartime.sleep(second)Fungsi ini membolehkan program dasar untuk menunggu beberapa saat semasa mengulangi.secondParameter adalah bilangan saat untuk menetapkan hentian), yang menyebabkan ulangan dasar sangat lambat.

IsVirtual ((()

IsVirtual(), menentukan sama ada dasar semasa dijalankan untuk ujian semula analog. Nilai pulangan: jenis Boolean. Kembali ke status simulantrue, diska sebenar kembalifalse

Surat ((...)

Mail(smtpServer, smtpUsername, smtpPassword, mailTo, title, body), menghantar e-mel fungsi. Parameter nilai: semua parameter adalah jenis senar. Kembali nilai: Burr jenis, menghantar berjaya kembalitruesmtpServerUntuk menghantar melsmtpPerkhidmatan,smtpUsernameDi sini, anda boleh melihat gambar di bawah.smtpPasswordKata laluan SMTP untuk e-mel (bukan kata laluan log masuk e-mel)mailToUntuk mendapatkan akaun e-mel, anda perlu mendaftarkan akaun e-mel anda.titleDi samping itu, ia juga boleh digunakan untuk mengemas kini laman web.bodyIsi 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")

Lebih lanjut

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 (api, ApiName, Args) yang tidak disokong, lihat https://www.botvs.com/bbs-topic/812

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.