ایک ایسی حکمت عملی کا تصور کریں جو کرپٹو کرنسی مارکیٹ میں جنگلی اتار چڑھاو کے درمیان مستحکم رہ سکے، اور بیل یا ریچھ کی منڈیوں سے قطع نظر آپ کو مستقل مثبت منافع دے سکے۔ ایک فنتاسی کی طرح آواز؟ اصل میں، یہ نہیں ہے. کرنسی کو ایک گنا فیس کے ساتھ مختصر کرنے کی ثالثی حکمت عملی بغیر کچھ کیے پیسہ کمانے کا ایک ایسا جادوئی ٹول ہے۔
سکے پر مبنی معاہدوں کی منفرد خصوصیات اور فنڈنگ کی شرح کے طریقہ کار کو ہوشیاری سے استعمال کرتے ہوئے، یہ حکمت عملی نہ صرف بیل مارکیٹ میں مستحکم منافع حاصل کر سکتی ہے، بلکہ ریچھ کی منڈی میں خطرات سے مؤثر طریقے سے بچ سکتی ہے اور مارکیٹ کے چکروں میں مستحکم منافع حاصل کر سکتی ہے۔ سکے پر مبنی معاہدوں کی “نقد سے محفوظ” نوعیت اس بات کو یقینی بناتی ہے کہ حکمت عملی کی کل قیمت مستحکم رہے چاہے مارکیٹ کی قیمتوں میں نمایاں طور پر اتار چڑھاؤ آئے۔ فنڈنگ کی شرح، دائمی معاہدوں کے بنیادی طریقہ کار کے طور پر، حکمت عملی کے لیے آمدنی کا ایک اضافی ذریعہ فراہم کرتی ہے۔ یہ مضمون بنیادی منطق، عمل درآمد کے عمل، سکے پر مبنی مختصر فروخت کی حکمت عملی کے فوائد اور نقصانات کا گہرائی سے تجزیہ کرے گا تاکہ سرمایہ کاروں کو یہ سمجھنے میں مدد ملے کہ ڈیجیٹل کرنسی مارکیٹ میں اس حکمت عملی کے ذریعے “غیر فعال آمدنی” کیسے حاصل کی جائے۔ چاہے آپ مقداری تجارت میں نوآموز ہوں یا تجربہ کار سرمایہ کار، یہ حکمت عملی آپ کی گہرائی سے سمجھنے اور آزمائش کے قابل ہے۔
سکے کے حاشیے والے معاہدے کی اکائی شیٹس میں ماپا جاتا ہے، اور ہر شیٹ کی قیمت مقرر کی جاتی ہے (مثال کے طور پر، BTC کا 1 معاہدہ 100 USD، اور 10 USD ETH)۔ اس خصوصیت کا مطلب ہے کہ 1x لیوریج کی صورت میں، یہاں تک کہ اگر مارکیٹ کی قیمت میں بہت زیادہ اتار چڑھاؤ آتا ہے، نظریاتی طور پر کوئی مارجن کال نہیں ہوگی۔
یہ فرض کرتے ہوئے کہ موجودہ قیمت 100 USD ہے، 10 سکے کے مارجن کے مختصر معاہدے کھولے جاتے ہیں، اور ان کی قیمت 100 USD کے برابر ہے، جسے سکے کی 1 یونٹ میں تبدیل کیا جاتا ہے:
قیمت میں کمی:
قیمت میں اضافہ:
لہٰذا، ایک خاص حد تک، کرنسی پر مبنی مختصر فروخت کی کل قیمت مستحکم رہتی ہے، جو کہ نقد تحفظ کا عمل ہے۔ تو اس حکمت عملی کا فائدہ کہاں سے آتا ہے آئیے ہم اگلا تصور پیش کرتے ہیں:فنڈنگ کی شرح。
کرنسی پر مبنی مختصر فروخت کی حکمت عملی میں،فنڈنگ کی شرحیہ حکمت عملی کی واپسی کے بنیادی محرکوں میں سے ایک ہے، اور اس کی خصوصیات اور تبدیلیاں براہ راست حکمت عملی کے استحکام اور منافع کو متاثر کرتی ہیں۔ فنڈنگ کی شرحوں کی خصوصیات کو صحیح طریقے سے استعمال کرتے ہوئے، حکمت عملی مختلف مارکیٹ کے ماحول میں اچھی کارکردگی کو برقرار رکھ سکتی ہے، لیکن ان کی ممکنہ حدود پر توجہ دینا بھی ضروری ہے۔
فنڈنگ کی شرح دائمی کنٹریکٹ مارکیٹ میں ایک ریگولیٹری میکانزم ہے، جس کا مقصد طویل اور مختصر پارٹیوں کی ہولڈنگ لاگت میں توازن پیدا کرنا اور دائمی معاہدے کی قیمت کو طویل عرصے تک اسپاٹ پرائس سے انحراف سے روکنا ہے۔ درحقیقت، جن دوستوں نے CFA کا مطالعہ کیا ہے، وہ اب بھی دائمی معاہدے کا اصل نام، سویپ یاد رکھیں گے۔ دائمی معاہدوں کے فنڈنگ ریٹ میکانزم کے ڈیزائن کی ترغیب زیادہ تر روایتی مالیات میں شرح سود کے تبادلے سے حاصل کی گئی ہے۔ سود کی شرح کے تبادلے میں، دو فریقین سود کی شرح میں اتار چڑھاؤ کے خطرے سے بچنے کے لیے متفقہ شرح سود (مثلاً مقررہ شرح بمقابلہ فلوٹنگ ریٹ) کی بنیاد پر باقاعدہ وقفوں پر سود کی ادائیگیوں کا تبادلہ کرتے ہیں۔ اسی طرح، دائمی معاہدوں کا فنڈنگ ریٹ میکانزم بھی طویل اور مختصر پارٹیوں کے انعقاد کی لاگت کو باقاعدگی سے ادا کرکے یا جمع کرکے توازن رکھتا ہے، اس بات کو یقینی بناتا ہے کہ معاہدے کی قیمت اور اسپاٹ پرائس کے درمیان فرق بہت زیادہ نہ ہو۔
فنڈنگ کی شرح کا تعارف بنیادی طور پر دائمی معاہدوں اور جگہ کی قیمتوں کے درمیان بنیادی مسئلہ کو حل کرنے کے لیے ہے۔ جب دائمی معاہدے کی قیمت سپاٹ قیمت سے زیادہ ہوتی ہے، تو فنڈنگ کی شرح مثبت ہوتی ہے، اور لانگز شارٹس کو فیس ادا کرتے ہیں؛ جب دائمی معاہدے کی قیمت سپاٹ قیمت سے کم ہوتی ہے، تو فنڈنگ کی شرح منفی ہوتی ہے، اور شارٹس لانگ کو فیس ادا کرتے ہیں۔ یہ طریقہ کار نہ صرف شرح سود کے تبادلے کے بنیادی تصور کو اپنی طرف متوجہ کرتا ہے، بلکہ ڈیجیٹل کرنسی مارکیٹ کی خصوصیات کو یکجا کر کے ایک منفرد مارکیٹ ریگولیشن ٹول تشکیل دیتا ہے۔ ڈیجیٹل کرنسی کے میدان میں، اس کی اہم خصوصیات میں شامل ہیں:
جیسا کہ ماسٹر زنان نے کہا، حکمت عملی کی تعمیر کے ابتدائی مرحلے میں، حکمت عملی کے منافع کے ذرائع اور خطرات کو سمجھنا ضروری ہے۔ مندرجہ بالا کی بنیاد پر، ہم سمجھتے ہیں کہ کرنسی کے معیار میں شارٹ سیلنگ کی کل قیمت مستحکم رہنا ہے، لہذا آمدنی کا ذریعہ فنڈنگ ریٹ آربیٹریج ہے۔ کچھ طلباء متجسس ہو سکتے ہیں، کیا فنڈنگ کی شرح مستحکم مثبت منافع لاتی رہے گی؟ ہم DATADATA انٹرنیشنل اسٹیشن پر ڈیٹا تجزیہ کا کام کرتے ہیں:
SELECT
Exchange,
Symbol,
toDateTime(Time / 1000) AS Time, -- 将毫秒时间戳转换为时间戳
Rate,
SUM(Rate) OVER (PARTITION BY Exchange, Symbol ORDER BY Time) AS CumulativeRate -- 计算累加的 Rate
FROM
klines.funding
WHERE
Exchange = '{{exchange}}'
AND Symbol = '{{symbol}}'
ORDER BY
Time;
متحرک پیرامیٹرز Binance ایکسچینج کا استعمال کرتے ہیں، اور معاہدہ مجموعی فنڈنگ کی شرح کو ظاہر کرنے کے لیے Bitcoin معیاری (btc_usd) معاہدے کا انتخاب کرتا ہے۔ یہ دیکھا جا سکتا ہے کہ 2020 سے اب تک، فنڈنگ کی شرح آمدنی میں مسلسل اضافہ ہوا ہے، جس میں مجموعی پانچ سالہ آمدنی 50% تک پہنچ گئی ہے۔ اگرچہ یہ سینکڑوں یا ہزاروں کے منافع کے ساتھ موازنہ نہیں کر سکتا، یہ نسبتاً مستحکم ہے، اس لیے ہم اس حکمت عملی کے منافع کے ذرائع کو ترتیب دے سکتے ہیں۔
سکے پر مبنی مختصر فروخت کی حکمت عملی میں، فنڈنگ کی شرح منافع کا کلیدی ذریعہ ہے۔ چونکہ سکے کے حاشیے والے معاہدوں کی اکائیاں طے ہوتی ہیں، یہاں تک کہ اگر مارکیٹ کی قیمتوں میں اتار چڑھاؤ آتا ہے، مختصر فروخت کنندگان کے لیے معاہدے کی قیمت میں تبدیلیاں عام طور پر قابل کنٹرول ہوتی ہیں، اس لیے فنڈنگ کی شرح حکمت عملی کے لیے منافع کا بنیادی ذریعہ بن جاتی ہے۔ حکمت عملیوں پر فنڈنگ کی شرح کے مخصوص اثرات درج ذیل ہیں:
بل مارکیٹ فیز (فنڈنگ کی شرح مثبت ہے)
بیئر مارکیٹ فیز (منفی فنڈنگ ریٹ)
ان دو مارکیٹ کے ماحول کے تجزیے کے ذریعے، یہ دیکھا جا سکتا ہے کہ کرنسی پر مبنی مختصر فروخت کی حکمت عملی کا منافع اور خطرہ بنیادی طور پر فنڈنگ کی شرح سے متاثر ہوتا ہے۔ جب بیل مارکیٹ میں فنڈنگ کی شرح مثبت ہوتی ہے، تو شارٹ سیلرز اس سے فائدہ اٹھا سکتے ہیں؛ اگرچہ فنڈنگ کی شرح منفی ہے، حکمت عملی اب بھی قدر کو محفوظ رکھنے کی مضبوط صلاحیت رکھتی ہے کیونکہ کنٹریکٹ ویلیو میں تبدیلیاں قابل کنٹرول ہیں۔
ایک مضبوط حکمت عملی کا فریم ورک حکمت عملی کے کامیاب نفاذ کی کلید ہے یہ اس بات کو یقینی بنانے کے لیے کہ حکمت عملی مختلف مارکیٹ کے حالات میں مستحکم طریقے سے کام کر سکتی ہے اور خطرات اور اتار چڑھاؤ سے مؤثر طریقے سے نمٹ سکتی ہے۔ یہاں ہم Xiaocao Dashen کے U-based ملٹی کرنسی معاہدے کی حکمت عملی کے فریم ورک کا حوالہ دیتے ہیں، اور کرنسی کے معیار میں کچھ تبدیلیاں اور بہتری کرتے ہیں۔
'''backtest
start: 2024-11-20 00:00:00
end: 2024-11-20 01:00:00
period: 1d
basePeriod: 1m
exchanges: [{"eid":"Futures_OKX","currency":"BTC_USD"}]
'''
import time
import json
# 全局变量,储存数据
SYMBOLS = 'BTC' # SYMBOLS代表要交易的币种,格式如"BTC,ETH,LTC"
QUOTO = 'USD' # QUOTO为基础货币, 币本位为USD
INTERVAL = 5 # INTERVAL代表循环的间隔
ICEMONEY = 2000 # 冰山下单金额
ROLLINGNUM = 1 # 滚动盈利加仓数量
Info = {
'trade_symbols': SYMBOLS.split(','), # 交易币种
'base_coin': QUOTO, # 基础货币
'ticker': {}, # 行情数据
'order': {}, # 订单信息
'account': {}, # 账户信息
'precision': {}, # 精度信息
'position': {}, # 仓位信息
'time': {}, # 时间相关数据
'count': {}, # 计数器
'interval': INTERVAL # 循环的间隔时间
}
# 初始化策略
def InitInfo():
# 初始化时间数据,控制更新的时间
Info['time'] = {
'update_ticker_time': 0, # 更新行情的时间
'update_pos_time': 0, # 更新仓位的时间
'update_profit_time': 0, # 更新利润的时间
'update_account_time': 0, # 更新账户信息的时间
'update_status_time': 0, # 更新状态的时间
'last_loop_time': 0, # 上一次主循环的时间
'loop_delay': 0, # 循环延迟
'start_time': time.time() # 起始时间
}
# 初始化每个交易币种的数据
for symbol in Info['trade_symbols']:
Info['account'][symbol] = {
'init_balance': 0, # 初始余额
'margin_balance': 0, # 保证金余额
'margin_used': 0, # 已用保证金
'margin_free': 0, # 可用保证金
'profit': 0, # 总收益
'profit_rate': 0, # 收益率
'unrealised_profit': 0, # 未实现收益
} # 初始化账户信息,初始余额为0
Info['ticker'][symbol] = {'last': 0, 'ask': 0, 'bid': 0} # 行情
Info['order'][symbol] = { # 订单信息
'buy': {'id': 0, 'price': 0, 'amount': 0},
'sell': {'id': 0, 'price': 0, 'amount': 0}
}
Info['position'][symbol] = { # 仓位信息
'amount': 0, 'hold_price': 0, 'unrealised_profit': 0, 'open_time': 0, 'value': 0
}
Info['precision'][symbol] = {} # 精度信息初始化为空
Info['position'][symbol] = { # 仓位信息
'amount': 0, 'hold_price': 0, 'unrealised_profit': 0, 'open_time': 0, 'value': 0
}
# 获取精度信息
def GetPrecision():
# 获取交易所的市场信息
# 回测系统需要获取行情信息后, 才能获取市场信息,实盘系统可忽略
for symbol in Info['trade_symbols']:
curcontract = symbol + '_' + QUOTO + '.swap'
exchange.GetTicker(curcontract)
exchange_info = exchange.GetMarkets()
# 遍历市场中的所有交易对
for pair, data in exchange_info.items():
symbol = pair.split('_')[0] # 永续合约交易对的格式为 BTC_USDT.swap
# 检查该交易对是否为我们要交易的币种,基础货币是否匹配,且是永续合约
if symbol in Info['trade_symbols'] and pair.split('.')[0].endswith(Info['base_coin']) and pair.endswith('swap'):
# 获取该交易对的精度信息
Info['precision'][symbol] = {
'tick_size': data['TickSize'], # 价格精度
'amount_size': data['AmountSize'], # 数量精度
'price_precision': data['PricePrecision'], # 价格小数位精度
'amount_precision': data['AmountPrecision'], # 数量小数位精度
'min_qty': data['MinQty'], # 最小下单数量
'max_qty': data['MaxQty'], # 最大下单数量
'min_notional': data['MinNotional'], # 最小交易额
'ctVal': data['CtVal'] # 合约价值,如1张代表100USD
}
Log(f"初始化币种信息: {symbol}, "
f"价格精度: {Info['precision'][symbol]['tick_size']}, "
f"数量精度: {Info['precision'][symbol]['amount_size']}, "
f"价格小数位精度: {Info['precision'][symbol]['price_precision']}, "
f"数量小数位精度: {Info['precision'][symbol]['amount_precision']}, "
f"最小下单数量: {Info['precision'][symbol]['min_qty']}, "
f"最大下单数量: {Info['precision'][symbol]['max_qty']}, "
f"最小交易额: {Info['precision'][symbol]['min_notional']}, "
f"合约价值(张): {Info['precision'][symbol]['ctVal']}")
# 更新行情信息
def UpdateTicker():
# 记录当前更新时间戳
Info['time']['update_ticker_time'] = time.time() * 1000 # 使用time.time()获取当前时间的时间戳
# 遍历获取到的行情数据
for symbol in Info['trade_symbols']:
curcontract = symbol + '_' + QUOTO + '.swap'
data = exchange.GetTicker(curcontract)
if not data:
Log("获取行情失败", GetLastError())
return
# 更新行情的卖出价、买入价和最后成交价
Info['ticker'][symbol]['ask'] = float(data['Sell']) # 卖出价
Info['ticker'][symbol]['bid'] = float(data['Buy']) # 买入价
Info['ticker'][symbol]['last'] = float(data['Last']) # 最后成交价
# 更新账户信息
def UpdateAccount():
# 遍历所有交易币种,更新账户信息
for symbol in Info['trade_symbols']:
curcontract = symbol + '_' + QUOTO # 拼接币种和报价货币,形成合约标识
exchange.SetCurrency(curcontract) # 设置当前合约
# 获取账户信息
account = exchange.GetAccount()
# 如果账户信息获取失败,记录日志并结束函数
if account is None:
Log(curcontract, ": 更新账户失败")
return
# 计算账户的关键信息
# 'Stocks': 可用余额, 'FrozenStocks': 冻结余额, 'Equity': 总权益, 'UPnL': 未实现盈亏, 区别U本位(Balance)
Info['account'][symbol]['margin_used'] = account['Equity'] - account['Stocks'] # 已用保证金
Info['account'][symbol]['margin_balance'] = account['Equity'] # 当前账户总权益
Info['account'][symbol]['margin_free'] = account['Stocks'] # 当前可用余额
Info['account'][symbol]['unrealised_profit'] = account['UPnL'] # 未实现盈亏
# 从全局存储中读取账户初始余额字典
accDict = _G("init_balance")
if accDict is None:
accDict = {} # 如果全局存储为空,则初始化为空字典
# 初始化账户初始余额(仅在第一次运行时设置)
if not Info['account'][symbol]['init_balance']:
# 如果全局存储有记录且余额大于0,则使用该记录作为初始余额
if accDict and accDict.get(symbol) and accDict[symbol] > 0:
Info['account'][symbol]['init_balance'] = round(accDict[symbol], 2)
else:
# 否则,将当前保证金余额作为初始余额
Info['account'][symbol]['init_balance'] = Info['account'][symbol]['margin_balance'] * Info['ticker'][symbol]['last']
accDict[symbol] = Info['account'][symbol]['init_balance'] # 更新全局存储
_G("init_balance", accDict)
# 计算账户利润及利润率
Info['account'][symbol]['profit'] = round(Info['account'][symbol]['margin_balance'] * Info['ticker'][symbol]['last'] - Info['account'][symbol]['init_balance'], 2) # 当前利润
Info['account'][symbol]['profit_rate'] = round((100 * Info['account'][symbol]['profit']) / Info['account'][symbol]['init_balance'], 2) # 当前利润率(百分比)
# 更新仓位信息
def UpdatePosition():
# 获取永续合约的仓位信息
# 调用接口获取指定币种的仓位信息
pos = exchange.GetPositions(Info['base_coin'] + ".swap")
# 记录仓位信息的更新时间(单位:毫秒)
Info['time']['update_pos_time'] = time.time() * 1000
# 初始化仓位信息
# 为每个交易币种创建默认的仓位信息
position_info = {symbol: {'amount': 0, 'hold_price': 0, 'unrealised_profit': 0} for symbol in Info['trade_symbols']}
# 遍历获取到的仓位信息,更新对应币种的仓位数据
for data in pos:
# 提取币种名称(Symbol)的一部分作为标识
symbol = data['Symbol'].split("_")[0]
# 过滤掉不属于指定基准币种或不在交易列表中的币种
if not data['Symbol'].split(".")[0].endswith(Info['base_coin']) or symbol not in Info['trade_symbols']:
continue
# 更新仓位信息,区分多头和空头(通过 Type 字段)
position_info[symbol] = {
'amount': data['Amount'] if data['Type'] == 0 else -data['Amount'], # 多头为正,空头为负
'hold_price': data['Price'], # 仓位持有价格
'unrealised_profit': data['Profit'] # 未实现盈亏
}
# 初始化每个币种的仓位统计数据
# long: 多头价值, short: 空头价值, total: 总仓位价值, leverage: 杠杆率
for symbol in Info['trade_symbols']:
Info['count'][symbol] = {'long': 0, 'short': 0, 'total': 0, 'leverage': 0}
# 遍历更新后的仓位信息
for symbol, info in position_info.items():
# 计算仓位变化量
deal_volume = abs(info['amount'] - Info['position'][symbol]['amount'])
# 计算变化方向(正数为增仓,负数为减仓)
direction = 1 if info['amount'] - Info['position'][symbol]['amount'] > 0 else -1
# 如果仓位发生变化,记录成交信息
if deal_volume:
# 获取成交价格(买入或卖出)
deal_price = Info['order'][symbol]['buy']['price'] if direction == 1 else Info['order'][symbol]['sell']['price']
# 打印仓位更新日志
Log(
symbol,
"仓位更新:",
round(Info['position'][symbol]['amount'], 1),
" -> ",
round(info['amount'], 1),
", 买" if direction == 1 else ", 卖",
", 成交价:",
deal_price,
", 成本价:",
round(Info['position'][symbol]['hold_price'], Info['precision'][symbol]['price_precision']),
)
# 更新仓位信息
Info['position'][symbol]['amount'] = info['amount'] # 更新仓位数量
Info['position'][symbol]['hold_price'] = info['hold_price'] # 更新持仓价格
Info['position'][symbol]['value'] = round(Info['position'][symbol]['amount'] * Info['precision'][symbol]['ctVal'], 2) # 仓位价值
Info['position'][symbol]['unrealised_profit'] = info['unrealised_profit'] # 更新未实现盈亏
# 统计多头和空头仓位价值
if Info['position'][symbol]['amount'] > 0:
# 如果为多头,增加多头仓位价值
Info['count'][symbol]['long'] += abs(Info['position'][symbol]['value'])
else:
# 如果为空头,增加空头仓位价值
Info['count'][symbol]['short'] += abs(Info['position'][symbol]['value'])
# 计算仓位总价值(按最新价格计算)
Info['count'][symbol]['total'] = round((Info['count'][symbol]['long'] + Info['count'][symbol]['short']) / Info['ticker'][symbol]['last'], 2)
# 计算杠杆率(总仓位价值与账户保证金的比值)
Info['count'][symbol]['leverage'] = round(Info['count'][symbol]['total'] / Info['account'][symbol]['margin_balance'], 2)
# 订单函数
def Order(symbol, direction, price, amount, msg):
pair = f"{symbol}_{Info['base_coin']}.swap" # 构造交易对名称
ret = exchange.CreateOrder(pair, direction, price, amount, msg) # 执行下单操作
# 判断是否下单成功
if ret:
Info['order'][symbol][direction]['id'] = ret # 记录订单ID
Info['order'][symbol][direction]['price'] = price # 记录下单价格
Log('记录下单价格:', price, direction, Info['order'][symbol][direction]['price'], )
else:
Log(f"{symbol} {direction} {price} {amount} 下单异常") # 输出异常信息
# 交易函数
def Trade(symbol, direction, price, amount, msg):
# 根据最小价格变动调整价格
price = round(price - (price % Info['precision'][symbol]['tick_size']), Info['precision'][symbol]['price_precision'])
# 计算调整后的交易数量
amount = amount / Info['precision'][symbol]['ctVal'] # 计算真实合约数量
amount = round(amount - (amount % Info['precision'][symbol]['amount_size']), Info['precision'][symbol]['amount_precision'])
# 限制最大交易数量
if Info['precision'][symbol]['max_qty'] > 0:
amount = min(amount, Info['precision'][symbol]['max_qty'])
new_order = False
# 如果新价格与之前的订单价格差异大于0.0001,则重新下单
if Info['order'][symbol][direction]['price'] > 0 and abs(price - Info['order'][symbol][direction]['price']) / price > 0.0001:
Log('已持订单,订单价格发生变化')
new_order = True
# 如果交易数量为0或者当前订单ID为0,则撤单
if amount <= 0 or Info['order'][symbol][direction]['id'] == 0:
Log('新订单产生')
new_order = True
# 如果需要新订单
if new_order:
# 如果有原有订单,撤销它
if Info['order'][symbol][direction]['id'] != 0:
exchange.CancelOrder(Info['order'][symbol][direction]['id'])
Info['order'][symbol][direction]['id'] = 0
Info['order'][symbol][direction]['price'] = 0
Log('撤单成功:', symbol)
# 如果更新仓位或ticker的延迟太高,则不下单
#if (time.time() * 1000 - Info['time']['update_pos_time'] > 2 * Info['interval'] * 1000 or
# time.time() * 1000 - Info['time']['update_ticker_time'] > 2 * Info['interval'] * 1000):
# Log('仓位更新时间', time.time() * 1000, Info['time']['update_pos_time'], time.time() * 1000 - Info['time']['update_pos_time'])
# Log('Ticker更新时间', time.time() * 1000, Info['time']['update_ticker_time'], time.time() * 1000 - Info['time']['update_ticker_time'])
# Log('延迟过高')
# return
# 如果订单金额或数量过低,不执行下单操作
if price * amount <= Info['precision'][symbol]['min_notional'] or amount < Info['precision'][symbol]['min_qty']:
Log(f"{symbol} 下单量太低", price * amount)
return
# 执行下单操作
Log('order下单:', symbol)
Order(symbol, direction, price, amount, msg)
# 更新状态函数
def UpdateStatus():
# 更新状态时间
Info['time']['update_status_time'] = time.time() * 1000
# 账户信息表格
table1 = {
"type": "table",
"title": "账户信息",
"cols": [
"币种", "初始权益", "实时权益", "可用余额",
"总收益", "收益率"
],
"rows": [],
}
# 遍历每个交易对,填充交易对信息
for symbol in Info['trade_symbols']:
table1['rows'].append([
symbol, # 币种
round(Info['account'][symbol]['init_balance'], 2), # 初始权益
round(Info['account'][symbol]['margin_balance'] * Info['ticker'][symbol]['last'], 2), # 实时权益
round(Info['account'][symbol]['margin_free'] * Info['ticker'][symbol]['last'], 2), # 可用余额
round(Info['account'][symbol]['profit'], 2), # 总收益
str(Info['account'][symbol]['profit_rate']) + "%" # 收益率
])
# 交易对信息表格
table2 = {
"type": "table",
"title": "交易对信息",
"cols": [
"币种", "方向", "数量", "持仓价格", "持仓价值",
"现价"
],
"rows": [],
}
# 遍历每个交易对,填充交易对信息
for symbol in Info['trade_symbols']:
table2['rows'].append([
symbol, # 币种
"LONG" if Info['position'][symbol]['amount'] > 0 else "SHORT", # 方向
Info['position'][symbol]['amount'], # 数量
round(Info['position'][symbol]['hold_price'], Info['precision'][symbol]['price_precision']), # 持仓价格
round(Info['position'][symbol]['value'], 2), # 持仓价值
round(Info['ticker'][symbol]['last'], Info['precision'][symbol]['price_precision']) # 现价
])
# 输出状态日志
LogStatus(
f"初始化时间: {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(Info['time']['start_time']))}\n",
f"`{json.dumps(table1)}`\n" + f"`{json.dumps(table2)}`\n",
f"循环延时: {str(Info['time']['loop_delay']) + 'ms'}\n",
f"最后执行时间: {_D()}\n"
)
totalprofit = 0
for symbol in Info['trade_symbols']:
totalprofit += Info['account'][symbol]['profit']
# 每10秒钟更新一次账户信息
if time.time() * 1000 - Info['time']['update_profit_time'] > 10 * 1000:
LogProfit(round(totalprofit, 3), '&') # 输出收益日志
Info['time']['update_profit_time'] = time.time() * 1000 # 更新收益时间
def MakeOrder():
# 遍历所有交易对
for symbol in Info['trade_symbols']:
availBal = Info['account'][symbol]['margin_free'] * Info['ticker'][symbol]['last'] #可用金额
sell_price = Info['ticker'][symbol]['ask'] #卖出价格
if availBal > ICEMONEY: #可用金额大于冰山挂单数量,起始建仓
Trade(symbol, "sell", sell_price, ICEMONEY, symbol) # 执行买入操作
elif availBal > ROLLINGNUM * Info['precision'][symbol]['ctVal']: #可用盈利大于滚动加仓数量,逐步下单
Trade(symbol, "sell", sell_price, ROLLINGNUM * Info['precision'][symbol]['ctVal'], symbol) # 执行买入操作
def OnTick():
# 更新市场行情信息
UpdateTicker()
# 更新账户信息
UpdateAccount()
# 更新持仓信息
UpdatePosition()
# 执行下单操作
MakeOrder()
# 更新状态信息
UpdateStatus()
def main():
LogReset(0) # 日志重置
Log('策略起始#0000ff')
# 初始化信息
InitInfo() # 初始化币种信息
GetPrecision() # 获取精度信息
exchange.SetMarginLevel(1) # 设置杠杆倍数
while True: # 无限循环
loop_start_time = time.time() * 1000 # 获取当前时间(毫秒)
# 检查上次循环时间与设定的间隔时间是否已过
if time.time() * 1000 - Info['time']['last_loop_time'] > Info['interval'] * 1000:
OnTick() # 调用 OnTick 函数
# 更新最后一次循环时间
Info['time']['last_loop_time'] = time.time() * 1000
# 计算当前循环的延迟时间
Info['time']['loop_delay'] = time.time() * 1000 - loop_start_time
# 暂停5毫秒,避免过度消耗CPU资源
Sleep(5)
حکمت عملی سادہ متغیر تعریفوں پر مبنی ہے اور ماڈیولر فنکشنز کے ذریعے رولنگ پوزیشن میں اضافے اور اسٹیٹس مانیٹرنگ کو لاگو کرتی ہے۔
ذیل میں ہر ایک فنکشنل ماڈیول کی مختصر تفصیل ہے:
شروع کرنے کا فنکشن (InitInfo)
لین دین کی کرنسی کی معلومات اور اکاؤنٹ کی ابتدائی حیثیت کو لوڈ کرنے کے لیے استعمال کیا جاتا ہے۔
درست معلومات حاصل کریں (GetPrecision)
ایکسچینج API کے ذریعے ہر تجارتی جوڑے کے لیے کم از کم آرڈر کا سائز اور معاہدے کی قیمت حاصل کریں۔
اپ ڈیٹ ٹکر
موجودہ مارکیٹ کی معلومات باقاعدگی سے حاصل کریں، بشمول بہترین بولی کی قیمت، بہترین پوچھنے کی قیمت اور تازہ ترین قیمت۔
اکاؤنٹ اور پوزیشن اپ ڈیٹس (UpdateAccount، UpdatePosition)
اکاؤنٹ بیلنس اور پوزیشن کی معلومات کی ریئل ٹائم ہم آہنگی تجارتی فیصلوں کی بنیاد فراہم کرتی ہے۔
ٹریڈنگ اور آرڈر مینجمنٹ (آرڈر، ٹریڈ)
یونیفائیڈ آرڈر پلیسمنٹ اور ایگزیکیوشن فنکشنز، سپورٹنگ حد آرڈرز اور مارکیٹ آرڈرز۔
اسٹیٹس مانیٹرنگ (اپ ڈیٹ اسٹیٹس)
حکمت عملی کی حیثیت کو ٹریک کریں، بشمول موجودہ منافع اور نقصان اور نامکمل آرڈرز۔
حکمت عملی کا بنیادی حصہ ہے۔ابتدائی پوزیشن(آئس برگ پوزیشن) اوررولنگ پوزیشن(رولنگ پوزیشن پیرامیٹر ROLLINGNUM کے ذریعے کنٹرول کیا جاتا ہے)۔ مندرجہ ذیل مخصوص منطق کی تفصیلی وضاحت ہے:
حکمت عملی کی بیک ٹیسٹنگ کے نتائج کے مطابق، ہم دیکھ سکتے ہیں کہ حکمت عملی نے متعدد مارکیٹ سائیکلوں میں مستحکم منافع حاصل کیا ہے، خاص طور پر بیل مارکیٹ میں جہاں فنڈنگ کی شرح طویل عرصے سے مثبت رہی ہے۔ لہذا، یہ حکمت عملی ایک خاص حد تک بڑے فنڈ مینجمنٹ کے لیے بہت موزوں ہے۔ اس کی کم اتار چڑھاؤ اور مستحکم منافع کی خصوصیات خطرے پر قابو پانے اور مستحکم منافع کے لیے بڑے فنڈز کی دوہری ضروریات کو پورا کر سکتی ہیں۔ ایک ہی وقت میں، حکمت عملی 1x لیوریج کو اپناتی ہے، جو زیادہ لیوریج کی وجہ سے لیکویڈیشن کے خطرے سے بچاتا ہے اور اس کی حفاظت کو مزید بڑھاتا ہے۔
حکمت عملی سادہ اور عمل میں آسان ہے۔
منطق واضح ہے اور کسی پیچیدہ حساب کی ضرورت نہیں ہے، جو اسے ہیج فنڈز یا انفرادی سرمایہ کاروں کے بڑے فنڈ کے انتظام کے لیے موزوں بناتا ہے۔
مضبوط خطرے کے خلاف مزاحمت
1x لیوریج لیکویڈیشن کے خطرے سے بچ سکتا ہے، اور کرنسی پر مبنی خصوصیات اس بات کو یقینی بناتی ہیں کہ امریکی ڈالر کی قدر مستحکم رہے، مارکیٹ کے بڑے اتار چڑھاو سے قطع نظر۔
مستحکم آمدنی
بیل مارکیٹ میں، فنڈنگ کی شرح زیادہ ہوتی ہے اور اس میں مضبوط اسکیل ایبلٹی ہوتی ہے، اور نتیجے میں آنے والی کرنسیوں کو دیگر سرمایہ کاری کے لیے استعمال کیا جا سکتا ہے (جیسے اسٹیکنگ)۔
حکمت عملی کی سختی کا فقدان
موجودہ حکمت عملی میں متحرک ایڈجسٹمنٹ کی منطق شامل نہیں ہے، جیسے کہ بیل اور ریچھ کی منڈیوں کے درمیان سوئچ کرتے وقت جوابی اقدامات کی کمی (جیسے کہ سٹاپ لاس یا ٹیک پرافٹ کی حکمت عملی)۔
منافع کا محدود مارجن
یہ “فلیٹ لیٹنگ” فیس لینے کے لیے موزوں ہے اور مارکیٹ میں بڑے اتار چڑھاؤ میں اضافی منافع حاصل نہیں کر سکتا، بعض صورتوں میں، شرح منافع روایتی بانڈ فنڈز کی طرح اچھی نہیں ہوتی۔
سکے پر مبنی ایک بار کی مختصر فروخت کی فیس ثالثی حکمت عملی سکے پر مبنی معاہدوں کی خصوصی خصوصیات کا مکمل استعمال کرتی ہے اور سرمائے کے تحفظ اور مستحکم تعریف کے لیے کم رسک حل فراہم کرتی ہے۔ تاہم، مارکیٹ کے مختلف مراحل میں، حکمت عملیوں کو فنڈنگ کی شرحوں اور ممکنہ خطرات میں اتار چڑھاؤ سے نمٹنے کے لیے ایک خاص حد تک لچک کی ضرورت ہوتی ہے۔ مستقبل کی اصلاح کی سمتوں میں شامل ہوسکتا ہے:
لیکن جوہر میں، اس حکمت عملی کو یقینی ہےتضاد. حکمت عملی کا ابتدائی مفروضہ یہ ہے کہ ڈیجیٹل کرنسی مارکیٹ ایک طویل مدتی بیل مارکیٹ میں ہوگی، اور کرنسی پر مبنی معاہدوں کو مختصر کرنے کا استعمال مستحکم نقد بہاؤ کو برقرار رکھنے اور فنڈنگ کی شرح کے فوائد حاصل کرنے کے لیے کیا جا سکتا ہے۔ تاہم، اگر ہم فرض کرتے ہیں کہ مارکیٹ ایک طویل مدتی بیل مارکیٹ میں ہے، تو کیوں نہ صرف سکے جمع کرنے کا انتخاب کریں اور بٹ کوائن کے مسلسل اضافے کا انتظار کریں؟ یقیناً، یہ حکمت عملی اب بھی ان لوگوں کے لیے قابل اعتماد ہے جو مستحکم منافع حاصل کرتے ہیں۔ اس مضمون کا مقصد اس ڈیزائن آئیڈیا کو متعارف کرانا اور ایک مقداری سرمایہ کاری کی حکمت عملی کا فریم ورک فراہم کرنا ہے، جس پر آپ اسے مزید بہتر اور بہتر بنا سکتے ہیں۔ امید ہے کہ یہ حکمت عملی ڈیجیٹل کرنسیوں میں مقداری سرمایہ کاروں کے لیے ایک مؤثر ذریعہ بن سکتی ہے۔
حوالہ جات
FMZ اپ گریڈ کرنے کے بعد یونیورسل ملٹی کرنسی ٹریڈنگ حکمت عملی کو تیزی سے کیسے بنایا جائے۔
مہربان تجاویز: سرمایہ کاری خطرناک ہے، براہ کرم مارکیٹ میں داخل ہوتے وقت محتاط رہیں۔ سرمایہ کاروں کو مشورہ دیا جاتا ہے کہ وہ اپنے خطرے کی برداشت کے مطابق، حکمت عملی کی منطق اور خطرات کی مکمل تفہیم کی بنیاد پر معقول اور سختی سے پوزیشنز اور لیوریج کو کنٹرول کریں۔ اس مضمون کا مواد صرف حوالہ کے لیے ہے اور اس میں سرمایہ کاری کا کوئی مشورہ نہیں ہے۔