avatar of 发明者量化-小小梦 发明者量化-小小梦
fokus pada mesej peribadi
4
fokus pada
1271
Pengikut

Ajar anda langkah demi langkah untuk merangkum strategi Python ke dalam fail tempatan

Dicipta dalam: 2020-06-30 10:48:18, dikemas kini pada: 2024-12-10 20:27:04
comments   3
hits   3310

Ajar anda langkah demi langkah untuk merangkum strategi Python ke dalam fail tempatan

Ajar anda langkah demi langkah untuk merangkum strategi Python ke dalam fail tempatan

Artikel ini membincangkan dua penyelesaian Penyelesaian lain di penghujung artikel adalah lebih mudah (disyorkan).

Ramai pembangun yang menggunakan Python untuk menulis strategi ingin menyimpan fail kod strategi secara tempatan, tetapi mereka mengambil berat tentang keselamatan strategi. SebagaiFMZ APISatu penyelesaian yang dicadangkan dalam dokumen:

Keselamatan Dasar Membangunkan strategi pada Platform Dagangan Kuantitatif Pencipta hanya boleh dilihat oleh pemegang akaun Kuantitatif Pencipta. Selain itu, kod strategi boleh disetempatkan sepenuhnya pada Platform Dagangan Kuantitatif Pencipta Contohnya, strategi boleh dirangkumkan ke dalam pakej Python dan dimuatkan ke dalam kod strategi, dengan itu mencapai penyetempatan strategi. https://www.fmz.com/api#%E7%AD%96%E7%95%A5%E5%AE%89%E5%85%A8%E6%80%A7

Sebenarnya, tidak perlu risau tentang perkara ini, tetapi kerana terdapat penyelesaian sedemikian, contoh pelaksanaan lengkap disediakan.

Merangkumkan strategi

Mari cari strategi Python mudah untuk ditunjukkan, menggunakan klasikDual ThrustStrategi, alamat strategi: https://www.fmz.com/strategy/21856 Kami berusaha untuk tidak mengubah mana-mana bahagian kod strategi, dan merangkum strategi ke dalam fail yang boleh dipanggil oleh kod strategi pada platform FMZ Hasil pelaksanaan adalah sama seperti menjalankan strategi secara langsung. Masalah terbesar dengan enkapsulasi ialah objek global, fungsi global, dan nilai malar yang dipanggil oleh kod strategi pada platform FMZ tidak boleh diakses dalam fail terkapsul kami, jadi kami mesti mencari jalan untuk melepasi objek, fungsi, pembolehubah ini , dan pemalar kepada dokumen terkapsul. Kemudian kami akan mengendalikannya langkah demi langkah.

Ajar anda langkah demi langkah untuk merangkum strategi Python ke dalam fail tempatan

Tampal ke dalam fail testA yang dibuka dalam editor tempatan.

Ajar anda langkah demi langkah untuk merangkum strategi Python ke dalam fail tempatan

  • Tambahkan beberapa kod dan pastikan bahagian kod strategi yang anda salin dan tampal 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 kod di atas adalah untuk mengisytiharkan fungsi global dan pembolehubah yang digunakan dalam fail semasa. Kemudian simpan antara muka untuk mengimport fungsi iniSetExchangesSetParamsSetFunc. Strategi pada platform FMZ memanggil fungsi ini dan menyampaikan beberapa fungsi, objek, dsb.

Lancarkan strategi pada platform FMZ

Strategi permulaan adalah sangat mudah, seperti berikut:

Ajar anda langkah demi langkah untuk merangkum strategi Python ke dalam fail tempatan

Terdapat hanya beberapa baris kod yang ditulis pada platform FMZ Perlu diingat bahawa parameter strategi permulaan ini adalah sama dengan strategi yang kami rangkumkan.Versi Python bagi Niaga Hadapan OKCoin Dual ThrustIa betul-betul sama, anda boleh terus menyalin strategi “Dwi Thrust OKCoin Niaga Hadapan”, kemudian kosongkan kod strategi dan tampalkannya.

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 cara ini, kami merangkum badan logik dasar dalam fail testA dan meletakkannya secara setempat pada peranti hos Pada platform FMZ, kami hanya perlu menyimpan satu dasar permulaan Robot yang mencipta dasar permulaan ini boleh memuatkan terus fail setempat kami dan jalankannya secara setempat pada hos .

Perbandingan ujian belakang

  • Muatkan fail testA secara setempat untuk ujian belakang

Ajar anda langkah demi langkah untuk merangkum strategi Python ke dalam fail tempatan

  • Strategi asal, diuji belakang pada pelayan awam

Ajar anda langkah demi langkah untuk merangkum strategi Python ke dalam fail tempatan

Satu lagi cara yang lebih mudah

Muatkan fail secara langsung untuk pelaksanaan. Kali ini kami menyediakan fail testB untuk meletakkan kod strategi “Versi Python 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': {

...

Strategi terlalu panjang, jadi ia ditinggalkan dan kod strategi tidak perlu diubah sama sekali. Kemudian sediakan “Versi Python Dual Thrust OKCoin Futures (mulakan strategi dan laksanakan fail testB secara langsung)”, yang merupakan strategi kami pada platform FMZ, cipta robot, muatkan terus fail testB dan laksanakannya secara langsung. Perlu diingatkan bahawa strategi permulaan juga mesti mempunyai tetapan parameter strategi yang sama (parameter antara muka strategi) seperti versi asal “Niaga Hadapan OKCoin Dual Thrust versi Python”.

Ajar anda langkah demi langkah untuk merangkum strategi Python ke dalam fail tempatan

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)

Untuk melakukan ujian belakang: Ajar anda langkah demi langkah untuk merangkum strategi Python ke dalam fail tempatan

Keputusan ujian belakang adalah konsisten dengan ujian di atas.

Jelas sekali, kaedah kedua di atas adalah lebih mudah dan disyorkan Jika ada kaedah yang lebih baik, anda dialu-alukan untuk meninggalkan mesej.