একটি স্থানীয় ফাইল মধ্যে পাইথন কৌশল encapsulate আপনি শেখান

লেখক:ভাল, তৈরিঃ 2020-07-09 10:21:31, আপডেটঃ 2023-10-28 15:28:00

img

অনেক ডেভেলপার যারা পাইথনে কৌশল লেখেন তারা কৌশল কোড ফাইলগুলি স্থানীয়ভাবে রাখতে চান, কৌশলটির সুরক্ষা সম্পর্কে উদ্বিগ্ন। এফএমজেড এপিআই নথিতে প্রস্তাবিত সমাধান হিসাবেঃ

কৌশলগত নিরাপত্তা

কৌশলটি এফএমজেড প্ল্যাটফর্মে বিকাশ করা হয় এবং কৌশলটি কেবল এফএমজেড অ্যাকাউন্টধারীদের কাছে দৃশ্যমান। এবং এফএমজেড প্ল্যাটফর্মে, কৌশল কোডটি সম্পূর্ণ স্থানীয়করণ করা যেতে পারে, উদাহরণস্বরূপ, কৌশলটি একটি পাইথন প্যাকেজে ক্যাপসুল করা হয় এবং কৌশল কোডে লোড করা হয়, যাতে কৌশল স্থানীয়করণ উপলব্ধি করা হয়।

আরও তথ্যের জন্য, দয়া করে যানঃhttps://www.fmz.com/api

প্রকৃতপক্ষে, এই ধরনের উদ্বেগের প্রয়োজন নেই, কিন্তু যেহেতু এই ধরনের প্রয়োজন আছে, আমরা একটি সম্পূর্ণ বাস্তবায়ন উদাহরণ প্রদান করব।

একটি কৌশল সংক্ষিপ্ত করুন

আসুন ক্লাসিক ব্যবহার করে একটি সহজ পাইথন কৌশল খুঁজে বের করি।Dual Thrustকৌশল, কৌশল ঠিকানাঃhttps://www.fmz.com/strategy/21856আমরা কৌশল কোডের কোনও অংশ পরিবর্তন না করার চেষ্টা করি, কৌশলটি এমন একটি ফাইলে এনক্যাপসুলার করি যা এফএমজেড প্ল্যাটফর্মে কৌশল কোড দ্বারা কল করা যেতে পারে এবং কার্যকর ফলাফলটি কৌশলটি সরাসরি চালানোর মতোই। এনক্যাপসুলারিংয়ের সবচেয়ে বড় সমস্যা হ'ল এফএমজেড প্ল্যাটফর্মে কৌশল কোড দ্বারা কল করা গ্লোবাল অবজেক্ট, গ্লোবাল ফাংশন এবং ধ্রুবক মানগুলি আমরা এনক্যাপসুলার ফাইলগুলিতে অ্যাক্সেস করতে পারি না, তাই আমাদের অবশ্যই এই অবজেক্টগুলি, ফাংশনগুলি, ভেরিয়েবলগুলি এবং ধ্রুবকগুলি এনক্যাপসুলার ফাইলটিতে পাস করার উপায় খুঁজে বের করতে হবে। আসুন এটি ধাপে ধাপে করি।

img

ফাইলের মধ্যে আটকানtestAস্থানীয় সম্পাদক দ্বারা খোলা।

img

কিছু কোড যোগ করুন, এবং কৌশল কোড অংশ অনুলিপি এবং অক্ষত আটকানো রাখা

# Function, object
exchanges = None
exchange = None
Log = None
Sleep = None
TA = None
Chart = None
LogProfitReset = None
LogStatus = None
_N = None
_C = None 
LogProfit = None  


# Strategy parameters
ContractTypeIdx = None
MarginLevelIdx = None
NPeriod = None
Ks = None
Kx = None
AmountOP = None
Interval = None
LoopInterval = None
PeriodShow = None  

# constant
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

উপরের কোড প্রধান ফাংশন বর্তমান ফাইল ব্যবহৃত গ্লোবাল ফাংশন এবং ভেরিয়েবল ঘোষণা করা হয়. তারপর ইন্টারফেস সংরক্ষণSetExchanges, SetParams, SetFuncএই ফাংশনগুলি আমদানি করতে। এফএমজেড প্ল্যাটফর্মের কৌশলগুলি এই ফাংশনগুলিকে কল করে এবং কিছু ব্যবহৃত ফাংশন এবং বস্তুগুলি পাস করে।

এফএমজেড প্ল্যাটফর্মে স্টার্টআপ কৌশল

স্টার্টআপ কৌশল খুবই সহজ, নিম্নরূপঃ

img

FMZ প্ল্যাটফর্মে শুধুমাত্র কয়েক লাইন কোড লেখা আছে. এটা লক্ষ করা উচিত যে এই স্টার্টআপ কৌশল পরামিতি আমাদের প্যাকেজ কৌশল ঠিক একইডুয়াল থ্রাস্ট OKCoin ফিউচার কৌশল কোডের পাইথন সংস্করণআসলে, আপনি সরাসরি কপি করতে পারেনডুয়াল থ্রাস্ট OKCoin ফিউচার কৌশল কোডের পাইথন সংস্করণকৌশল, তারপর শুধু কৌশল কোড পরিষ্কার, এটি আটকান.

import sys
# Here I wrote the path where I put the testA file myself. I replaced it with xxx. To put it simply, I set the path of my testA file.
sys.path.append("/Users/xxx/Desktop/pythonPlayground/")
import testA

def main():
    # Passing Exchange Object
    testA.SetExchanges(exchanges)
    # Pass global function SetFunc(pLog, pSleep, pTA, pChart, pLogStatus, pLogProfitReset, p_N, p_C, pLogProfit)
    testA.SetFunc(Log, Sleep, TA, Chart, LogStatus, LogProfitReset, _N, _C, LogProfit)
    # Passing strategy parameters SetParams(pContractTypeIdx, pMarginLevelIdx, pNPeriod, pKs, pKx, pAmountOP, pInterval, pLoopInterval, pPeriodShow)
    testA.SetParams(ContractTypeIdx, MarginLevelIdx, NPeriod, Ks, Kx, AmountOP, Interval, LoopInterval, PeriodShow)
    # Execute the main strategy function in the encapsulated testA file
    testA.main()

এইভাবে, আমরা কৌশলগত যুক্তির প্রধান অংশকে সংক্ষিপ্তভাবেtestAফাইল এবং এটি স্থানীয়ভাবে ডিভাইসে স্থাপন করুন যেখানে ডকার অবস্থিত। এফএমজেড প্ল্যাটফর্মে, আমাদের কেবল একটি স্টার্টআপ কৌশল সংরক্ষণ করতে হবে। এই স্টার্টআপ কৌশল তৈরি করে এমন রোবট সরাসরি আমাদের স্থানীয় ফাইলটি লোড করতে পারে এবং এটি স্থানীয়ভাবে চালাতে পারে।

ব্যাকটেস্টিং তুলনা

  • লোডtestAব্যাকটেস্টের জন্য স্থানীয়ভাবে ফাইল

img

  • মূল কৌশল, পাবলিক সার্ভারে ব্যাকটেস্টিং

img

আরেকটি সহজ উপায়

ফাইলটি সরাসরি এক্সিকিউশনের জন্য লোড করুন। এইবার আমরা একটি প্রস্তুতtestBফাইলের জন্য কোড সহডুয়াল থ্রাস্ট OKCoin ফিউচার কৌশল কোডের পাইথন সংস্করণ strategy.

import time
class Error_noSupport(BaseException):
    def __init__(self):
        Log("Only OKCoin futures are supported!#FF0000")

class Error_AtBeginHasPosition(BaseException):
    def __init__(self):
        Log("There is a futures position at startup!#FF0000")

ChartCfg = {
    '__isStock': True,
    'title': {
        'text': 'Dual Thrust Top and bottom rail map'
    },
    'yAxis': {

...

যদি কৌশলটি খুব দীর্ঘ হয়, তবে এটি বাদ দেওয়া হয় এবং কৌশল কোডটি পরিবর্তন করার দরকার নেই।

তাহলে প্রস্তুত হও।ডুয়াল থ্রাস্ট OKCoin ফিউচার কৌশল কোডের পাইথন সংস্করণ(কৌশল শুরু, সরাসরি কার্যকরtestBফাইল), যা FMZ প্ল্যাটফর্মে আমাদের কৌশল, একটি রোবট তৈরি, সরাসরি লোডtestBএটি লক্ষ্য করা উচিত যে স্টার্টআপ কৌশলটি অবশ্যই মূল সংস্করণের মতো ঠিক একই কৌশল পরামিতি সেটিংস (কৌশল ইন্টারফেস পরামিতি) থাকতে হবেডুয়াল থ্রাস্ট OKCoin ফিউচার কৌশল কোডের পাইথন সংস্করণ.

img

if __name__ == '__main__':
    Log("run...")
    try:
        # The file path is processed, you can write the actual path of your testB file
        f = open("/Users/xxx/Desktop/pythonPlayground/testB.py", "r")
        code = f.read()
        exec(code)
    except Exception as e:
        Log(e)

ব্যাকটেস্ট করুনঃ

img

ব্যাকটেস্টের ফলাফল উপরের পরীক্ষার সাথে সামঞ্জস্যপূর্ণ।

স্পষ্টতই উপরের দ্বিতীয় পদ্ধতিটি সহজ, এটি ব্যবহার করার পরামর্শ দেওয়া হয়।


আরো