avatar of 发明者量化-小小梦 发明者量化-小小梦
پر توجہ دیں نجی پیغام
4
پر توجہ دیں
1271
پیروکار

ڈیجیٹل کرنسی مقداری تجارتی حکمت عملی کے تبادلے کی ترتیب کی تفصیلی وضاحت

میں تخلیق کیا: 2019-09-02 09:39:59, تازہ کاری: 2024-12-17 20:42:42
comments   2
hits   4296

ڈیجیٹل کرنسی مقداری تجارتی حکمت عملی کے تبادلے کی ترتیب کی تفصیلی وضاحت

ڈیجیٹل کرنسی مقداری تجارتی حکمت عملی کے تبادلے کی ترتیب کی تفصیلی وضاحت

جب آپ ڈیجیٹل کرنسی کی مقداری تجارتی حکمت عملیوں کو ڈیزائن کرنا شروع کر رہے ہوتے ہیں، تو آپ کے لیے اکثر حکمت عملی کے مختلف تقاضے ہوتے ہیں، اس سے کوئی فرق نہیں پڑتا ہے کہ آپ کونسی زبان یا پلیٹ فارم استعمال کرتے ہیں، آپ کو مختلف حالات کے لیے حکمت عملی کے ڈیزائن کے تقاضوں کا سامنا کرنا پڑے گا۔ مثال کے طور پر، کبھی کبھی متعدد اقسام کو گھمانے کی ضرورت ہوتی ہے، بعض اوقات متعدد پلیٹ فارمز کو ہیج کرنے کی ضرورت ہوتی ہے، اور بعض اوقات مختلف اقسام کو بیک وقت تجارت کرنے کی ضرورت ہوتی ہے، وغیرہ۔ آئیے اسٹریٹجک تقاضوں کو نافذ کرتے وقت ڈیزائن کے کچھ تجربات کا اشتراک کرتے ہیں۔ سیکھنے کا پلیٹ فارم اب بھی انوینٹر کوانٹیٹیٹو ٹریڈنگ پلیٹ فارم (https://www.fmz.com) کا استعمال کرتا ہے، اور منتخب کردہ مارکیٹ ڈیجیٹل کرنسی مارکیٹ ہے۔

  • ### “ملٹی کرنسی” حکمت عملی کا ڈیزائن

اس قسم کی ڈیمانڈ کے لیے اکثر ایک کثیر قسم کے رجحان کی حکمت عملی، ایک کثیر قسم کی گرڈ حکمت عملی وغیرہ لکھنے کی ضرورت ہوتی ہے، جس کے لیے مختلف تجارتی جوڑوں کا استعمال کرتے ہوئے حکمت عملی کی منطق کے تکراری عمل کی ضرورت ہوتی ہے۔ عام طور پر اس طرح ڈیزائن کیا جاتا ہے:

  function Process (symbol) {
      exchange.IO("currency", symbol)
      var ticker = _C(exchange.GetTicker)
      Log("已经切换交易对,按照策略逻辑处理交易对 :", symbol, "行情:", ticker)
      // ...
      // ..
      // .
  }  

  function main(){
      var symbols = ["BTC_USDT", "LTC_USDT", "ETH_USDT"]
      while (true) {
          for (var i = 0 ; i < symbols.length; i++) {
              Process(symbols[i])
              Sleep(500)
          }
      }
  }

ہم روبوٹ کو ترتیب دیتے ہیں: ڈیجیٹل کرنسی مقداری تجارتی حکمت عملی کے تبادلے کی ترتیب کی تفصیلی وضاحت

ڈیجیٹل کرنسی مقداری تجارتی حکمت عملی کے تبادلے کی ترتیب کی تفصیلی وضاحت

جیسا کہ آپ دیکھ سکتے ہیں، اس سے روبوٹ پر ایک ایکسچینج آبجیکٹ کو ترتیب دینا، تجارتی جوڑوں کو تبدیل کرنا، مختلف تجارتی جوڑوں کی مارکیٹ کے حالات حاصل کرنا، متعدد قسم کے بازار کے حالات کو منظم کرنا، اور حکمت عملی کی منطق کے تحت عمل کرنا ممکن ہو جاتا ہے۔ یہ دیکھا جا سکتا ہے کہ ہم نے جن تین تجارتی جوڑوں کی وضاحت کی ہے: BTC_USDT, LTC_USDT, ETH_USDT، مارکیٹ کی معلومات حاصل کرنے کے لیے باری باری دہرائی جاتی ہیں، ہم مارکیٹ کی معلومات کو خاص طور پر تلاش کر سکتے ہیں اور ڈیزائن کردہ تجارتی منطق کو متحرک کر سکتے ہیں۔ حکمت عملی کی طرف سے.

کچھ طلباء یہ کہہ سکتے ہیں: “مجھے تجارتی جوڑوں کو تبدیل کرنا پسند نہیں ہے۔ یہ قدرے پریشانی محسوس کرتا ہے اور حکمت عملی کا ڈیزائن واضح نہیں ہے۔” درحقیقت دیگر ڈیزائن کے طریقے ہیں، جو ایک اور طریقہ ہے جسے ہم ذیل میں متعارف کراتے ہیں۔

  • ### ایک ہی ایکسچینج اکاؤنٹ کے ساتھ روبوٹ کے لیے متعدد ایکسچینج اشیاء کو ترتیب دیں۔

متعدد ایکسچینج آبجیکٹ کے ذریعے مختلف تجارتی جوڑوں کے لیے مارکیٹ ڈیٹا حاصل کریں اور اسے تکراری حکمت عملی کی منطق میں انجام دیں۔ مثال کے طور پر، روبوٹ کو اس طرح ترتیب دیں: روبوٹ کے لیے تین ایکسچینج اشیاء کو ترتیب دیں، اور تجارتی جوڑوں کو بالترتیب BTC_USDT، LTC_USDT، اور ETH_USDT پر سیٹ کریں۔ ڈیجیٹل کرنسی مقداری تجارتی حکمت عملی کے تبادلے کی ترتیب کی تفصیلی وضاحت

“OKEX Spot V3 Test” نامی ایکسچینج آبجیکٹ کنٹرول سینٹر، ایکسچینج کنفیگریشن پیج میں ہے: ڈیجیٹل کرنسی مقداری تجارتی حکمت عملی کے تبادلے کی ترتیب کی تفصیلی وضاحت پہلے سے ترتیب شدہ۔

کوڈ میں ترمیم کریں کیونکہ اس بار ہم نے روبوٹ میں متعدد ایکسچینج آبجیکٹ شامل کیے ہیں، یعنی BTC_USDT، LTC_USDT، اور ETH_USDT کے تجارتی جوڑوں کے ساتھ ایکسچینج آبجیکٹ۔

  function Process (e) {
      var ticker = _C(e.GetTicker)
      Log("交易所", e.GetName(), "按照策略逻辑处理交易对 :", e.GetCurrency(), "行情:", ticker)
      // ...
      // ..
      // .
  }  

  function main(){
      while (true) {
          for (var i = 0 ; i < exchanges.length; i++) {
              Process(exchanges[i])
              Sleep(500)
          }
      }
  }

روبوٹ چلائیں: ڈیجیٹل کرنسی مقداری تجارتی حکمت عملی کے تبادلے کی ترتیب کی تفصیلی وضاحت

اوپر بیان کی گئی مثالیں تجارتی جوڑوں کو تبدیل کرنے یا کنفیگر شدہ اکاؤنٹ میں متعدد مختلف تجارتی جوڑوں کے ساتھ ایک ایکسچینج آبجیکٹ کو شامل کرنے کے بارے میں ہیں۔ سبھی کو صرف ایک ایکسچینج اکاؤنٹ (کنفیگر شدہ ایکسچینج کا استعمال کرتے ہوئے) کا استعمال کرتے ہوئے ترتیب دیا گیا ہے۔ تو آپ ایک حکمت عملی میں متعدد ایکسچینج اکاؤنٹس کیسے استعمال کرتے ہیں؟

  • ### متعدد ایکسچینج اکاؤنٹس استعمال کرنے کی حکمت عملی

کچھ حکمت عملیوں میں شامل ہیں، مثال کے طور پر، متعدد ایکسچینجز میں کراس مارکیٹ ہیجنگ، ایک ہی ایکسچینج کے اندر ملٹی اکاؤنٹ کی حکمت عملی وغیرہ۔

  • متعدد تبادلے ترتیب دیئے گئے ہیں، لیکن وہ مختلف تبادلے ہیں۔ ڈیجیٹل کرنسی مقداری تجارتی حکمت عملی کے تبادلے کی ترتیب کی تفصیلی وضاحت مثال کے طور پر، میں نے کنٹرول سینٹر->Exchange->Ed Exchange صفحہ میں 2 ایکسچینجز کنفیگر کیے ہیں۔ میں حکمت عملی میں ان دو ایکسچینجز پر تشکیل کردہ اکاؤنٹس کے اثاثہ کی معلومات تک رسائی حاصل کر سکتا ہوں۔

    ڈیجیٹل کرنسی مقداری تجارتی حکمت عملی کے تبادلے کی ترتیب کی تفصیلی وضاحت

    function main(){
        Log(exchanges[0].GetAccount())    // 打印第一个 交易所对象的账户资产信息,即火币期货 这个交易所的资产信息。
        Log(exchanges[1].GetAccount())    // ... 打印Bit-Z这个交易所的资产信息
    }
    

    بلاشبہ، میں ایکسچینج میں دوسرے اور تیسرے اکاؤنٹس کی ایکسچینج کنفیگریشن بھی شامل کر سکتا ہوں۔

  • متعدد ایکسچینج کنفیگریشنز ایک ہی ایکسچینج ہیں۔

    مثال کے طور پر، آئیے ایک اور Huobi Futures اکاؤنٹ شامل کریں۔ ڈیجیٹل کرنسی مقداری تجارتی حکمت عملی کے تبادلے کی ترتیب کی تفصیلی وضاحت

    جیسا کہ آپ دیکھ سکتے ہیں، “Huobi Futures” ایکسچینج کے دو اکاؤنٹس ترتیب دیے گئے ہیں۔

    ڈیجیٹل کرنسی مقداری تجارتی حکمت عملی کے تبادلے کی ترتیب کی تفصیلی وضاحت

    حکمت عملی بناتے وقت، انتخاب کے لیے روبوٹ کے “Modify Configuration” کے اختیار میں Huobi Futures Exchange آبجیکٹ ظاہر ہوتا ہے۔

    ڈیجیٹل کرنسی مقداری تجارتی حکمت عملی کے تبادلے کی ترتیب کی تفصیلی وضاحت

    مثال کے طور پر، آپ کے پاس دو اکاؤنٹس ہو سکتے ہیں، ایک بیچنے کی پہلی-خرید-بعد میں گرڈ حکمت عملی (اوپر کی طرف) کا استعمال کرتے ہوئے، اور دوسرا خرید-پہلے-بیچ-بعد میں گرڈ حکمت عملی (نیچے کی طرف) کا استعمال کرتے ہوئے۔

    مندرجہ بالا دو مثالوں کے ذریعے

    روبوٹ پر ایک سے زیادہ ایکسچینج آبجیکٹ کو ترتیب دینے اور ایک ہی ایکسچینج اکاؤنٹ کے ساتھ روبوٹ کے لیے متعدد ایکسچینج آبجیکٹ کو ترتیب دینے کے درمیان فرق یہ ہے:

    پہلی نظر میں، یہ کسی حد تک “ایک ہی ایکسچینج اکاؤنٹ کے ساتھ روبوٹ کے لیے ایک سے زیادہ ایکسچینج اشیاء کو ترتیب دینا” کی مثال سے ملتا جلتا ہے، لیکن اس میں فرق بھی ہے۔ فرق یہ ہے کہ اوپر دی گئی مثال ایک ایکسچینج کنفیگریشن ہے، یعنی:

    ڈیجیٹل کرنسی مقداری تجارتی حکمت عملی کے تبادلے کی ترتیب کی تفصیلی وضاحت

    روبوٹ میں ایکسچینج آبجیکٹ کو ترتیب دیتے وقت، ہمیشہ استعمال کریں: ڈیجیٹل کرنسی مقداری تجارتی حکمت عملی کے تبادلے کی ترتیب کی تفصیلی وضاحت یہ ترتیب.

    یہ صرف اتنا ہے کہ ایکسچینج آبجیکٹ کو شامل کرتے وقت تجارتی جوڑے کی ترتیبات مختلف ہوتی ہیں۔ اگر آپ GetAccount فنکشن کو کال کرتے ہیں، تو آپ ہمیشہ اسی اکاؤنٹ کے اثاثوں کی معلومات تک رسائی حاصل کریں گے۔

    تاہم: ڈیجیٹل کرنسی مقداری تجارتی حکمت عملی کے تبادلے کی ترتیب کی تفصیلی وضاحت دو Huobi Futures Exchange آبجیکٹ اس طرح ترتیب دیے گئے ہیں، اگرچہ دونوں Huobi Futures ہیں، مختلف ایکسچینج اکاؤنٹس کی نمائندگی کرتے ہیں۔

  • ڈیجیٹل کرنسی فیوچر کی حکمت عملیوں کے ڈیزائن کو آسان بنانے کے لیے ایکسچینج کنفیگریشن کا اچھا استعمال کریں۔

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

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

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

ہم “کنٹرول سینٹر” -> “ایکسچینج” پر جاتے ہیں اور OKEX فیوچر ایکسچینج کنفیگریشن شامل کرتے ہیں۔

ڈیجیٹل کرنسی مقداری تجارتی حکمت عملی کے تبادلے کی ترتیب کی تفصیلی وضاحت

ترتیب کے بعد، محفوظ کریں پر کلک کریں۔

ڈیجیٹل کرنسی مقداری تجارتی حکمت عملی کے تبادلے کی ترتیب کی تفصیلی وضاحت

### 「ہائی لائٹ کریں 」اب ہمارے پاس دو ایکسچینج کنفیگریشن ہیں، لیکن ایک ہی API KEY کنفیگریشن کی معلومات استعمال کی جاتی ہے۔

ڈیجیٹل کرنسی مقداری تجارتی حکمت عملی کے تبادلے کی ترتیب کی تفصیلی وضاحت

اس کے کیا فائدے ہیں؟ بلاشبہ، حکمت عملی لکھتے وقت، ڈیزائن بہت آسان ہے!

  function main(){
      exchanges[0].SetContractType("quarter")        // 设置第一个添加的交易所对象 当前的合约为季度合约
      exchanges[1].SetContractType("this_week")      // 设置第二个添加的交易所对象,当前的合约为当周合约

      while (true) {
          var beginTime = new Date().getTime()       // 记录这次获取行情时起始的时间戳。
          var rA = exchanges[0].Go("GetTicker")      // 创建并发 线程去获取 第一个交易所对象,也就是季度合约的行情数据。
          var rB = exchanges[1].Go("GetTicker")      // 创建并发 线程去获取 第二个交易所对象,也就是当周合约的行情数据。

          var tickerA = rA.wait()                    // 并发的两个线程各自执行自己的任务,这里等待获取数据,A 等待时,B任务也在执行。
          var tickerB = rB.wait()                    // 所以这里看似是顺序执行,实际在底层是并发的。只不过获取的时候是顺序先获取A,在获取B。
          var endTime = new Date().getTime()         // 记录并发获取两个合约行情结束时的时间戳。

          if (tickerA && tickerB) {                  // 如果获取的数据没有问题,执行以下逻辑。
              var diff = tickerA.Last - tickerB.Last // 计算差价
              $.PlotLine("diff", diff)               // 使用画线类库把差价画在图表上。
              if (diff > 500) {                      // 如果差价大于500, 对冲套利(当然设置500 的差价是比较大的,很少见。)
                  // 对冲
                  rA = exchanges[0].Go("Sell", tickerA.Buy, 1)     // 并发线程创建 季度合约下卖单
                  rB = exchanges[1].Go("Buy", tickerB.Sell, 1)     // 并发线程创建 当周合约下买单

                  var idA = rA.wait()           // 等待 返回下单结果,返回的是订单ID
                  var idB = rB.wait()           // ...
              }

              // ...
          }

          LogStatus(_D(), "并发获取两个合约行情耗时:", endTime - beginTime, "毫秒。")    // 显示在状态栏上时间,以便知道程序在执行。
          Sleep(500)
      }
  }

کیا یہ ڈیزائن کی حکمت عملی زیادہ آسان اور خیالات زیادہ واضح محسوس ہوتی ہے؟

اصلی ڈسک آپریشن: ڈیجیٹل کرنسی مقداری تجارتی حکمت عملی کے تبادلے کی ترتیب کی تفصیلی وضاحت

یہ دیکھا جا سکتا ہے کہ ہر بار بیک وقت دو معاہدوں کی مارکیٹ کی معلومات حاصل کرنے میں صرف 50 ملی سیکنڈ کا وقت لگتا ہے۔