پائیدار معاہدہ گرڈ حکمت عملی کے پیرامیٹرز کو بہتر بنانے کی تفصیلات

مصنف:گھاس, تخلیق: 2023-12-08 17:00:38, تازہ کاری: 2023-12-14 17:07:42

img

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

ڈیٹا اکٹھا کرنا

عام طور پر K لائن کے اعداد و شمار کے ساتھ کافی ہے، درستگی کے لئے، K لائن کا دورانیہ جتنا چھوٹا ہے، بہتر ہے، لیکن دوبارہ جانچ کے وقت اور اعداد و شمار کی مقدار کو متوازن کرنے کے لئے، اس مضمون میں 5 منٹ کا استعمال کرتے ہوئے حالیہ دو سالوں کے اعداد و شمار کو دوبارہ جانچ پڑتال کرنے کے لئے استعمال کیا گیا ہے، حتمی اعداد و شمار کی مقدار 20W لائن سے زیادہ ہے، کرنسی DYDX کا انتخاب کرتی ہے؛ یقینا مخصوص کرنسی اور K لائن کے دورانیے کو اپنی دلچسپی کے مطابق منتخب کیا جا سکتا ہے.

import requests
from datetime import date,datetime
import time
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import requests, zipfile, io
%matplotlib inline

def GetKlines(symbol='BTC',start='2020-8-10',end='2021-8-10',period='1h'):
    Klines = []
    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()
        Klines += res_list
        start_time = res_list[-1][0]
    return pd.DataFrame(Klines,columns=['time','open','high','low','close','amount','end_time','volume','count','buy_amount','buy_volume','null']).astype('float')

df = GetKlines(symbol='DYDX',start='2022-1-1',end='2023-12-7',period='5m')
df = df.drop_duplicates()

ریویو فریم ورک

ریویو نے پہلے سے ہی عام طور پر استعمال ہونے والے USDT کو مستقل طور پر معاہدہ کرنے والے ملٹی کرنسیوں کے فریم ورک کا انتخاب جاری رکھا ، جو آسان اور مفید ہے۔

class Exchange:
    
    def __init__(self, trade_symbols, fee=0.0004, initial_balance=10000):
        self.initial_balance = initial_balance #初始的资产
        self.fee = fee
        self.trade_symbols = trade_symbols
        self.account = {'USDT':{'realised_profit':0, 'unrealised_profit':0, 'total':initial_balance, 'fee':0}}
        for symbol in trade_symbols:
            self.account[symbol] = {'amount':0, 'hold_price':0, 'value':0, 'price':0, 'realised_profit':0,'unrealised_profit':0,'fee':0}
            
    def 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 #扣除手续费
        self.account['USDT']['fee'] += price*amount*self.fee
        self.account[symbol]['fee'] += price*amount*self.fee

        if cover_amount > 0: #先平仓
            self.account['USDT']['realised_profit'] += -direction*(price - self.account[symbol]['hold_price'])*cover_amount  #利润
            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 Buy(self, symbol, price, amount):
        self.Trade(symbol, 1, price, amount)
        
    def Sell(self, symbol, price, amount):
        self.Trade(symbol, -1, price, amount)
        
    def Update(self, close_price): #对资产进行更新
        self.account['USDT']['unrealised_profit'] = 0
        for symbol in 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'] = round(self.account['USDT']['realised_profit'] + self.initial_balance + self.account['USDT']['unrealised_profit'],6)

گرڈ ریورس فنکشن

نیٹ ورک کی حکمت عملی کا اصول بہت آسان ہے ، فروخت میں اضافہ ، خرید میں کمی ، خاص طور پر تین پیرامیٹرز سے متعلق ہے: ابتدائی قیمت ، نیٹ ورک کا وقفہ ، تجارت کی قیمت۔ DYDX کی مارکیٹ میں بہت زیادہ اتار چڑھاؤ ہے ، ابتدائی 8.6U کی کم سے کم 1U سے گر گئی ، حالیہ بیل مارکیٹ میں ایک بار پھر 3U کی واپسی ہوئی ، حکمت عملی کی پہلے سے طے شدہ ابتدائی قیمت 8.6U ہے ، جو نیٹ ورک کی حکمت عملی کے لئے بہت نقصان دہ ہے ، لیکن پہلے سے طے شدہ پیرامیٹر دو سال کی مجموعی منافع 9200U کی واپسی کرتا ہے ، اس دوران ایک بار 7500U کا نقصان ہوتا ہے۔img

symbol = 'DYDX'
value = 100
pct = 0.01

def Grid(fee=0.0002, value=100, pct=0.01, init = df.close[0]):
    e = Exchange([symbol], fee=0.0002, initial_balance=10000)
    init_price = init
    res_list = [] #用于储存中间结果
    for row in df.iterrows():
        kline = row[1] #这样会测一根K线只会产生一个买单或一个卖单,不是特别精确
        buy_price = (value / pct - value) / ((value / pct) / init_price + e.account[symbol]['amount']) #买单价格,由于是挂单成交,也是最终的撮合价格
        sell_price = (value / pct + value) / ((value / pct) / init_price + e.account[symbol]['amount'])
        if kline.low < buy_price: #K线最低价低于当前挂单价,买单成交
            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,e.account['USDT']['fee'] ])
    res = pd.DataFrame(data=res_list, columns=['time','price','amount','profit', 'fee'])
    res.index = pd.to_datetime(res.time,unit='ms')
    return res

img

ابتدائی قیمتوں کا اثر

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

لیکن ابتدائی قیمت 3 یو مقرر کی گئی ہے ، حکمت عملی شروع میں خالی ہو جائے گی اور بہت زیادہ خالی اسٹاک رکھے گی ، اس مثال میں براہ راست 17،000 یو کے خالی چارٹ کو برقرار رکھا گیا ہے ، لہذا اس کے ساتھ ہی زیادہ خطرہ ہے۔

img

گرڈ وقفہ کی ترتیب

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

چونکہ ری میٹنگ 5mK لائن ڈیٹا پر مبنی ہے اور ایک K لائن پر صرف ایک بار ہی ٹرانزیکشن ہوتا ہے۔ یہ واضح طور پر غیر حقیقت پسندانہ ہے ، خاص طور پر ڈیجیٹل کرنسی کی اتار چڑھاؤ بہت زیادہ ہے ، چھوٹے وقفے ری میٹنگ میں حقیقی رقم کے مقابلے میں بہت سارے ٹرانزیکشنز سے محروم ہوجاتے ہیں ، اور صرف بڑے وقفے سے ہی ریفرنس کی قدر ہوتی ہے۔ اس ری میٹنگ میکانزم کے تحت ، نتائج درست نہیں ہیں۔ ٹک سطح کے آرڈر فلو ڈیٹا ری میٹنگ کے ذریعہ ، بہترین گرڈ وقفہ 0.005-0.01 ہونا چاہئے۔

for p in [0.0005, 0.001 ,0.002 ,0.005, 0.01, 0.02, 0.05]:
    res = Grid( fee=0.0002, value=value*p/0.01, pct=p, init =3)
    print(p, round(min(res['profit']),0), round(res['profit'][-1],0), round(res['fee'][-1],0))
    
0.0005 -8378.0 144.0 237.0
0.001 -9323.0 1031.0 465.0
0.002 -9306.0 3606.0 738.0
0.005 -9267.0 9457.0 781.0
0.01 -9228.0 13375.0 550.0
0.02 -9183.0 15212.0 309.0
0.05 -9037.0 16263.0 131.0

نیٹ ورک ٹریڈنگ کی قیمت

جیسا کہ پہلے ذکر کیا گیا ہے ، جب اتار چڑھاؤ ایک ساتھ ہوتا ہے تو ، ہولڈنگ ویلیو ، رسک وغیرہ کا تناسب طریقہ ، لیکن جب تک کہ یہ تیزی سے گر نہ جائے ، 1٪ کل سرمایہ کاری کے ساتھ 1٪ کے نیٹ ورک کے وقفے سے زیادہ تر صنعتوں کو پورا کرنا چاہئے۔ اس مثال میں ، DYDX میں تقریبا 90 90 فیصد گرنے سے بھی دھماکے کی وجہ سے بڑھتا ہے۔ لیکن نوٹ کریں کہ DYDX بنیادی طور پر گرتا ہے ، گرنے پر نیٹ ورک کی حکمت عملی زیادہ ہوتی ہے ، زیادہ سے زیادہ 100٪ گرتی ہے ، جبکہ اضافہ ہوتا ہے ، اس کی کوئی حد نہیں ہوتی ہے ، اور خطرہ بہت زیادہ ہوتا ہے۔ لہذا ، نیٹ ورک کی حکمت عملی صارفین کو تجویز کرتی ہے کہ وہ صرف اس قسم کے سکے کا انتخاب کریں جو ممکنہ طور پر سوچتے ہیں۔

متغیر واپسی کی قیمت

واپسی کی قیمت یعنی ابتدائی قیمت، موجودہ قیمت اور ابتدائی قیمت کے درمیان فرق اور نیٹ ورک کا سائز فیصلہ کرتا ہے کہ کتنی پوزیشنیں رکھی جائیں۔ اگر واپسی کی قیمت موجودہ قیمت سے زیادہ مقرر کی جاتی ہے تو ، نیٹ ورک کی حکمت عملی زیادہ کرے گی ، اور اس کے نتیجے میں خالی ہوجائے گی۔ ڈیفالٹ واپسی کی قیمت اس وقت کی قیمت ہے جب حکمت عملی شروع ہوتی ہے۔ خطرے کو کم کرنے کے لئے ، صرف زیادہ سے زیادہ گرڈ کرنے کی سفارش کی جاتی ہے۔ ایک فطری خیال یہ ہے کہ واپسی کی قیمت کو تبدیل نہیں کیا جاسکتا ہے ، تاکہ قیمت میں اضافے کے باوجود ، زیادہ ذخائر برقرار رہیں ، خود بخود ایڈجسٹ نہ کریں۔ مثال کے طور پر ، بی ٹی سی کی سالانہ طرز عمل ، سال کے آغاز میں 15،000 سے زیادہ سے زیادہ سے زیادہ سال کے آخر میں 43،000 تک بڑھتی ہے۔ اگر سال کے آغاز سے ہی نیٹ ورک کی حکمت عملی چلتی ہے ، واپسی کی قیمت ڈیفالٹ 15،000 سے زیادہ خالی ہوتی ہے ، خاص طور پر منافع کے ساتھ ، اگر بی ٹی سی نے صرف ایک ہی راستہ اختیار کیا ہے۔ اگر قیمت میں اضافہ نہیں ہوتا ہے تو ، اسٹاک کی قیمت بہت تیزی سے نہیں بڑھتی ہے۔img

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

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


مزید

ای ای ایfmz براہ راست گرڈ کی حکمت عملی کو کیوں واپس نہیں کر سکتا؟