ڈیریبٹ اختیارات ڈیلٹا متحرک ہیجنگ کی حکمت عملی

مصنف:چھوٹا سا خواب, تخلیق: 2021-03-26 11:18:53, تازہ کاری: 2023-09-24 19:38:01

img

ڈیریبٹ اختیارات ڈیلٹا متحرک ہیجنگ کی حکمت عملی

اس ایف ایم زیڈ کی کوٹیفیکیشن کی حکمت عملی یہ ہے:ڈیریبٹ اختیارات ڈیلٹا متحرک ہیجنگ کی حکمت عملیڈائنامک ڈیلٹا ہیجنگ (DDH) حکمت عملی۔

آپشنز ٹریڈنگ سیکھنے کے لیے، ہم عام طور پر مندرجہ ذیل تصورات پر عبور حاصل کرتے ہیں:

  • اختیارات کی قیمتوں کا تعین کرنے کا ماڈل ، بی ایس ماڈل ، اختیارات کی قیمتیں اشارے کے مطابق اشیاء کی قیمتوں میں اتار چڑھاؤ ، لیبر رائٹس کی قیمتوں میں اتار چڑھاؤ ، ختم ہونے والے باقی وقت کی قیمتوں میں اتار چڑھاؤ ، اتار چڑھاؤ کی شرح میں اتار چڑھاؤ ، خطرہ سے پاک شرح سود میں اتار چڑھاؤ۔

  • آپشنز کے خطرات:

    • ڈیلٹا - اختیارات کی سمت کا خطرہ۔ اگر ڈیلٹا +0.50 ہے تو ، یہ اختیار ، جب اشارے کی قیمت گرتی ہے تو ، منافع بخش نقصان کی کارکردگی کو 0.50 نقد رقم کے طور پر سمجھا جاتا ہے۔
    • گاما کی طرف بڑھتی ہوئی خطرے میں تیزی۔ مثال کے طور پر ، گاما کے اثر کی وجہ سے ، اشارے کی قیمت میں چلنے والی قیمت سے شروع ہوتا ہے ، اور قیمت میں اضافے کے دوران ، ڈیلٹا +0.50 سے +1.00 کی طرف بڑھتا ہے۔
    • تھیٹا ٹائم لیپ۔// جب آپ کسی آپشن کو خریدتے ہیں تو ، اگر اشارے کی قیمت میں کوئی تبدیلی نہیں ہوتی ہے تو ، آپ کو ہر روز تھیٹا کی رقم کے لئے دکھایا گیا معاوضہ ادا کرنا پڑتا ہے ((ڈیربٹ امریکی ڈالر میں قیمت ادا کرنا) // جب آپ اختیارات فروخت کرتے ہیں تو ، اگر اشارے کی قیمت میں کوئی تبدیلی نہیں ہوتی ہے تو ، آپ کو ہر دن کے بعد تھٹا کی رقم میں دکھایا گیا معاوضہ مل جاتا ہے۔
    • ویگا ہیک اتار چڑھاؤ لیپ ؛ جب آپ اختیارات خریدتے ہیں تو ، ویگا مثبت ہوتا ہے ، یعنی زیادہ اتار چڑھاؤ لیپ ؛ جب ضمنی اتار چڑھاؤ بڑھتا ہے تو ، آپ ویگا لیپ پر منافع حاصل کرتے ہیں۔ یا اس کے برعکس ، جب آپ اختیارات فروخت کرتے ہیں ، ضمنی اتار چڑھاؤ کم ہوتا ہے تو ، آپ منافع حاصل کرتے ہیں۔

ڈی ڈی ایچ کی حکمت عملی:

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

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

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

    لہذا مثالی طور پر ، قیمتوں میں کمی سے منافع ملتا ہے ، جب تک کہ مارکیٹ میں اتار چڑھاؤ نہ ہو۔

    تاہم ، اس کے علاوہ بھی عوامل ہیں جن پر غور کرنے کی ضرورت ہے: وقت کی قیمت ، لین دین کی لاگت وغیرہ۔

    اس کے علاوہ ، یہ بھی کہا جاتا ہے کہ یہ ایک بہت ہی عام بات ہے ، لیکن اس کا مطلب یہ نہیں ہے کہ آپ کو اس کے بارے میں کچھ نہیں معلوم ہے۔

    Gamma Scalping 的关注点并不是delta,dynamic delta hedging 只是过程中规避underlying价格风险的一种做法而已。
    Gamma Scalping 关注的是Alpha,此Alpha不是选股的Alpha,这里的Alpha = Gamma/Theta也就是单位Theta的时间损耗换来多少Gamma,
    这个是关注的点。可以构建出上涨和下跌都浮盈的组合,但一定伴随时间损耗,那问题就在于性价比了。
    
    作者:许哲
    链接:https://www.zhihu.com/question/51630805/answer/128096385
    

ڈی ڈی ایچ کی حکمت عملی

  • مجموعی مارکیٹ انٹرفیس پیکیجنگ، فریم ورک ڈیزائن
  • حکمت عملی UI ڈیزائن
  • اسٹریٹجک انٹرایکٹو ڈیزائن
  • خودکار ہیجنگ فنکشن ڈیزائن

ماخذ:

// 构造函数
function createManager(e, subscribeList, msg) {
	var self = {}
    self.supportList = ["Futures_Binance", "Huobi", "Futures_Deribit"]  // 支持的交易所的

    // 对象属性
    self.e = e
    self.msg = msg
    self.name = e.GetName()
    self.type = self.name.includes("Futures_") ? "Futures" : "Spot"
    self.label = e.GetLabel()
    self.quoteCurrency = ""  
    self.subscribeList = subscribeList   // subscribeList : [strSymbol1, strSymbol2, ...]
    self.tickers = []                    // 接口获取的所有行情数据,定义数据格式:{bid1: 123, ask1: 123, symbol: "xxx"}}
    self.subscribeTickers = []           // 需要的行情数据,定义数据格式:{bid1: 123, ask1: 123, symbol: "xxx"}}
    self.accData = null 
    self.pos = null 

    // 初始化函数
    self.init = function() { 
    	// 判断是否支持该交易所
        if (!_.contains(self.supportList, self.name)) {        	
        	throw "not support"
        }
    }

    self.setBase = function(base) {
        // 切换基地址,用于切换为模拟盘
        self.e.SetBase(base)
        Log(self.name, self.label, "切换为模拟盘:", base)
    }

    // 判断数据精度
    self.judgePrecision = function (p) {
        var arr = p.toString().split(".")
        if (arr.length != 2) {
            if (arr.length == 1) {
                return 0
            }
            throw "judgePrecision error, p:" + String(p)
        }
        
        return arr[1].length
    }

    // 更新资产
    self.updateAcc = function(callBackFuncGetAcc) {
        var ret = callBackFuncGetAcc(self)
        if (!ret) {
        	return false 
        }
        self.accData = ret 
        return true 
    }

    // 更新持仓
    self.updatePos = function(httpMethod, url, params) {
        var pos = self.e.IO("api", httpMethod, url, params)
        var ret = []
        if (!pos) {
            return false 
        } else {
            // 整理数据
            // {"jsonrpc":"2.0","result":[],"usIn":1616484238870404,"usOut":1616484238870970,"usDiff":566,"testnet":true}
            try {
                _.each(pos.result, function(ele) {
                    ret.push(ele)
                })
            } catch(err) {
                Log("错误:", err)
                return false 
            }
            self.pos = ret
        }
        return true 
    }

    // 更新行情数据
    self.updateTicker = function(url, callBackFuncGetArr, callBackFuncGetTicker) {
    	var tickers = []
    	var subscribeTickers = []
    	var ret = self.httpQuery(url)
    	if (!ret) {
    		return false 
    	}
    	// Log("测试", ret)// 测试
    	try {
            _.each(callBackFuncGetArr(ret), function(ele) {
            	var ticker = callBackFuncGetTicker(ele)
            	tickers.push(ticker)
                if (self.subscribeList.length == 0) {
                    subscribeTickers.push(ticker)
                } else {
                	for (var i = 0 ; i < self.subscribeList.length ; i++) {                        
                    	if (self.subscribeList[i] == ticker.symbol) {
                    		subscribeTickers.push(ticker)
                    	}
                	}
                }
            })
        } catch(err) {
        	Log("错误:", err)
        	return false 
        }

        self.tickers = tickers
        self.subscribeTickers = subscribeTickers
        return true 
    }

    self.getTicker = function(symbol) {
    	var ret = null 
    	_.each(self.subscribeTickers, function(ticker) {
    		if (ticker.symbol == symbol) {
    			ret = ticker
    		}
    	})
    	return ret 
    }

    self.httpQuery = function(url) {
    	var ret = null
        try {
            var retHttpQuery = HttpQuery(url)
            ret = JSON.parse(retHttpQuery)
        } catch (err) {
            // Log("错误:", err)
            ret = null
        }
        return ret 
    }

    self.returnTickersTbl = function() {
        var tickersTbl = {
        	type : "table", 
        	title : "tickers",
        	cols : ["symbol", "ask1", "bid1"], 
        	rows : []
        }
        _.each(self.subscribeTickers, function(ticker) {        
        	tickersTbl.rows.push([ticker.symbol, ticker.ask1, ticker.bid1])
        })
        return tickersTbl
    }
    
    // 返回持仓表格
    self.returnPosTbl = function() {
        var posTbl = {
            type : "table", 
            title : "pos|" + self.msg,
            cols : ["instrument_name", "mark_price", "direction", "size", "delta", "index_price", "average_price", "settlement_price", "average_price_usd", "total_profit_loss"], 
            rows : []
        }
        /* 接口返回的持仓数据格式
        {
            "mark_price":0.1401105,"maintenance_margin":0,"instrument_name":"BTC-25JUN21-28000-P","direction":"buy",
            "vega":5.66031,"total_profit_loss":0.01226105,"size":0.1,"realized_profit_loss":0,"delta":-0.01166,"kind":"option",
            "initial_margin":0,"index_price":54151.77,"floating_profit_loss_usd":664,"floating_profit_loss":0.000035976,
            "average_price_usd":947.22,"average_price":0.0175,"theta":-7.39514,"settlement_price":0.13975074,"open_orders_margin":0,"gamma":0
        }
        */
        _.each(self.pos, function(ele) {
        	if(ele.direction != "zero") {
                posTbl.rows.push([ele.instrument_name, ele.mark_price, ele.direction, ele.size, ele.delta, ele.index_price, ele.average_price, ele.settlement_price, ele.average_price_usd, ele.total_profit_loss])
            }
        })
        return posTbl
    }

    self.returnOptionTickersTbls = function() {
        var arr = []
        var arrDeliveryDate = []
        _.each(self.subscribeTickers, function(ticker) {
            if (self.name == "Futures_Deribit") {
                var arrInstrument_name = ticker.symbol.split("-")
                var currency = arrInstrument_name[0]
                var deliveryDate = arrInstrument_name[1]
                var deliveryPrice = arrInstrument_name[2]
                var optionType = arrInstrument_name[3]

                if (!_.contains(arrDeliveryDate, deliveryDate)) {
                    arr.push({
                        type : "table", 
                        title : arrInstrument_name[1],
                        cols : ["PUT symbol", "ask1", "bid1", "mark_price", "underlying_price", "CALL symbol", "ask1", "bid1", "mark_price", "underlying_price"], 
                        rows : []
                    })
                    arrDeliveryDate.push(arrInstrument_name[1])
                }
                // 遍历arr
                _.each(arr, function(tbl) {
                    if (tbl.title == deliveryDate) {
                        if (tbl.rows.length == 0 && optionType == "P") {
                            tbl.rows.push([ticker.symbol, ticker.ask1, ticker.bid1, ticker.mark_price, ticker.underlying_price, "", "", "", "", ""])
                            return 
                        } else if (tbl.rows.length == 0 && optionType == "C") {
                            tbl.rows.push(["", "", "", "", "", ticker.symbol, ticker.ask1, ticker.bid1, ticker.mark_price, ticker.underlying_price])
                            return 
                        }                        
                        for (var i = 0 ; i < tbl.rows.length ; i++) {
                            if (tbl.rows[i][0] == "" && optionType == "P") {
                                tbl.rows[i][0] = ticker.symbol
                                tbl.rows[i][1] = ticker.ask1
                                tbl.rows[i][2] = ticker.bid1
                                tbl.rows[i][3] = ticker.mark_price
                                tbl.rows[i][4] = ticker.underlying_price
                                return 
                            } else if(tbl.rows[i][5] == "" && optionType == "C") {
                                tbl.rows[i][5] = ticker.symbol
                                tbl.rows[i][6] = ticker.ask1
                                tbl.rows[i][7] = ticker.bid1
                                tbl.rows[i][8] = ticker.mark_price
                                tbl.rows[i][9] = ticker.underlying_price
                                return 
                            }
                        }
                        if (optionType == "P") {
                            tbl.rows.push([ticker.symbol, ticker.ask1, ticker.bid1, ticker.mark_price, ticker.underlying_price, "", "", "", "", ""])
                        } else if(optionType == "C") {
                            tbl.rows.push(["", "", "", "", "", ticker.symbol, ticker.ask1, ticker.bid1, ticker.mark_price, ticker.underlying_price])
                        }
                    }
                })
            }
        })
        return arr 
    }

    // 初始化
    self.init()
	return self 
}


function main() {
    // 初始化,清空日志
    if(isResetLog) {
    	LogReset(1)
    }

    var m1 = createManager(exchanges[0], [], "option")
    var m2 = createManager(exchanges[1], ["BTC-PERPETUAL"], "future")

    // 切换为模拟盘
    var base = "https://www.deribit.com"
    if (isTestNet) {    
        m1.setBase(testNetBase)    
        m2.setBase(testNetBase)
        base = testNetBase
    }

    while(true) {
        // 期权
        var ticker1GetSucc = m1.updateTicker(base + "/api/v2/public/get_book_summary_by_currency?currency=BTC&kind=option", 
            function(data) {return data.result}, 
            function(ele) {return {bid1: ele.bid_price, ask1: ele.ask_price, symbol: ele.instrument_name, underlying_price: ele.underlying_price, mark_price: ele.mark_price}}) 
        
        // 永续期货
        var ticker2GetSucc = m2.updateTicker(base + "/api/v2/public/get_book_summary_by_currency?currency=BTC&kind=future", 
            function(data) {return data.result}, 
            function(ele) {return {bid1: ele.bid_price, ask1: ele.ask_price, symbol: ele.instrument_name}})
        if (!ticker1GetSucc || !ticker2GetSucc) {
            Sleep(5000)
            continue
        }

        // 更新持仓
        var pos1GetSucc = m1.updatePos("GET", "/api/v2/private/get_positions", "currency=BTC&kind=option")
        var pos2GetSucc = m2.updatePos("GET", "/api/v2/private/get_positions", "currency=BTC&kind=future")

        if (!pos1GetSucc || !pos2GetSucc) {
            Sleep(5000)
            continue
        }

        // 交互
        var cmd = GetCommand()
        if(cmd) {
            // 处理交互
            Log("交互命令:", cmd)
            var arr = cmd.split(":")
            // cmdClearLog 
            if(arr[0] == "setContractType") {
                // parseFloat(arr[1])
                m1.e.SetContractType(arr[1])
                Log("exchanges[0]交易所对象设置合约:", arr[1])
            } else if (arr[0] == "buyOption") {
                var actionData = arr[1].split(",")
                var price = parseFloat(actionData[0])
                var amount = parseFloat(actionData[1])
                m1.e.SetDirection("buy")
                m1.e.Buy(price, amount)
                Log("执行价格:", price, "执行数量:", amount, "执行方向:", arr[0])
            } else if (arr[0] == "sellOption") {
                var actionData = arr[1].split(",")
                var price = parseFloat(actionData[0])
                var amount = parseFloat(actionData[1])
                m1.e.SetDirection("sell")
                m1.e.Sell(price, amount)                
                Log("执行价格:", price, "执行数量:", amount, "执行方向:", arr[0])
            } else if (arr[0] == "setHedgeDeltaStep") {
                hedgeDeltaStep = parseFloat(arr[1])
                Log("设置参数hedgeDeltaStep:", hedgeDeltaStep)
            } 
        }
        
        // 获取期货合约价格
        var perpetualTicker = m2.getTicker("BTC-PERPETUAL")
        var hedgeMsg = " PERPETUAL:" + JSON.stringify(perpetualTicker)

        // 从账户数据中获取delta总值        
        var acc1GetSucc = m1.updateAcc(function(self) {
        	self.e.SetCurrency("BTC_USD")        
        	return self.e.GetAccount()
        })
        if (!acc1GetSucc) {
        	Sleep(5000)
        	continue
        }
        var sumDelta = m1.accData.Info.result.delta_total

        if (Math.abs(sumDelta) > hedgeDeltaStep && perpetualTicker) {
            if (sumDelta < 0) {
                // delta 大于0 对冲期货做空                
                var amount = _N(Math.abs(sumDelta) * perpetualTicker.ask1, -1)                
                if (amount > 10) {
                    Log("超过对冲阈值,当前总delta:", sumDelta, "买入期货")
                    m2.e.SetContractType("BTC-PERPETUAL")                    
                    m2.e.SetDirection("buy")
                    m2.e.Buy(-1, amount)
                } else {
                	hedgeMsg += ", 对冲下单量小于10"
                }
            } else {
                // delta 小于0 对冲期货做多
                var amount = _N(Math.abs(sumDelta) * perpetualTicker.bid1, -1)
                if (amount > 10) {
                    Log("超过对冲阈值,当前总delta:", sumDelta, "卖出期货")
                    m2.e.SetContractType("BTC-PERPETUAL")
                    m2.e.SetDirection("sell")
                    m2.e.Sell(-1, amount)
                } else {
                	hedgeMsg += ", 对冲下单量小于10"
                }
            }
        }

        LogStatus(_D(), "sumDelta:", sumDelta, hedgeMsg, 
        	"\n`" + JSON.stringify([m1.returnPosTbl(), m2.returnPosTbl()]) + "`", "\n`" + JSON.stringify(m2.returnTickersTbl()) + "`", "\n`" + JSON.stringify(m1.returnOptionTickersTbls()) + "`")
        Sleep(10000)
    }
}


حکمت عملی کے پیرامیٹرز:img

اسٹریٹجک ایڈریس:https://www.fmz.com/strategy/265090

اسٹریٹجی کام کرتی ہے:

img

img

یہ حکمت عملی تعلیم دینے کی حکمت عملی ہے ، سیکھنے کے لئے اہم ہے ، براہ کرم احتیاط سے استعمال کریں۔


متعلقہ

مزید

فانتادنگکیا یہ ڈی وی ڈی پر کام کرتا ہے؟

ٹریک حیاتیاتڈیریبٹ کے بارے میں سنا ہے، کیا یہ ایک ایکسچینج ہے؟

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

فانتادنگکیا آپ کو ایک قیمت کی حد مقرر کر سکتے ہیں، مثال کے طور پر، ایک قیمت سے زیادہ کرنے کے لئے ddh

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

چھوٹا سا خوابہاں ، بلاکچین اثاثہ جات سے ماخوذ ایکسچینج ، کرنسی کے دائرے میں سب سے زیادہ مہارت حاصل کرنے والی اختیارات کی تجارت۔