Sumber daya yang dimuat... Pemuatan...

Tangan-tangan mengajarkan Anda untuk membungkus kebijakan Python dalam dokumen yang murah.

Penulis:Penemu Kuantitas - Mimpi Kecil, Dibuat: 2020-06-30 10:48:18, Diperbarui: 2024-12-10 20:27:04

手把手教你把一个Python策略封装成本地文件

Tangan-tangan mengajarkan Anda untuk membungkus kebijakan Python dalam dokumen yang murah.

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 APISalah 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#%E7%AD%96%E7%95%A5%E5%AE%89%E5%85%A8%E6%80%A7

Meskipun kekhawatiran ini tidak perlu, namun dengan solusi seperti itu, ini memberikan contoh implementasi yang lengkap.

Membungkus sebuah strategi

Kami menemukan strategi Python yang sederhana untuk demonstrasi, menggunakan strategi Python klasik.Dual ThrustStrategi, 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.

手把手教你把一个Python策略封装成本地文件

Tempelkan testA ke dalam file yang dibuka di editor lokal.

手把手教你把一个Python策略封装成本地文件

  • 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.SetExchangesSetParamsSetFuncFungsi-fungsi ini dapat digunakan untuk memindahkan beberapa fungsi, objek, dan lain-lain.

Strategi peluncuran di platform FMZ

Cara memulai sangat sederhana, seperti berikut:

手把手教你把一个Python策略封装成本地文件

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.

Perbandingan

  • TestA file yang dimuat secara lokal

手把手教你把一个Python策略封装成本地文件

  • Kebijakan asli, di-retest di server publik

手把手教你把一个Python策略封装成本地文件

Cara lain yang lebih sederhana.

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.

手把手教你把一个Python策略封装成本地文件

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:手把手教你把一个Python策略封装成本地文件

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.


Artikel terkait

Informasi lebih lanjut

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.