websocket 提高私人交易终端的性能

cs7cruho  于 2023-02-04  发布在  其他
关注(0)|答案(1)|浏览(122)

我正在为一个速度很重要的学校项目建立自己的具有各种功能的交易终端。
我有两个函数,我想优化。但不知道如何从这里进行。

function1
     const calcPromise = async () => {
        const markPriceData = await restClient.getTickers({
          symbol: selectedSymbol,
        });
        let cash = 100;
        const lastPrice = markPriceData.result[0].last_price;
        const quantity = Math.round((cash / lastPrice * 1.03).toFixed(3));
        return { lastPrice, quantity };
      };

它从给定的符号中请求最后一个价格,并计算数量,如果我想购买一定数量。

function2
    export default async function placeOrder() {
    try {
        const orderData = await restClient.placeActiveOrder({
            symbol: selectedSymbol,
            order_type: 'Limit',
            side: 'Buy',
            qty: quantity,
            price: lastPrice,
            time_in_force: 'GoodTillCancel',
            reduce_only: false,
            close_on_trigger: false,
            position_idx: LinearPositionIdx.OneWayMode

        });
        const endTime2 = performance.now();
        const executionTime2 = endTime2 - startTime2;
        console.log(`Buy order ${executionTime2}ms`);
        console.log(orderData);

    } catch (err) {
        console.log(err);
    }
}

函数2从函数1 lastPrice & quantity中获取值,然后发出另一个请求并执行购买订单。
这个过程花费了很长时间。我的平均时间是2-5秒。现在,function 2必须等待第一个请求,然后在执行之前进行计算。我的想法是让function 1在后台运行。价格已经可用,这样function 2就不需要等待function 1准备好。
我尝试过实现异步,但是它导致了错误,因为如果function 2和function 1同时运行的话,它们总是比function 1运行得快。
有什么聪明的办法能解决这个问题吗?

9udxz4iz

9udxz4iz1#

我只把这两个功能合二为一。
试试这个:

async function placeOrder() {
  try {
    const markPriceData = await restClient.getTickers({
      symbol: selectedSymbol,
    });
    let cash = 100;
    const lastPrice = markPriceData.result[0].last_price;
    const quantity = Math.round((cash / lastPrice * 1.03).toFixed(3));

    const startTime1 = performance.now();
    const orderData = await restClient.placeActiveOrder({
      symbol: selectedSymbol,
      order_type: "Limit",
      side: "Buy",
      qty: quantity,
      price: lastPrice,
      time_in_force: "GoodTillCancel",
      reduce_only: false,
      close_on_trigger: false,
      position_idx: LinearPositionIdx.OneWayMode,
    });
    const endTime1 = performance.now();
    const executionTime = endTime1 - startTime1;
    console.log(`Calculations, buy ${executionTime}ms`);
    return orderData;
  } catch (error) {
    throw error;
  }
}

相关问题