4
ফোকাস
1271
অনুসারী

আপনাকে ধাপে ধাপে শেখান কিভাবে একটি স্থানীয় ফাইলে একটি পাইথন কৌশল এনক্যাপসুলেট করতে হয়

তৈরি: 2020-06-30 10:48:18, আপডেট করা হয়েছে: 2024-12-10 20:27:04
comments   3
hits   3310

আপনাকে ধাপে ধাপে শেখান কিভাবে একটি স্থানীয় ফাইলে একটি পাইথন কৌশল এনক্যাপসুলেট করতে হয়

আপনাকে ধাপে ধাপে শেখান কিভাবে একটি স্থানীয় ফাইলে একটি পাইথন কৌশল এনক্যাপসুলেট করতে হয়

এই নিবন্ধটি দুটি সমাধান সম্পর্কে কথা বলে, এবং নিবন্ধের শেষে অন্য সমাধানটি সহজ (প্রস্তাবিত)।

অনেক ডেভেলপার যারা পলিসি লেখার জন্য পাইথন ভাষা ব্যবহার করেন তারা স্থানীয়ভাবে পলিসি কোড ফাইল সংরক্ষণ করতে চান এবং নীতি নিরাপত্তা নিয়ে চিন্তিত। হিসাবেFMZ APIনথিতে প্রস্তাবিত একটি সমাধান:

নীতি নিরাপত্তা উদ্ভাবক পরিমাণগত ট্রেডিং প্ল্যাটফর্মে কৌশলগুলি বিকাশ করুন শুধুমাত্র উদ্ভাবক পরিমাণগত অ্যাকাউন্ট হোল্ডারদের কাছে দৃশ্যমান। এবং কৌশল কোড সম্পূর্ণরূপে উদ্ভাবক পরিমাণগত ট্রেডিং প্ল্যাটফর্মে স্থানীয়করণ করা যেতে পারে, উদাহরণস্বরূপ, কৌশলটি একটি পাইথন প্যাকেজে অন্তর্ভুক্ত করা যেতে পারে এবং কৌশল কোডে লোড করা যেতে পারে, এইভাবে কৌশল স্থানীয়করণ অর্জন করা যায়। https://www.fmz.com/api#%E7%AD%96%E7%95%A5%E5%AE%89%E5%85%A8%E6%80%A7

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

একটি কৌশল এনক্যাপসুলেট করুন

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

আপনাকে ধাপে ধাপে শেখান কিভাবে একটি স্থানীয় ফাইলে একটি পাইথন কৌশল এনক্যাপসুলেট করতে হয়

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

আপনাকে ধাপে ধাপে শেখান কিভাবে একটি স্থানীয় ফাইলে একটি পাইথন কৌশল এনক্যাপসুলেট করতে হয়

  • কপি এবং পেস্ট করা কৌশল কোড অক্ষত রেখে কিছু কোড যোগ করুন।
  # 函数、对象
  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

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

FMZ প্ল্যাটফর্মে কৌশল চালু করুন

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

আপনাকে ধাপে ধাপে শেখান কিভাবে একটি স্থানীয় ফাইলে একটি পাইথন কৌশল এনক্যাপসুলেট করতে হয়

FMZ প্ল্যাটফর্মে কোডের এই কয়েকটি লাইন লেখা আছে এটা লক্ষ করা উচিত যে এই স্টার্টআপ স্ট্র্যাটেজির প্যারামিটারগুলো আমাদের স্ট্র্যাটেজির সাথে এনক্যাপসুলেট করা উচিত।পাইথন সংস্করণ ডুয়াল থ্রাস্ট 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 ফাইলে পলিসি লজিকের মূল অংশকে এনক্যাপসুলেট করি এবং এটিকে হোস্টের ডিভাইসে রাখি স্থানীয় ফাইল এবং হোস্টে স্থানীয়ভাবে চালান।

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

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

আপনাকে ধাপে ধাপে শেখান কিভাবে একটি স্থানীয় ফাইলে একটি পাইথন কৌশল এনক্যাপসুলেট করতে হয়

  • আসল কৌশল, একটি পাবলিক সার্ভারে ব্যাকটেস্ট করা হয়েছে

আপনাকে ধাপে ধাপে শেখান কিভাবে একটি স্থানীয় ফাইলে একটি পাইথন কৌশল এনক্যাপসুলেট করতে হয়

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

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

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 Futures এর Python সংস্করণ (কৌশল শুরু করুন এবং সরাসরি testB ফাইলটি কার্যকর করুন)” প্রস্তুত করুন, যা FMZ প্ল্যাটফর্মে আমাদের কৌশল, একটি রোবট তৈরি করুন, সরাসরি testB ফাইলটি লোড করুন এবং সরাসরি এটি কার্যকর করুন। এটি লক্ষ্য করা উচিত যে স্টার্টআপ কৌশলটিতে “পাইথন সংস্করণ ডুয়াল থ্রাস্ট ওকেকয়েন ফিউচারস” এর মূল সংস্করণের মতো একই কৌশল প্যারামিটার সেটিংস (কৌশল ইন্টারফেস প্যারামিটার) থাকতে হবে।

আপনাকে ধাপে ধাপে শেখান কিভাবে একটি স্থানীয় ফাইলে একটি পাইথন কৌশল এনক্যাপসুলেট করতে হয়

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)

ব্যাকটেস্ট করতে: আপনাকে ধাপে ধাপে শেখান কিভাবে একটি স্থানীয় ফাইলে একটি পাইথন কৌশল এনক্যাপসুলেট করতে হয়

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

স্পষ্টতই উপরের দ্বিতীয় পদ্ধতিটি সহজ এবং যদি একটি ভাল পদ্ধতি থাকে তবে দয়া করে একটি বার্তা দিন৷