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

ایک مستقل توازن کی حکمت عملی جو ریچھ مارکیٹ کے نیچے آنے کے لئے موزوں ہے

مصنف:FMZ~Lydia, تخلیق: 2022-08-16 09:22:14, تازہ کاری: 2023-09-19 21:42:12

img

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

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

میں نے پہلے توازن کی حکمت عملی کے اصول اور گرڈ کی حکمت عملی کے ساتھ موازنہ پر ایک مضمون لکھا تھا، اور آپ اب بھی اس کا حوالہ دے سکتے ہیں:https://www.fmz.com/digest-topic/9294. توازن کی حکمت عملی ہمیشہ ایک مقررہ قدر تناسب یا قدر کے ساتھ پوزیشنوں کو برقرار رکھتی ہے ، جب یہ بڑھتی ہے تو کچھ فروخت کرتی ہے ، اور جب یہ گرتی ہے۔ یہ آسان ترتیبات کے ساتھ چل سکتی ہے۔ یہاں تک کہ اگر کرنسی کی قیمت بہت زیادہ بڑھتی ہے تو ، مختصر ہونے کا کوئی خطرہ نہیں ہوتا ہے۔ اسپاٹ بیلنس حکمت عملی کا مسئلہ یہ ہے کہ سرمایہ کا استعمال کم ہے ، اور فائدہ اٹھانے کا کوئی آسان طریقہ نہیں ہے۔ اور دائمی معاہدے اس مسئلے کو حل کرسکتے ہیں۔ اگر کل سرمایہ 1000 ہے تو ، 2000 کو مقررہ طور پر رکھا جاسکتا ہے ، جو اصل سرمایہ سے تجاوز کرتا ہے اور سرمایہ کے استعمال کو بہتر بناتا ہے۔ ایک اور پیرامیٹر ایڈجسٹمنٹ تناسب ہے ، جو پوزیشن میں کتنا ساکنگ یا ڈمپنگ کو کنٹرول کرتا ہے۔ اگر اسے 0.01 پر مقرر کیا جاتا ہے تو ، اس کا مطلب یہ ہے کہ پوزیشن کو 1٪ اضافے کے لئے ایک بار ڈمپ کیا جاتا ہے اور 1٪ کمی کے لئے ایک بار اسکیل کیا جاتا ہے۔

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

زیادہ سے زیادہ تجارتی جوڑوں کی بیک ٹسٹنگ کو آسان بنانے کے ل this ، یہ دستاویز بیک ٹسٹنگ کے مکمل عمل کو دکھائے گی ، اور صارفین موازنہ کے لئے مختلف پیرامیٹرز اور تجارتی جوڑوں کو ایڈجسٹ کرسکتے ہیں۔ (ورژن پیتھون 3 ہے ، اور کوٹیشن ڈاؤن لوڈ کرنے کے لئے ایک ایجنٹ کی ضرورت ہے۔ صارفین خود ہی انانکوڈا 3 ڈاؤن لوڈ کرسکتے ہیں یا اسے گوگل کے تعاون کے ذریعے چلا سکتے ہیں)

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
## Current trading pairs
Info = requests.get('https://fapi.binance.com/fapi/v1/exchangeInfo')
symbols = [s['symbol'] for s in Info.json()['symbols']]
symbols = list(set(filter(lambda x: x[-4:] == 'USDT', [s.split('_')[0] for s in symbols]))-
                 set(['1000SHIBUSDT','1000XECUSDT','BTCDOMUSDT','DEFIUSDT','BTCSTUSDT'])) + ['SHIBUSDT','XECUSDT']
print(symbols)
['FLMUSDT', 'ICPUSDT', 'CHZUSDT', 'APEUSDT', 'DARUSDT', 'TLMUSDT', 'ETHUSDT', 'STMXUSDT', 'ENJUSDT', 'LINKUSDT', 'OGNUSDT', 'RSRUSDT', 'QTUMUSDT', 'UNIUSDT', 'BNBUSDT', 'XLMUSDT', 'ATOMUSDT', 'LPTUSDT', 'UNFIUSDT', 'DASHUSDT', 'BTCUSDT', 'NEOUSDT', 'AAVEUSDT', 'DUSKUSDT', 'XRPUSDT', 'IOTXUSDT', 'CVCUSDT', 'SANDUSDT', 'XTZUSDT', 'IOTAUSDT', 'BELUSDT', 'MANAUSDT', 'IOSTUSDT', 'IMXUSDT', 'THETAUSDT', 'SCUSDT', 'DOGEUSDT', 'CELOUSDT', 'BNXUSDT', 'SNXUSDT', 'ZRXUSDT', 'HBARUSDT', 'DOTUSDT', 'ANKRUSDT', 'CELRUSDT', 'BAKEUSDT', 'GALUSDT', 'ICXUSDT', 'LRCUSDT', 'AVAXUSDT', 'C98USDT', 'MTLUSDT', 'FTTUSDT', 'MASKUSDT', 'RLCUSDT', 'MATICUSDT', 'COMPUSDT', 'BLZUSDT', 'CRVUSDT', 'ZECUSDT', 'RUNEUSDT', 'LITUSDT', 'ONEUSDT', 'ADAUSDT', 'NKNUSDT', 'LTCUSDT', 'ATAUSDT', 'GALAUSDT', 'BALUSDT', 'ROSEUSDT', 'EOSUSDT', 'YFIUSDT', 'SKLUSDT', 'BANDUSDT', 'ALGOUSDT', 'NEARUSDT', 'AXSUSDT', 'KSMUSDT', 'AUDIOUSDT', 'SRMUSDT', 'HNTUSDT', 'MKRUSDT', 'KLAYUSDT', 'FLOWUSDT', 'STORJUSDT', 'BCHUSDT', 'DYDXUSDT', 'ARUSDT', 'GMTUSDT', 'CHRUSDT', 'API3USDT', 'VETUSDT', 'KAVAUSDT', 'WAVESUSDT', 'EGLDUSDT', 'SFPUSDT', 'RENUSDT', 'SUSHIUSDT', 'SOLUSDT', 'RVNUSDT', 'ONTUSDT', 'BTSUSDT', 'ZILUSDT', 'GTCUSDT', 'ZENUSDT', 'ALICEUSDT', 'ETCUSDT', 'TRXUSDT', 'TOMOUSDT', 'FILUSDT', 'ARPAUSDT', 'CTKUSDT', 'BATUSDT', 'SXPUSDT', '1INCHUSDT', 'HOTUSDT', 'WOOUSDT', 'LINAUSDT', 'REEFUSDT', 'GRTUSDT', 'RAYUSDT', 'COTIUSDT', 'XMRUSDT', 'PEOPLEUSDT', 'OCEANUSDT', 'JASMYUSDT', 'TRBUSDT', 'ANTUSDT', 'XEMUSDT', 'DGBUSDT', 'ENSUSDT', 'OMGUSDT', 'ALPHAUSDT', 'FTMUSDT', 'DENTUSDT', 'KNCUSDT', 'CTSIUSDT', 'SHIBUSDT', 'XECUSDT']
#Get the function of the K-line of any period
def GetKlines(symbol='BTCUSDT',start='2020-8-10',end='2021-8-10',period='1h',base='fapi',v = 'v1'):
    Klines = []
    start_time = int(time.mktime(datetime.strptime(start, "%Y-%m-%d").timetuple()))*1000 + 8*60*60*1000
    end_time =  min(int(time.mktime(datetime.strptime(end, "%Y-%m-%d").timetuple()))*1000 + 8*60*60*1000,time.time()*1000)
    intervel_map = {'m':60*1000,'h':60*60*1000,'d':24*60*60*1000}
    while start_time < end_time:
        mid_time = start_time+1000*int(period[:-1])*intervel_map[period[-1]]
        url = 'https://'+base+'.binance.com/'+base+'/'+v+'/klines?symbol=%s&interval=%s&startTime=%s&endTime=%s&limit=1000'%(symbol,period,start_time,mid_time)
        #print(url)
        res = requests.get(url)
        res_list = res.json()
        if type(res_list) == list and len(res_list) > 0:
            start_time = res_list[-1][0]+int(period[:-1])*intervel_map[period[-1]]
            Klines += res_list
        if type(res_list) == list and len(res_list) == 0:
            start_time = start_time+1000*int(period[:-1])*intervel_map[period[-1]]
        if mid_time >= end_time:
            break

    df = pd.DataFrame(Klines,columns=['time','open','high','low','close','amount','end_time','volume','count','buy_amount','buy_volume','null']).astype('float')
    df.index = pd.to_datetime(df.time,unit='ms')
    return df

2021 سے لے کر آج تک تمام تجارتی جوڑوں کی اختتامی قیمتوں کو ڈاؤن لوڈ کرکے ، ہم مجموعی طور پر مارکیٹ انڈیکس میں ہونے والی تبدیلیوں کا مشاہدہ کرسکتے ہیں۔ 2021 سے 2022 تک بلاشبہ ایک بیل مارکیٹ ہے ، اور انڈیکس ایک بار 14 گنا بڑھ گیا۔ یہ کہا جاسکتا ہے کہ سونا ہر جگہ ہے ، اور بہت سی کرنسیوں میں سیکڑوں گنا اضافہ ہوا ہے۔ تاہم ، 2022 میں ، ریچھ کی مارکیٹ شروع ہوگئی ہے جو نصف سال تک جاری رہی ہے ، جس میں انڈیکس 80 فیصد گر گیا ہے ، اور درجنوں کرنسیاں 90 فیصد سے زیادہ پیچھے ہٹ گئیں۔ اس طرح کی پمپ اینڈ ڈمپ گرڈ کی حکمت عملیوں کے بہت بڑے خطرے کی عکاسی کرتی ہے۔ انڈیکس فی الحال 3 کے ارد گرد ہے ، جو 2021 کے آغاز کے مقابلے میں اب بھی 200 فیصد اضافہ ہے ، اور مارکیٹ کی ترقی کو مدنظر رکھتے ہوئے ، اس وقت یہ نسبتا bottom نیچے ہونا چاہئے۔

وہ کرنسیاں جن کی سب سے زیادہ قیمت سال کے آغاز سے 10 گنا سے زیادہ بڑھ گئی ہے:

مرکرکش: 10.294، CRVUSDT: 10.513, STORJUSDT: 10.674، SKLUSDT: 11.009، CVCUSDT: 11.026, SRMUSDT: 11.031, QTUMUSDT: 12.066, ALPUSDT: 12.103, ZENUSDT: 12.631, VETUSDT: 13.296, ROSEUSDT: 13.429, FTTUSDT: 13.705, IOSTT: 13.786, TICOTUSDT: 13.958, NEARUSDT: 14.855, HUDMUSDT: 14.845, HUDMUSDT: 15.311, 312, 37.411, 37.449, 37.439, 37.41, 37.41, 37.41, 38.91, 38.91, 38.92, 3

وہ کرنسیاں جن کی موجودہ واپسی زیادہ سے زیادہ 80 فیصد ہے:

۰۹۱۳۹۷۵۱۰۹۲۱۰۹۳۱۰۹۳۱۰۹۳۱۰۹۳۱۰۹۳۱۰۹۳۱۰۹۳۱۰۹۳۱۰۹۳۱۰۹۳۱۰۹۳۱۰۹۳۱۰۹۳۱۰۹۳۱۰۹۳۱۰۹۳۱۰۹۳۱۰۹۳۱۰۹۳۱۱۰۹۳۱۱۰۹۳۱۱۰۹۳۱۱۱۰۹۳۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱

#Download closing prices for all trading pairs
start_date = '2021-1-1'
end_date = '2022-05-30'
period = '1d'
df_all = pd.DataFrame(index=pd.date_range(start=start_date, end=end_date, freq=period),columns=symbols)
for i in range(len(symbols)):
    #print(symbols[i])
    symbol = symbols[i]
    df_s = GetKlines(symbol=symbol,start=start_date,end=end_date,period=period,base='api',v='v3')
    df_all[symbol] = df_s[~df_s.index.duplicated(keep='first')].close
#Index changes
df_norm = df_all/df_all.fillna(method='bfill').iloc[0] #Normalization
df_norm.mean(axis=1).plot(figsize=(15,6),grid=True);

png

#The highest increase over the beginning of the year
max_up = df_all.max()/df_all.fillna(method='bfill').iloc[0]
print(max_up.map(lambda x:round(x,3)).sort_values().to_dict())
{'JASMYUSDT': 1.0, 'ICPUSDT': 1.0, 'LINAUSDT': 1.0, 'WOOUSDT': 1.0, 'GALUSDT': 1.0, 'PEOPLEUSDT': 1.0, 'XECUSDT': 1.026, 'ENSUSDT': 1.032, 'TLMUSDT': 1.039, 'IMXUSDT': 1.099, 'FLOWUSDT': 1.155, 'ATAUSDT': 1.216, 'DARUSDT': 1.261, 'ALICEUSDT': 1.312, 'BNXUSDT': 1.522, 'API3USDT': 1.732, 'GTCUSDT': 1.833, 'KLAYUSDT': 1.891, 'BAKEUSDT': 1.892, 'DYDXUSDT': 2.062, 'SHIBUSDT': 2.281, 'BTCUSDT': 2.302, 'MASKUSDT': 2.396, 'SFPUSDT': 2.74, 'LPTUSDT': 2.75, 'APEUSDT': 2.783, 'ARUSDT': 2.928, 'CELOUSDT': 2.951, 'ZILUSDT': 2.999, 'LTCUSDT': 3.072, 'SNXUSDT': 3.266, 'XEMUSDT': 3.555, 'XMRUSDT': 3.564, 'YFIUSDT': 3.794, 'BANDUSDT': 3.812, 'RAYUSDT': 3.924, 'REEFUSDT': 4.184, 'ANTUSDT': 4.205, 'XTZUSDT': 4.339, 'CTKUSDT': 4.352, 'LITUSDT': 4.38, 'RSRUSDT': 4.407, 'LINKUSDT': 4.412, 'BCHUSDT': 4.527, 'DASHUSDT': 5.037, 'BALUSDT': 5.172, 'OCEANUSDT': 5.277, 'EOSUSDT': 5.503, 'RENUSDT': 5.538, 'XLMUSDT': 5.563, 'TOMOUSDT': 5.567, 'ZECUSDT': 5.654, 'COMPUSDT': 5.87, 'DGBUSDT': 5.948, 'ALGOUSDT': 5.981, 'ONTUSDT': 5.997, 'BELUSDT': 6.101, 'TRXUSDT': 6.116, 'ZRXUSDT': 6.135, 'GRTUSDT': 6.45, '1INCHUSDT': 6.479, 'DOTUSDT': 6.502, 'ETHUSDT': 6.596, 'KAVAUSDT': 6.687, 'ICXUSDT': 6.74, 'SUSHIUSDT': 6.848, 'AAVEUSDT': 6.931, 'BTSUSDT': 6.961, 'KNCUSDT': 6.966, 'C98USDT': 7.091, 'THETAUSDT': 7.222, 'ATOMUSDT': 7.553, 'OMGUSDT': 7.556, 'SXPUSDT': 7.681, 'UNFIUSDT': 7.696, 'XRPUSDT': 7.726, 'TRBUSDT': 8.241, 'BLZUSDT': 8.434, 'NEOUSDT': 8.491, 'FLMUSDT': 8.506, 'KSMUSDT': 8.571, 'FILUSDT': 8.591, 'IOTAUSDT': 8.616, 'BATUSDT': 8.647, 'ARPAUSDT': 9.055, 'UNIUSDT': 9.104, 'WAVESUSDT': 9.106, 'MKRUSDT': 10.294, 'CRVUSDT': 10.513, 'STORJUSDT': 10.674, 'SKLUSDT': 11.009, 'CVCUSDT': 11.026, 'SRMUSDT': 11.031, 'QTUMUSDT': 12.066, 'ALPHAUSDT': 12.103, 'ZENUSDT': 12.631, 'VETUSDT': 13.296, 'ROSEUSDT': 13.429, 'FTTUSDT': 13.705, 'IOSTUSDT': 13.786, 'COTIUSDT': 13.958, 'NEARUSDT': 14.855, 'HBARUSDT': 15.312, 'RLCUSDT': 15.432, 'SCUSDT': 15.6, 'GALAUSDT': 15.722, 'RUNEUSDT': 15.795, 'ADAUSDT': 16.94, 'MTLUSDT': 17.18, 'BNBUSDT': 17.899, 'RVNUSDT': 18.169, 'EGLDUSDT': 18.879, 'LRCUSDT': 19.499, 'ANKRUSDT': 21.398, 'ETCUSDT': 23.51, 'DUSKUSDT': 23.55, 'AUDIOUSDT': 25.306, 'OGNUSDT': 25.524, 'GMTUSDT': 28.83, 'ENJUSDT': 33.073, 'STMXUSDT': 33.18, 'IOTXUSDT': 35.866, 'AVAXUSDT': 36.946, 'CHZUSDT': 37.128, 'CELRUSDT': 37.273, 'HNTUSDT': 38.779, 'CTSIUSDT': 41.108, 'HOTUSDT': 46.466, 'CHRUSDT': 61.091, 'MANAUSDT': 62.143, 'NKNUSDT': 70.636, 'ONEUSDT': 84.132, 'DENTUSDT': 99.973, 'DOGEUSDT': 121.447, 'SOLUSDT': 140.296, 'MATICUSDT': 161.846, 'FTMUSDT': 192.507, 'SANDUSDT': 203.219, 'AXSUSDT': 270.41}
#Current maximum backtest
draw_down = df_all.iloc[-1]/df_all.max()
print(draw_down.map(lambda x:round(x,3)).sort_values().to_dict())
{'ICPUSDT': 0.022, 'FILUSDT': 0.043, 'BAKEUSDT': 0.046, 'TLMUSDT': 0.05, 'LITUSDT': 0.053, 'LINAUSDT': 0.054, 'JASMYUSDT': 0.056, 'ALPHAUSDT': 0.062, 'RAYUSDT': 0.062, 'GRTUSDT': 0.067, 'DENTUSDT': 0.068, 'RSRUSDT': 0.068, 'XEMUSDT': 0.068, 'UNFIUSDT': 0.072, 'DYDXUSDT': 0.074, 'SUSHIUSDT': 0.074, 'OGNUSDT': 0.074, 'COMPUSDT': 0.074, 'NKNUSDT': 0.078, 'SKLUSDT': 0.08, 'DGBUSDT': 0.081, 'RLCUSDT': 0.085, 'REEFUSDT': 0.086, 'BANDUSDT': 0.086, 'HOTUSDT': 0.092, 'SRMUSDT': 0.092, 'RENUSDT': 0.092, 'BTSUSDT': 0.093, 'THETAUSDT': 0.094, 'FLMUSDT': 0.094, 'EOSUSDT': 0.095, 'TRBUSDT': 0.095, 'SXPUSDT': 0.095, 'ATAUSDT': 0.096, 'NEOUSDT': 0.096, 'FLOWUSDT': 0.097, 'YFIUSDT': 0.101, 'BALUSDT': 0.106, 'MASKUSDT': 0.106, 'ONTUSDT': 0.108, 'CELRUSDT': 0.108, 'AUDIOUSDT': 0.108, 'SCUSDT': 0.11, 'GALAUSDT': 0.113, 'GTCUSDT': 0.117, 'CTSIUSDT': 0.117, 'STMXUSDT': 0.118, 'DARUSDT': 0.118, 'ALICEUSDT': 0.119, 'SNXUSDT': 0.124, 'FTMUSDT': 0.126, 'BCHUSDT': 0.127, 'SFPUSDT': 0.127, 'ROSEUSDT': 0.128, 'DOGEUSDT': 0.128, 'RVNUSDT': 0.129, 'OCEANUSDT': 0.129, 'VETUSDT': 0.13, 'KSMUSDT': 0.131, 'ICXUSDT': 0.131, 'UNIUSDT': 0.131, 'ONEUSDT': 0.131, '1INCHUSDT': 0.134, 'IOTAUSDT': 0.139, 'C98USDT': 0.139, 'WAVESUSDT': 0.14, 'DUSKUSDT': 0.141, 'LINKUSDT': 0.143, 'DASHUSDT': 0.143, 'OMGUSDT': 0.143, 'PEOPLEUSDT': 0.143, 'AXSUSDT': 0.15, 'ENJUSDT': 0.15, 'QTUMUSDT': 0.152, 'SHIBUSDT': 0.154, 'ZENUSDT': 0.154, 'BLZUSDT': 0.154, 'ANTUSDT': 0.155, 'XECUSDT': 0.155, 'CHZUSDT': 0.158, 'RUNEUSDT': 0.163, 'ENSUSDT': 0.165, 'LRCUSDT': 0.167, 'CHRUSDT': 0.168, 'IOTXUSDT': 0.174, 'TOMOUSDT': 0.176, 'ALGOUSDT': 0.177, 'EGLDUSDT': 0.177, 'ARUSDT': 0.178, 'LTCUSDT': 0.178, 'HNTUSDT': 0.18, 'LPTUSDT': 0.181, 'SOLUSDT': 0.183, 'ARPAUSDT': 0.184, 'BELUSDT': 0.184, 'ETCUSDT': 0.186, 'ZRXUSDT': 0.187, 'AAVEUSDT': 0.187, 'CVCUSDT': 0.188, 'STORJUSDT': 0.189, 'COTIUSDT': 0.19, 'CELOUSDT': 0.191, 'SANDUSDT': 0.191, 'ADAUSDT': 0.192, 'HBARUSDT': 0.194, 'DOTUSDT': 0.195, 'XLMUSDT': 0.195, 'AVAXUSDT': 0.206, 'ANKRUSDT': 0.207, 'MTLUSDT': 0.208, 'MANAUSDT': 0.209, 'CRVUSDT': 0.213, 'API3USDT': 0.221, 'IOSTUSDT': 0.227, 'XRPUSDT': 0.228, 'BATUSDT': 0.228, 'MKRUSDT': 0.229, 'MATICUSDT': 0.229, 'CTKUSDT': 0.233, 'ZILUSDT': 0.233, 'WOOUSDT': 0.234, 'ATOMUSDT': 0.237, 'KLAYUSDT': 0.239, 'XTZUSDT': 0.245, 'IMXUSDT': 0.278, 'NEARUSDT': 0.285, 'GALUSDT': 0.299, 'APEUSDT': 0.305, 'ZECUSDT': 0.309, 'KAVAUSDT': 0.31, 'GMTUSDT': 0.327, 'FTTUSDT': 0.366, 'KNCUSDT': 0.401, 'ETHUSDT': 0.416, 'XMRUSDT': 0.422, 'BTCUSDT': 0.47, 'BNBUSDT': 0.476, 'TRXUSDT': 0.507, 'BNXUSDT': 0.64}

سب سے پہلے ، ہم سب سے آسان کوڈ کا استعمال کرتے ہوئے نیچے کی طرف گرنے کی صورتحال کا نمونہ بناتے ہیں ، اور مختلف پوزیشن کی قیمتوں کی معاوضہ قیمت دیکھتے ہیں۔ چونکہ حکمت عملی ہمیشہ ایک لمبی پوزیشن رکھتی ہے ، لہذا اوپر جانے کا کوئی خطرہ نہیں ہے۔ ابتدائی سرمایہ 1000 ہے ، کرنسی کی قیمت 1 ہے ، اور ایڈجسٹمنٹ کا تناسب 0.01 ہے۔ نتائج مندرجہ ذیل ہیں۔ یہ دیکھا جاسکتا ہے کہ لمبی معاوضہ کا خطرہ کم نہیں ہے۔ 1.5 گنا فائدہ اٹھانے کے ساتھ ، یہ 50٪ کمی کا مقابلہ کرسکتا ہے۔ موجودہ نسبتا bottom نیچے کی صورتحال کو دیکھتے ہوئے ، یہ ایک قابل قبول خطرہ ہے۔

پوزیشنوں کی قدر لانگ پوزیشن کی قیمت
300 0.035
500 0.133
800 0.285
1000 0.362
1500 0.51
2000 0.599
3000 0.711
5000 0.81
10000 0.904
for Hold_value in [300,500,800,1000,1500,2000,3000,5000,10000]:
    amount = Hold_value/1
    hold_price = 1
    margin = 1000
    Pct = 0.01
    i = 0
    while margin > 0:
        i += 1
        if i>500:
            break
        buy_price = (1-Pct)*Hold_value/amount
        buy_amount = Hold_value*Pct/buy_price
        hold_price = (amount * hold_price + buy_amount * buy_price) / (buy_amount + amount)
        amount += buy_amount
        margin = 1000 + amount * (buy_price - hold_price)
    print(Hold_value, round(buy_price,3))
300 0.035
500 0.133
800 0.285
1000 0.362
1500 0.51
2000 0.599
3000 0.711
5000 0.81
10000 0.904
#Still using the original backtesting engine
class Exchange:
    
    def __init__(self, trade_symbols, fee=0.0004, initial_balance=10000):
        self.initial_balance = initial_balance #Initial assets
        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 #Deduct the handling fees
        self.account['USDT']['fee'] += price*amount*self.fee
        self.account[symbol]['fee'] += price*amount*self.fee

        if cover_amount > 0: #Close the position first
            self.account['USDT']['realised_profit'] += -direction*(price - self.account[symbol]['hold_price'])*cover_amount  #Profits
            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): #Update of assets
        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)

سب سے پہلے ، ہم TRX توازن کی حکمت عملی کی کارکردگی کا بیک ٹیسٹ کرتے ہیں۔ ریچھ کی مارکیٹ کے اس دور میں TRX کا زیادہ سے زیادہ ریٹریکشن نسبتا small چھوٹا ہے ، لہذا اس کی ایک خاص خصوصیت ہے۔ اعداد و شمار کو 2021 سے موجودہ وقت تک 5 منٹ کی لائن سے منتخب کیا گیا ہے ، جس میں ابتدائی سرمایہ 1000 ہے ، ایڈجسٹمنٹ کا تناسب 0.01 ہے ، پوزیشن ویلیو 2000 ہے ، اور ہینڈلنگ فیس 0.0002 ہے۔

TRX کی ابتدائی قیمت 0.02676U تھی ، اور اس عرصے کے دوران سب سے زیادہ قیمت 0.18U تک پہنچ گئی۔ یہ فی الحال 0.08U کے ارد گرد ہے ، اور اتار چڑھاؤ بہت پرتشدد ہے۔ اگر آپ شروع میں لانگ شارٹ گرڈ حکمت عملی چلاتے ہیں تو ، مختصر فروخت کے نتیجے سے بچنا مشکل ہے۔ توازن کی حکمت عملی کم مسئلہ ہے۔

بیک ٹیسٹ کی حتمی واپسی 4524U ہے ، جو TRX کی واپسی 0.18 کے بہت قریب ہے۔ لیوریج شروع سے 2 گنا سے کم ہے اور آخر میں 0.4 سے کم ہے ، اور معاوضے کا امکان بھی کم اور کم ہوتا جارہا ہے ، جس کے دوران پوزیشن کی قیمت میں اضافے کا موقع مل سکتا ہے۔ لیکن 2000U سے نیچے ہمیشہ ایک ہی آمدنی ہوتی ہے۔ یہ توازن کی حکمت عملی کا ایک نقصان بھی ہے۔

symbol = 'TRXUSDT'
df_trx = GetKlines(symbol=symbol,start='2021-1-1',end='2022-5-30',period='5m')
df_trx.close.plot(figsize=(15,6),grid=True);

png

#TRX balance strategy backtest
hold_value = 2000
pct = 0.01
e = Exchange([symbol], fee=0.0002, initial_balance=1000)
init_price =  df_trx.iloc[0].open
res_list = [] #For storing intermediate results
e.Buy(symbol,init_price,hold_value/init_price)
e.Update({symbol:init_price})
for row in df_trx.itertuples():
    buy_price = (1-pct)*hold_value/e.account[symbol]['amount']
    sell_price = (1+pct)*hold_value/e.account[symbol]['amount']
    
    while row.low < buy_price:
        e.Buy(symbol,buy_price,pct*hold_value/buy_price)
        e.Update({symbol:row.close})
        buy_price = (1-pct)*hold_value/e.account[symbol]['amount']
        sell_price = (1+pct)*hold_value/e.account[symbol]['amount']
    while row.high > sell_price:
        e.Sell(symbol,sell_price,pct*hold_value/sell_price)
        e.Update({symbol:row.close})
        buy_price = (1-pct)*hold_value/e.account[symbol]['amount']
        sell_price = (1+pct)*hold_value/e.account[symbol]['amount']
    if int(row.time)%(60*60*1000) == 0:
        e.Update({symbol:row.close})
        res_list.append([row.time, row.close, e.account[symbol]['amount'],e.account[symbol]['amount']*row.close, e.account['USDT']['total']-e.initial_balance])
res_trx = pd.DataFrame(data=res_list, columns=['time','price','amount','value','profit'])
res_trx.index = pd.to_datetime(res_trx.time,unit='ms')
print(pct,e.account['USDT']['realised_profit']+e.account['USDT']['unrealised_profit'] ,round(e.account['USDT']['fee'],0))
0.01 4524.226998288555 91.0
#Profit
res_trx.profit.plot(figsize=(15,6),grid=True);

png

#Actual leverage of occupancy
(res_trx.value/(res_trx.profit+1000)).plot(figsize=(15,6),grid=True);

png

آئیے دوبارہ WAVES کا بیک ٹیسٹ کریں۔ یہ کرنسی کافی خاص ہے۔ یہ شروع میں 6U سے 60U تک بڑھ گئی ، اور آخر کار موجودہ 8U پر گر گئی۔ حتمی منافع 4945 ہے۔ کرنسی کو برقرار رکھنے کے منافع سے کہیں زیادہ۔

symbol = 'WAVESUSDT'
df_waves = GetKlines(symbol=symbol,start='2021-1-1',end='2022-5-30',period='5m')
df_waves.close.plot(figsize=(15,6),grid=True);

png

#TWAVES balanced strategy backtest
hold_value = 2000
pct = 0.01
e = Exchange([symbol], fee=0.0002, initial_balance=1000)
init_price =  df_waves.iloc[0].open
res_list = [] #For storing intermediate results
e.Buy(symbol,init_price,hold_value/init_price)
e.Update({symbol:init_price})
for row in df_waves.itertuples():
    buy_price = (1-pct)*hold_value/e.account[symbol]['amount']
    sell_price = (1+pct)*hold_value/e.account[symbol]['amount']
    
    while row.low < buy_price:
        e.Buy(symbol,buy_price,pct*hold_value/buy_price)
        e.Update({symbol:row.close})
        buy_price = (1-pct)*hold_value/e.account[symbol]['amount']
        sell_price = (1+pct)*hold_value/e.account[symbol]['amount']
    while row.high > sell_price:
        e.Sell(symbol,sell_price,pct*hold_value/sell_price)
        e.Update({symbol:row.close})
        buy_price = (1-pct)*hold_value/e.account[symbol]['amount']
        sell_price = (1+pct)*hold_value/e.account[symbol]['amount']
    if int(row.time)%(60*60*1000) == 0:
        e.Update({symbol:row.close})
        res_list.append([row.time, row.close, e.account[symbol]['amount'],e.account[symbol]['amount']*row.close, e.account['USDT']['total']-e.initial_balance])
res_waves = pd.DataFrame(data=res_list, columns=['time','price','amount','value','profit'])
res_waves.index = pd.to_datetime(res_waves.time,unit='ms')
print(pct,e.account['USDT']['realised_profit']+e.account['USDT']['unrealised_profit'] ,round(e.account['USDT']['fee'],0))
0.01 4945.149323437233 178.0
df_waves.profit.plot(figsize=(15,6),grid=True);

png

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

#Grid strategy
pct = 0.01
value = 10*pct/0.01
e = Exchange([symbol], fee=0.0002, initial_balance=1000)
init_price =  df_waves.iloc[0].open
res_list = [] #For storing intermediate results
for row in df_waves.itertuples():
    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'])

    while row.low < buy_price:
        e.Buy(symbol,buy_price,value/buy_price)
        e.Update({symbol:row.close})
        buy_price = (value / pct - value) / (value / (pct * init_price) + e.account[symbol]['amount']) #The buy order price, since it is a pending order transaction, is also the final matching price=
    while row.high > sell_price:
        e.Sell(symbol,sell_price,value/sell_price)
        e.Update({symbol:row.close})
        sell_price = (value / pct + value) / (value / (pct *init_price) + e.account[symbol]['amount'])
    if int(row.time)%(60*60*1000) == 0:
        e.Update({symbol:row.close})
        res_list.append([row.time, row.close, e.account[symbol]['amount'],e.account[symbol]['amount']*row.close, e.account['USDT']['total']-e.initial_balance])
res_waves_net = pd.DataFrame(data=res_list, columns=['time','price','amount','value','profit'])
res_waves_net.index = pd.to_datetime(res_waves_net.time,unit='ms')
print(pct,e.account['USDT']['realised_profit']+e.account['USDT']['unrealised_profit'] ,round(e.account['USDT']['fee'],0))
0.01 1678.0516101975015 70.0
res_waves_net.profit.plot(figsize=(15,6),grid=True);

png

#Grid strategy
pct = 0.01
value = 10*pct/0.01
e = Exchange([symbol], fee=0.0002, initial_balance=1000)
init_price =  df_trx.iloc[0].open
res_list = [] #For storing intermediate results
for row in df_trx.itertuples():
    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'])

    while row.low < buy_price:
        e.Buy(symbol,buy_price,value/buy_price)
        e.Update({symbol:row.close})
        buy_price = (value / pct - value) / (value / (pct * init_price) + e.account[symbol]['amount']) 
    while row.high > sell_price:
        e.Sell(symbol,sell_price,value/sell_price)
        e.Update({symbol:row.close})
        sell_price = (value / pct + value) / (value / (pct *init_price) + e.account[symbol]['amount'])
    if int(row.time)%(60*60*1000) == 0:
        e.Update({symbol:row.close})
        res_list.append([row.time, row.close, e.account[symbol]['amount'],e.account[symbol]['amount']*row.close, e.account['USDT']['total']-e.initial_balance])
res_trx_net = pd.DataFrame(data=res_list, columns=['time','price','amount','value','profit'])
res_trx_net.index = pd.to_datetime(res_trx_net.time,unit='ms')
print(pct,e.account['USDT']['realised_profit']+e.account['USDT']['unrealised_profit'] ,round(e.account['USDT']['fee'],0))
0.01 -161.06952570521656 37.0
res_trx_net.profit.plot(figsize=(15,6),grid=True);

png

خلاصہ

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

بائننس ہزاروں لیگ لڑائی ابدی توازن کی حکمت عملی تک مفت رسائی فراہم کرے گی، اور ہر ایک کو اس کا تجربہ کرنے کا خیر مقدم کیا جاتا ہے.


متعلقہ

مزید