dYdX حکمت عملی ڈیزائن پیٹرن - بے ترتیب تجارت کی حکمت عملی

مصنف:چھوٹا سا خواب, تخلیق: 2021-11-03 15:40:56, تازہ کاری: 2023-09-15 21:02:48

img

dYdX حکمت عملی ڈیزائن مثال

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

ایک بار پھر کھدائی کی لہر

اس مضمون میں حکمت عملی کی کھدائی کا اسکرین شاٹ۔

img

اگر آپ کے پاس کان کنی کے بارے میں کوئی اچھا خیال ہے تو ، آپ کو تبصرہ کرنے کا خیرمقدم ہے!

بے ترتیب تجارت کی حکمت عملی ڈیزائن

آئیے ہوش میں آکر سوچنے کی کوشش کریں! ایک ایسی حکمت عملی تیار کرنے کا منصوبہ بنائیں جس میں نہ تو اشارے دیکھیں ، نہ ہی قیمتوں کو دیکھیں۔ صرف اور صرف زیادہ کام کریں ، خالی جگہیں بنائیں ، اور جو کچھ بھی بند ہے وہ امکانات ہیں۔ پھر ہم 1 سے 100 تک کی بے ترتیب تعداد کا استعمال کرتے ہوئے کتنے خالی ہیں اس کا تعین کرتے ہیں۔

متعدد شرائط: 1 سے 50 تک کی بے ترتیب تعداد۔ خالی شرائط: 51 سے 100 تک کی بے ترتیب تعداد۔

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

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

ٹھیک ہے، حکمت عملی ڈیزائن کرنے کے لئے اتنا آسان ہے.

ڈیزائن کا ماخذ:

var openPrice = 0 
var ratio = 1
var totalEq = null 
var nowEq = null 

function cancelAll() {
    while (1) {
        var orders = _C(exchange.GetOrders)
        if (orders.length == 0) {
            break
        }
        for (var i = 0 ; i < orders.length ; i++) {
            exchange.CancelOrder(orders[i].Id, orders[i])
            Sleep(500)
        }
        Sleep(500)
    }
}

function main() {
    if (isReset) {
        _G(null)
        LogReset(1)
        LogProfitReset()
        LogVacuum()
        Log("重置所有数据", "#FF0000")
    }

    exchange.SetContractType(ct)

    var initPos = _C(exchange.GetPosition)
    if (initPos.length != 0) {
        throw "策略启动时有持仓!"
    }
    
    exchange.SetPrecision(pricePrecision, amountPrecision)
    Log("设置精度", pricePrecision, amountPrecision)
    
    if (!IsVirtual()) {
        var recoverTotalEq = _G("totalEq")
        if (!recoverTotalEq) {
            var currTotalEq = _C(exchange.GetAccount).Balance   // equity
            if (currTotalEq) {
                totalEq = currTotalEq
                _G("totalEq", currTotalEq)
            } else {
                throw "获取初始权益失败"
            }
        } else {
            totalEq = recoverTotalEq
        }
    } else {
        totalEq = _C(exchange.GetAccount).Balance
    }
    
    while (1) {
        if (openPrice == 0) {
            // 更新账户信息,计算收益
            var nowAcc = _C(exchange.GetAccount)
            nowEq = IsVirtual() ? nowAcc.Balance : nowAcc.Balance  // equity
            LogProfit(nowEq - totalEq, nowAcc)
            
            var direction = Math.floor((Math.random()*100)+1)   // 1~50 , 51~100
            var depth = _C(exchange.GetDepth)
            if (depth.Asks.length <= 2 || depth.Bids.length <= 2) {
                Sleep(1000)
                continue 
            }
            if (direction > 50) {
                // long
                openPrice = depth.Bids[1].Price
                exchange.SetDirection("buy")
                exchange.Buy(Math.abs(openPrice) + slidePrice, amount * ratio)
            } else {
                // short
                openPrice = -depth.Asks[1].Price
                exchange.SetDirection("sell")
                exchange.Sell(Math.abs(openPrice) - slidePrice, amount * ratio)
            }       
            Log("下", direction > 50 ? "买单" : "卖单", ",价格:", Math.abs(openPrice))
            continue
        }

        var orders = _C(exchange.GetOrders)
        if (orders.length == 0) {
            var pos = _C(exchange.GetPosition)
            if (pos.length == 0) {
                openPrice = 0
                continue
            }
            
            // 平仓检测
            while (1) {
                var depth = _C(exchange.GetDepth)
                if (depth.Asks.length <= 2 || depth.Bids.length <= 2) {
                    Sleep(1000)
                    continue 
                }
                var stopLossPrice = openPrice > 0 ? Math.abs(openPrice) - stopLoss : Math.abs(openPrice) + stopLoss 
                var stopProfitPrice = openPrice > 0 ? Math.abs(openPrice) + stopProfit : Math.abs(openPrice) - stopProfit
                var winOrLoss = 0 // 1 win , -1 loss 
                
                // 画线
                $.PlotLine("bid", depth.Bids[0].Price)
                $.PlotLine("ask", depth.Asks[0].Price)
                
                // 止损
                if (openPrice > 0 && depth.Bids[0].Price < stopLossPrice) {
                    exchange.SetDirection("closebuy")
                    exchange.Sell(depth.Bids[0].Price - slidePrice, pos[0].Amount)
                    winOrLoss = -1
                } else if (openPrice < 0 && depth.Asks[0].Price > stopLossPrice) {
                    exchange.SetDirection("closesell")
                    exchange.Buy(depth.Asks[0].Price + slidePrice, pos[0].Amount)
                    winOrLoss = -1
                }
                
                // 止盈
                if (openPrice > 0 && depth.Bids[0].Price > stopProfitPrice) {
                    exchange.SetDirection("closebuy")
                    exchange.Sell(depth.Bids[0].Price - slidePrice, pos[0].Amount)  
                    winOrLoss = 1
                } else if (openPrice < 0 && depth.Asks[0].Price < stopProfitPrice) {
                    exchange.SetDirection("closesell")
                    exchange.Buy(depth.Asks[0].Price + slidePrice, pos[0].Amount)
                    winOrLoss = 1
                }
                
                // 检测挂单
                Sleep(2000)
                var orders = _C(exchange.GetOrders)                
                if (orders.length == 0) {
                    pos = _C(exchange.GetPosition)
                    if (pos.length == 0) {
                        if (winOrLoss == -1) {
                            ratio++
                        } else if (winOrLoss == 1) {
                            ratio = 1
                        }
                        break
                    }                    
                } else {
                    // 撤销挂单
                    cancelAll()
                    Sleep(2000)
                    pos = _C(exchange.GetPosition)
                    // 撤销后更新持仓,需要再次检查
                    if (pos.length == 0) {
                        if (winOrLoss == -1) {
                            ratio++
                        } else if (winOrLoss == 1) {
                            ratio = 1
                        }
                        break
                    }    
                }
                
                var tbl = {
                    "type" : "table", 
                    "title" : "info", 
                    "cols" : ["totalEq", "nowEq", "openPrice", "bid1Price", "ask1Price", "ratio", "pos.length"], 
                    "rows" : [], 
                }
                tbl.rows.push([totalEq, nowEq, Math.abs(openPrice), depth.Bids[0].Price, depth.Asks[0].Price, ratio, pos.length])
                tbl.rows.push(["pos", "type", "amount", "price", "--", "--", "--"])
                for (var j = 0 ; j < pos.length ; j++) {
                    tbl.rows.push([j, pos[j].Type, pos[j].Amount, pos[j].Price, "--", "--", "--"])
                }
                LogStatus(_D(), "\n", "`" + JSON.stringify(tbl) + "`")
            }
        } else {
            // 撤销挂单
            // 重置openPrice
            cancelAll()
            openPrice = 0
        }
        Sleep(1000)
    }
}

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

img

ہاں! اس حکمت عملی کو ایک نام کی ضرورت ہے ، اسے اندازہ لگائیں (ڈی وائی ڈی ایکس ورژن)

دوبارہ جانچ پڑتال

یہ صرف حوالہ کے لئے ہے، >_

img

img

img

img

ریٹیسٹ مکمل، کوئی BUG نہیں ہے۔ لیکن مجھے لگتا ہے کہ میں ریٹیسٹ سسٹم کے لئے موزوں ہوں یا نہیں... T_T، اصل ڈسک چل رہا ہے اور کھیل رہا ہے۔

حقیقی دوڑ دوڑ

img

img

img

یہ حکمت عملی صرف تعلیمی اور حوالہ جات کے لیے ہے۔لاکھوں~لاکھوںاس کا استعمال نہ کریں!


متعلقہ

مزید

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

hyc1743ایک چھوٹا سا سفید، براہ مہربانی پوچھیں کہ آپ کیوں نہیں دوڑ سکتے ہیں

چھوٹا سا خوابڈی وائی ڈی ایکس میں نے ایک حقیقی اور مستقل معاہدہ کیا ہے۔

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