وسائل لوڈ ہو رہے ہیں... لوڈنگ...

اعلی درجے کی پلیٹ فارم ریسرچ پائیتھون ڈیٹا تجزیہ اور حکمت عملی بیک ٹیسٹ

مصنف:نینا باداس, تخلیق: 2022-04-13 09:12:47, تازہ کاری: 2022-04-28 11:06:13

اعلی درجے کی پلیٹ فارم ریسرچ پائیتھون ڈیٹا تجزیہ اور حکمت عملی بیک ٹیسٹ.ipynb

جدید پلیٹ فارم ریسرچ

ایف ایم زیڈ میں ایک بلٹ ان جیوپیٹر نوٹ بک ہے جو صارفین کو پلیٹ فارم اے پی آئی سے واقف ہونے اور حکمت عملی کی تحقیق کرنے میں مدد فراہم کرتی ہے ، اور پیتھون 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=BTC,start=2020-8-10,end=2021-8-10,period=1h): کلینز = [] start_time = int(time.mktime(datetime.strptime(start، %Y-%m-%d).timetuple))) *1000 end_time = int(time.mktime(datetime.strptime(end، %Y-%m-%d).timetuple))) *1000 while start_time < end_time: جبکہ شروع_وقت < اختتامی_وقت: res = requests.get(https://fapi.binance.com/fapi/v1/klines?symbol=%sUSDT&interval=%s&startTime=%s&limit=1000%(symbol,period,start_time)) res_list = res.json() کلینز += res_list #print ((datetime.utcfromtimestamp ((start_time/1000).strftime ((%Y-%m-%d %H:%M:%S) ،len ((res_list)) start_time = res_list[-1][0] واپسی pd.DataFrame ((کلینز،کالمز=[time,open,high,low,close,amount,end_time,volume,count,buy_amount,buy_volume,null]).astype)) [85] میں: df = GetKlines ((علامت=BTC,start=2021-1-1,end=2021-8-10,period=1h)

ڈیٹا اسٹوریج اور پڑھنے میں پانڈا لائبریری کے اندر موجود افعال استعمال ہوسکتے ہیں۔ فارمیٹ csv ہے ، جسے براہ راست ایکسل سافٹ ویئر سے کھولا جاسکتا ہے۔

سب سے زیادہ قیمت ، سب سے کم قیمت ، کھلی قیمت ، بند قیمت اور عملدرآمد شدہ حجم کے علاوہ ، بائننس کے ذریعہ واپس آنے والے K لائن ڈیٹا میں کل تجارتی رقم ، اقدام خریدنے کی رقم ، عملدرآمد کی رقم وغیرہ بھی شامل ہیں۔ یہ قیمتی معلومات ہیں جن کا استعمال حکمت عملی کی تعمیر کے لئے کیا جاسکتا ہے۔

[86] میں: df.to_csv ((btc_klines.csv) df = pd.read_csv ((btc_klines.csv,index_col=0) [87] میں: ڈی ایف باہر[87]: ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، ، وقت کھولیں اعلی کم بند رقم اختتام_وقت حجم گنتی خریدیں_مقدار خریدیں_جلد صفر 0 1596988800000 11575.08 11642.00 11566.07 11591.37 6541.466 1596992399999 7.592336e+07 25724 3127.898 3.630633e+07 0 1 1596992400000 11591.39 11610.23 11526.90 11534.39 6969.252 1596995999999 8.057780e+07 27403 3390.424 3.920162e+07 0 2 1596996000000 11534.39 11656.69 11527.93 11641.07 6439.365 1596999599999 7.469135e+07 25403 3446.186 3.997906e+07 0 3 1596999600000 11641.06 11665.90 11624.20 11635.30 3911.582 1597003199999 4.555459e+07 17820 1842.413 2.145768e+07 0 4 1597003200000 11635.29 11684.00 11635.29 11673.81 3461.004 1597006799999 4.036804e+07 15513 1660.575 1.936981e+07 0 ....................................................................................................................................................................................................................................... 8805 1628658000000 45627.72 45894.53 45540.00 45801.45 10296.202 1628661599999 4.710187e+08 112187 4988.565 2.282399e+08 0 8806 1628661600000 45801.46 46270.00 45800.01 46087.86 26409.962 1628665199999 1.215164e+09 247170 13696.301 6.302708e+08 0 8807 1628665200000 46087.87 46450.00 46087.87 46367.38 23969.309 1628668799999 1.110210e+09 232348 11990.951 5.554267e+08 0 8808 1628668800000 46367.37 46643.13 46002.01 46217.01 23472.769 1628672399999 1.086549e+09 229533 12334.292 5.711837e+08 0 8809 1628672400000 46217.01 46329.69 46046.54 46297.16 6579.477 16286759999 3.039580e+08 78812 3313.055 1.530718e+08 0 8810 صفیں × 12 کالم

[88] میں: df.index = pd.to_datetime ((df.time,unit=ms) #انڈیکس کو تاریخ میں تبدیل کریں ، جو پلاٹنگ کے لئے آسان ہے [89] میں: df.close.plot ((figsize=(15,6),grid = True); #close قیمت باہر[1]:imgمیں [92]: (df.buy_amount.rolling(150).mean() /df.amount.rolling(150.mean (()).plot ((figsize=(15,6),grid = True); #فلیٹ کے بعد، پہل کی خریداری کی رقم کا تناسب # اس صورت حال میں جب سب سے نیچے کی سطح پر پہنچنے کے بعد اقدام کی خریداری کی رقم کا تناسب بڑھتا ہے ، عام طور پر قیمتوں میں اضافے کی صورت حال کا جواب دیتا ہے ، لیکن اقدام کی خریداری کی رقم کے تناسب کا طویل مدتی اوسط 49٪ ہے۔ باہر[92]:imgمیں [93]: (df[count].rolling ((100).mean (()).plot ((figsize=(15,6),grid = True); #فلیٹ کے بعد عملدرآمد کی گئی رقم،اور مارکیٹ کی قیمتوں کا تعین کم مقام پر تیار کیا جاسکتا ہے باہر[93]:img

بیک ٹیسٹ انجن

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

یہاں ایک سادہ مثال دی گئی ہے ، جس میں کثیر علامت اسپاٹ یا کثیر علامت دائمی بیک ٹیسٹنگ کو نافذ کیا جاسکتا ہے۔ بہت سی تفصیلات کو نظرانداز کیا جاتا ہے: جیسے فیوچر کا فائدہ ، مارجن قبضہ ، فنڈنگ کی شرح ، تصفیہ کا طریقہ کار ، مارکیٹ بنانے اور آرڈر لینے والے لین دین کے ساتھ ساتھ آرڈر کی بحالی ، لیکن یہ عام طور پر عام بیک ٹیسٹ کے نتائج کو متاثر نہیں کرتا ہے۔ اور مماثلت کی قیمت اور مقدار ، اور اکاؤنٹ کی تازہ کاری سب کو بیرونی طور پر درآمد کرنے کی ضرورت ہے۔ قارئین اس کی بنیاد پر اسے بہتر بنا سکتے ہیں۔

تبادلہ کلاس کا تعارف:

  • اکاؤنٹ: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 = {USDT:{realised_profit:0، unrealised_profit:0، total:initial_balance, fee:0}} trade_symbols میں علامت کے لئے: self.account[symbol] = {amount:0، hold_price:0، value:0، price:0، realised_profit:0،unrealised_profit:0،fee:0}

    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 اپ ڈیٹ ((خود، بند_قیمت): #اپ ڈیٹ اثاثوں خود.اکاؤنٹ[USDT][unrealized_profit] = 0 self.trade_symbols میں علامت کے لئے: self.account[symbol][unrealised_profit] = (close_price[symbol] - self.account[symbol][hold_price]) *self.account[symbol][amount] self.account[symbol][price] = close_price[symbol] self.account[symbol][value] = abs(self.account[symbol][amount]) *close_price[symbol] self.account[USDT][unrealised_profit] += self.account[symbol][unrealised_profit] self.account[USDT][total] = گول ((self.account[USDT][realised_profit] + self.initial_balance + self.account[USDT][unrealised_profit],6) [117] میں: #ٹیسٹ میں آپ دیکھ سکتے ہیں کہ اس بات پر کوئی زور نہیں دیا گیا ہے کہ پلیٹ فارم یو ایس ڈی ٹی مارجنڈ ہے یا اسپاٹ۔ حقیقت میں ، نتیجہ ایک ہی ہے ، جس کی وجہ سے کوئی فرق نہیں ہے۔ e = Exchange([BTC], فیس=0.0004, initial_balance=10000) #ایک Exchange آبجیکٹ تخلیق کریں, اور صرف ایک ٹریڈنگ بی ٹی سی جوڑی e.BTC خریدیں ((BTC,40000, 0.1) #0.1 BTC خریدیں 40,000 کی قیمت پر e.Sell ((BTC,41000, 0.1) # sell 0.1 BTC at the price of 41,000 e.Update (({BTC:41000}) #updtae اکاؤنٹ کی معلومات print ((e.account) #آخری اکاؤنٹ کی معلومات print (('منافع: ', راؤنڈ ((ای.اکاؤنٹ[USDT][کل]-ای.ابتدائی_باقی،2)) آؤٹ[117]:{USDT: {محقق_منافع: 96.76، غیرمحقق_منافع: 0.0، مجموعی: 10096.76، فیس: 3.24}، بی ٹی سی: {مبلغ: 0.0، ہولڈ_پریس: 0، قدر: 0.0، قیمت: 1000، 41 محقق_منافع: 100.0، غیرمحقق_منافع: 0.0، فیس: 3.24}} منافع: 96.76

گرڈ حکمت عملی بیک ٹسٹ

سب سے پہلے ، آئیے ایک کلاسیکی دائمی گرڈ حکمت عملی کا بیک ٹیسٹ کریں۔ یہ حکمت عملی حال ہی میں ہمارے پلیٹ فارم پر بہت مشہور ہے۔ اسپاٹ گرڈ ون کے مقابلے میں ، اسے کرنسی رکھنے کی ضرورت نہیں ہے اور فائدہ اٹھانے کا اضافہ کرسکتا ہے ، جو اسپاٹ گرڈ ون سے کہیں زیادہ آسان ہے۔ تاہم ، چونکہ اسے براہ راست بیک ٹیسٹ نہیں کیا جاسکتا ہے ، لہذا کرنسی کی علامتوں کا انتخاب کرنا سازگار نہیں ہے۔ یہاں ہم بیک ٹیسٹ انجن کا استعمال کرتے ہیں ابھی اسے جانچنے کے لئے۔

Live کے اوپری حصے میں ، ایک سرکاری بوٹ ہے ، جو 4 اپریل 2021 سے شروع ہوا۔ پوزیشن ویلیو 150 ہے ، گرڈ اسپیسنگ 0.01 ہے ، اور موجودہ منافع 3600USDT ہے۔ ایک ہی پیرامیٹرز اور بیک ٹیسٹ کے لئے 5 منٹ کی لائن کا استعمال کرتے ہوئے ، منافع 3937USDT ہے۔ چونکہ بوٹ کے آغاز میں پوزیشن ویلیو 150 USDT سے کم ہے ، لہذا نتیجہ کافی درست ہے۔ اگر آپ گرڈ اسپیسنگ کو 0.005 میں تبدیل کرتے ہیں تو ، فائدہ 5226U ہوگا۔ 0.005 کا گرڈ اسپیسنگ ظاہر ہے کہ 0.01 سے بہتر پیرامیٹر ہے ، جسے جاننے کے لئے بیک ٹیسٹ کرنے کی ضرورت ہے۔

کی لائن کی مدت جتنی مختصر ہوگی ، بیک ٹیسٹ کے نتائج اتنے ہی درست ہوں گے ، اور مطلوبہ اعداد و شمار کی مقدار اتنی ہی زیادہ ہوگی۔ قارئین علامت پیرامیٹر کو اس ٹریڈنگ جوڑی میں تبدیل کرنے کی کوشش کرسکتے ہیں جسے وہ بیک ٹیسٹ کرنا چاہتے ہیں۔

[241] میں: علامت = TRX df = GetKlines ((symbol=symbol,start=2021-4-4,end=2021-8-11,period=5m) [286] میں: قیمت = 150 pct = 0.01

e = Exchange (([علامت]، فیس=0.0002، ابتدائی_باقی=10000) init_price = df.loc[0,close] res_list = [] #درمیانی نتیجہ ذخیرہ کرنے کے لئے استعمال کیا جاتا ہے df.iterrows میں صف کے لئے: kline = row[1] #جو صرف ایک K-line کی جانچ کرے گا اور صرف ایک خرید آرڈر یا ایک فروخت آرڈر حاصل کرے گا، جو بہت درست نہیں ہے buy_price = (value / pct - value) / ((value / pct) / init_price + e.account[symbol][amount]) #sell order price، کیونکہ یہ ایک بنانے والا عملدرآمد ہے، یہ بھی حتمی مماثلت کی قیمت ہے sell_price = (value / pct + value) / ((value / pct) / init_price + e.account[symbol][amount])

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=[time,price,amount,profit]) res.index = pd.to_datetime ((res.time،unit=ms) [287] میں: ای.اکاؤنٹ آؤٹ[287]:{USDT: {محقق_منافع: 3866.633149565143، غیر حاصل شدہ_ منافع: 70.54622281993666، مجموعی طور پر: 13937.179372، فیس: 177.51000000000596}، TRX: {مبلغ: 36497.43208747655، hold_price: 0.08203709078461048، قیمت: 3064.689372385406، قیمت: 0.08397، حاصل_منافع: 4044.143149565462، غیر حاصل شدہ_ منافع: 70.54622281993666، فی: 177.51000000000596}} [288] میں: res.profit.plot ((figsize=(15,6),grid = True) ؛ باہر[288]:img[170] میں: res.price.plot ((figsize=(15,6),grid = True); #close قیمت باہر[170]:img

اسپاٹ توازن کی حکمت عملی کا بیک ٹسٹ

اس قسم کی حکمت عملی بھی نسبتا popular مشہور ہے ، لیکن ایف ایم زیڈ پلیٹ فارم کثیر علامت کی حکمت عملیوں کی بیک ٹیسٹنگ میں بہت اچھا نہیں ہے ، بس اس بیک ٹیسٹ انجن کو آزمائیں۔ ہم چار مرکزی کرنسی کی علامتوں ، بی ٹی سی ، ای ٹی ایچ ، ایل ٹی سی اور ایکس آر پی کا انتخاب کرتے ہیں ، اور بالترتیب مارکیٹ ویلیو کا 25٪ تشکیل دیتے ہیں ، اور ہر 1٪ انحراف کو توازن دیتے ہیں۔

پہلے ، پچھلے سال میں چاروں علامتوں کی قریبی قیمتیں حاصل کریں۔ یہ دیکھا جاسکتا ہے کہ ای ٹی ایچ میں سب سے زیادہ اضافہ ہوا ہے ، اور دیگر تینوں میں بھی اسی طرح کا اضافہ ہوا ہے۔ اگر آپ ان چاروں علامتوں کو اوسطا hold رکھتے ہیں تو ، حتمی خالص قیمت 4.5 ہے۔ بیک ٹیسٹ کے بعد ، توازن کی حکمت عملی کی حتمی خالص قیمت 5.3 ہے ، جو قدرے بڑھا ہوا ہے۔

[290] میں: علامات = [BTC،ETH،LTC،XRP] ڈیٹا = {} علامات میں علامت کے لئے: df = GetKlines ((symbol=symbol,start=2020-8-11,end=2021-8-11,period=1h) اعداد و شمار[علامت] = df.close [291] میں: df = pd.DataFrame (([data[symbol].values for symbol in symbols],index=symbols).T [302] میں: e = تبادلہ ((علامات، فیس=0.0004، ابتدائی_باقی=10000) res_list = [] df.iterrows میں صف کے لئے: قیمتیں = قطار [1] کل = ای.اکاؤنٹ[USDT][کل] e.اپ ڈیٹ ((قیمتیں) علامات میں علامت کے لئے: pct = e.account[symbol][value]/کل اگر pct > 0.26 ہو: e.Sell ((symbol,prices[symbol],(point-0.25) *کل/قیمتیں[symbol]) اگر pct < 0.24: e.خریدیں ((علامت،قیمتیں[علامت]،(0.25 فیصد) *کل/قیمتیں[علامت]) res_list.append (([e.account[symbol][value] symbols in symbols] + [e.account[USDT][total]]) res = pd.DataFrame ((data=res_list, columns=symbols+[total]) [303] میں: (df/df.iloc[0,:]).plot(figsize=(15,6),grid = True); #تعلیم کے ذریعہ ٹرینڈ کو پلاٹ کریں باہر[303]:img[304] میں: (res.total/10000-(df/df.iloc[0،:]).mean(axis=1)).plot(figsize=(15,6),grid = True); #enheance اثر باہر[304]:img

کچھی کی حکمت عملی

کچھی کی حکمت عملی ایک کلاسیکی رجحان کی حکمت عملی ہے جس میں پوزیشنوں کو شامل کرنے کے لئے مکمل اسٹاپ نقصان کا منطق شامل ہے۔ تفصیلات کے لئے ، براہ کرم ملاحظہ کریں:https://zhuanlan.zhihu.com/p/27987938ہم یہاں بیک ٹیسٹ کے لئے ایک سادہ ورژن لاگو کریں گے.

کچھی کی حکمت عملی کی مدت کی حکمت عملی پر بہت زیادہ اثر پڑتا ہے ، اور اس کی مدت کا انتخاب کرنا مشورہ نہیں دیا جاتا ہے جو بہت کم ہو۔ یہاں ، ہم 6h کا انتخاب کرتے ہیں۔ ڈونچیئن چینل کی مدت کا انتخاب 5 کے طور پر کیا جاتا ہے ، اور پوزیشن کا تناسب بیک ٹیسٹ کے مطابق 0.003 کے طور پر منتخب کیا جاتا ہے۔ جب قیمت چینل کے اپ بینڈ کو توڑ کر 1 یونٹ لانگ پوزیشن کھولتی ہے ، اور پوزیشن کھولنے کے بعد قیمت 0.3 کی اتار چڑھاؤ میں اضافہ کرتی رہتی ہے ، تو 1 یونٹ کا اضافہ جاری رکھیں ، اور قیمت 2.5 سے نیچے گر جاتی ہے نقصان کو روکنے کے لئے تازہ ترین کھلی قیمت کی اتار چڑھاؤ۔ شارٹ آرڈر کا اصول ایک ہی ہے۔ ای ٹی ایچ کی بڑی بیل مارکیٹ کی وجہ سے ، کچھی کی حکمت عملی نے مرکزی رجحان کو پکڑ لیا ہے اور آخر کار 27 گنا منافع حاصل کیا ہے ، اس مدت کے دوران زیادہ سے زیادہ 4 گنا فائدہ اٹھانا۔

کچھی کی حکمت عملی کے پیرامیٹرز کا دورانیے سے گہرا تعلق ہے ، اور انہیں بیک ٹسٹ کے ذریعے منتخب کرنے کی ضرورت ہے۔ ہر وقت کی کھلی پوزیشن کی اکائی کو بھی محتاط رہنا چاہئے تاکہ زیادہ سے زیادہ خطرات سے بچنے کے لئے بہت بڑا نہ ہو۔

یہ حتمی خالص قیمت کے چارٹ سے دیکھا جاسکتا ہے کہ کچھی کی حکمت عملی ایک طویل مدتی حکمت عملی ہے ، جس کے دوران 3 سے 4 ماہ تک کوئی منافع نہیں ہوسکتا ہے ، اور بار بار نقصان کو روکنا ، لیکن ایک بار جب ایک طرف مارکیٹ کی بڑی قیمت ہوتی ہے تو ، کچھی کی حکمت عملی رجحان کا فائدہ اٹھا کر بڑی پوزیشن جمع کرسکتی ہے ، اسے رجحان کے اختتام تک برقرار رکھ سکتی ہے ، بہت سارے منافع کما سکتی ہے۔ اضافے کے اختتام پر ، حکمت عملی بہت ساری پوزیشنیں جمع کرے گی۔ اس وقت ، اتار چڑھاؤ نسبتا large بڑا ہوگا ، اور اکثر بڑے منافع واپس لے لیا جائے گا۔ کچھی کی حکمت عملی کا استعمال کرنے سے آپ کو اس کی خامیوں کو قبول کرنے اور اپنے صبر کی ضرورت ہوتی ہے۔

[424] میں: علامت = ETH df = GetKlines ((symbol=symbol,start=2019-8-11,end=2021-8-11,period=6h) [425] میں: df.index = pd.to_datetime ((df.time،unit=ms) [568] میں: M = 5 # ڈونچین چینل کا دورانیہ حجم pct = 0.003 # مجموعی پوزیشنوں میں شامل پوزیشنوں کا تناسب df[up] = df[high].rolling ((M).max().shift(1) #upBand of Donchian channel, t کے ذریعے توڑنے کے لئے طویل اور فیصلہ کرنے کے لئے استعمال کیا جاتا ہے df[down] = df[low].rolling(M).max().shift(1) df[middle] = (df[up]+df[down])/2 df[true_range] = pd.concat([df[high]-df[low],df[high]-df[close].shift(1),df[close].shift(1)-df[low]],axis=1).max(axis=1) df[N] = df[true_range].rolling(50).mean() #N حالیہ اتار چڑھاؤ کے برابر ہے، جو خریدنے اور نقصان کو روکنے کے لئے فیصلہ کرنے کے لئے استعمال کیا جاتا ہے [572] میں: open_times = 0.3 #پوزیشن کھولنے کا فیصلہ سٹاپ_ٹائمز = 2.5 #سٹاپ نقصان e = Exchange([علامت]، فیس=0.0004، initial_balance=10000) #ٹیکر کو 0.0004 پر سیٹ کریں res_list = [] last_price = 0 #آخری کھلی پوزیشن کی قیمت df.iterrows میں صف کے لئے: کلین = صف[1] if kline.isnull().sum() > 0: #ڈیٹا کے بغیر سیکشن کو چھوڑ دیں جاری رکھیں یونٹ = e.account[USDT][total]*pct/kline.N #open position unit amount

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=[time,price,value,total]) res.index = pd.to_datetime ((res.time،unit=ms) print(آخری مارکیٹ ویلیو:,res[کل][-1]) باہر[572]:حتمی مارکیٹ ویلیو: 280760.566996 [573] میں: res.total.plot ((figsize=(15,6),grid = سچ); باہر[573]:img[571] میں: (res.value/res.total).plot(figsize=(15,6),grid = True) ، باہر[571]:img

نتیجہ

اگر آپ جیوپیٹر نوٹ بک ریسرچ پلیٹ فارم کے استعمال میں مہارت رکھتے ہیں تو ، آپ آسانی سے اعداد و شمار کے حصول ، ڈیٹا تجزیہ ، حکمت عملی بیک ٹیسٹ ، چارٹ ڈسپلے وغیرہ جیسے آپریشن انجام دے سکتے ہیں ، جو مقداری تجارت کا ناگزیر راستہ ہے۔ اگر آپ کو ابھی حکمت عملی لکھنے کے بارے میں کوئی اشارہ نہیں ہے تو ، آپ پہلے اعداد و شمار کا تجزیہ بھی کرسکتے ہیں۔ ابتدائیوں کے لئے ، تجویز کردہ وسائل:

ڈیٹا تجزیہ انجام دینے کے لئے پائیتھون کا استعمال کریں:https://wizardforcel.gitbooks.io/pyda-2e/content/

پیتھون مقداری سبق:https://wizardforcel.gitbooks.io/python-quant-uqer/content/

[ ] میں:


مزید