آپ کو ایک مقامی فائل میں ایک پائیتھن کی حکمت عملی کو 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

ایف ایم زیڈ پلیٹ فارم پر صرف چند لائنوں کا کوڈ لکھا گیا ہے۔ یہ نوٹ کیا جانا چاہئے کہ اس اسٹارٹ اپ کی حکمت عملی کے پیرامیٹرز بالکل ہماری پیکڈ حکمت عملی کی طرح ہیں۔ڈبل تھروسٹ 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

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

واضح طور پر اوپر کا دوسرا طریقہ آسان ہے، اس کا استعمال کرنے کی سفارش کی جاتی ہے.


مزید