ڈیجیٹل کرنسی فیوچر کلاس مارٹن حکمت عملی ڈیزائن

مصنف:چھوٹا سا خواب, تخلیق: 2021-07-02 14:35:34, تازہ کاری: 2023-09-21 21:09:56

img

ڈیجیٹل کرنسی فیوچر کلاس مارٹن حکمت عملی ڈیزائن

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

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

مشترکہ حقوق حاصل کرنا

ڈیجیٹل کرنسی کے مستقبل کی حکمت عملی کو ڈیزائن کرنے میں ، یہ اعداد و شمار اکثر مجموعی منافع کے لئے استعمال ہوتے ہیں۔ کیونکہ منافع کا حساب لگانا ضروری ہے ، خاص طور پر جب فلوٹنگ منافع کا حساب لگانا ضروری ہے۔ کیونکہ انعقاد کے لئے گارنٹی کی رقم کا حامل ہے ، اس وقت ایف ایم زیڈ پلیٹ فارم کے API انٹرفیس کو کال کریں۔exchange.GetAccount()یہ اعداد و شمار دستیاب اثاثوں اور منسلک اثاثوں کو منجمد کرنے کے لئے دستیاب ہیں۔ در حقیقت ، زیادہ تر ڈیجیٹل کرنسی کے مستقبل کے تبادلے میں یہ اعداد و شمار فراہم کیے جاتے ہیں ، لیکن ایف ایم زیڈ میں اس خصوصیت کو یکساں طور پر پیک نہیں کیا جاتا ہے۔

لہذا ہم نے مختلف ایکسچینجز کے مطابق مختلف ڈیزائن افعال کے ساتھ یہ ڈیٹا حاصل کیا:

// OKEX V5 获取总权益
function getTotalEquity_OKEX_V5() {
    var totalEquity = null 
    var ret = exchange.IO("api", "GET", "/api/v5/account/balance", "ccy=USDT")
    if (ret) {
        try {
            totalEquity = parseFloat(ret.data[0].details[0].eq)
        } catch(e) {
            Log("获取账户总权益失败!")
            return null
        }
    }
    return totalEquity
}

// 币安期货
function getTotalEquity_Binance() {
    var totalEquity = null 
    var ret = exchange.GetAccount()
    if (ret) {
        try {
            totalEquity = parseFloat(ret.Info.totalWalletBalance)
        } catch(e) {
            Log("获取账户总权益失败!")
            return null
        }
    }
    return totalEquity
}

کوڈ میںtotalEquityاور پھر ہم ایک فنکشن لکھتے ہیں جس کو کال ان پٹ کے طور پر استعمال کیا جاتا ہے، اور اس کے مطابق مخصوص فنکشن کو کال کرنے کے لئے تبادلہ نام کے مطابق.

function getTotalEquity() {
    var exName = exchange.GetName()
    if (exName == "Futures_OKCoin") {
        return getTotalEquity_OKEX_V5()
    } else if (exName == "Futures_Binance") {
        return getTotalEquity_Binance()
    } else {
        throw "不支持该交易所"
    }
}

کچھ معاون افعال ڈیزائن کریں

اس سے پہلے کہ ہم بنیادی افعال، بنیادی منطق کو ڈیزائن کریں، ہمیں کچھ تیاری کرنے کی ضرورت ہے، کچھ معاون افعال کو ڈیزائن کرنے کی ضرورت ہے۔

  • تمام موجودہ فہرستوں کو منسوخ کریں

    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 trade(distance, price, amount) {
        var tradeFunc = null 
        if (distance == "buy") {
            tradeFunc = exchange.Buy
        } else if (distance == "sell") {
            tradeFunc = exchange.Sell
        } else if (distance == "closebuy") {
            tradeFunc = exchange.Sell
        } else {
            tradeFunc = exchange.Buy
        }
        exchange.SetDirection(distance)
        return tradeFunc(price, amount)
    }
    
    function openLong(price, amount) {
        return trade("buy", price, amount)
    }
    
    function openShort(price, amount) {
        return trade("sell", price, amount)
    }
    
    function coverLong(price, amount) {
        return trade("closebuy", price, amount)
    }
    
    function coverShort(price, amount) {
        return trade("closesell", price, amount)
    }
    

    فیوچر ٹریڈنگ کی چار سمتیں ہیں: اوپن لانگ، اوپن شارٹ، کور لانگ اور کور شارٹ۔ لہذا ہم نے ان کاموں کے مطابق چار ٹرانسفر فنکشنز ڈیزائن کیے ہیں۔ اگر صرف ٹرانسفر پر غور کیا جائے تو ، کچھ ضروری عوامل ہیں: سمت ، ٹرانسفر کی قیمت ، ٹرانسفر کی مقدار۔ ہم نے ایک اور ڈیزائن بھی تیار کیا ہے جس کا نام ہے:tradeاور اس کے بعد آپ کو اس کے بارے میں سوچنا ہوگا.方向(distance)下单价格(price)下单量(amount)اس کے علاوہ ، یہ بھی واضح ہے کہ آپریشن کے وقت کیا ہوتا ہے۔ کثیر اسٹوریج ((openLong) ٬ کھلی اسٹوریج ((openShort) ٬ صاف اسٹوریج ((coverLong) ٬ صاف اسٹوریج ((coverShort) ٬ یہ فنکشن کالز بالآخرtradeفنکشن اصل کام کرتا ہے ، یعنی مقررہ سمت ، قیمت ، مقدار کے مطابق مستقبل کی تجارت پر آرڈر کرتا ہے۔

اہم افعال

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

  • ابتدائی کام کیونکہ ہم آرڈر کو منسلک کرنا چاہتے ہیں، لہذا ہمیں دو عالمی متغیرات کی ضرورت ہے جو آرڈر آئی ڈی کو ریکارڈ کرتی ہیں.

    var buyOrderId = null
    var sellOrderId = null
    

    اس کے بعد پالیسی انٹرفیس پیرامیٹرز میں OKEX_V5 ڈسک کا استعمال کرنے کا اختیار ڈیزائن کیا گیا ہے ، لہذا کوڈ میں کچھ کام کرنا ہے:

    var exName = exchange.GetName()    
    // 切换OKEX V5模拟盘
    if (isSimulate && exName == "Futures_OKCoin") {
        exchange.IO("simulate", true)
    }
    

    انٹرفیس پیرامیٹرز میں تمام معلومات کو دوبارہ ترتیب دینے کا اختیار بھی ڈیزائن کیا گیا ہے ، لہذا کوڈ میں بھی اسی طرح کا عمل ہوگا:

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

    ہم صرف ہمیشہ کے لئے ایک معاہدے پر چلتے ہیں، لہذا یہاں لکھا گیا ہے کہ مر گیا، صرف ایک ہمیشہ کے لئے معاہدے کے طور پر مقرر کیا گیا ہے.

    exchange.SetContractType("swap")
    

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

    exchange.SetPrecision(pricePrecision, amountPrecision)
    Log("设置精度", pricePrecision, amountPrecision)
    

    ڈیزائن میں سادہ ڈیٹا کی بحالی کی خصوصیات

    if (totalEq == -1 && !IsVirtual()) {
        var recoverTotalEq = _G("totalEq")
        if (!recoverTotalEq) {
            var currTotalEq = getTotalEquity()
            if (currTotalEq) {
                totalEq = currTotalEq
                _G("totalEq", currTotalEq)
            } else {
                throw "获取初始权益失败"
            }
        } else {
            totalEq = recoverTotalEq
        }
    }
    

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

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

      while (1) {                                  // 策略主要逻辑设计为一个死循环
          var ticker = _C(exchange.GetTicker)      // 首先读取当前行情信息,主要用到最新成交价
          var pos = _C(exchange.GetPosition)       // 读取当前持仓数据
          if (pos.length > 1) {                    // 判断持仓数据,由于这个策略的逻辑,是不太可能同时出现多空持仓的,所以发现同时出现多空持仓就抛出错误
              Log(pos)
              throw "同时有多空持仓"                  // 抛出错误,让策略停止
          }
          // 根据状态而定
          if (pos.length == 0) {                    // 根据持仓状态做出不同操作,pos.length == 0是当没有持仓时
              // 未持仓了,统计一次收益
              if (!IsVirtual()) {
                  var currTotalEq = getTotalEquity()
                  if (currTotalEq) {
                      LogProfit(currTotalEq - totalEq, "当前总权益:", currTotalEq)
                  }
              }
    
              buyOrderId = openLong(ticker.Last - targetProfit, amount)       // 挂开多仓的买单
              sellOrderId = openShort(ticker.Last + targetProfit, amount)     // 挂开空仓的卖单
          } else if (pos[0].Type == PD_LONG) {   // 有多头持仓,挂单位置、数量有所不同
              var n = 1
              var price = ticker.Last
              buyOrderId = openLong(price - targetProfit * n, amount)
              sellOrderId = coverLong(pos[0].Price + targetProfit, pos[0].Amount)
          } else if (pos[0].Type == PD_SHORT) {   // 有空头持仓,挂单位置、数量有所不同
              var n = 1
              var price = ticker.Last
              buyOrderId = coverShort(pos[0].Price - targetProfit, pos[0].Amount)
              sellOrderId = openShort(price + targetProfit * n, amount)
          }
    
          if (!sellOrderId || !buyOrderId) {   // 如果有一边挂单失败就取消所有挂单,重来
              cancelAll()
              buyOrderId = null 
              sellOrderId = null
              continue
          } 
    
          while (1) {  // 挂单完成,开始监控订单
              var isFindBuyId = false 
              var isFindSellId = false
              var orders = _C(exchange.GetOrders)
              for (var i = 0 ; i < orders.length ; i++) {
                  if (buyOrderId == orders[i].Id) {
                      isFindBuyId = true 
                  }
                  if (sellOrderId == orders[i].Id) {
                      isFindSellId = true 
                  }               
              }
              if (!isFindSellId && !isFindBuyId) {    // 检测到买卖单都成交了
                  cancelAll()
                  break
              } else if (!isFindBuyId) {   // 检测到买单成交
                  Log("买单成交")
                  cancelAll()
                  break
              } else if (!isFindSellId) {  // 检测到卖单成交
                  Log("卖单成交")
                  cancelAll()
                  break
              }
              LogStatus(_D())
              Sleep(3000)
          }
          Sleep(500)
      }
    

اس کے علاوہ، اس کے بارے میں مزید معلومات کے لئے یہاں کلک کریں:

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

اس کے علاوہ ، ہم نے ایک بار پھر آپ کی حکمت عملی کو 19 مئی کی طرح محسوس کرنے کی اجازت دی ہے۔

img

img

یہ دیکھنا ضروری ہے کہ مارٹن کی طرح کی حکمت عملی اب بھی کچھ خطرات رکھتی ہے۔

اصلی ڈسک OKEX V5 سمیلیٹر کے ساتھ کھیلنے کے قابل ہے

img

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

یہ حکمت عملی بنیادی طور پر سیکھنے کے لئے ہے ، اور سونے اور چاندی کو احتیاط سے استعمال کریں ~!


متعلقہ

مزید

لیزا20231ڈیمنڈا، میں آپ سے یہ پوچھنا چاہتی ہوں۔ if (!isFindSellId &&!isFindBuyId) { // خرید و فروخت کے تمام احکامات کا پتہ چلتا ہے اگر آپ کے پاس ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت

نو1898اس کے علاوہ یہ بھی ہے کہ معاہدے کا موڈ مکمل اسٹاک ہے یا اسٹاک میں؟ اس وقت یہ کس طرح ہے؟

نو1898اور جب معاہدہ کیا گیا تو کیا دو گنا معاہدہ نہیں کیا گیا؟ خرید و فروخت کے لئے دو گنا رقم کیوں نہیں دی گئی؟

ہلکے بادلمیں نے اپنی زندگی میں ایک بار پھر اس کے بارے میں سوچا ، اور میں نے اس کے بارے میں سوچا۔ اس کے بعد میں نے اس کی نگرانی کرنا سیکھا ، اور پھر میں نے ایک دو طرفہ مارٹن لکھا تھا۔ میں نے دو دن میں 580 لائنیں لکھی ہیں۔ شاکر ریمنڈا [کھونچیں]

hk مقدار/upload/asset/1a9ebf427c4e2cbf1c327.png غلط سچ کے تبادلے میں؟

خواب آٹھ ہندسوں میں ہیںاگر

خواب آٹھ ہندسوں میں ہیںمالکان کے حقوق کا مجموعی مجموعہ

صفرکیا اسے روکنے کی ضرورت ہے؟

بٹکروبوٹمارٹن، دوبارہ گنتی، صفر.

wqyاور آپ کو یہ نہیں معلوم کہ یہ کیا ہے؟ آپ کو یہ نہیں معلوم کہ یہ کیا ہے؟

آئیوڈالیکیا یہ حکمت عملی کثیر خالی جگہوں کے ساتھ دو بار کھلی ہے؟ یا اکیلے کھلی ہے؟

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

چھوٹا سا خوابعام طور پر ، آپ کو پورے اسٹور کا استعمال کرنا چاہئے۔

چھوٹا سا خوابلیورجنگ کو ایکسچینج پر مخصوص کیا جاسکتا ہے ، اپنی خطرے کی ترجیحات کے مطابق۔

چھوٹا سا خوابکل 666!

چھوٹا سا خواباس متغیر کا نام isFindBuyId نہیں ہے۔ اس کا نام isNotFindBuyId ہونا چاہئے تھا۔

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

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

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

چھوٹا سا خوابایک اور صارف نے لکھا: