اعلی درجے کی پلیٹ فارم ریسرچ
ایف ایم زیڈ میں ایک بلٹ ان جیوپیٹر نوٹ بک ہے جو صارفین کو پلیٹ فارم اے پی آئی سے واقف ہونے اور حکمت عملی کی تحقیق کرنے میں مدد فراہم کرتی ہے ، اور پیتھون 3 سی ++ 11/17 اور جاوا اسکرپٹ کے سیکھنے کے ماحول کی حمایت کرتی ہے۔ نوٹ بک + پطرون ایک بہت ہی طاقتور ٹول ہے ، جو ڈیٹا تجزیہ اور حکمت عملی کی تحقیق کے لئے تقریبا ناگزیر ہے۔ اگرچہ ایف ایم زیڈ پلیٹ فارم کے ساتھ آنے والا بیک ٹیسٹ بہت مفید ہے ، لیکن یہ پیچیدہ اور بڑے ڈیٹا حجم والی حکمت عملیوں کے لئے موزوں نہیں ہے۔ اس مضمون میں جیوپیٹر نوٹ بک کے کچھ جدید استعمال کی مہارتوں کا تعارف کرایا جائے گا ، اور بے ترتیب جوڑی ٹریڈنگ اور ملٹی جوڑی ٹریڈنگ کی حکمت عملیوں کے بیک ٹیسٹ کا احساس ہوگا۔
ایف ایم زیڈ کے اندر ریسرچ کا ماحول استعمال کیا جاسکتا ہے ، لیکن نیٹ ورکنگ تکلیف دہ ہے۔ ریاضیاتی حساب کتاب کے لئے نوٹ بک اور عام طور پر استعمال ہونے والی متعلقہ لائبریریوں کے ساتھ اپنے آلے پر اناکونڈا 3 انسٹال کرنے کی سفارش کی جاتی ہے۔ یہ مقامی نیٹ ورک کے ماحول کو شیئر کرسکتا ہے ، اور بہتر کارکردگی کا مظاہرہ کرسکتا ہے۔ گوگل کولیب کا استعمال کرنے کی بھی سفارش کی جاتی ہے۔ اگرچہ اسٹوریج کی کچھ حدود ہیں ، لیکن یہ مفت اور طاقتور ہے ، جو روبوٹ مطالعہ سے متعلق تحقیق کے لئے موزوں ہے۔
نوٹ بک اور پائتھون کی مخصوص استعمال کی مہارتوں کے لئے بہت سارے آن لائن سبق موجود ہیں۔ آپ کو کلیدی الفاظ کی تلاش کرکے بہت ساری معلومات مل سکتی ہیں ، جیسے پائتھون کی کوانٹیفیکیشن اور جپائٹر نوٹ بک ٹیوٹوریل۔ آپ کو کرالر ، ڈیٹا پروسیسنگ ، بیک ٹیسٹ ، حکمت عملی ڈیزائن اور پلاٹنگ جیسی بنیادی باتوں کا ایک سلسلہ سیکھنے اور اس میں مہارت حاصل کرنے کی ضرورت ہے۔
پلیٹ فارم عام طور پر تاریخ کے اعداد و شمار کے ساتھ K لائنز حاصل کرنے کے لئے API فراہم کرتے ہیں ، اور کچھ تجارت کے ذریعہ عمل درآمد کے اعداد و شمار بھی فراہم کرتے ہیں۔ ہمیں ڈیٹا حاصل کرنے اور محفوظ کرنے کے لئے کرالر کا استعمال کرنے کی ضرورت ہے۔ آپ براہ راست پلیٹ فارم کے ذریعہ دھکیلے گئے ڈیٹا کو بھی وصول کرسکتے ہیں اور اپنے آپ سے مقامی ڈیٹا بیس اسٹوریج تشکیل دے سکتے ہیں۔
اگلا، ہم ظاہر کریں گے کہ بائننس پر دائمی معاہدوں کے K لائن ڈیٹا کو کیسے حاصل اور ذخیرہ کیا جائے۔
سب سے پہلے، Binance Perpetual Swap دستاویزات تلاش کریں:https://binance-docs.github.io/apidocs/futures/cn/#c59e471e81. آپ مطلوبہ پیرامیٹرز اور واپس آنے والے ڈیٹا فارمیٹس دیکھ سکتے ہیں۔ عام طور پر ، API کے ذریعہ حاصل کردہ K لائنوں کی تعداد محدود ہوتی ہے ، اور بائننس میں زیادہ سے زیادہ 1000 ہوتی ہے ، لہذا اسے لوپ تکرار کے ذریعہ حاصل کرنے کی ضرورت ہوتی ہے۔ دوسرے پلیٹ فارمز پر صورتحال بائننس سے ملتی جلتی ہے۔ نوٹ کریں کہ نیٹ ورک کو بیرون ملک نیٹ ورک سے منسلک کرنے کی ضرورت ہے (چین میں گھریلو نیٹ ورک کے مقابلے میں) K لائنوں کو کرالنے کے لئے۔
بائننس کی معاونت کی مدت: 1m، 3m، 5m، 15m، 30m، 1h، 2h، 4h، 6h، 8h، 12h، 1d، 3d، 1w، 1M۔
[24] میں:
درآمد کی درخواستیں # نیٹ ورک کی درخواستیں مشترکہ لائبریری
تاریخ سےوقت درآمد کی تاریخ،تاریخ اور وقت
درآمد کا وقت
پی ڈی کے طور پر پانڈا درآمد
[160] میں:
def GetKlines ((symbol=
ڈیٹا اسٹوریج اور پڑھنے میں پانڈا لائبریری کے اندر موجود افعال استعمال ہوسکتے ہیں۔ فارمیٹ csv ہے ، جسے براہ راست ایکسل سافٹ ویئر سے کھولا جاسکتا ہے۔
سب سے زیادہ قیمت ، سب سے کم قیمت ، کھلی قیمت ، بند قیمت اور عملدرآمد شدہ حجم کے علاوہ ، بائننس کے ذریعہ واپس آنے والے K لائن ڈیٹا میں کل تجارتی رقم ، اقدام خریدنے کی رقم ، عملدرآمد کی رقم وغیرہ بھی شامل ہیں۔ یہ قیمتی معلومات ہیں جن کا استعمال حکمت عملی کی تعمیر کے لئے کیا جاسکتا ہے۔
[86] میں:
df.to_csv ((
[88] میں:
df.index = pd.to_datetime ((df.time,unit=
پچھلے مضمون میں پطرون بیک ٹیسٹ انجن بھی دیا گیا تھا ، لیکن یہاں ایک بہتر ورژن ہے۔ یو ایس ڈی ٹی مارجنڈ (یا دیگر کوٹ کرنسی مارجنڈ) دائمی معاہدے اسپاٹ معاہدوں سے بہت ملتے جلتے ہیں۔ فرق یہ ہے کہ دائمی معاہدوں کو فائدہ اٹھایا جاسکتا ہے اور منفی رقم (چھوٹے بنانے کے مترادف) رکھ سکتا ہے ، اور بیک ٹیسٹ انجن کا اشتراک کرسکتا ہے۔ کریپٹو مارجنڈ ترسیل کے معاہدے خاص ہیں ، کیونکہ وہ کرنسی میں طے ہوتے ہیں اور مخصوص بیک ٹیسٹ کی ضرورت ہوتی ہے۔
یہاں ایک سادہ مثال دی گئی ہے ، جس میں کثیر علامت اسپاٹ یا کثیر علامت دائمی بیک ٹیسٹنگ کو نافذ کیا جاسکتا ہے۔ بہت سی تفصیلات کو نظرانداز کیا جاتا ہے: جیسے فیوچر کا فائدہ ، مارجن قبضہ ، فنڈنگ کی شرح ، تصفیہ کا طریقہ کار ، مارکیٹ بنانے اور آرڈر لینے والے لین دین کے ساتھ ساتھ آرڈر کی بحالی ، لیکن یہ عام طور پر عام بیک ٹیسٹ کے نتائج کو متاثر نہیں کرتا ہے۔ اور مماثلت کی قیمت اور مقدار ، اور اکاؤنٹ کی تازہ کاری سب کو بیرونی طور پر درآمد کرنے کی ضرورت ہے۔ قارئین اس کی بنیاد پر اسے بہتر بنا سکتے ہیں۔
تبادلہ کلاس کا تعارف:
اکاؤنٹ:USDT بیس کرنسی کی نشاندہی کرتا ہے ، جو ضروری نہیں ہے۔ realised_profit: پہلے ہی حاصل شدہ منافع اور نقصان۔ unrealised_profit: منافع اور نقصان جو ابھی تک حاصل نہیں ہوا ہے۔ کل: کل ایکویٹی؛ فیس: ہینڈلنگ فیس۔ دیگر تجارتی جوڑوں کے لئے ، رقم (جو مختصر ہونے پر منفی نمبر ہے) ؛ hold_price: ہولڈنگ قیمت؛ قیمت: ہولڈنگ ویلیو؛ قیمت: موجودہ قیمت۔
trade_symbols: ٹریڈنگ جوڑوں کی صف؛ آپ ایک ٹریڈنگ جوڑی میں بھی پاس کر سکتے ہیں۔ ڈیفالٹ کوٹ کرنسی USDT ہے ، لیکن آپ بیک ٹیسٹ کے لئے دیگر کوٹ کرنسی کے علامتوں کا بھی استعمال کرسکتے ہیں۔
فیس: ہینڈنگ فیس؛ سادہ کرنے کے لئے، بنانے والے اور لینے والے میں فرق نہ کریں.
initial_balance: ابتدائی اثاثے؛ ڈیفالٹ ٹریڈنگ جوڑوں کی ابتدائی رقم 0 ہے۔
خریدنے کا فنکشن: خریدنا ، جو مستقل معاہدوں کو طویل اور مختصر بند کرنے کے مترادف ہے ، بغیر میچنگ میکانزم کے۔
فروخت کا کام: فروخت کرنا۔
اپ ڈیٹ فنکشن: اکاؤنٹ کی معلومات کو اپ ڈیٹ کرنے کے لئے، جو تمام تجارتی جوڑوں کے قیمت ڈکشنری میں منتقل کرنے کی ضرورت ہے. [98] میں: کلاس تبادلہ:
def شروع کریں(خود، trade_symbols، فیس=0.0004، initial_balance=10000):
self.initial_balance = initial_balance #ابتدائی توازن
self.fee = فیس
self.trade_symbols = trade_symbols
self.account = {
def تجارت ((خود، علامت، سمت، قیمت، رقم):
cover_amount = 0 if direction*self.account[symbol]['amount'] >=0 else min(abs(self.account[symbol]['amount']), amount)
open_amount = amount - cover_amount
self.account['USDT']['realised_profit'] -= price*amount*self.fee #take out the fee
self.account['USDT']['fee'] += price*amount*self.fee
self.account[symbol]['fee'] += price*amount*self.fee
if cover_amount > 0: #close first
self.account['USDT']['realised_profit'] += -direction*(price - self.account[symbol]['hold_price'])*cover_amount #profit
self.account[symbol]['realised_profit'] += -direction*(price - self.account[symbol]['hold_price'])*cover_amount
self.account[symbol]['amount'] -= -direction*cover_amount
self.account[symbol]['hold_price'] = 0 if self.account[symbol]['amount'] == 0 else self.account[symbol]['hold_price']
if open_amount > 0:
total_cost = self.account[symbol]['hold_price']*direction*self.account[symbol]['amount'] + price*open_amount
total_amount = direction*self.account[symbol]['amount']+open_amount
self.account[symbol]['hold_price'] = total_cost/total_amount
self.account[symbol]['amount'] += direction*open_amount
def خریدیں (خود، علامت، قیمت، رقم):self.Trade(علامت، 1، قیمت، رقم)
def فروخت ((خود، علامت، قیمت، رقم):self.Trade(علامت، -1، قیمت، رقم)
def اپ ڈیٹ ((خود، بند_قیمت): #اپ ڈیٹ اثاثوں
خود.اکاؤنٹ[
سب سے پہلے ، آئیے ایک کلاسیکی دائمی گرڈ حکمت عملی کا بیک ٹیسٹ کریں۔ یہ حکمت عملی حال ہی میں ہمارے پلیٹ فارم پر بہت مشہور ہے۔ اسپاٹ گرڈ ون کے مقابلے میں ، اسے کرنسی رکھنے کی ضرورت نہیں ہے اور فائدہ اٹھانے کا اضافہ کرسکتا ہے ، جو اسپاٹ گرڈ ون سے کہیں زیادہ آسان ہے۔ تاہم ، چونکہ اسے براہ راست بیک ٹیسٹ نہیں کیا جاسکتا ہے ، لہذا کرنسی کی علامتوں کا انتخاب کرنا سازگار نہیں ہے۔ یہاں ہم بیک ٹیسٹ انجن کا استعمال کرتے ہیں ابھی اسے جانچنے کے لئے۔
کی لائن کی مدت جتنی مختصر ہوگی ، بیک ٹیسٹ کے نتائج اتنے ہی درست ہوں گے ، اور مطلوبہ اعداد و شمار کی مقدار اتنی ہی زیادہ ہوگی۔ قارئین علامت پیرامیٹر کو اس ٹریڈنگ جوڑی میں تبدیل کرنے کی کوشش کرسکتے ہیں جسے وہ بیک ٹیسٹ کرنا چاہتے ہیں۔
[241] میں:
علامت =
e = Exchange (([علامت]، فیس=0.0002، ابتدائی_باقی=10000)
init_price = df.loc[0,
if kline.low < buy_price: #the lowest price of K-line is less than the current maker price; the buy order is executed
e.Buy(symbol,buy_price,value/buy_price)
if kline.high > sell_price:
e.Sell(symbol,sell_price,value/sell_price)
e.Update({symbol:kline.close})
res_list.append([kline.time, kline.close, e.account[symbol]['amount'], e.account['USDT']['total']-e.initial_balance])
res = pd.DataFrame ((data=res_list, columns=[
اس قسم کی حکمت عملی بھی نسبتا popular مشہور ہے ، لیکن ایف ایم زیڈ پلیٹ فارم کثیر علامت کی حکمت عملیوں کی بیک ٹیسٹنگ میں بہت اچھا نہیں ہے ، بس اس بیک ٹیسٹ انجن کو آزمائیں۔ ہم چار مرکزی کرنسی کی علامتوں ، بی ٹی سی ، ای ٹی ایچ ، ایل ٹی سی اور ایکس آر پی کا انتخاب کرتے ہیں ، اور بالترتیب مارکیٹ ویلیو کا 25٪ تشکیل دیتے ہیں ، اور ہر 1٪ انحراف کو توازن دیتے ہیں۔
پہلے ، پچھلے سال میں چاروں علامتوں کی قریبی قیمتیں حاصل کریں۔ یہ دیکھا جاسکتا ہے کہ ای ٹی ایچ میں سب سے زیادہ اضافہ ہوا ہے ، اور دیگر تینوں میں بھی اسی طرح کا اضافہ ہوا ہے۔ اگر آپ ان چاروں علامتوں کو اوسطا hold رکھتے ہیں تو ، حتمی خالص قیمت 4.5 ہے۔ بیک ٹیسٹ کے بعد ، توازن کی حکمت عملی کی حتمی خالص قیمت 5.3 ہے ، جو قدرے بڑھا ہوا ہے۔
[290] میں:
علامات = [
کچھی کی حکمت عملی ایک کلاسیکی رجحان کی حکمت عملی ہے جس میں پوزیشنوں کو شامل کرنے کے لئے مکمل اسٹاپ نقصان کا منطق شامل ہے۔ تفصیلات کے لئے ، براہ کرم ملاحظہ کریں:https://zhuanlan.zhihu.com/p/27987938ہم یہاں بیک ٹیسٹ کے لئے ایک سادہ ورژن لاگو کریں گے.
کچھی کی حکمت عملی کی مدت کی حکمت عملی پر بہت زیادہ اثر پڑتا ہے ، اور اس کی مدت کا انتخاب کرنا مشورہ نہیں دیا جاتا ہے جو بہت کم ہو۔ یہاں ، ہم 6h کا انتخاب کرتے ہیں۔ ڈونچیئن چینل کی مدت کا انتخاب 5 کے طور پر کیا جاتا ہے ، اور پوزیشن کا تناسب بیک ٹیسٹ کے مطابق 0.003 کے طور پر منتخب کیا جاتا ہے۔ جب قیمت چینل کے اپ بینڈ کو توڑ کر 1 یونٹ لانگ پوزیشن کھولتی ہے ، اور پوزیشن کھولنے کے بعد قیمت 0.3 کی اتار چڑھاؤ میں اضافہ کرتی رہتی ہے ، تو 1 یونٹ کا اضافہ جاری رکھیں ، اور قیمت 2.5 سے نیچے گر جاتی ہے نقصان کو روکنے کے لئے تازہ ترین کھلی قیمت کی اتار چڑھاؤ۔ شارٹ آرڈر کا اصول ایک ہی ہے۔ ای ٹی ایچ کی بڑی بیل مارکیٹ کی وجہ سے ، کچھی کی حکمت عملی نے مرکزی رجحان کو پکڑ لیا ہے اور آخر کار 27 گنا منافع حاصل کیا ہے ، اس مدت کے دوران زیادہ سے زیادہ 4 گنا فائدہ اٹھانا۔
کچھی کی حکمت عملی کے پیرامیٹرز کا دورانیے سے گہرا تعلق ہے ، اور انہیں بیک ٹسٹ کے ذریعے منتخب کرنے کی ضرورت ہے۔ ہر وقت کی کھلی پوزیشن کی اکائی کو بھی محتاط رہنا چاہئے تاکہ زیادہ سے زیادہ خطرات سے بچنے کے لئے بہت بڑا نہ ہو۔
یہ حتمی خالص قیمت کے چارٹ سے دیکھا جاسکتا ہے کہ کچھی کی حکمت عملی ایک طویل مدتی حکمت عملی ہے ، جس کے دوران 3 سے 4 ماہ تک کوئی منافع نہیں ہوسکتا ہے ، اور بار بار نقصان کو روکنا ، لیکن ایک بار جب ایک طرف مارکیٹ کی بڑی قیمت ہوتی ہے تو ، کچھی کی حکمت عملی رجحان کا فائدہ اٹھا کر بڑی پوزیشن جمع کرسکتی ہے ، اسے رجحان کے اختتام تک برقرار رکھ سکتی ہے ، بہت سارے منافع کما سکتی ہے۔ اضافے کے اختتام پر ، حکمت عملی بہت ساری پوزیشنیں جمع کرے گی۔ اس وقت ، اتار چڑھاؤ نسبتا large بڑا ہوگا ، اور اکثر بڑے منافع واپس لے لیا جائے گا۔ کچھی کی حکمت عملی کا استعمال کرنے سے آپ کو اس کی خامیوں کو قبول کرنے اور اپنے صبر کی ضرورت ہوتی ہے۔
[424] میں:
علامت =
if kline.high > kline.up and e.account[symbol]['amount'] == 0: #first time to open long position
e.Buy(symbol,kline.up,unit) #notice the trading price here
last_price = kline.up
if e.account[symbol]['amount'] > 0 and kline.high > last_price + open_times*kline.N: #long position, buy in
e.Buy(symbol,last_price + open_times*kline.N,unit)
last_price = last_price + open_times*kline.N
if e.account[symbol]['amount'] > 0 and kline.low < last_price - stop_times*kline.N: #long position, stop loss
e.Sell(symbol,last_price - stop_times*kline.N,e.account[symbol]['amount'])
if kline.low < kline.down and e.account[symbol]['amount'] == 0: #open short
e.Sell(symbol,kline.down,unit)
last_price = kline.down
if e.account[symbol]['amount'] < 0 and kline.low < last_price - open_times*kline.N: #short position, buy in
e.Sell(symbol,last_price - open_times*kline.N,unit)
last_price = last_price - open_times*kline.N
if e.account[symbol]['amount'] < 0 and kline.high > last_price + stop_times*kline.N: #short position, stop loss
e.Buy(symbol,last_price + stop_times*kline.N,-e.account[symbol]['amount'])
e.Update({symbol:kline.close})
res_list.append([kline.time, kline.close, e.account[symbol]['amount']*kline.close, e.account['USDT']['total']])
res = pd.DataFrame ((data=res_list, columns=[
اگر آپ جیوپیٹر نوٹ بک ریسرچ پلیٹ فارم کے استعمال میں مہارت رکھتے ہیں تو ، آپ آسانی سے اعداد و شمار کے حصول ، ڈیٹا تجزیہ ، حکمت عملی بیک ٹیسٹ ، چارٹ ڈسپلے وغیرہ جیسے آپریشن انجام دے سکتے ہیں ، جو مقداری تجارت کا ناگزیر راستہ ہے۔ اگر آپ کو ابھی حکمت عملی لکھنے کے بارے میں کوئی اشارہ نہیں ہے تو ، آپ پہلے اعداد و شمار کا تجزیہ بھی کرسکتے ہیں۔ ابتدائیوں کے لئے ، تجویز کردہ وسائل:
ڈیٹا تجزیہ انجام دینے کے لئے پائیتھون کا استعمال کریں:https://wizardforcel.gitbooks.io/pyda-2e/content/
پیتھون مقداری سبق:https://wizardforcel.gitbooks.io/python-quant-uqer/content/
[ ] میں: