Tutorial asas untuk platform FMZ Quant Strategy Writing

Penulis:Ninabadass, Dicipta: 2022-03-18 09:00:46, Dikemas kini: 2022-04-02 11:48:15

Anda boleh menggunakan Python untuk menulis terus ke pangkalan data.

function onexit(){
    _G('profit', profit)
}
function main(){
    _G("num", 1); // Set a global variable num, with a value of 1 second 
    _G("num", "ok"); // Change a global variable num, whose value is the string "ok"
    _G("num", null); // Delete the global variable num 
    _G("num"); // Return the value of the global variable num; if it does not exist, return null

    var profit = 0
    if(_G('profit')){
        profit = _G('profit')
    }
}

_N

Apabila meletakkan pesanan, ketepatan harga dan jumlah biasanya perlu dikawal; FMZ telah dibina dalam fungsi _N untuk menentukan tempat perpuluhan yang akan disimpan; sebagai contoh, hasil_N(4.253,2)adalah 4.25.

_C

Menghubungi API platform tidak dapat menjamin akses berjaya setiap kali, dan _C adalah fungsi cubaan semula automatik. Ia akan sentiasa memanggil fungsi yang ditentukan sehingga ia kembali dengan berjaya (fungsi akan cuba semula jika ia kembali null atau false); sebagai contoh,_C(exchange.GetTicker), dengan selang percubaan semula lalai 3 saat, dan anda boleh memanggil fungsi _CDelay untuk mengawal selang percubaan semula, seperti _CDelay(1000), yang bermaksud untuk menukar selang percubaan semula fungsi _C kepada 1 saat.GetTicker(), exchange.GetDepth, GetTrade, GetRecords, GetAccount, GetOrdersdanGetOrderuntuk mengelakkan gangguan program yang disebabkan oleh kegagalan akses.

CancelOrdertidak boleh menggunakan fungsi _C, kerana terdapat pelbagai sebab untuk kegagalan untuk membatalkan pesanan. Jika pesanan telah dilaksanakan, maka membatalkan pesanan akan mengembalikan kegagalan, dan menggunakan fungsi _C akan mengakibatkan mencuba semula sepanjang masa. Fungsi _C juga boleh lulus dalam parameter dan juga digunakan dalam fungsi tersuai.

function main(){
    var ticker = _C(exchange.GetTicker)
    var depth = _C(exchange.GetDepth)
    var records = _C(exchange.GetRecords, PERIOD_D1) // Pass in the parameters
}

_D

Panggilan_D()langsung akan mengembalikan rentetan masa semasa, seperti:2019-08-15 03:46:14. Jika dipanggil semasa backtest, masa backtest akan dikembalikan. Anda boleh menggunakan fungsi _D untuk menilai masa, seperti:_D().slice(11) > '09:00:00':. _D(timestamp, fmt), akan menukar stempel masa ms ke rentetan masa, seperti_D(1565855310002). Parameter fmt adalah format masa, dan lalai adalahyyyy-MM-dd hh:mm:ss.

Fungsi Penunjuk TA

Untuk beberapa fungsi penunjuk yang biasa digunakan, seperti MA\MACD\KDJ\BOLL dan penunjuk biasa yang lain, yang telah dibina secara langsung oleh platform FMZ, dan penunjuk yang disokong secara khusus boleh didapati dalam dokumen API.

Sebelum menggunakan fungsi penunjuk, adalah yang terbaik untuk menilai panjang K-garis. Apabila panjang K-garis sebelumnya tidak dapat memenuhi tempoh yang diperlukan untuk pengiraan, hasilnya adalahnullSebagai contoh, jika panjang K-garis input adalah 100 dan tempoh untuk mengira MA adalah 10, maka nilai 9 pertama adalah semua sifar, dan pengiraan selepas nilai membentuk 9 akan dilakukan secara normal.

JavaScript juga menyokong talib lengkap, sebagai perpustakaan pihak ketiga, dengan kaedah panggilan sepertitalib.CCI(records)Sila rujukhttp://ta-lib.org/function.html. Untuk Python, anda boleh memasang perpustakaan talib sendiri. Kerana keperluan untuk kompilasi, anda tidak boleh hanya menggunakan pip untuk memasang. Anda boleh mencari kaedah pemasangan sendiri.

Fungsi penunjuk bukan sahaja boleh lulus data K-garis, tetapi juga lulus mana-mana array

function main(){
    var records = exchange.GetRecords(PERIOD_M30)
    if (records && records.length > 9) {
        var ma = TA.MA(records, 14)
        Log(ma)
    }
}

Fungsi yang biasa digunakan dalam JavaScript

Di sini kita memperkenalkan beberapa fungsi JavaScript yang biasa digunakan dalam bot.

  • Date.now()Mengembalikan stempel masa semasa;
  • parseFloat()memindahkan rentetan ke dalam nombor, sepertiparseFloat("123.21");
  • parseInt()memindahkan rentetan ke dalam bilangan bulat;
  • num.toString()memindahkan nombor ke dalam rentetan, dengan nombor pembolehubah num;
  • JSON.parse()format rentetan Json, sepertiJSON.parse(exchange.GetRawJSON());
  • JavaScript mempunyai fungsi matematiknya sendiri, seperti operasi matematik biasa, termasukMath.max(), Math.abs()dan sebagainya; rujukan:https://www.w3school.com.cn/jsref/jsref_obj_math.asp ;
  • Perpustakaan matematik pihak ketiga yang digunakan oleh FMZ; rujukan:https://mathjs.org/ ;
  • Perpustakaan penekanan pihak ketiga JavaScript yang digunakan oleh FMZ, yang disyorkan untuk mempunyai pengetahuan dan yang menjadikan operasi Js yang membosankan lebih mudah; rujukan:https://underscorejs.org/.

Templat

Terdapat banyak situasi yang perlu dipertimbangkan semasa menulis fungsi strategi bot. Sebagai contoh, fungsi mudah seperti membeli 5 syiling, kita perlu mempertimbangkan: Adakah baki semasa mencukupi? Berapa banyak harga pesanan? Apakah ketepatan? Adakah anda perlu membahagikan pesanan untuk mengelakkan memberi kesan kepada pasaran? Bagaimana untuk menangani pesanan yang belum selesai? Dan beberapa butiran seperti itu. Dalam strategi yang berbeza, fungsi ini sama, jadi anda boleh menjadikannya menjadi templat. Mengikuti templat rasmi, pengguna juga boleh menulis strategi templat mereka sendiri. Di sini kita akan memperkenalkan beberapa perpustakaan kelas templat yang sangat biasa digunakan yang dikeluarkan secara rasmi oleh FMZ, supaya pengguna dapat dengan cepat menulis strategi mereka sendiri.

Perpustakaan perdagangan cryptocurrency JavaScript dan perpustakaan perdagangan niaga hadapan komoditi dibina secara lalai dan tidak perlu disalin. Perpustakaan templat lain boleh didapati di strategi Square (https://www.fmz.com/square/20/1) Salin dan simpan perpustakaan templat, dan semak perpustakaan yang akan digunakan apabila membuat strategi anda sendiri.

Semua fungsi templat JavaScript bermula dengan$, manakala Python semua bermula denganext.

Perpustakaan Perdagangan Cryptocurrency

Alamat kod sumber:https://www.fmz.com/strategy/10989, yang sudah terbina dalam, jadi tidak perlu disalin. pelaksanaan fungsi tertentu boleh merujuk secara langsung kepada kod sumber.

Dapatkan Akaun:

$.GetAccount(e)

Log($.GetAccount()); // Obtain the account information, with fault tolerance function 
Log($.GetAcccount(exchanges[1]));

Pemasangan pesanan & Batalkan:

$.Buy/Sell(e, amount)
$.Buy(0.3); // The main platform buys 0.3 coin
$.Sell(0.2); // The main platform sells 0.2 coin
$.Sell(exchanges[1], 0.1); // The secondary platform sells 0.1 coin
$.CancelPendingOrders(e, orderType)

$.CancelPendingOrders(); // Cancel all entrusted orders of the main platform 
$.CancelPendingOrders(ORDER_TYPE_BUY); // Cancel all buy orders of the main platform
$.CancelPendingOrders(exchanges[1]); // Cancel all orders of the secondary platform
$.CancelPendingOrders(exchanges[1], ORDER_TYPE_SELL); // Cancel all sell orders of the secondary platforom 

Menghakimi Salib:

$.Cross(periodA, periodB) / $.Cross(arr1, arr2);

var n = $.Cross(15, 30);
var m = $.Cross([1,2,3,2.8,3.5], [3,1.9,2,5,0.6])
If n = 0, it means that the current prices of exactly 15-period EMA and 30-period EMA are equal. 
If n > 0, such as 5, it means that the 15-period EMA up-crosses the 30-period EMA by 5 periods (Bar)
If n < 0, such as -12, it means that the 15-period EMA down-crosses the 30-period EMA by 12 periods (Bar)
If it is not an array passed to the Cross, the function automatically obtains the K-line for moving average calculation.
If an array is passed to Cross, compare directly.

$.withdraw ((e, mata wang, alamat, jumlah, yuran, kata laluan) fungsi:

$.withdraw(exchange, "btc", "0x.........", 1.0, 0.0001, "***")

Perpustakaan Dagangan Futures Komoditi

Untuk penggunaan perpustakaan dagangan niaga hadapan komoditi adalah sangat stabil, ia disyorkan.https://www.fmz.com/strategy/12961, yang sudah terbina dalam, jadi tidak perlu disalin. pelaksanaan fungsi tertentu boleh merujuk secara langsung kepada kod sumber.

Perpustakaan CTA

  • Bot akan memetakan indeks secara automatik kepada kontrak berterusan utama;
  • Ia akan mengendalikan pergerakan secara automatik;
  • anda boleh menentukan pemetaan untuk backtest, seperti rb000/rb888, yang memetakan garis k indeks rb untuk berdagang kontrak berterusan utama;
  • ia juga boleh dipetakan kepada kontrak lain; contohnya, rb000/MA888 adalah untuk melihat garis K indeks rb untuk berdagang kontrak utama berterusan MA.
function main() {
    $.CTA("rb000,M000", function(r, mp) {
        if (r.length < 20) {
            return
        }
        var emaSlow = TA.EMA(r, 20)
        var emaFast = TA.EMA(r, 5)
        var cross = $.Cross(emaFast, emaSlow);
        if (mp <= 0 && cross > 2) {
            Log("Golden cross period", cross, "the moment position", mp);
            return 1
        } else if (mp >= 0 && cross < -2) {
            Log("Death cross period", cross, "the moment position", mp);
            return -1
        }
    });
}

Invokasi Contoh perpustakaan

function main() {
    var p = $.NewPositionManager();
    p.OpenShort("MA609", 1);
    p.OpenShort("MA701", 1);
    Log(p.GetPosition("MA609", PD_SHORT));
    Log(p.GetAccount());
    Log(p.Account());
    Sleep(60000 * 10);
    p.CoverAll("MA609");
    LogProfit(p.Profit());
    Log($.IsTrading("MA609"));
    // Multiple varieties use the trading queue to complete the non-blocking trading task
    var q = $.NewTaskQueue();
    q.pushTask(exchange, "MA701", "buy", 3, function(task, ret) {
        Log(task.desc, ret)
    })
    while (true) {
        // Call "poll" to execute the unfinished tasks in the spare time
        q.poll()
        Sleep(1000)
    }
}

Perpustakaan Lukisan

Untuk fungsi mentah untuk melukis sangat rumit, yang akan diperkenalkan dalam tutorial seterusnya, kami mengesyorkan pemula untuk menggunakan perpustakaan lukisan, untuk melukis carta garis yang sangat mudah dan carta k-garis, dan lain-lain. Perpustakaan lukisan mudah telah dibina di FMZ, yang boleh dilihat di halaman penyuntingan strategi; jika perpustakaan belum dibina, pengguna perlu menyalin dan menyimpan, untuk memeriksa dan menggunakan perpustakaan dalam strategi.

img

Alamat salinan perpustakaan lukisan versi Javascript:https://www.fmz.com/strategy/27293Alamat salinan perpustakaan lukisan versi Python:https://www.fmz.com/strategy/39066

Contoh khusus:

function main() {
    while (true) {
        var ticker = exchange.GetTicker()
        if (ticker) {
            $.PlotLine('Last', ticker.Last) // You can draw two lines at the samw time, "Last" is the name of the line
            $.PlotLine('Buy', ticker.Buy)
        }
        Sleep(6000)
    }
}

Tetapan Parameter Strategi

Di bawah Edit Strategy, terdapat tetapan parameter strategi, yang sama dengan pembolehubah global strategi, dan boleh diakses di mana-mana lokasi dalam kod. Parameter strategi boleh diubah pada halaman bot, dan mereka akan sah selepas dimulakan semula. Oleh itu, beberapa pembolehubah boleh ditetapkan pada parameter, dan parameter boleh diubah tanpa mengubah strategi.
img

  • Nama pembolehubah: iaitu nombor, rentetan dan combox dan lain-lain dalam imej di atas,yang boleh digunakan secara langsung dalam kumpulan strategi.
  • Penerangan: nama parameter pada antara muka strategi, lebih mudah bagi pengguna untuk memahami makna parameter.
  • Perhatikan: penjelasan terperinci parameter, yang akan dipaparkan dengan sewajarnya apabila tetikus berada di atas parameter.
  • Jenis: jenis parameter, yang akan diperkenalkan secara terperinci kemudian.
  • Tetapan lalai: lalai parameter a.

Ia sangat mudah untuk memahami dan jenis rentetan dan jenis nombor. yang merupakan jenis yang sangat biasa digunakan. kotak combo akan memaparkan pilihan dalam kotak pada antara muka parameter. Sebagai contoh, anda boleh menetapkan parameter SYMBOL sebagaiBTC|USDT|ETHdalam kotak combo; jika anda memilih USDT dalam kotak di halaman, nilai SYMBOL dalam strategi adalah indeks USDT 1. Pilihan semak merujuk kepada kotak semak pilihan; semak bermaksud benar, sementara tidak ada semak bermaksud palsu.

Terdapat lebih banyak parameter untuk tetapan; referene:https://www.fmz.com/api.

Ujian Kembali Strategi

Apabila kuantisasi strategi selesai, anda boleh mengujinya dengan data sejarah, untuk memeriksa keadaan keuntungan strategi pada tarikh sejarah. Sudah tentu, hasil backtest hanya untuk rujukan. Javascript backtest dijalankan pada penyemak imbas; Python backtest adalah pada docker, dan platform kami menyediakan dockers awam untuk pengguna.

Mekanisme Baktest

Mekanisme backtest onbar adalah berdasarkan pada K-line, iaitu, setiap K-line akan menghasilkan satu titik dalam masa untuk backtest. Pada titik dalam masa, anda boleh mendapatkan maklumat termasuk harga terbuka, dekat, tertinggi dan terendah dan jumlah dagangan K-line semasa, serta maklumat K-line sejarah sebelum titik. Kekurangan mekanisme jenis ini sangat jelas: hanya satu pembelian boleh dihasilkan pada satu K-line; biasanya harga yang dirujuk adalah harga dekat thr K-line. juga, satu K-line hanya boleh mendapatkan empat harga, iaitu harga dekat, terbuka, tertinggi dan terendah; maklumat, termasuk bagaimana harga berubah dalam satu K-line dan sama ada harga tertinggi atau harga terendah berubah terlebih dahulu, tidak dapat diperoleh. Ambil bot ujian K-line satu jam sebagai contoh. Maklumat ini pasti diperoleh dalam beberapa saat, dan perintah akan dijalankan dalam mekanisme perdagangan kembali K-line tidak selesai, kelebihan dan mudah difahami.

Ujian belakang pada FMZ mengandungi dua jenis, iaitu ujian belakang tahap simulasi dan ujian belakang tahap pasaran sebenar. Ujian belakang tahap simulasi dapat menghasilkan tik yang disimulasikan mengikut tempoh garis K lapisan bawah, dan setiap tempoh garis K lapisan bawah akan menghasilkan 14 titik masa ujian belakang.Walau bagaimanapun, ujian belakang tahap pasaran sebenar sebenarnya akan mengumpul tik, setiap beberapa saat, dan kini ia menyokong kedalaman sebenar (termasuk 20 tahap), dan perdagangan pelaksanaan sebenar oleh tarde.Jangkaan tarikh adalah cukup besar, dan kelajuan backtest sangat perlahan, jadi backtest tidak boleh dijalankan dalam masa yang lama. mekanisme FMZ backtest boleh merealisasikan pelbagai perdagangan dari startegy pada satu K-line, untuk mengelakkan keadaan bahawa perdagangan hanya boleh dilaksanakan oleh harga dekat, dan juga semakin menyasarkan dan menjaga kelajuan backtest.https://www.fmz.com/bbs-topic/9126.

Kerangka kerja backtest dan bot adalah sama, kedua-duanya adalah gelung tanpa akhir. Kerana backtest adalah untuk melompat ke titik backtest yang berbeza, backtest boleh dijalankan tanpa menggunakan Sleep, dan ia akan melompat secara automatik ke titik masa seterusnya apabila satu gelung berakhir. Walau bagaimanapun, Python, kerana mekanisme program, memerlukan sekatanSleep(10), untuk mengelakkan terjebak.

Pencocokan Ujian Kembali

Mesin backtest akan sepadan dengan harga pesanan yang diletakkan oleh pengguna dan harga pasaran pada titik masa backtest. Jika harga beli lebih tinggi daripada satu jual, satu jual akan dilaksanakan. Jika perdagangan tidak dapat dilaksanakan, pesanan tertunda akan dihasilkan. Slippage perlu ditambah untuk memastikan perdagangan. Jika kedudukan tidak dapat dibuka atau ditutup semasa backtest, periksa sama ada kedudukan dibekukan kerana pesanan yang belum selesai.

Tetapan Backtest Page

img

  • 1.memilih halaman Backtest, di sebelah kiri halaman Edit Strategy;
  • 2.waktu permulaan dan masa akhir backtest; untuk data mungkin tidak lengkap, backtest boleh bermula secara langsung dari masa data ada;
  • 3. tempoh lalai untuk backtestingGetRecords()fungsi; anda juga boleh menentukan parameter tempoh dalam kod;
  • 4.memilih mekanisme backtest;
  • 5.menampilkan atau menyembunyikan lebih banyak tetapan backtest;
  • 6.maksimum item log, item log keuntungan dan item log carta, untuk mengelakkan penyemak imbas daripada kerosakan yang disebabkan oleh jumlah data yang besar;
  • 7. tempoh yang dihasilkan oleh kutu lapisan bawah mengikut garis K;
  • 8. titik tergelincir;
  • 9. toleransi ralat, yang akan mensimulasikan keadaan apabila permintaan API salah, dan menguji keupayaan toleransi ralat strategi;
  • 10.apakah untuk membuat carta pasaran; jika fungsi penunjuk TA digunakan dalam ujian belakang, fungsi itu akan ditunjukkan secara automatik dalam carta, dan membeli dan menjual juga akan ditandakan;
  • 11.penetapan bayaran perkhidmatan;
  • 12.menambah platform - pasangan dagangan & aset;
  • 13. seting parameter backtest; jika parameter adalah nombor dan juga menyokong optimasi satu kunci, parameter akan dilalui secara automatik dalam julat tertentu dalam backtest.

Perbezaan Antara Bot & Backtest

  • 1.satu-satunya sebut harga pasaran yang sah dalam backtest hanya dari GetTicker dan GetRecords; yang lain seperti GetDepth dan GetTrades tidak nyata (volume data sangat besar, dan walaupun backtest tahap pasaran sebenar kini menyokong data yang sudah ada, ia hanya menyokong data terkini);
  • 2. platform yang ditambah dalam backtest adalah semua akaun yang berasingan; hak untuk menukar pasangan dagangan tidak disokong; oleh itu, anda tidak boleh mengendalikan dua pasangan dagangan dalam satu akaun;
  • 3. networkwrok permintaan tidak boleh digunakan dalam backtest;
  • 4.IOpelanjutan tidak boleh digunakan dalam backtest, dan hanya API asas yang boleh dikendalikan;
  • 5.hanya data standard boleh diperoleh dalam backtest, dan data, seperti Info yang berkaitan dengan bot tidak wujud;
  • 6.penangguhan mungkin tidak dilaksanakan dalam backtest, dan memberi perhatian kepada keadaan pesanan beku;
  • 7.inPengujian balik niaga hadapan komoditi, perintah pasaran tidak disokong.

Strategi Toleransi Kesalahan & Kesalahan Biasa

Seperti yang telah kita sebutkan sebelum ini, menggunakan antara muka API dalam bot mungkin gagal untuk mengakses dan kembalinull; jika anda masih menggunakan data itu, satu kesilapan akan dilaporkan dan bot akan berhenti.

Cara Biasa Menoleransi Kesalahan

Penyebab biasa:

  • Kesalahan rangkaian akses API; masa tamat mengakses antara muka mengembalikan nunll, dan kesilapan akan dilaporkan.

  • Kesalahan batasan platform, seperti had ip, ketepatan pesanan, kekerapan akses, kesilapan parameter, kekurangan aset, kegagalan perdagangan pasaran, pembatalan pesanan yang dilaksanakan, dll.; butiran boleh ditanyakan dalam dokumen API mengikut kod yang salah.

  • Kesalahan data pengembalian platform; ia berlaku kadang-kadang, seperti mengembalikan kedalaman sifar, maklumat akaun tertunda dan status pesanan tertunda, dll.

  • Kesilapan logik program.

Sebelum anda menggunakan data yang dikembalikan API, anda harus menilai sama ada data adalah sifar, dan kaedah biasa diperkenalkan seperti berikut:

//1.judge the data is null and handle 
var ticker = exchange.GetTicker();
while(ticker == null){
     Log('ticker obtain error');
     ticker = exchange.GetTicker();
 }
 Log(ticker.Last);
 // 2. judge the data is not null, and use 
 var ticker = exchange.GetTicker();
 if(!ticker){
     Log(ticker.Last);
 }
 // 3.retry _C() function 
 var ticker = _C(exchange.GetTicker);
 Log(ticker.Last);
 // 4.try cache fault tolerance
 try{
     var ticker = exchange.GetTicker();
     Log(ticker.Last);
 }
 catch(err){
     Log('ticker obtain error');
 } 

Jika anda ingin mendapatkan maklumat kesilapan, anda boleh menggunakanGetLastError(), dan rentetan masa terakhir maklumat ralat akan dikembalikan, dan ralat boleh diproses oleh perbezaan.

Soalan Lazim

Ringkasan kesilapan biasa dalam catatan teratas forum:https://www.fmz.com/bbs-topic/9158. Di sini kita memperkenalkannya secara ringkas; anda boleh menggunakan ctrl + F untuk mencari, apabila anda mempunyai masalah.

Bagaimana untuk menggunakan docker?

Terdapat pengenalan terperinci tentangnya dalam bahagian menambah docker.

Boleh saya minta seseorang menulis strategi untuk saya?

padahttps://www.fmz.com/markets, ada beberapa orang yang menyediakan perkhidmatan menulis strategi untuk orang lain, atau anda boleh bertanya dalam kumpulan sembang; perhatikan bahawa jenis perkhidmatan itu harus dihubungi sendiri, dan anda harus sedar bahawa risiko juga harus ditanggung oleh anda sendiri.

Semua antara muka meminta masa keluar apabila diakses

ia merujuk kepada masa lapang antara muka platform yang diakses; jika masa lapang berlaku sesekali, ia bukan masalah; jika masa lapang diminta sepanjang masa, ini bermakna semua rangkaian tidak dapat diakses dan pelayan luar negara diperlukan.

ERR_INVALID_POSISI

Jika backtest melaporkan ralat, ia biasanya merupakan ralat penulisan; apabila anda cuba meletakkan pesanan untuk menutup kedudukan, apabila tidak ada kedudukan atau jumlah kedudukan tidak mencukupi, ralat akan dilaporkan.

Simbol tidak ditetapkan

Tidak ada kontrak yang ditetapkan dalam kod, semasa ujian belakang platform niaga hadapan.

BITMEX 429error,{error:{message:Rate limit exceeded re-try in 1 seconds......}}

Frekuensi akses antara muka platform terlalu tinggi.

{status:6004,msg:timestamp adalah di luar julat}

Stempel masa pelayan melebihi julat masa kemas kini pelayan, dan masa yang melebihi tidak boleh terlalu lama.

GetOrder ((455284455): ralat: id pesanan tidak sah atau pesanan dibatalkan.

Jika pesanan platform dibatalkan, platform tidak akan menyimpan maklumat pesanan lagi, jadi maklumat itu tidak dapat diperoleh.

GetOrders: 400: {code:-1121,msg:Invalid simbol.}

Pasangan dagangan tidak sah; periksa jika tetapan pasangan dagangan salah.

Penyahkodean kunci rahsia gagal

Pemetaan APIKEY gagal. Jika kata laluan FMZ telah diubahsuai selepas APIKEY dikonfigurasikan, cuba tambahkan halaman platform di FMZ dan menyusun semula APIKEY platform.

Tanda tangan tidak sah: masa penyerahan yang tidak sah atau format masa yang salah

mencadangkan anda menggunakan pelayan Linux, atau memasang perisian penyegerakan masa pada sistem Windows ini di mana masalah ini berlaku.

Mengapa docker masih tidak boleh mengakses API platform apabila proksi global ditetapkan?

Proxy global tidak mempunyai port rangkaian proxy docker. Oleh kerana masalah kelewatan, adalah lebih baik untuk menggunakan docker pelayan luar negara.

Bagaimana untuk menyimpan strategi secara tempatan, tidak untuk memuat naik ke FMZ?

Menggunakan Python, dan anda boleh mengimport fail tempatan, menyimpan strategi biasanya ditulis oleh FMZ API sebagai fail dan meletakkannya dalam laluan pelaksanaan pada pelayan anda sendiri, dan anda boleh terus membaca dan melaksanakannya.

#!python2.7

def run(runfile):
      with open(runfile,"r") as f:
            exec(f.read())
            
def main():
    run('my.py')

Bagaimana untuk testnet platform atau bagaimana untuk menukar alamat pangkalan API?

Gunakan exchange.SetBase() untuk terus beralih ke alamat pangkalan API yang sepadan.

exchange.SetBase("https://www.okex.me")

Lebih lanjut