Artikel ini membahas dua solusi, yang lain di akhir artikel lebih sederhana (rekomendasi).
Ada banyak pengembang yang menulis kebijakan menggunakan bahasa Python yang ingin menyimpan dokumen kode kebijakan secara lokal karena khawatir keamanan kebijakan; seperti:FMZ API
Salah satu solusi yang diajukan dalam dokumen tersebut adalah:
Keamanan Strategis Strategi yang dikembangkan di Inventor Quantum Trading Platform hanya dapat dilihat oleh pemegang akun Inventor Quantum Trading Platform. Dan di Inventor Quantum Trading Platform, kode kebijakan dapat dilokalisasi sepenuhnya, misalnya dengan membungkus kebijakan ke dalam paket Python dan memuatnya dalam kode kebijakan.https://www.fmz.com/api#策略安全性
Meskipun kekhawatiran ini tidak perlu, namun dengan solusi seperti itu, ini memberikan contoh implementasi yang lengkap.
Kami menemukan strategi Python yang sederhana untuk demonstrasi, menggunakan strategi Python klasik.Dual Thrust
Strategi, alamat strategi:https://www.fmz.com/strategy/21856Kami berusaha untuk tidak mengubah kode bagian kebijakan, dan membungkus kebijakan ke dalam sebuah file yang dapat dipanggil oleh kode kebijakan di platform FMZ, dan hasil pelaksanaannya sepenuhnya konsisten dengan menjalankan kebijakan tersebut secara langsung. Masalah terbesar dengan pembungkus adalah bahwa objek global, fungsi global, nilai konstanta yang dipanggil oleh kode kebijakan di platform FMZ tidak dapat diakses di dalam file yang kami bungkus, jadi kami harus mencari cara untuk menyampaikan objek, fungsi, variabel, konstanta ke dalam file yang dikemas.
MeniruPython versi Dual Thrust OKCoin berjangkaKode untuk kebijakan, yang ditempelkan ke dalam file Python lokal, yang disebut testA.
Tempelkan testA ke dalam file yang dibuka di editor lokal.
Tambahkan beberapa kode untuk menjaga bagian kode kebijakan yang disalin dan ditempel tetap utuh
# 函数、对象
exchanges = None
exchange = None
Log = None
Sleep = None
TA = None
Chart = None
LogProfitReset = None
LogStatus = None
_N = None
_C = None
LogProfit = None
# 策略参数
ContractTypeIdx = None
MarginLevelIdx = None
NPeriod = None
Ks = None
Kx = None
AmountOP = None
Interval = None
LoopInterval = None
PeriodShow = None
# 常量
ORDER_STATE_PENDING = 0
ORDER_STATE_CLOSED = 1
ORDER_STATE_CANCELED = 2
ORDER_STATE_UNKNOWN = 3
ORDER_TYPE_BUY = 0
ORDER_TYPE_SELL = 1
PD_LONG = 0
PD_SHORT = 1
def SetExchanges(es):
global exchanges, exchange
exchanges = es
exchange = es[0]
def SetFunc(pLog, pSleep, pTA, pChart, pLogStatus, pLogProfitReset, p_N, p_C, pLogProfit):
global Log, Sleep, TA, Chart, LogStatus, LogProfitReset, _N, _C, LogProfit
Log = pLog
Sleep = pSleep
TA = pTA
Chart = pChart
LogStatus = pLogStatus
LogProfitReset = pLogProfitReset
_N = p_N
_C = p_C
LogProfit = pLogProfit
def SetParams(pContractTypeIdx, pMarginLevelIdx, pNPeriod, pKs, pKx, pAmountOP, pInterval, pLoopInterval, pPeriodShow):
global ContractTypeIdx, MarginLevelIdx, NPeriod, Ks, Kx, AmountOP, Interval, LoopInterval, PeriodShow
ContractTypeIdx = pContractTypeIdx
MarginLevelIdx = pMarginLevelIdx
NPeriod = pNPeriod
Ks = pKs
Kx = pKx
AmountOP = pAmountOP
Interval = pInterval
LoopInterval = pLoopInterval
PeriodShow = pPeriodShow
Fungsi utama dari kode di atas adalah untuk menyatakan fungsi global, variabel, dan lain-lain yang digunakan dalam dokumen saat ini.SetExchanges
,SetParams
,SetFunc
Fungsi-fungsi ini dapat digunakan untuk memindahkan beberapa fungsi, objek, dan lain-lain.
Cara memulai sangat sederhana, seperti berikut:
Hanya beberapa baris kode yang ditulis di platform FMZ, dan perlu dicatat bahwa parameter untuk memulai kebijakan ini adalah untuk membungkus kebijakan dengan kami.Python versi Dual Thrust OKCoin berjangkaDengan cara yang sama, Anda dapat langsung menyalin strategi "Python versi Dual Thrust OKCoin futures" dan mengosongkan kode dari strategi tersebut dan menempelkannya pada akun Anda.
import sys
# 这里我写的是自己放置testA文件的路径,具体我替换为xxx了,简单说就是设置自己的testA文件路径就可以了
sys.path.append("/Users/xxx/Desktop/pythonPlayground/")
import testA
def main():
# 传递交易所对象
testA.SetExchanges(exchanges)
# 传递全局函数 SetFunc(pLog, pSleep, pTA, pChart, pLogStatus, pLogProfitReset, p_N, p_C, pLogProfit)
testA.SetFunc(Log, Sleep, TA, Chart, LogStatus, LogProfitReset, _N, _C, LogProfit)
# 传递策略参数 SetParams(pContractTypeIdx, pMarginLevelIdx, pNPeriod, pKs, pKx, pAmountOP, pInterval, pLoopInterval, pPeriodShow)
testA.SetParams(ContractTypeIdx, MarginLevelIdx, NPeriod, Ks, Kx, AmountOP, Interval, LoopInterval, PeriodShow)
# 执行封装的testA文件中的策略主函数
testA.main()
Dengan demikian, kita akan mengunggah subjek logika kebijakan ke dalam testA file dan menempatkan pada perangkat lokal di mana host berada, dan pada platform FMZ, hanya dengan menyimpan satu kebijakan startup, robot yang membuat kebijakan startup ini dapat langsung memuat file lokal kita dan berjalan di host lokal.
TestA file yang dimuat secara lokal
Kebijakan asli, di-retest di server publik
Anda dapat mengunggah file langsung ke aplikasi. Kali ini kami menyiapkan sebuah testB file yang menempatkan kode untuk strategi "python version Dual Thrust OKCoin futures".
import time
class Error_noSupport(BaseException):
def __init__(self):
Log("只支持OKCoin期货!#FF0000")
class Error_AtBeginHasPosition(BaseException):
def __init__(self):
Log("启动时有期货持仓! #FF0000")
ChartCfg = {
'__isStock': True,
'title': {
'text': 'Dual Thrust 上下轨图'
},
'yAxis': {
...
Jika strategi terlalu panjang, maka akan dihilangkan, dan kode tidak perlu diubah sama sekali. Kemudian siapkan "Python Dual Thrust OKCoin Futures", yaitu strategi kami di platform FMZ, membuat bot, langsung memuat testB, dan langsung mengeksekusi. Perlu dicatat bahwa "Python Dual Thrust OKCoin Futures" harus memiliki pengaturan parameter strategi yang sama dengan versi asli.
if __name__ == '__main__':
Log("run...")
try:
# 文件路径做了处理,可以写入自己testB文件放置的实际路径
f = open("/Users/xxx/Desktop/pythonPlayground/testB.py", "r")
code = f.read()
exec(code)
except Exception as e:
Log(e)
Periksa ulang:
Hasil retestnya sama dengan tes di atas.
Cara kedua jelas lebih sederhana dan saya sarankan untuk digunakan, jika ada cara yang lebih baik, selamat datang di blog saya.
QQ89520Saya merasa selenium dapat digunakan untuk melakukan banyak hal.
QQ89520Belajar
Penemu Kuantitas - Mimpi KecilHa ha, ada ide yang bisa kita sampaikan dan bahas bersama-sama.