অ্যাডভান্সড প্ল্যাটফর্ম রিসার্চ
এফএমজেডের একটি অন্তর্নির্মিত জুপিটার নোটবুক রয়েছে যা ব্যবহারকারীদের প্ল্যাটফর্ম এপিআইয়ের সাথে পরিচিত হতে এবং কৌশল গবেষণা পরিচালনা করতে সহায়তা করে এবং পাইথন 3 সি ++ 11/17 এবং জাভাস্ক্রিপ্টের শেখার পরিবেশগুলিকে সমর্থন করে। নোটবুক + পাইথন একটি খুব শক্তিশালী সরঞ্জাম, যা ডেটা বিশ্লেষণ এবং কৌশল গবেষণার জন্য প্রায় অপরিহার্য। যদিও এফএমজেড প্ল্যাটফর্মের সাথে আসা ব্যাকটেস্টটি খুব দরকারী, তবে এটি জটিল এবং বড় পরিমাণে ডেটা সহ কৌশলগুলির জন্য উপযুক্ত নয়। এই নিবন্ধটি জুপিটার নোটবুকের কিছু উন্নত ব্যবহারের দক্ষতা পরিচয় করিয়ে দেবে এবং এলোমেলো জোড়া ট্রেডিং এবং মাল্টি-জোড়া ট্রেডিং কৌশলগুলির ব্যাকটেস্টগুলি উপলব্ধি করবে।
এফএমজেডের অভ্যন্তরে গবেষণা পরিবেশ ব্যবহার করা যেতে পারে, তবে নেটওয়ার্কিং অসুবিধাজনক। আপনার নিজের ডিভাইসে নোটবুক এবং গণিতের গণনার জন্য সাধারণভাবে ব্যবহৃত সম্পর্কিত লাইব্রেরি সহ আনাকন্ডা 3 ইনস্টল করার পরামর্শ দেওয়া হয়; এটি স্থানীয় নেটওয়ার্ক পরিবেশ ভাগ করতে পারে এবং আরও ভাল পারফরম্যান্স থাকতে পারে। গুগল কোল্যাব ব্যবহার করার পরামর্শ দেওয়া হয়। যদিও কিছু স্টোরেজ সীমাবদ্ধতা রয়েছে তবে এটি নিখরচায় এবং শক্তিশালী, রোবট অধ্যয়নের সাথে সম্পর্কিত গবেষণার জন্য উপযুক্ত।
নোটবুক এবং পাইথনের নির্দিষ্ট ব্যবহারের দক্ষতার জন্য অনেকগুলি অনলাইন টিউটোরিয়াল রয়েছে। আপনি পাইথন কোয়ান্টিফিকেশন এবং জুপিটার নোটবুক টিউটোরিয়ালের মতো কীওয়ার্ড অনুসন্ধান করে প্রচুর তথ্য পেতে পারেন। আপনাকে ক্রলার, ডেটা প্রসেসিং, ব্যাকটেস্ট, কৌশল নকশা এবং প্লটিংয়ের মতো মৌলিকগুলির একটি সিরিজ শিখতে এবং আয়ত্ত করতে হবে।
প্ল্যাটফর্মগুলি সাধারণত ইতিহাসের ডেটা সহ কে-লাইনগুলি পাওয়ার জন্য এপিআই সরবরাহ করে এবং কিছু বাণিজ্য দ্বারা কার্যকর ব্যবসায়ের ডেটাও সরবরাহ করে। আমাদের ডেটা পেতে এবং সংরক্ষণ করতে ক্রলারটি ব্যবহার করতে হবে। আপনি সরাসরি প্ল্যাটফর্ম দ্বারা চাপানো ডেটা গ্রহণ করতে এবং নিজের দ্বারা একটি স্থানীয় ডাটাবেস স্টোরেজ তৈরি করতে পারেন।
এরপরে, আমরা দেখাব কিভাবে বাইনারেন্সের চিরস্থায়ী চুক্তির কে-লাইন ডেটা সংগ্রহ এবং সংরক্ষণ করা যায়।
প্রথমে, বাইনারেন্স পারপেক্টুয়াল সোয়াপের ডকুমেন্টেশন খুঁজুন:https://binance-docs.github.io/apidocs/futures/cn/#c59e471e81. আপনি প্রয়োজনীয় পরামিতি এবং ফিরে আসা ডেটা ফর্ম্যাটগুলি দেখতে পারেন। সাধারণত, এপিআই দ্বারা অর্জিত কে-লাইনগুলির সংখ্যা সীমিত, এবং বিন্যান্সে সর্বাধিক 1000 রয়েছে, তাই এটি লুপ পুনরাবৃত্তির মাধ্যমে অর্জনের প্রয়োজন। অন্যান্য প্ল্যাটফর্মের পরিস্থিতি বিন্যান্সে অনুরূপ। মনে রাখবেন যে নেটওয়ার্কটি বিদেশী নেটওয়ার্কের সাথে সংযুক্ত হতে হবে (চীনের অভ্যন্তরীণ নেটওয়ার্কের তুলনায়) কে-লাইনগুলি ক্রল করতে।
বিন্যান্স যে সময়কালগুলি সমর্থন করেঃ 1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 6h, 8h, 12h, 1d, 3d, 1w, 1M।
[২৪] এঃ
আমদানি অনুরোধ # নেটওয়ার্ক অনুরোধ সাধারণ লাইব্রেরির জন্য
তারিখ-সময় থেকে আমদানি তারিখ-সময়
আমদানি সময়
পিডি হিসাবে পান্ডা আমদানি করুন
[১৬০] এঃ
def GetKlines ((symbol=
ডাটা স্টোরেজ এবং পড়ার জন্য পান্ডা লাইব্রেরির ভিতরে ফাংশন ব্যবহার করা যেতে পারে। ফর্ম্যাটটি সিএসভি, যা সরাসরি এক্সেল সফ্টওয়্যার দিয়ে খোলা যেতে পারে।
সর্বোচ্চ মূল্য, সর্বনিম্ন মূল্য, খোলা মূল্য, বন্ধ মূল্য এবং সম্পাদিত ভলিউমের পাশাপাশি, বিন্যান্স দ্বারা ফিরে আসা কে-লাইন ডেটাতে মোট ট্রেডিং পরিমাণ, উদ্যোগ কেনার পরিমাণ, সম্পাদনের পরিমাণ ইত্যাদি অন্তর্ভুক্ত রয়েছে। এগুলি মূল্যবান তথ্য যা কৌশল তৈরি করতে ব্যবহার করা যেতে পারে।
[৮৬] এঃ
df.to_csv ((
,
[৮৮] এঃ
df.index = pd.to_datetime ((df.time,unit=
পূর্ববর্তী নিবন্ধে পাইথন ব্যাকটেস্ট ইঞ্জিনও দেওয়া হয়েছিল, তবে এখানে একটি অনুকূলিত সংস্করণ রয়েছে। ইউএসডিটি-মার্জিনযুক্ত (বা অন্যান্য কোট মুদ্রা-মার্জিনযুক্ত) চিরস্থায়ী চুক্তিগুলি স্পট চুক্তিগুলির সাথে খুব অনুরূপ। পার্থক্যটি হ'ল চিরস্থায়ী চুক্তিগুলি লিভারেজ করা যেতে পারে এবং নেতিবাচক পরিমাণ ধরে রাখতে পারে (স্বল্প করার সমতুল্য), এবং একটি ব্যাকটেস্ট ইঞ্জিন ভাগ করতে পারে। ক্রিপ্টো-মার্জিনযুক্ত বিতরণ চুক্তিগুলি বিশেষ, কারণ তারা মুদ্রায় নিষ্পত্তি হয় এবং নির্দিষ্ট ব্যাকটেস্টের প্রয়োজন হয়।
এখানে একটি সহজ উদাহরণ দেওয়া হয়েছে, যা মাল্টি-সিম্বল স্পট বা মাল্টি-সিম্বল চিরস্থায়ী ব্যাকটেস্টিং বাস্তবায়ন করতে পারে। অনেকগুলি বিবরণ উপেক্ষা করা হয়ঃ যেমন ফিউচারগুলির লিভারেজ, মার্জিন দখল, তহবিলের হার, তরলীকরণ প্রক্রিয়া, বাজার তৈরি এবং অর্ডার গ্রহণকারী লেনদেনের পাশাপাশি অর্ডার রক্ষণাবেক্ষণ, তবে এটি সাধারণত স্বাভাবিক ব্যাকটেস্ট ফলাফলকে প্রভাবিত করে না। এবং মিলের দাম এবং পরিমাণ এবং অ্যাকাউন্ট আপডেটের সমস্ত বাহ্যিকভাবে আমদানি করা দরকার। পাঠকরা এটির উপর ভিত্তি করে এটি উন্নত করতে পারেন।
এক্সচেঞ্জ ক্লাসের ভূমিকা:
account:USDT বেস মুদ্রা নির্দেশ করে, যা প্রয়োজন হয় না; realised_profit: ইতিমধ্যে বাস্তবায়িত লাভ এবং ক্ষতি; unrealised_profit: লাভ এবং ক্ষতি এখনও বাস্তবায়িত হয়নি; মোটঃ মোট মূলধন; ফিঃ হ্যান্ডলিং ফি। অন্যান্য ট্রেডিং জোড়ার জন্য, পরিমাণ (যা শর্ট করার সময় নেতিবাচক সংখ্যা); hold_price: হোল্ডিং মূল্য; মানঃ হোল্ডিং মান; মূল্যঃ বর্তমান মূল্য।
trade_symbols: ট্রেডিং জোড়ার অ্যারে; আপনি একটি ট্রেডিং জোড়ায়ও পাস করতে পারেন; ডিফল্ট কোট মুদ্রা হল ইউএসডিটি, তবে আপনি ব্যাকটেস্টে অন্যান্য কোট মুদ্রা প্রতীকগুলিও ব্যবহার করতে পারেন।
ফিঃ হস্তান্তর ফি; সহজভাবে বলতে গেলে, প্রস্তুতকারক এবং গ্রহণকারীর মধ্যে পার্থক্য করবেন না।
initial_balance: প্রাথমিক সম্পদ; ডিফল্ট ট্রেডিং জোড়ার প্রাথমিক পরিমাণ ০।
ক্রয় ফাংশনঃ কিনতে, যা একটি মিলে যাওয়া প্রক্রিয়া ছাড়া চিরস্থায়ী চুক্তি দীর্ঘ এবং বন্ধ সংক্ষিপ্ত করতে অনুরূপ।
বিক্রয় ফাংশনঃ বিক্রয়।
আপডেট ফাংশনঃ অ্যাকাউন্টের তথ্য আপডেট করতে, যা সমস্ত ট্রেডিং জোড়ার মূল্য অভিধানে পাস করতে হবে। [98]: ক্লাস এক্সচেঞ্জঃ
def সূচনা(self, trade_symbols, fee=0.0004, initial_balance=10000):
self.initial_balance = initial_balance #প্রাথমিক ভারসাম্য
self.fee = ফি
self.trade_symbols = trade_symbols
self.account = {
trade ((self, symbol, direction, price, amount):
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(প্রতীক, -১, মূল্য, পরিমাণ)
def Update ((self, close_price): #সম্পদের আপডেট করুন
self.account[
প্রথমত, আসুন একটি ক্লাসিক চিরস্থায়ী গ্রিড কৌশল ব্যাকটেস্ট করি। এই কৌশলটি সম্প্রতি আমাদের প্ল্যাটফর্মে খুব জনপ্রিয়। স্পট গ্রিডের তুলনায়, এটির মুদ্রা রাখার প্রয়োজন নেই এবং লিভারেজ যুক্ত করতে পারে, যা স্পট গ্রিডের তুলনায় অনেক বেশি সুবিধাজনক। তবে, এটি সরাসরি ব্যাকটেস্ট করা যায় না, এটি মুদ্রার প্রতীকগুলি নির্বাচন করতে অনুকূল নয়। এখানে আমরা এটি পরীক্ষা করতে এখনই ব্যাকটেস্ট ইঞ্জিনটি ব্যবহার করি।
কে-লাইন পিরিয়ড যত ছোট, সংশ্লিষ্ট ব্যাকটেস্টের ফলাফল তত সঠিক এবং প্রয়োজনীয় ডেটার পরিমাণ তত বেশি। পাঠকরা তারা ব্যাকটেস্ট করতে চান এমন ট্রেডিং জুটিতে প্রতীক পরামিতি পরিবর্তন করার চেষ্টা করতে পারেন।
[২৪১] এঃ
প্রতীক =
e = Exchange (([প্রতীক], ফি=0.0002, initial_balance=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=[
এই ধরণের কৌশলটিও তুলনামূলকভাবে জনপ্রিয়, তবে এফএমজেড প্ল্যাটফর্মটি মাল্টি-সিম্বল কৌশলগুলি ব্যাকটেস্টিংয়ে খুব ভাল নয়, কেবল চেষ্টা করার জন্য এই ব্যাকটেস্ট ইঞ্জিনটি ব্যবহার করুন। আমরা চারটি মূলধারার মুদ্রা প্রতীক, বিটিসি, ইটিএইচ, এলটিসি এবং এক্সআরপি নির্বাচন করি এবং যথাক্রমে বাজারের মূল্যের 25% কনফিগার করি এবং প্রতিটি 1% বিচ্যুতি ভারসাম্য করি।
প্রথমত, গত বছরের চারটি প্রতীকের বন্ধের দাম পান। দেখা যায় যে ETH এর সর্বাধিক বৃদ্ধি রয়েছে এবং অন্য তিনটিতে অনুরূপ বৃদ্ধি রয়েছে। আপনি যদি এই চারটি প্রতীক গড় ধরে রাখেন তবে চূড়ান্ত নেট মূল্য 4.5। ব্যাকটেস্টের পরে, ভারসাম্য কৌশলটির চূড়ান্ত নেট মূল্য 5.3 রয়েছে, যা সামান্য উন্নত।
[২৯০] এঃ
চিহ্ন = [
টার্টল কৌশল একটি ক্লাসিক ট্রেন্ড কৌশল, যার মধ্যে অবস্থান যোগ করার জন্য সম্পূর্ণ স্টপ-লস লজিক অন্তর্ভুক্ত রয়েছে। বিস্তারিত জানার জন্য, দয়া করে পড়ুনঃhttps://zhuanlan.zhihu.com/p/27987938আমরা ব্যাকটেস্টের জন্য এখানে একটি সহজ সংস্করণ বাস্তবায়ন করব।
টর্টল কৌশল সময়কাল কৌশল উপর একটি বড় প্রভাব আছে, এবং এটি একটি সময়কাল যে খুব সংক্ষিপ্ত পছন্দ করা অযাচিত। এখানে, আমরা 6h চয়ন। Donchian চ্যানেল সময়কাল 5 হিসাবে নির্বাচন করা হয়, এবং অবস্থান অনুপাত ব্যাকটেস্ট অনুযায়ী 0.003 হিসাবে নির্বাচন করা হয়। যখন মূল্য 1 ইউনিট দীর্ঘ অবস্থান খুলতে চ্যানেলের আপব্যান্ড মাধ্যমে বিরতি, এবং মূল্য 0.3 দ্বারা অস্থিরতা বৃদ্ধি অব্যাহত অবস্থান খোলার পরে, 1 ইউনিট যোগ করা চালিয়ে যান, এবং মূল্য 2.5 এর নিচে পড়ে হার বন্ধ করতে সর্বশেষ খোলা মূল্যের অস্থিরতা। সংক্ষিপ্ত অর্ডার নীতি একই। ETH এর বড় ষাঁড় বাজার কারণে, টর্টল কৌশল প্রধান প্রবণতা ক্যাপচার করেছে এবং অবশেষে 27 বার মুনাফা অর্জন করেছে, সময়ের মধ্যে 4 বার সর্বোচ্চ লিভারেজ সহ।
টর্টল স্ট্র্যাটেজির পরামিতিগুলি সময়ের সাথে ঘনিষ্ঠভাবে সম্পর্কিত, এবং এগুলি ব্যাকটেস্টের মাধ্যমে নির্বাচন করা দরকার। প্রতিটি সময় খোলা অবস্থানের ইউনিটটিও খুব বেশি ঝুঁকি এড়াতে খুব বড় না হওয়ার বিষয়ে সতর্ক হওয়া উচিত।
চূড়ান্ত নিট ভ্যালু চার্ট থেকে দেখা যায় যে টর্টল কৌশল একটি দীর্ঘমেয়াদী কৌশল, যার সময় 3 থেকে 4 মাসের জন্য কোনও লাভ নাও হতে পারে, এবং বারবার স্টপ লস হতে পারে, তবে একবার একপাশে একটি বড় বাজার উদ্ধৃতি থাকলে, টর্টল কৌশলটি প্রবণতার সুবিধা নিতে পারে একটি বড় অবস্থান জমা করতে, প্রবণতার শেষ পর্যন্ত ধরে রাখতে, প্রচুর মুনাফা অর্জন করতে। উত্থানের শেষে, কৌশলটি প্রচুর অবস্থান জমা করবে। এই সময়ে, অস্থিরতা তুলনামূলকভাবে বড় হবে, এবং প্রায়শই বড় মুনাফা প্রত্যাহার করা হবে। টর্টল কৌশলটি ব্যবহার করার জন্য আপনাকে এর ত্রুটিগুলি এবং আপনার ধৈর্য গ্রহণ করতে হবে।
[৪২৪] এঃ
প্রতীক =
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/
[ ] এঃ