ہاتھ سے ہاتھ میں آپ کو ایک پائتن کی پالیسیوں کو پیک کرنے کے لئے ایک سستی فائل سکھاتا ہے

مصنف:چھوٹا سا خواب, تخلیق: 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 مستقبلاسی طرح، آپ کو براہ راست "پائیتھون ورژن دوہری زور 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 فائل دوبارہ لوڈ کریں

    img

  • عوامی سرور پر اصل پالیسی کا دوبارہ جائزہ لیں

    img

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

براہ راست فائلوں کو عملدرآمد میں لوڈ کریں۔ اس بار ہم نے ایک ٹیسٹ بی فائل تیار کی ہے جس میں "پائیتھون ورژن دوہری تھروسٹ OKCoin فیوچر" کی حکمت عملی کا کوڈ ہے۔

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': {

...

اگر حکمت عملی بہت لمبی ہے تو اسے نظر انداز کر دیا جاتا ہے اور اس کے کوڈ میں کوئی تبدیلی نہیں کی جاتی ہے۔ اس کے بعد "پائیتھون ورژن ڈوئل تھروسٹ اوکی کوئن فیوچر (شروع کی پالیسی ، براہ راست ٹیسٹ بی فائل پر عمل کریں) " تیار کریں ، جو کہ ایف ایم زیڈ پلیٹ فارم پر ہماری حکمت عملی ہے ، روبوٹ بنائیں ، براہ راست ٹیسٹ بی فائل لوڈ کریں ، اور براہ راست عمل کریں۔ نوٹ کریں کہ "شروع کی پالیسی" میں اسی طرح کی حکمت عملی کی پیرامیٹرز کی ترتیبات ہونی چاہئیں۔

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سیکھنا

چھوٹا سا خوابہاہاہاہا، کیا آپ کے پاس کوئی آئیڈیا ہے جس پر ہم سب مل کر بحث کر سکتے ہیں۔