हाथ से हाथ मिलाकर आप एक पायथन नीति पैकेज लागत प्रभावी रूप से फ़ाइल

लेखक:छोटे सपने, बनाया गयाः 2020-06-30 10:48:18, अद्यतन किया गयाः 2023-10-08 19:48:02

img

हाथ से हाथ मिलाकर आप एक पायथन नीति पैकेज लागत प्रभावी रूप से फ़ाइल

इस लेख में दो विकल्पों के बारे में बताया गया है, लेकिन एक और सरल विकल्प (अनुशंसा) है।

कई डेवलपर्स जो पायथन भाषा का उपयोग करते हैं, वे नीति कोड फ़ाइलों को स्थानीय रूप से रखना चाहते हैं क्योंकि वे नीति सुरक्षा के बारे में चिंतित हैं।FMZ APIएक प्रस्ताव जो दस्तावेजों में प्रस्तुत किया गया हैः

रणनीतिक सुरक्षा आविष्कारक क्वांटिफाइड ट्रेडिंग प्लेटफॉर्म पर रणनीति विकसित करना, जो केवल आविष्कारक क्वांटिफाइड खाताधारकों के लिए दिखाई देता है; और आविष्कारक क्वांटिफाइड ट्रेडिंग प्लेटफॉर्म पर रणनीति कोड को पूरी तरह से स्थानीयकृत करना संभव है, जैसे कि रणनीति को एक पायथन पैकेज में पैक करना और रणनीति कोड में लोड करना, जिससे रणनीति स्थानीयकरण संभव हो जाता है।https://www.fmz.com/api#策略安全性

इस तरह की चिंताओं की कोई आवश्यकता नहीं है, लेकिन एक समाधान के साथ, यह एक पूर्ण कार्यान्वयन उदाहरण प्रदान करता है।

एक रणनीति को पैक करें

हम एक सरल पायथन रणनीति का उपयोग करते हैंDual Thrustइस तरह के लोगों के लिए, यह बहुत अच्छा है।https://www.fmz.com/strategy/21856हम प्रयास करते हैं कि किसी भी नीति के अंश कोड को नहीं बदला जाए, नीति को एक ऐसी फ़ाइल में समेकित किया जाए जो एफएमजेड प्लेटफॉर्म पर रणनीति कोड द्वारा बुलाया जा सके, और निष्पादन परिणाम सीधे उस नीति को चलाने के साथ पूरी तरह से मेल खाते हों। पैकेजिंग की सबसे बड़ी समस्या यह है कि एफएमजेड प्लेटफॉर्म पर रणनीति कोड द्वारा बुलाए गए वैश्विक ऑब्जेक्ट, वैश्विक फ़ंक्शन, निरंतर मान, हमारे पैकेज किए गए दस्तावेज़ में सुलभ नहीं हैं, इसलिए हमें इन ऑब्जेक्टों, कार्यों, चर, निरंतरों को पैकेज किए गए दस्तावेज़ में पारित करने का एक तरीका खोजना होगा। फिर हम विभागों के अनुसार काम करते हैं।

  • प्रतिलिपिपायथन संस्करण Dual Thrust OKCoin वायदानीति का कोड, स्थानीय पायथन फ़ाइल में चिपकाया गया, स्थानीय पायथन फ़ाइल का नाम परीक्षण ए है।

    img

    स्थानीय संपादक में खोले गए फ़ाइल testA को पेस्ट करें.

    img

  • कुछ कोड जोड़ा गया है ताकि कॉपी-पेस्ट की गई नीति कोड के कुछ हिस्सों को मूल में रखा जा सके

    # 函数、对象
    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
    

    उपरोक्त कोड का मुख्य कार्य वर्तमान दस्तावेज़ में उपयोग किए जाने वाले वैश्विक कार्यों, चरों की घोषणा करना है।SetExchangesSetParamsSetFuncFMZ प्लेटफॉर्म पर एक नीति इन कार्यों को कॉल करती है और कुछ उपयोग किए गए कार्यों, वस्तुओं आदि को पास करती है।

FMZ प्लेटफॉर्म पर लॉन्च की रणनीति

यह एक बहुत ही सरल रणनीति है, जैसा कि नीचे दिया गया हैः

img

FMZ प्लेटफ़ॉर्म पर लिखे गए कोड की केवल कुछ पंक्तियाँ हैं, और ध्यान दें कि इस स्टार्टअप नीति के पैरामीटर को हमारे द्वारा पैक की गई नीति के साथ जोड़ना है।पायथन संस्करण Dual Thrust OKCoin वायदाठीक इसी तरह, वास्तव में आप सीधे "पायथन संस्करण Dual Thrust OKCoin वायदा" नीति की प्रतिलिपि बना सकते हैं, और फिर नीति कोड को खाली कर सकते हैं और इसे पेस्ट कर सकते हैं।

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

इस प्रकार, हम नीति तर्क विषय को testA फ़ाइल में लिपटे हुए हैं और इसे होस्ट के स्थान पर स्थित डिवाइस पर रखते हैं, FMZ प्लेटफॉर्म पर, केवल एक स्टार्टअप नीति को सहेजकर, इस स्टार्टअप नीति को बनाने वाले बॉट को सीधे हमारे स्थानीय फ़ाइल को होस्ट के स्थान पर चलाने के लिए लोड किया जा सकता है।

पुनरीक्षण

  • स्थानीय रूप से लोड किया गया testA फ़ाइल पुनः प्राप्त करें

    img

  • मूल नीति, सार्वजनिक सर्वर पर पुनः परीक्षण

    img

एक और आसान तरीका है।

सीधे फ़ाइल को निष्पादन में लोड करें। इस बार हमने एक testB फाइल तैयार की है जिसमें "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': {

...

यदि रणनीति बहुत लंबी है, तो इसे छोड़ दिया जाता है और रणनीति कोड को पूरी तरह से बदलने की आवश्यकता नहीं होती है। फिर "पायथन संस्करण Dual Thrust OKCoin वायदा (प्रारंभ नीति, सीधे परीक्षण B फ़ाइल निष्पादित करें) " तैयार करें, जो कि एफएमजेड प्लेटफॉर्म पर हमारी रणनीति है, रोबोट बनाएं, सीधे परीक्षण B फ़ाइल लोड करें, और सीधे निष्पादित करें। ध्यान दें कि "प्रारंभ नीति" में मूल पायथन संस्करण Dual Thrust OKCoin वायदा के समान रणनीति पैरामीटर सेटिंग्स (नीति इंटरफ़ेस पैरामीटर) होनी चाहिए।

img

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)

पुनर्मूल्यांकन करेंःimg

इस परीक्षण के परिणाम ऊपर के परीक्षण के अनुरूप हैं।

यह स्पष्ट है कि दूसरा तरीका बहुत आसान है, और मैं आपको इसका उपयोग करने की सलाह देता हूं, अगर कोई बेहतर तरीका है, तो आपका स्वागत है।


संबंधित

अधिक

qq89520और यह मुझे प्रेरित करता है, और मुझे लगता है कि सेलेनियम के साथ और भी बहुत कुछ किया जा सकता है।

qq89520सीखना

छोटे सपनेहाहा, क्या कोई विचार है जो आप के पास आ सकता है और हम सब मिलकर चर्चा कर सकते हैं।