بہت سے ڈویلپرز جو پائتھون میں حکمت عملی لکھتے ہیں وہ حکمت عملی کے کوڈ فائلوں کو مقامی طور پر رکھنا چاہتے ہیں ، حکمت عملی کی حفاظت کے بارے میں فکر مند ہیں۔ ایف ایم زیڈ اے پی آئی دستاویز میں تجویز کردہ حل کے طور پر:
حکمت عملی سیکورٹی
حکمت عملی ایف ایم زیڈ پلیٹ فارم پر تیار کی جاتی ہے ، اور حکمت عملی صرف ایف ایم زیڈ اکاؤنٹ ہولڈرز کے لئے مرئی ہے۔ اور ایف ایم زیڈ پلیٹ فارم پر ، حکمت عملی کا کوڈ مکمل طور پر مقامی ہوسکتا ہے ، مثال کے طور پر ، حکمت عملی کو پائیتھون پیکیج میں شامل کیا جاتا ہے اور حکمت عملی کے کوڈ میں لوڈ کیا جاتا ہے ، تاکہ حکمت عملی کی مقامی کاری کا احساس ہو۔
مزید تفصیلات کے لیے براہ کرم ملاحظہ کریں:https://www.fmz.com/api
درحقیقت اس قسم کی پریشانی کی ضرورت نہیں ہے، لیکن چونکہ ایسی ضروریات ہیں، ہم ایک مکمل نفاذ کی مثال دیں گے۔
چلو کلاسیکی کا استعمال کرتے ہوئے، مظاہرہ کرنے کے لئے ایک سادہ پائیٹون حکمت عملی تلاش کریںDual Thrust
حکمت عملی، حکمت عملی کا پتہ:https://www.fmz.com/strategy/21856ہم حکمت عملی کے کوڈ کے کسی بھی حصے کو تبدیل کرنے کی کوشش نہیں کرتے ہیں ، حکمت عملی کو ایک ایسی فائل میں جوڑ دیتے ہیں جسے ایف ایم زیڈ پلیٹ فارم پر حکمت عملی کا کوڈ کال کرسکتا ہے ، اور عمل درآمد کا نتیجہ بالکل وہی ہے جو حکمت عملی کو براہ راست چلانے کے ساتھ ہے۔ انکیپسولیشن کا سب سے بڑا مسئلہ یہ ہے کہ ایف ایم زیڈ پلیٹ فارم پر حکمت عملی کے کوڈ کے ذریعہ کال کردہ عالمی اشیاء ، عالمی افعال اور مستقل اقدار تک رسائی حاصل نہیں کی جاسکتی ہے ، لہذا ہمیں ان اشیاء ، افعال ، متغیرات اور مستقلات کو انکیپسولیٹڈ فائل میں منتقل کرنے کا ایک طریقہ تلاش کرنا ہوگا۔ آئیے اسے قدم بہ قدم کریں۔
testA
.فائل میں چسپاں کریںtestA
مقامی ایڈیٹر کی طرف سے کھول دیا.
کچھ کوڈ شامل کریں، اور کوڈ کاپی اور پیسٹ اسٹریٹجی حصہ برقرار رکھیں
# 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
ان افعال کو درآمد کرنے کے لئے۔ ایف ایم زیڈ پلیٹ فارم پر حکمت عملی ان افعال کو کال کرتی ہے اور کچھ استعمال شدہ افعال اور اشیاء کو منتقل کرتی ہے۔
اسٹارٹ اپ کی حکمت عملی بہت سادہ ہے، مندرجہ ذیل:
ایف ایم زیڈ پلیٹ فارم پر صرف چند لائنوں کا کوڈ لکھا گیا ہے۔ یہ نوٹ کیا جانا چاہئے کہ اس اسٹارٹ اپ کی حکمت عملی کے پیرامیٹرز بالکل ہماری پیکڈ حکمت عملی کی طرح ہیں۔ڈبل تھروسٹ 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
بیک ٹیسٹ کے لئے مقامی طور پر فائلفائل کو براہ راست عملدرآمد کے لیے لوڈ کریں۔
اس بار ہم ایک تیار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 فیوچر حکمت عملی کوڈ کا پائیتھون ورژن.
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)
بیک ٹسٹ کریں:
بیک ٹسٹ کا نتیجہ مذکورہ بالا ٹیسٹ کے مطابق ہے۔
واضح طور پر اوپر کا دوسرا طریقہ آسان ہے، اس کا استعمال کرنے کی سفارش کی جاتی ہے.