2
پر توجہ دیں
20
پیروکار

ڈیٹا ڈیٹا گرڈ کی حکمت عملی (II) کی حمایت کرتا ہے: گرڈ کی تعداد اور واپسی کی شرح کے درمیان تعلق

میں تخلیق کیا: 2025-02-13 16:22:36, تازہ کاری: 2025-02-17 17:38:52
comments   0
hits   351

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

گرڈز کی تعداد کو ترتیب دینے کے چیلنجز

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

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

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

گرڈ کی تعداد کی بنیاد پر مقرر کیا جاتا ہے

1. گرڈ وقفہ کاری اور فنڈ مختص کرنا

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

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

2. اکاؤنٹ فنڈز اور رسک مینجمنٹ

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

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

گرڈ ٹریڈنگ حکمت عملی کا نفاذ

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

DQL کے ذریعے، ہم ایک سے زیادہ ایکسچینجز (جیسے Binance) سے تاریخی K-line ڈیٹا آسانی سے حاصل کر سکتے ہیں اور اس ڈیٹا کی بنیاد پر گرڈ ٹریڈنگ کی حکمت عملیوں کو ایڈجسٹ کر سکتے ہیں۔ اس طرح، بہترین گرڈ ٹریڈنگ حکمت عملی کو مارکیٹ کے مختلف ماحول اور مخصوص کرنسیوں کے اتار چڑھاؤ کے مطابق درست طریقے سے جانچا جا سکتا ہے۔

1. ڈیٹا حاصل کریں۔

اس سے پہلے کہ ہم اپنی گرڈ ٹریڈنگ حکمت عملی کی بیک ٹیسٹنگ شروع کریں، ہمیں پہلے ہدف کرنسی کے لیے مارکیٹ ڈیٹا حاصل کرنے کی ضرورت ہے۔ ڈیٹا بیس سے مخصوص کرنسی کے K-line ڈیٹا سے استفسار کرنے کا کوڈ درج ذیل ہے:

# 获取目标币种的K线数据
data = query("select * from klines.spot_1d where Exchange = 'Binance' and Symbol = '???_usdt' order by Time")

وضاحت:

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

2. گرڈ حکمت عملی کی تقریب

گرڈ ٹریڈنگ حکمت عملی کا بنیادی مقصد پیش سیٹ گرڈ مقدار اور قیمت کی حد کا استعمال کرتے ہوئے تجارت کرنا ہے۔ مخصوص اقدامات مندرجہ ذیل ہیں:

  1. گرڈ وقفہ (گیپ) اور لین دین کی رقم فی گرڈ (تصویراتی) کا حساب لگائیں

    • گرڈ کی جگہ (گیپ): مارکیٹ میں سب سے زیادہ اور سب سے کم قیمتوں کے درمیان تناسب کی بنیاد پر شمار کیا جاتا ہے۔ فارمولہ درج ذیل ہے: [ \text{gap} = \frac{\log(\text{max_p} / \text{min_p})}{\text{grid_num}} ] میںmax_pسب سے زیادہ قیمت کے لیے،min_pسب سے کم قیمت کے لیے،grid_numگرڈز کی تعداد ہے۔

    • لین دین کی رقم فی گرڈ (خیالی):ہر گرڈ کی لین دین کی رقم کا حساب کل فنڈز اور گرڈز کی تعداد سے لگایا جاتا ہے۔ فارمولا ہے: [ \text{notional} = \frac{\text{balance}}{\text{grid_num}} ]

  2. گرڈ شروع اور اختتامی قیمتیں۔

    • ہر گرڈ کی شروعات اور اختتامی قیمتوں کا حساب گرڈ وقفہ کی بنیاد پر کیا جاتا ہے۔ مثال کے طور پر، پہلے گرڈ کی ابتدائی قیمت سب سے کم قیمت ہے، اور دوسری گرڈ کی ابتدائی قیمت سب سے کم قیمت ہے جس سے ضربexp(gap)، اور اسی طرح.
  3. ٹریڈنگ آپریشنز

    • کھلنے کے حالات: جب قیمت کسی خاص گرڈ کی ابتدائی قیمت تک گر جاتی ہے، تو خرید کا عمل انجام دیا جاتا ہے۔
    • مساوی شرطیں: جب قیمت کسی خاص گرڈ کی آخری قیمت تک بڑھ جاتی ہے، تو فروخت کا عمل انجام دیا جاتا ہے۔
  4. لین دین کی فیس: یہ فرض کرتے ہوئے کہ ہر ٹرانزیکشن کے لیے ہینڈلنگ فیس 0.0001 ہے، ہمیں ہر ٹرانزیکشن کے لیے ہینڈلنگ فیس کا حساب لگانا اور جمع کرنا ہوگا۔

def grid_trading_strategy(
    raw,
    grid_num,              # 网格数量
    min_p,                # 最低价格
    max_p,                # 最高价格
):
    """
    执行网格交易策略的函数
    """
    # 初始化变量
    balance = 1000                # 初始资金
    raw = raw[['Time', 'Open', 'High', 'Low', 'Close']]  # 只选择相关列

    # 网格交易策略的设置
    gap = math.log(max_p / min_p) / grid_num   # 计算网格间隔
    notional = balance / grid_num            # 每个网格的交易额

    # 初始化网格
    net = []
    for i in range(grid_num):
        net.append({
            'start_p': min_p * math.exp(i * gap),   # 每个网格的起始价格
            'end_p': min_p * math.exp((i + 1) * gap),  # 每个网格的结束价格
            'amt': notional / (min_p * math.exp(i * gap)),  # 每个网格的购买量
            'status': 'idle'                     # 初始状态为闲置
        })

    # 记录状态
    state = {
        'stock': 0,           # 当前持仓
        'fee': 0,             # 交易费用
        'longTradeVol': 0,    # 长期交易量
        'shortTradeVol': 0,   # 短期交易量
        'profitTbl': [],      # 存储每个时刻的利润
        'feeTbl': [],         # 存储每个时刻的费用
        'netCnt': 0,          # 记录净交易次数
        'idx': 0              # 当前数据的索引
    }

    # 检查开盘交易
    def check_open_orders(state, net):
        for i in range(len(net)):
            if net[i]['status'] == 'idle' and raw['Low'][state['idx']] <= net[i]['start_p'] and raw['Open'][state['idx']] > net[i]['start_p']:
                net[i]['status'] = 'taken'  # 网格被占用
                tradeVol = net[i]['amt'] * net[i]['start_p']
                state['stock'] += net[i]['amt']
                state['longTradeVol'] += tradeVol
                state['fee'] += tradeVol * 0.0001  # 假设手续费为0.0001

    # 检查平仓交易
    def check_close_orders(state, net):
        for i in range(len(net)):
            if net[i]['status'] == 'taken' and raw['High'][state['idx']] >= net[i]['end_p'] and raw['Open'][state['idx']] < net[i]['end_p']:
                net[i]['status'] = 'idle'  # 网格状态恢复为空闲
                tradeVol = net[i]['amt'] * net[i]['end_p']
                state['stock'] -= net[i]['amt']
                state['shortTradeVol'] += tradeVol
                state['fee'] += tradeVol * 0.0001  # 假设手续费为0.0001
                state['netCnt'] += 1

    # 日志记录利润和费用
    def log(state):
        addVol = state['stock'] * raw['Close'][state['idx']]  # 当前仓位的总价值
        pl = state['shortTradeVol'] - state['longTradeVol'] + addVol  # 计算利润
        state['profitTbl'].append(pl)
        state['feeTbl'].append(state['fee'])

    # 主交易循环
    for i in range(len(raw)):
        state['idx'] = i
        if raw['Close'][state['idx']] >= raw['Open'][state['idx']]:
            check_open_orders(state, net)
            check_close_orders(state, net)
        else:
            check_close_orders(state, net)
            check_open_orders(state, net)
        log(state)

    # 将利润和费用数据整理为DataFrame
    pl = DataFrame({'pl' : state['profitTbl'],  'fee' : state['feeTbl']})
    pl['time'] = raw['Time']
    pl['pl-net'] = pl['pl'] - pl['fee']
    
    return pl

3. بیک ٹیسٹ چلائیں۔

ٹارگٹ کرنسی کے لیے، ہم ‘oax_usdt’ کرنسی کا انتخاب کرتے ہیں پچھلے مضمون میں کوڈ کو چیک کرنے کے بعد، یہ کرنسی ایک اہم یکطرفہ رجحان کو ظاہر کیے بغیر ایک اعلی طول و عرض کو برقرار رکھتی ہے، ہم مختلف گرڈ نمبرز استعمال کرنے کی کوشش کر سکتے ہیں (مثال کے طور پر: 5، 10، 15، وغیرہ) کو مختلف grid نمبروں کو دیکھنے کے لیے۔ مثال کے طور پر، ہر گرڈ نمبر کے لیے خالص منافع (pl-net) کا حساب لگا کر، ہم اندازہ کر سکتے ہیں کہ موجودہ مارکیٹ کے ماحول میں کون سے گرڈ نمبر بہترین منافع لا سکتے ہیں۔ بیک ٹیسٹ چلانے کا کوڈ یہ ہے:

grid_nums = [5*i+5 for i in range(5)]
out = []
for g in grid_nums:
    pl = grid_trading_strategy(
        data,
        grid_num=g,
        min_p=min(data['Close']),
        max_p=max(data['Close'])
    )
    out.append({
        'num': g,
        'pl-net': pl['pl-net'][-1],
        'min_pl': min(pl['pl-net']),
        'max_pl': max(pl['pl-net'])
    })

return out

4. تجرباتی نتائج کا تجزیہ

مختلف گرڈ نمبر کنفیگریشنز کے ساتھ بیک ٹیسٹنگ کے بعد، ہم نے درج ذیل نتائج حاصل کیے:

تجزیہ:

  • جیسے جیسے گرڈز کی تعداد بڑھتی ہے، خالص فائدہ پہلے بڑھنے اور پھر کم ہونے کا رجحان ظاہر کرتا ہے۔ جب گرڈز کی تعداد 15 ہوتی ہے تو خالص منافع زیادہ سے زیادہ قیمت تک پہنچ جاتا ہے۔ جیسے جیسے گرڈز کی تعداد میں اضافہ ہوتا رہا، خالص منافع کم ہوتا گیا۔
  • کم از کم اور زیادہ سے زیادہ منافع کے اتار چڑھاؤ خالص واپسی کے رجحان سے ملتے جلتے ہیں، جو اس بات کی نشاندہی کرتے ہیں کہ گرڈ نمبر کا انتخاب واپسی پر اہم اثر ڈالتا ہے۔

خلاصہ کریں۔

گرڈ ٹریڈنگ کی حکمت عملی میں گرڈ کی تعداد کو صحیح طریقے سے ترتیب دینا ایک اہم کام ہے۔ گرڈز کی تعداد کو بہتر بنا کر، گرڈ ٹریڈنگ کی حکمت عملیوں کی منافع کی کارکردگی کو مؤثر طریقے سے بہتر بنایا جا سکتا ہے اور خطرات کو بہتر طریقے سے کنٹرول کیا جا سکتا ہے۔ یہ مضمون گرڈ نمبر کی ترتیبات کا تجزیہ کرتا ہے اور حساب کے مخصوص طریقے اور نمونے کے کوڈ فراہم کرتا ہے، اس امید میں کہ ہر کسی کو گرڈ ٹریڈنگ کی حکمت عملیوں کو بہتر بنانے اور حکمت عملیوں کے استحکام اور منافع کو بہتر بنانے میں مدد ملے گی۔

نوٹ: اس مضمون میں گرڈ بیک ٹیسٹنگ کوڈ Zhihu Da Shen سے اخذ کیا گیا ہے۔ Halcyon، براہ کرم سورس کوڈ کی وضاحت کے لیے مضمون کا حوالہ دیں۔الگورتھمک ٹریڈنگ پریکٹس ڈائری (XVIII) - گرڈ ٹریڈنگ میں تفصیلات: گرڈ نمبر اور طویل مدتی واپسی کے درمیان تعلق