avatar of 发明者量化-小小梦 发明者量化-小小梦
پر توجہ دیں نجی پیغام
4
پر توجہ دیں
1271
پیروکار

آپ کو قدم بہ قدم ایک Python حکمت عملی کو مقامی فائل میں سمیٹنا سکھائیں۔

میں تخلیق کیا: 2020-06-30 10:48:18, تازہ کاری: 2024-12-10 20:27:04
comments   3
hits   3310

آپ کو قدم بہ قدم ایک Python حکمت عملی کو مقامی فائل میں سمیٹنا سکھائیں۔

آپ کو قدم بہ قدم ایک Python حکمت عملی کو مقامی فائل میں سمیٹنا سکھائیں۔

یہ مضمون دو حلوں پر بحث کرتا ہے مضمون کے آخر میں دوسرا حل آسان ہے (تجویز کردہ)۔

بہت سے ڈویلپر جو Python کو حکمت عملی لکھنے کے لیے استعمال کرتے ہیں وہ حکمت عملی کوڈ فائلوں کو مقامی طور پر ذخیرہ کرنا چاہتے ہیں، لیکن وہ حکمت عملی کی حفاظت کے بارے میں فکر مند ہیں۔ جیسا کہFMZ APIدستاویز میں تجویز کردہ ایک حل:

پالیسی سیکیورٹی موجد مقداری تجارتی پلیٹ فارم پر حکمت عملی تیار کریں صرف موجد مقداری اکاؤنٹ ہولڈرز کو دکھائی دیتی ہیں۔ اس کے علاوہ، حکمت عملی کوڈ کو مکمل طور پر انوینٹر کوانٹیٹیو ٹریڈنگ پلیٹ فارم پر مقامی کیا جا سکتا ہے، مثال کے طور پر، حکمت عملی کو ایک Python پیکج میں شامل کیا جا سکتا ہے اور اس طرح حکمت عملی لوکلائزیشن کو حاصل کیا جا سکتا ہے۔ 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 پلیٹ فارم پر حکمت عملی کوڈ کے ذریعے بلایا جا سکتا ہے۔ encapsulation کے ساتھ سب سے بڑا مسئلہ یہ ہے کہ FMZ پلیٹ فارم پر سٹریٹیجی کوڈ کے ذریعے کہلائے جانے والے عالمی آبجیکٹ، عالمی فنکشنز اور مستقل قدروں تک ہماری انکیپسولیشن فائلوں میں رسائی نہیں کی جا سکتی، اس لیے ہمیں ان اشیاء، فنکشنز، متغیرات کو منتقل کرنے کا راستہ تلاش کرنا چاہیے۔ , اور encapsulated دستاویز کے مستقل۔ پھر ہم اسے قدم بہ قدم سنبھالیں گے۔

آپ کو قدم بہ قدم ایک Python حکمت عملی کو مقامی فائل میں سمیٹنا سکھائیں۔

مقامی ایڈیٹر میں کھولی گئی فائل testA میں چسپاں کریں۔

آپ کو قدم بہ قدم ایک Python حکمت عملی کو مقامی فائل میں سمیٹنا سکھائیں۔

  • کچھ کوڈ شامل کریں، اور حکمت عملی کوڈ کا وہ حصہ رکھیں جسے آپ نے کاپی اور پیسٹ کیا ہے۔
  # 函数、对象
  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 پلیٹ فارم پر حکمت عملی شروع کریں۔

شروع کرنے کی حکمت عملی بہت آسان ہے، جیسا کہ:

آپ کو قدم بہ قدم ایک Python حکمت عملی کو مقامی فائل میں سمیٹنا سکھائیں۔

FMZ پلیٹ فارم پر کوڈ کی صرف چند سطریں لکھی گئی ہیں، واضح رہے کہ اس اسٹارٹ اپ اسٹریٹجی کے پیرامیٹرز ہماری انکیپسلیٹڈ اسٹریٹجی کے برابر ہیں۔ڈوئل تھرسٹ OKCoin فیوچرز کا پائتھون ورژنیہ بالکل ویسا ہی ہے، آپ براہ راست “Dual Thrust OKCoin Futures” کی حکمت عملی کو کاپی کر سکتے ہیں، پھر حکمت عملی کوڈ کو صاف کر کے پیسٹ کر سکتے ہیں۔

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 فائل لوڈ کریں۔

آپ کو قدم بہ قدم ایک Python حکمت عملی کو مقامی فائل میں سمیٹنا سکھائیں۔

  • اصل حکمت عملی، عوامی سرور پر بیک ٹیسٹ کی گئی۔

آپ کو قدم بہ قدم ایک Python حکمت عملی کو مقامی فائل میں سمیٹنا سکھائیں۔

ایک اور آسان طریقہ

عملدرآمد کے لیے فائل کو براہ راست لوڈ کریں۔ اس بار ہم “Dual Thrust OKCoin Futures کے Python ورژن” حکمت عملی کا کوڈ رکھنے کے لیے ایک 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 فائل کو براہ راست لوڈ کریں، اور براہ راست اس پر عمل درآمد کریں۔ واضح رہے کہ اسٹارٹ اپ حکمت عملی میں بھی وہی حکمت عملی پیرامیٹر سیٹنگز (سٹریٹیجی انٹرفیس پیرامیٹرز) ہونے چاہئیں جو “Python ورژن Dual Thrust OKCoin Futures” کے اصل ورژن کے طور پر ہیں۔

آپ کو قدم بہ قدم ایک 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)

بیک ٹیسٹ کرنے کے لیے: آپ کو قدم بہ قدم ایک Python حکمت عملی کو مقامی فائل میں سمیٹنا سکھائیں۔

بیک ٹیسٹ کے نتائج مندرجہ بالا ٹیسٹوں کے مطابق ہیں۔

ظاہر ہے، اوپر والا دوسرا طریقہ آسان اور تجویز کردہ ہے، اگر کوئی بہتر طریقہ ہے، تو آپ کو پیغام چھوڑنے کا خیرمقدم ہے۔