ڈیجیٹل کرنسی کے معاہدے روبوٹ کے ذریعے آسانی سے ٹریک کیے جاتے ہیں

مصنف:چھوٹا سا خواب, تخلیق: 2021-04-07 21:30:05, تازہ کاری: 2023-09-24 19:35:33

img

ڈیجیٹل کرنسی کے معاہدے روبوٹ کے ذریعے آسانی سے ٹریک کیے جاتے ہیں

پچھلے مضامین میں ہم نے ایک سادہ اسٹاک چیک روبوٹ کو نافذ کیا تھا۔ آج ہم نے ایک معاہدہ ورژن آسان چیک روبوٹ کو نافذ کیا ہے۔

ڈیزائن کے خیالات

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

حکمت عملی کا نفاذ

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

img

ریٹیسٹ کی حمایت، براہ راست ڈیفالٹ کی طرف سے ریٹیسٹ مشاہدات کی طرف سے مقرر کیا جا سکتا ہے۔

اسٹریٹجی کا ماخذ:

/*backtest
start: 2021-03-18 00:00:00
end: 2021-04-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_OKCoin","currency":"BTC_USD"},{"eid":"Futures_OKCoin","currency":"BTC_USD"},{"eid":"Futures_OKCoin","currency":"BTC_USD"}]
*/

function test() {
    // 测试函数
    var ts = new Date().getTime()    
    if (ts % (1000 * 60 * 60 * 6) > 1000 * 60 * 60 * 5.5) {
        Sleep(1000 * 60 * 10)
        var nowPosAmount = getPosAmount(_C(exchange.GetPosition), refCt)
        var longPosAmount = nowPosAmount.long
        var shortPosAmount = nowPosAmount.short
        var x = Math.random()
        if (x > 0.7) {
            exchange.SetDirection("buy")
            exchange.Buy(-1, _N(Math.max(1, x * 10), 0), "参考账户测试开单#FF0000")
        } else if(x < 0.2) {
            exchange.SetDirection("sell")
            exchange.Sell(-1, _N(Math.max(1, x * 10), 0), "参考账户测试开单#FF0000")
        } else if(x >= 0.2 && x <= 0.5 && longPosAmount > 4) {
            exchange.SetDirection("closebuy")
            exchange.Sell(-1, longPosAmount, "参考账户测试平仓#FF0000")
        } else if(shortPosAmount > 4) {
            exchange.SetDirection("closesell")
            exchange.Buy(-1, _N(shortPosAmount / 2, 0), "参考账户测试平仓#FF0000")
        }
    }
}

function getPosAmount(pos, ct) {
    var longPosAmount = 0
    var shortPosAmount = 0
    _.each(pos, function(ele) {
        if (ele.ContractType == ct && ele.Type == PD_LONG) {
            longPosAmount = ele.Amount
        } else if (ele.ContractType == ct && ele.Type == PD_SHORT) {
            shortPosAmount = ele.Amount
        }
    })
    return {long: longPosAmount, short: shortPosAmount}
}

function trade(e, ct, type, delta) {
    var nowPosAmount = getPosAmount(_C(e.GetPosition), ct)
    var nowAmount = type == PD_LONG ? nowPosAmount.long : nowPosAmount.short
    if (delta > 0) {
        // 开仓
        var tradeFunc = type == PD_LONG ? e.Buy : e.Sell
        e.SetDirection(type == PD_LONG ? "buy" : "sell")
        tradeFunc(-1, delta)
    } else if (delta < 0) {
        // 平仓
        var tradeFunc = type == PD_LONG ? e.Sell : e.Buy
        e.SetDirection(type == PD_LONG ? "closebuy" : "closesell")
        if (nowAmount <= 0) {
            Log("未检测到持仓")
            return 
        }
        tradeFunc(-1, Math.min(nowAmount, Math.abs(delta)))
    } else {
        throw "错误"
    }
}

function main() {
    LogReset(1)
    if (exchanges.length < 2) {
        throw "没有跟单的交易所"
    }
    var exName = exchange.GetName()
    // 检测参考交易所
    if (!exName.includes("Futures_")) {
        throw "仅支持期货跟单"
    }
    Log("开始监控", exName, "交易所", "#FF0000")
    
    // 检测跟单交易所
    for (var i = 1 ; i < exchanges.length ; i++) {
        if (exchanges[i].GetName() != exName) {
            throw "跟单的期货交易所和参考交易所不同!"
        }
    }
    
    // 设置交易对、合约
    _.each(exchanges, function(e) {
        if (!IsVirtual()) {
            e.SetCurrency(refCurrency)
            if (isSimulate) {
                if (e.GetName() == "Futures_OKCoin") {
                    e.IO("simulate", true)
                }
            }
        }
        e.SetContractType(refCt)
    })

    var initRefPosAmount = getPosAmount(_C(exchange.GetPosition), refCt)
    while(true) {
        if (IsVirtual()) {    // 回测时才模拟
            test()            // 测试函数,模拟参考账户主动交易,触发跟单账户跟单        
        }
        Sleep(5000)
        var nowRefPosAmount = getPosAmount(_C(exchange.GetPosition), refCt)
        var tbl = {
            type : "table", 
            title : "持仓",
            cols : ["名称", "标签", "多仓", "空仓", "账户资产(Stocks)", "账户资产(Balance)"],
            rows : []
        }
        _.each(exchanges, function(e) {
            var pos = getPosAmount(_C(e.GetPosition), refCt)
            var acc = _C(e.GetAccount)
            tbl.rows.push([e.GetName(), e.GetLabel(), pos.long, pos.short, acc.Stocks, acc.Balance])
        })
        LogStatus(_D(), "\n`" + JSON.stringify(tbl) + "`")
        
        // 计算仓位变动量
        var longPosDelta = nowRefPosAmount.long - initRefPosAmount.long
        var shortPosDelta = nowRefPosAmount.short - initRefPosAmount.short

        // 检测变动
        if (longPosDelta == 0 && shortPosDelta == 0) {
            continue
        } else {
            // 检测到仓位变动
            for (var i = 1 ; i < exchanges.length ; i++) {
                // 执行多头动作
                if (longPosDelta != 0) {
                    Log(exchanges[i].GetName(), exchanges[i].GetLabel(), "执行多头跟单,变动量:", longPosDelta)
                    trade(exchanges[i], refCt, PD_LONG, longPosDelta)
                }
                // 执行空头动作
                if (shortPosDelta != 0) {
                    Log(exchanges[i].GetName(), exchanges[i].GetLabel(), "执行空头跟单,变动量:", shortPosDelta)
                    trade(exchanges[i], refCt, PD_SHORT, shortPosDelta)
                }
            }
        }

        // 执行跟单操作后,更新
        initRefPosAmount = nowRefPosAmount
    }
}

ٹیسٹ

OKEX نے V5 انٹرفیس کو اپ ڈیٹ کرنے کے بعد، OKEX کی ڈسک کا استعمال کرتے ہوئے، میں نے دو OKEX کی ڈسک API KEY کا استعمال کرتے ہوئے ٹیسٹ کرنے کے لئے بہت آسان تھا.

پہلا شامل کردہ ایکسچینج آبجیکٹ ایک ریفرنس ایکسچینج کے طور پر استعمال ہوتا ہے ، اور ہر ایک ایکسچینج اس ایکسچینج اکاؤنٹ کے ساتھ کام کرتی ہے۔ OKEX ڈسک کے صفحے پر، حوالہ ایکسچینج اکاؤنٹ میں دستی طور پر 3 ETH کے لئے سہ ماہی سکے کی جگہ کا معاہدہ چلائیں۔

img

آپ دیکھ سکتے ہیں کہ اصلی ڈسک نے حوالہ ایکسچینج اکاؤنٹ میں ہولڈنگ میں تبدیلی کا پتہ لگایا ہے ، اور اس کے بعد آپریشن کی پیروی کی ہے۔

img

اگر آپ کو یہ معلوم نہیں ہے کہ آپ کے پاس کتنی رقم ہے تو ، آپ کو یہ معلوم ہونا چاہئے کہ آپ کے پاس کتنی رقم ہے۔ اگر آپ کو یہ معلوم نہیں ہے کہ آپ کے پاس کتنی رقم ہے تو ، آپ کو یہ معلوم ہونا چاہئے کہ آپ کے پاس کتنی رقم ہے۔

img

اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ۔

img

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

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

خوش آمدید۔


متعلقہ

مزید

pw1013دو مختلف تبادلے ایک دوسرے کے ساتھ نہیں مل سکتے

مینگسی1005جب ایجاد کاروں کو جوڑے کے لئے سکے جیتنے کے لئے مستقبل کے معاہدوں؟ کرنسیوں اور ETFs واپسی کی فیس بہت کم ہے، ہائی فریکوئنسی روبوٹ، ادائیگی کی فیس بہت نقصان پہنچا ہے

اکلکامید ہے کہ آپ کے پاس بینک اکاؤنٹ کا ورژن ہوگا

لاؤ99کیا آپ کو ہمیشہ کے لئے معاہدہ شدہ ورژن ، ایپلی کیشنز کی اے پی آئی کی ضرورت ہے؟

زوزونامید ہے کہ ٹوکن یو ایس ڈی ٹی کا مستقل معاہدہ ورژن موجود ہے

qqlove23بہت شکریہ آپ کے شیئرنگ کے لئے۔ سیکھنے کے قابل ہے۔

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

pw1013میں نے بی بکس ایکسچینج کا استعمال کیا ہے، جس میں 80 فیصد کمیشن ہے، اور ایف ایم زیڈ کی مکمل حمایت کرتا ہے.

pw1013براہ کرم مجھے بتائیں کہ میں کس جگہ تبدیل کر سکتا ہوں، میں ابھی باکس فیوچر استعمال کر رہا ہوں، اور اگر میں کسی اور کے اوک ایکس ایکسچینج کو جوڑنا چاہتا ہوں تو مجھے کہاں تبدیل کرنا چاہئے؟

چھوٹا سا خوابیہ ممکن ہے، صرف کوڈ کو تبدیل کریں۔

چھوٹا سا خواباس تبادلے کا جائزہ لینے کے لیے ابھی تک کوئی تبادلے کی طرف سے رابطہ نہیں کیا گیا ہے۔