ایک بار جب آپ نے ایک مقداری تجارتی حکمت عملی کا ڈیزائن مکمل کرلیا ہے تو ، آپ اپنی حکمت عملی کی بنیادی صورتحال کو کیسے جان سکتے ہیں ، جیسے حکمت عملی کی منطق اور حکمت عملی کی واپسی کی سمت؟ یقینا ، ہم حقیقی رقم کو براہ راست حقیقی تجارتی مارکیٹ میں حکمت عملی چلانے کے لئے استعمال نہیں کرسکتے ہیں ، لیکن ہم آپ کی حکمت عملی کی جانچ کرنے اور تاریخی اعداد و شمار میں اپنی حکمت عملی کے منافع کو جاننے کے لئے تاریخی اعداد و شمار کا استعمال کرسکتے ہیں۔
ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم بیک ٹیسٹ سسٹم کو تقسیم کرتا ہےبوٹ کی سطحاورنمونے کی سطح. بوٹ کی سطح مکمل طور پر مکمل تاریخی اعداد و شمار کے مطابق backtest کرنے کے لئے ہے؛ جبکہ تخروپن کی سطح backtest پیداtick
بیک ٹیسٹ کے لئے باقاعدگی سے وقفوں میں حقیقی K- لائن کے اعداد و شمار کے مطابق۔ وہ دونوں حقیقی تاریخی اعداد و شمار پر مبنی ہیں ، لیکن بوٹ کی سطح کے اعداد و شمار زیادہ درست ہیں اور نتائج زیادہ قابل اعتماد ہیں۔ تاہم ، بیک ٹیسٹنگ صرف تاریخی اعداد و شمار کے مطابق حکمت عملی کی کارکردگی ہے۔ تاریخی اعداد و شمار مستقبل کی مارکیٹ کی مکمل نمائندگی نہیں کرسکتے ہیں۔ تاریخی مارکیٹ دوبارہ ہوسکتی ہے ، یا اس سے بلیک سوان کا بھی سبب بن سکتا ہے۔ لہذا ، بیک ٹیسٹ کے نتائج کو عقلی اور معروضی طور پر سلوک کیا جانا چاہئے۔
کےسمیلیشن کی سطح ٹکتخروپن پیداٹِک ڈیٹابنیادی K لائن مدت کی بنیاد پر، ہر بنیادی K لائن مدت زیادہ سے زیادہ 12 backtest وقت پوائنٹس پیدا کرے گا؛ جبکہحقیقی مارکیٹ کی سطح ٹکبیک ٹیسٹنگ میں سیکنڈ فی سیکنڈ جمع کردہ حقیقی ٹِک ڈیٹا کا استعمال کیا جاتا ہے ، اعداد و شمار کا حجم بہت بڑا ہے اور بیک ٹیسٹنگ کی رفتار سست ہے ، لہذا اسے بہت طویل عرصے تک بیک ٹیسٹ نہیں کیا جاسکتا ہے۔ ایف ایم زیڈ کوانٹ کا بیک ٹیسٹ میکانزم حکمت عملی کو ایک ہی کے لائن پر متعدد بار تجارت کرنے کی اجازت دیتا ہے ، اس صورتحال سے بچنے کے لئے جہاں تجارت صرف اختتامی قیمت پر ہی انجام دی جاسکتی ہے۔ بیک ٹیسٹ کی رفتار کو مدنظر رکھتے ہوئے یہ زیادہ درست ہے۔
بیک ٹسٹنگ سسٹم میکانزم کی تفصیل
سمیلیشن کی سطح ٹِک کےسمیلیشن کی سطح ٹکبیک ٹیسٹنگ سسٹم کے بنیادی K- لائن ڈیٹا پر مبنی ہے ، جو کسی خاص الگورتھم کے مطابق کسی دیئے گئے بنیادی K- لائن بار کی اعلی ترین قیمت ، کم سے کم قیمت ، افتتاحی قیمت ، اور اختتامی قیمت کی اقدار کے فریم ورک میں بیک ٹیسٹ کے لئے ٹک ڈیٹا کی نقالی کرتا ہے۔ بیک ٹیسٹنگ ٹائم سیریز پر ریئل ٹائم ٹک ڈیٹا کے طور پر ، جب یہ حکمت عملی پروگرام انٹرفیس کو کال کرتا ہے تو یہ واپس آجاتا ہے۔ تفصیلات کے لئے ، براہ کرم ملاحظہ کریں:بیک ٹسٹنگ سسٹم سیمولیشن لیول میکانزم کی تفصیل.
بوٹ لیول ٹِک
بوٹ لیول بیک ٹیسٹ بار ٹائم سیریز میں اصل ٹِک لیول ڈیٹا ہے۔ ٹِک لیول ڈیٹا پر مبنی حکمت عملیوں کے لئے ، بیک ٹیسٹ کے لئے حقیقی مارکیٹ لیول کا استعمال حقیقت سے قریب ہے۔ بوٹ لیول بیک ٹیسٹ میں ، ٹِک ڈیٹا اصلی ریکارڈ شدہ ڈیٹا ہے ، نہ کہ نقلی۔ یہ گہرائی کے اعداد و شمار ، مارکیٹ ٹریڈنگ کے ریکارڈ ڈیٹا پلے بیک ، کسٹم گہرائی اور ہر انفرادی تجارتی ڈیٹا کی حمایت کرتا ہے۔ اصلی مارکیٹ لیول ڈیٹا بیک ٹیسٹ کا زیادہ سے زیادہ سائز زیادہ سے زیادہ 50MB تک ہے ، جس میں ڈیٹا سیٹ کی اوپری حد کے اندر بیک ٹیسٹ ٹائم رینج کی کوئی حد نہیں ہے۔ اگر آپ کو بیک ٹیسٹ ٹائم رینج کو زیادہ سے زیادہ بڑھانے کی ضرورت ہے تو ، آپ گیئر گہرائی کی ترتیب کی قدر کو کم کرسکتے ہیں اور بیک ٹیسٹ ٹائم رینج کو بڑھانے کے لئے ہر انفرادی ٹریڈنگ ڈیٹا کا استعمال نہیں کرسکتے ہیں۔GetDepth
, GetTrades
ری پلے بیک مارکیٹ کے اعداد و شمار حاصل کرنے کے لئے افعال.GetTicker
, GetTrades
, GetDepth
اورGetRecords
جب وقت بیک ٹسٹ ٹائم لائن پر چلتا ہے تو وقت کو متعدد بار آگے نہیں بڑھایا جائے گا (جس سے اگلے مارکیٹ ڈیٹا لمحے میں چھلانگ نہیں ہوگی) ۔ مذکورہ بالا افعال میں سے کسی ایک کو بار بار کال کرنے سے بیک ٹسٹ ٹائم لائن پر آگے بڑھنے کے لئے بیک ٹسٹ ٹائم کو آگے بڑھایا جائے گا (اگلے مارکیٹ ڈیٹا لمحے میں چھلانگ لگائیں) ۔ جب بیک ٹسٹ کے لئے حقیقی مارکیٹ کی سطح کا استعمال کیا جاتا ہے تو ، پہلے وقت کا انتخاب کرنے کی سفارش نہیں کی جاتی ہے۔ ابتدائی وقت کی مدت میں حقیقی مارکیٹ کی سطح کے اعداد و شمار نہیں ہوسکتے ہیں۔
روبوٹ سطح کی ٹِکاورتخروپن کی سطح کی ٹِکموڈ ، بیک ٹسٹ سسٹم کا ٹرانزیکشن میچنگ میکانزم: آرڈر ٹرانزیکشن میچنگ دیکھنے والی قیمت کے مطابق کی جاتی ہے اور پوری مقدار میں تجارت کی جاتی ہے۔ لہذا ، جزوی ٹرانزیکشن کے منظر نامے کو بیک ٹسٹ سسٹم میں ٹیسٹ نہیں کیا جاسکتا ہے۔
بیک ٹسٹنگ سسٹم بیک ٹسٹنگ کی حکمت عملیوں کی حمایت کرتا ہے جو لکھے گئے اور ڈیزائن کیے گئے ہیں:JavaScript
, TypeScript
, Python
, C++
, PINE
, MyLanguage
, Blockly
نمائش.
کے بیک ٹسٹجاوا اسکرپٹاورC++تجارتی حکمت عملی براؤزر میں کیا جاتا ہے، اور حقیقی مارکیٹ بوٹ یاویکس ایپemulated تبادلہ حقیقی مارکیٹ (یعنیویکس ایپFMZ Quant ٹریڈنگ پلیٹ فارم کے emulated تبادلہ) کسی بھی دوسرے سافٹ ویئر، لائبریریوں یا ماڈیولز نصب کرنے کے بغیر چلتا ہے.
کے بیک ٹیسٹپائیتھونڈوکر پر کیا جاتا ہے۔ یہ ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم کے ذریعہ شامل عوامی سرور پر کیا جاسکتا ہے ، اور یہ صارف کے اپنے ڈوکر پر بھی کیا جاسکتا ہے۔ حقیقی مارکیٹ آپریشن اور بیک ٹسٹ دونوں پر انحصار کرتا ہےپائیتھوناس نظام پر نصب کیا گیا ہے جہاں ڈوکر واقع ہے۔ اگر کچھ لائبریریوں کی ضرورت ہو تو ، انہیں دستی طور پر انسٹال کرنے کی ضرورت ہے (صرف عام)پائیتھونلائبریریوں FMZ Quant عوامی سرورز پر حمایت کر رہے ہیں).
یہ حمایت کرتا ہےجاوا اسکرپٹکروم ڈیو ٹولز میں حکمت عملی بیک ٹسٹنگ ڈیبگنگبراہ مہربانی ملاحظہ کریں.
ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم کے بیک ٹیسٹ سسٹم کی پیرامیٹر کی اصلاح کی تقریب بیک ٹیسٹنگ کے دوران ہر پیرامیٹر کی اصلاح کے اختیار کے مطابق پیرامیٹر کے مجموعے کو ترتیب دینا ہے۔
JavaScript
, PINE
، اورMy Language
، اور ٹیمپلیٹس پر پیرامیٹر کی اصلاح کی حمایت نہیں کرتا.پیرامیٹر مجموعے کی بنیاد پر پیدا کر رہے ہیںminimum
, maximum
، اورstep size
ترتیبات۔ بیک ٹسٹنگ سسٹم بیک ٹسٹنگ کے لئے ان پیرامیٹر کے مجموعوں کے ذریعے تکرار کرتا ہے (یعنی ، ہر پیرامیٹر کے مجموعے کو ایک بار بیک ٹسٹ کرنا) ۔نمبرbacktesting کے نظام میں بہتر بنایا جا سکتا ہے.
میںحکمت عملی ترمیم کا صفحہ،
backtest
backtest
حکمت عملی کے ترمیم کے علاقے میں./*backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
'''backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
'''
/*backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
JavaScript
/Python
/C++
/MyLanguage
/PINE
زبانوں جب حکمت عملی کوڈ میں بیک ٹسٹ کی ترتیبات کو محفوظ کریں:
MyLanguage:
(*backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*)
پائن زبان:
/*backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم کا بیک ٹسٹنگ سسٹم کسٹم ڈیٹا ذرائع کی حمایت کرتا ہے ، بیک ٹسٹنگ سسٹمGET
بیک ٹیسٹ کے لئے بیرونی ڈیٹا ماخذ حاصل کرنے کے لئے کسٹم یو آر ایل (عوامی طور پر قابل رسائی یو آر ایل) کی درخواست کرنے کا طریقہ۔ اضافی درخواست پیرامیٹرز مندرجہ ذیل ہیں:
پیرامیٹر | معنی | وضاحت |
---|---|---|
علامت | علامت کا نام | اسپاٹ مارکیٹ کے اعداد و شمار، جیسے:BTC_USDT ، فیوچر مارکیٹ کے اعداد و شمار جیسے:BTC_USDT.swap ، فیوچر پرپک معاہدے کی فنڈنگ کی شرح کے اعداد و شمار، جیسے:BTC_USDT.funding ، فیوچر پرپکوٹ معاہدوں کی قیمت انڈیکس کے اعداد و شمار جیسے:BTC_USDT.index |
ایڈ | تبادلہ | جیسے OKX، Futures_OKX |
گول | اعداد و شمار کی درستگی | سچ کا مطلب یہ ہے کہ کسٹم ڈیٹا ماخذ کے ذریعہ واپس آنے والے اعداد و شمار میں مخصوص صحت سے متعلق وضاحت کی گئی ہے۔ کسٹم ڈیٹا ماخذ کو ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم بیک ٹیسٹنگ سسٹم کے ذریعہ بھیجے گئے درخواست کو اس طرح طے کیا گیا ہے:round=true |
مدت | K لائن ڈیٹا پیریڈ (ملسی سیکنڈ) | جیسے:60000 ایک منٹ کی مدت ہے |
گہرائی | گہرائی کی سطحیں | 1-20 |
تجارت | ڈیٹا کو تقسیم کرنے کی ضرورت ہے | true ((1) / false ((0) |
سے | آغاز کا وقت | یونکس ٹائم اسٹیمپ |
کرنے کے لئے | اختتام کا وقت | یونکس ٹائم اسٹیمپ |
تفصیل | علامت کی تفصیلات کے لئے درخواست کے اعداد و شمار | سچ کا مطلب ہے کہ اسے کسٹم ڈیٹا ماخذ کے ذریعہ فراہم کرنے کی ضرورت ہے۔ کسٹم ڈیٹا ماخذ کو ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم بیک ٹیسٹنگ سسٹم کے ذریعہ بھیجے گئے درخواست کو اس طرح طے کیا گیا ہے:detail=true |
رسم | – | اس پیرامیٹر کو نظر انداز کیا جا سکتا ہے |
جب اسپاٹ ایکسچینج اور فیوچر ایکسچینج آبجیکٹ کا ڈیٹا ماخذ اپنی مرضی کے مطابق ڈیٹا ماخذ (فیڈر) پر مقرر کیا جاتا ہے تو ، بیک ٹسٹنگ سسٹم اپنی مرضی کے مطابق ڈیٹا ماخذ سروس کو ایک درخواست بھیجتا ہے:
http://customserver:9090/data?custom=0&depth=20&detail=true&eid=Bitget&from=1351641600&period=86400000&round=true&symbol=BTC_USDT&to=1611244800&trades=1
http://customserver:9090/data?custom=0&depth=20&detail=true&eid=Futures_OKX&from=1351641600&period=86400000&round=true&symbol=BTC_USDT.swap&to=1611244800&trades=1
واپسی کی شکل مندرجہ ذیل دو فارمیٹس میں سے ایک ہونا ضروری ہے (جو نظام کی طرف سے خود کار طریقے سے تسلیم کیا جائے گا):
تخروپن کی سطح Tick، مندرجہ ذیل JSON ڈیٹا کا ایک مثال ہے:
{
"detail": {
"eid": "Binance",
"symbol": "BTC_USDT",
"alias": "BTCUSDT",
"baseCurrency": "BTC",
"quoteCurrency": "USDT",
"marginCurrency": "USDT",
"basePrecision": 5,
"quotePrecision": 2,
"minQty": 0.00001,
"maxQty": 9000,
"minNotional": 5,
"maxNotional": 9000000,
"priceTick": 0.01,
"volumeTick": 0.00001,
"marginLevel": 10
},
"schema":["time", "open", "high", "low", "close", "vol"],
"data":[
[1564315200000, 9531300, 9531300, 9497060, 9497060, 787],
[1564316100000, 9495160, 9495160, 9474260, 9489460, 338]
]
}
روبوٹ کی سطح کی جانچ پڑتال کریں، مندرجہ ذیل JSON ڈیٹا کا ایک مثال ہے:
ٹِک لیول بیک ٹسٹ ڈیٹا (مارکیٹ کی گہرائی کے بارے میں معلومات پر مشتمل ہے، اور گہرائی کا فارمیٹ[price, volume]
اس میں گہرائی کی متعدد سطحیں ہوسکتی ہیں،asks
قیمتوں میں اضافے کے حکم کے لئےbids
قیمت میں کمی کے لئے) ۔
{
"detail": {
"eid": "Binance",
"symbol": "BTC_USDT",
"alias": "BTCUSDT",
"baseCurrency": "BTC",
"quoteCurrency": "USDT",
"marginCurrency": "USDT",
"basePrecision": 5,
"quotePrecision": 2,
"minQty": 0.00001,
"maxQty": 9000,
"minNotional": 5,
"maxNotional": 9000000,
"priceTick": 0.01,
"volumeTick": 0.00001,
"marginLevel": 10
},
"schema":["time", "asks", "bids", "trades", "close", "vol"],
"data":[
[1564315200000, [[9531300, 10]], [[9531300, 10]], [[1564315200000, 0, 9531300, 10]], 9497060, 787],
[1564316100000, [[9531300, 10]], [[9531300, 10]], [[1564316100000, 0, 9531300, 10]], 9497060, 787]
]
}
میدان | تفصیل |
---|---|
تفصیل | درخواست کردہ ڈیٹا کی قسم کے بارے میں تفصیلی معلومات، |
بشمول denominated کرنسی کا نام، ٹریڈنگ کرنسی، درستگی، کم از کم آرڈر کی مقدار، وغیرہ. ∙ اسکیما ∙ یہ اعداد و شمار میں کالموں کی خصوصیات کی وضاحت کرتا ہے صف، جو بڑے اور چھوٹے حسی ہے اور صرف وقت تک محدود ہے، کھلا، اعلی، کم، بند، حجم، پوچھتا ہے، بولی دیتا ہے، تجارت کرتا ہے ڈیٹا۔ کالم کا ڈھانچہ، اسکیما کے مطابق ریکارڈ کردہ ڈیٹا ترتیبات.
تفصیلات کا میدان
میدان | تفصیل |
---|---|
ایڈ | ایکسچینج ID، براہ مہربانی نوٹ کریں کہ ایک کی جگہ اور مستقبل |
بعض تبادلے کی مختلف ایڈز ہوتی ہیں۔ | |
علامت | تجارتی مصنوعات کا کوڈ |
عرفی نام | تبادلہ میں علامت موجودہ کے مطابق |
تجارتی مصنوعات کا کوڈ | |
بیس کرنسی | تجارت کی کرنسی |
حوالہ کرنسی | کرنسی |
مارجن کرنسی | مارجن کرنسی |
بیسپیسیشن | لین دین کی کرنسی کی درستگی |
حوالہ درستگی | قیمتوں کا تعین کرنسی کی درستگی |
منٹ | کم از کم آرڈر کی مقدار |
زیادہ سے زیادہ | زیادہ سے زیادہ آرڈر کی مقدار |
کم از کم | کم از کم آرڈر کی مقدار |
زیادہ سے زیادہ | زیادہ سے زیادہ آرڈر کی رقم |
قیمتٹیک | قیمتوں میں اضافہ |
حجم نشان زد کریں | آرڈر کی مقدار کی کم سے کم تبدیلی کی قیمت (ایک چھلانگ میں) |
آرڈر کی مقدار) | |
مارجن سطح | فیوچر لیورج ویلیو |
معاہدہٹائپ | مستقل معاہدوں کے لئے:swap ، |
backtest نظام فنڈنگ کی شرح اور قیمت انڈیکس بھیجنے کے لئے جاری رہے گی درخواستیں.
کالم کے خصوصی صفاتasks
, bids
, trades
:
میدان | تفصیل | تبصرے |
---|---|---|
پوچھتا / بولی دیتا ہے | [قیمت، حجم،...] | مثال کے طور پر، |
کےLive Trading Level Tick
اعداد و شمار کی مثال:[[9531300, 10]]
∙∙
♪ تجارت ♪ ♪ وقت، سمت، قیمت، حجم،... ♪
مثال کے طور پر، ڈیٹا میںLive Trading Level Tick
اعداد و شمار کی مثال:[[1564315200000, 0, 9531300, 10]]
|
مستقبل کے تبادلے پر ہمیشہ کے لئے معاہدوں backtesting جب، اپنی مرضی کے مطابق
اعداد و شمار کے ذرائع کو بھی اضافی فنڈنگ کی شرح کے اعداد و شمار اور قیمت کی ضرورت ہوتی ہے
انڈیکس ڈیٹا۔ بیک ٹیسٹنگ سسٹم درخواستیں بھیجتا رہے گا
فنڈنگ کی شرحوں کے لئے صرف جب مطلوبہ مارکیٹ کے اعداد و شمار واپس کیے جائیں
اور واپسی کی ساخت میں تفصیلات کے میدان میں مشتمل ہے"contractType": "swap"
کلیدی قدر کی جوڑی.
جب بیک ٹسٹنگ سسٹم کو فنڈنگ کی شرح کے اعداد و شمار موصول ہوتے ہیں، تو یہ قیمت انڈیکس کے اعداد و شمار کے لئے درخواستیں بھیجنا جاری رکھیں.
فنڈنگ کی شرح کے اعداد و شمار کی ساخت مندرجہ ذیل ہے:
{
"detail": {
"eid": "Futures_Binance",
"symbol": "BTC_USDT.funding",
"alias": "BTC_USDT.funding",
"baseCurrency": "BTC",
"quoteCurrency": "USDT",
"marginCurrency": "",
"basePrecision": 8,
"quotePrecision": 8,
"minQty": 1,
"maxQty": 10000,
"minNotional": 1,
"maxNotional": 100000000,
"priceTick": 1e-8,
"volumeTick": 1e-8,
"marginLevel": 10
},
"schema": [
"time",
"open",
"high",
"low",
"close",
"vol"
],
"data": [
[
1584921600000,
-16795,
-16795,
-16795,
-16795,
0
],
[
1584950400000,
-16294,
-16294,
-16294,
-16294,
0
]
// ...
]
}
بیک ٹسٹنگ سے فنڈنگ کی شرح کے اعداد و شمار کی درخواست کا ایک مثال نظام یہ ہے:
http://customserver:9090/data?custom=0&depth=20&detail=true&eid=Futures_Binance&from=1351641600&period=86400000&round=true&symbol=BTC_USDT.funding&to=1611244800&trades=0
قیمت انڈیکس کے اعداد و شمار کی ساخت مندرجہ ذیل ہے:
{
"detail": {
"eid": "Futures_Binance",
"symbol": "BTC_USDT.index",
"alias": "BTCUSDT",
"baseCurrency": "BTC",
"quoteCurrency": "USDT",
"contractType": "index",
"marginCurrency": "USDT",
"basePrecision": 3,
"quotePrecision": 1,
"minQty": 0.001,
"maxQty": 1000,
"minNotional": 0,
"maxNotional": 1.7976931348623157e+308,
"priceTick": 0.1,
"volumeTick": 0.001,
"marginLevel": 10,
"volumeMultiple": 1
},
"schema": [
"time",
"open",
"high",
"low",
"close",
"vol"
],
"data": [
[1584921600000, 58172, 59167, 56902, 58962, 0],
[1584922500000, 58975, 59428, 58581, 59154, 0],
// ...
]
}
بیک ٹسٹنگ کے ذریعہ بھیجے گئے قیمت انڈیکس ڈیٹا کی درخواست کا ایک مثال نظام یہ ہے:
http://customserver:9090/data?custom=0&depth=20&detail=true&eid=Futures_Binance&from=1351641600&period=86400000&round=true&symbol=BTC_USDT.index&to=1611244800&trades=0
ڈیٹا ماخذ کا پتہ بتائیں، مثلاً،http://120.24.2.20:9090/data
اپنی مرضی کے مطابق ڈیٹا ماخذ سروس پروگرام کا استعمال کرتے ہوئے لکھا جاتا ہےGolang
:
package main
import (
"fmt"
"net/http"
"encoding/json"
)
func Handle (w http.ResponseWriter, r *http.Request) {
// e.g. set on backtest DataSourse: http://xxx.xx.x.xx:9090/data
// request: GET http://xxx.xx.x.xx:9090/data?custom=0&depth=20&detail=true&eid=OKX&from=1584921600&period=86400000&round=true&symbol=BTC_USDT&to=1611244800&trades=1
// http://xxx.xx.x.xx:9090/data?custom=0&depth=20&detail=true&eid=Futures_Binance&from=1599958800&period=3600000&round=true&symbol=BTC_USDT.swap&to=1611244800&trades=0
fmt.Println("request:", r)
// response
defer func() {
// response data
/* e.g. data
{
"detail": {
"eid": "Binance",
"symbol": "BTC_USDT",
"alias": "BTCUSDT",
"baseCurrency": "BTC",
"quoteCurrency": "USDT",
"marginCurrency": "USDT",
"basePrecision": 5,
"quotePrecision": 2,
"minQty": 0.00001,
"maxQty": 9000,
"minNotional": 5,
"maxNotional": 9000000,
"priceTick": 0.01,
"volumeTick": 0.00001,
"marginLevel": 10
},
"schema": [
"time",
"open",
"high",
"low",
"close",
"vol"
],
"data": [
[1610755200000, 3673743, 3795000, 3535780, 3599498, 8634843151],
[1610841600000, 3599498, 3685250, 3385000, 3582861, 8015772738],
[1610928000000, 3582499, 3746983, 3480000, 3663127, 7069811875],
[1611014400000, 3662246, 3785000, 3584406, 3589149, 7961130777],
[1611100800000, 3590194, 3641531, 3340000, 3546823, 8936842292],
[1611187200000, 3546823, 3560000, 3007100, 3085013, 13500407666],
[1611273600000, 3085199, 3382653, 2885000, 3294517, 14297168405],
[1611360000000, 3295000, 3345600, 3139016, 3207800, 6459528768],
[1611446400000, 3207800, 3307100, 3090000, 3225990, 5797803797],
[1611532800000, 3225945, 3487500, 3191000, 3225420, 8849922692]
]
}
*/
// /* Simulation level Tick
ret := map[string]interface{}{
"detail": map[string]interface{}{
"eid": "Binance",
"symbol": "BTC_USDT",
"alias": "BTCUSDT",
"baseCurrency": "BTC",
"quoteCurrency": "USDT",
"marginCurrency": "USDT",
"basePrecision": 5,
"quotePrecision": 2,
"minQty": 0.00001,
"maxQty": 9000,
"minNotional": 5,
"maxNotional": 9000000,
"priceTick": 0.01,
"volumeTick": 0.00001,
"marginLevel": 10,
},
"schema": []string{"time","open","high","low","close","vol"},
"data": []interface{}{
[]int64{1610755200000, 3673743, 3795000, 3535780, 3599498, 8634843151}, // 1610755200000 : 2021-01-16 08:00:00
[]int64{1610841600000, 3599498, 3685250, 3385000, 3582861, 8015772738}, // 1610841600000 : 2021-01-17 08:00:00
[]int64{1610928000000, 3582499, 3746983, 3480000, 3663127, 7069811875},
[]int64{1611014400000, 3662246, 3785000, 3584406, 3589149, 7961130777},
[]int64{1611100800000, 3590194, 3641531, 3340000, 3546823, 8936842292},
[]int64{1611187200000, 3546823, 3560000, 3007100, 3085013, 13500407666},
[]int64{1611273600000, 3085199, 3382653, 2885000, 3294517, 14297168405},
[]int64{1611360000000, 3295000, 3345600, 3139016, 3207800, 6459528768},
[]int64{1611446400000, 3207800, 3307100, 3090000, 3225990, 5797803797},
[]int64{1611532800000, 3225945, 3487500, 3191000, 3225420, 8849922692},
},
}
// */
/* Bot level Tick
ret := map[string]interface{}{
"detail": map[string]interface{}{
"eid": "Binance",
"symbol": "BTC_USDT",
"alias": "BTCUSDT",
"baseCurrency": "BTC",
"quoteCurrency": "USDT",
"marginCurrency": "USDT",
"basePrecision": 5,
"quotePrecision": 2,
"minQty": 0.00001,
"maxQty": 9000,
"minNotional": 5,
"maxNotional": 9000000,
"priceTick": 0.01,
"volumeTick": 0.00001,
"marginLevel": 10,
},
"schema": []string{"time", "asks", "bids", "trades", "close", "vol"},
"data": []interface{}{
[]interface{}{1610755200000, []interface{}{[]int64{9531300, 10}}, []interface{}{[]int64{9531300, 10}}, []interface{}{[]int64{1610755200000, 0, 9531300, 10}}, 9497060, 787},
[]interface{}{1610841600000, []interface{}{[]int64{9531300, 15}}, []interface{}{[]int64{9531300, 15}}, []interface{}{[]int64{1610841600000, 0, 9531300, 11}}, 9497061, 789},
},
}
*/
b, _ := json.Marshal(ret)
w.Write(b)
}()
}
func main () {
fmt.Println("listen http://localhost:9090")
http.HandleFunc("/data", Handle)
http.ListenAndServe(":9090", nil)
}
ٹیسٹ کی حکمت عملیJavaScript
مثال:
/*backtest
start: 2021-01-16 08:00:00
end: 2021-01-22 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"OKX","currency":"BTC_USDT","feeder":"http://120.24.2.20:9090/data"}]
args: [["number",2]]
*/
function main() {
var ticker = exchange.GetTicker()
var records = exchange.GetRecords()
Log(exchange.GetName(), exchange.GetCurrency())
Log(ticker)
Log(records)
}
ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم نےJavaScript
زبان اورPython
مقامی بیک ٹسٹ انجن کی زبان، بیک ٹسٹنگ کے دوران بنیادی K لائن مدت کی ترتیب کی حمایت.
حکمت عملی Ctrl +,
Ctrl
، کلید دبائیں,
.
بچت کی حکمت عملی کے لئے شارٹ کٹ کلید
چابی کا استعمال کریںCtrl + s
حکمت عملیوں کو بچانے کے لئے.
حکمت عملی backtest شروع کرنے کے لئے شارٹ کٹ
چابی کا استعمال کریںCtrl + b
بیک ٹیسٹنگ سسٹم میں شارپ الگورتھم کا ماخذ کوڈ:
function returnAnalyze(totalAssets, profits, ts, te, period, yearDays) {
// force by days
period = 86400000
if (profits.length == 0) {
return null
}
var freeProfit = 0.03 // 0.04
var yearRange = yearDays * 86400000
var totalReturns = profits[profits.length - 1][1] / totalAssets
var annualizedReturns = (totalReturns * yearRange) / (te - ts)
// MaxDrawDown
var maxDrawdown = 0
var maxAssets = totalAssets
var maxAssetsTime = 0
var maxDrawdownTime = 0
var maxDrawdownStartTime = 0
var winningRate = 0
var winningResult = 0
for (var i = 0; i < profits.length; i++) {
if (i == 0) {
if (profits[i][1] > 0) {
winningResult++
}
} else {
if (profits[i][1] > profits[i - 1][1]) {
winningResult++
}
}
if ((profits[i][1] + totalAssets) > maxAssets) {
maxAssets = profits[i][1] + totalAssets
maxAssetsTime = profits[i][0]
}
if (maxAssets > 0) {
var drawDown = 1 - (profits[i][1] + totalAssets) / maxAssets
if (drawDown > maxDrawdown) {
maxDrawdown = drawDown
maxDrawdownTime = profits[i][0]
maxDrawdownStartTime = maxAssetsTime
}
}
}
if (profits.length > 0) {
winningRate = winningResult / profits.length
}
// trim profits
var i = 0
var datas = []
var sum = 0
var preProfit = 0
var perRatio = 0
var rangeEnd = te
if ((te - ts) % period > 0) {
rangeEnd = (parseInt(te / period) + 1) * period
}
for (var n = ts; n < rangeEnd; n += period) {
var dayProfit = 0.0
var cut = n + period
while (i < profits.length && profits[i][0] < cut) {
dayProfit += (profits[i][1] - preProfit)
preProfit = profits[i][1]
i++
}
perRatio = ((dayProfit / totalAssets) * yearRange) / period
sum += perRatio
datas.push(perRatio)
}
var sharpeRatio = 0
var volatility = 0
if (datas.length > 0) {
var avg = sum / datas.length;
var std = 0;
for (i = 0; i < datas.length; i++) {
std += Math.pow(datas[i] - avg, 2);
}
volatility = Math.sqrt(std / datas.length);
if (volatility !== 0) {
sharpeRatio = (annualizedReturns - freeProfit) / volatility
}
}
return {
totalAssets: totalAssets,
yearDays: yearDays,
totalReturns: totalReturns,
annualizedReturns: annualizedReturns,
sharpeRatio: sharpeRatio,
volatility: volatility,
maxDrawdown: maxDrawdown,
maxDrawdownTime: maxDrawdownTime,
maxAssetsTime: maxAssetsTime,
maxDrawdownStartTime: maxDrawdownStartTime,
winningRate: winningRate
}
}
حکمت عملی ایڈیٹر
حکمت عملی اندراج افعال