Les ressources ont été chargées... Je charge...

Les mains en main vous apprennent à envelopper une stratégie Python dans un document peu coûteux

Auteur:L'inventeur de la quantification - un petit rêve, Créé: 2020-06-30 10:48:18, Mis à jour: 2024-12-10 20:27:04

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

Les mains en main vous apprennent à envelopper une stratégie Python dans un document peu coûteux

L'article parle de deux solutions, l'autre est plus simple (recommandation) à la fin du texte.

Beaucoup de développeurs qui écrivent des stratégies en Python souhaitent conserver les fichiers de code de la politique localement, craignant la sécurité de la politique.FMZ APIUn projet proposé dans le document:

Sécurité stratégique Les stratégies sont visibles uniquement par les titulaires de comptes de l'inventeur et le code de la stratégie peut être entièrement localisé sur la plate-forme d'inventeur.https://www.fmz.com/api#%E7%AD%96%E7%95%A5%E5%AE%89%E5%85%A8%E6%80%A7

Il n'y a pas de raison de s'inquiéter, mais une telle solution offre un exemple parfait de mise en œuvre.

Envelopper une stratégie

Nous avons trouvé une stratégie Python simple pour faire une démonstration, en utilisant le classiqueDual ThrustLa stratégie, adresse de la stratégie:https://www.fmz.com/strategy/21856Nous nous efforçons de ne modifier aucun code partiel de la stratégie, d'envelopper la stratégie dans un fichier qui peut être appelé par le code de la stratégie sur la plate-forme FMZ, et d'exécuter les résultats de l'exécution de la stratégie directement. Le plus gros problème avec l'enveloppe est que les objets globaux, les fonctions globales, les valeurs de variables qui sont appelés par le code de la stratégie sur la plate-forme FMZ ne sont pas accessibles dans notre fichier enveloppé, nous devons donc trouver un moyen de transmettre ces objets, fonctions, variables et constantes au fichier enveloppé.

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

Collez testA dans le fichier ouvert dans l'éditeur local.

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

  • Ajouter du code pour conserver la partie de code de la politique de copie et de collage
  # 函数、对象
  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

La fonction principale du code ci-dessus est de déclarer les fonctions globales ou les variables utilisées dans le fichier en cours; puis de réserver l'interface pour importer ces fonctions.SetExchangesSetParamsSetFuncDans la plate-forme FMZ, la stratégie consiste à appeler ces fonctions et à leur transmettre certaines fonctions, objets, etc.

Stratégie de lancement sur la plateforme FMZ

La stratégie de démarrage est simple:

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

Il suffit d'écrire ces quelques lignes de code sur la plateforme FMZ, et il faut noter que le paramètre de cette stratégie de démarrage est d'envelopper la politique avec laquelle nous avons commencé.Les futures du système de paiement OKCoin en version PythonC'est exactement la même chose, en fait, vous pouvez copier directement la stratégie "Python version Dual Thrust OKCoin futures" et vous pouvez simplement vider le code de la stratégie et le coller sur votre ordinateur.

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

Ainsi, nous enveloppons le sujet logique de la politique dans le fichier testA et le plaçons localement sur l'appareil où se trouve l'hôte. Sur la plate-forme FMZ, le robot qui a créé cette politique de démarrage peut directement charger notre fichier local et l'exécuter localement sur l'hôte.

Contraste avec le test

  • Retour à la version testA du fichier

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

  • Politique originale, vérifiée sur le serveur public

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

Il y a une autre façon plus simple.

Il est possible de télécharger le fichier directement dans l'exécution. Cette fois-ci, nous avons préparé un testB qui contient le code de la stratégie "Dual Thrust OKCoin futures Python".

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': {

...

Si la stratégie est trop longue, elle est omise et le code de la stratégie n'a pas besoin d'être modifié. Ensuite, préparez le "Python Dual Thrust OKCoin Futures", notre stratégie sur la plate-forme FMZ, pour créer un robot, charger directement le testB et l'exécuter directement.

手把手教你把一个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)

Exécutez le test:手把手教你把一个Python策略封装成本地文件

Les résultats des tests sont en accord avec les tests ci-dessus.

Il est évident que la deuxième méthode est plus simple et je vous recommande de l'utiliser.


Contenu lié

En savoir plus

Je ne sais pas.Cela m'a inspiré et j'ai pensé qu'il y avait beaucoup plus à faire avec le sélénium.

Je ne sais pas.Apprendre

L'inventeur de la quantification - un petit rêveSi vous avez des idées, discutez-en avec nous.