لیکس ریپر اسٹریٹیجی تجزیہ (2)

مصنف:لیدیہ, تخلیق: 2022-11-07 16:38:41, تازہ کاری: 2023-09-15 21:07:34

img

لیکس ریپر اسٹریٹیجی تجزیہ (2)

آئیے پچھلے باب کے مواد کی وضاحت کرتے ہیں (https://www.fmz.com/bbs-topic/9725).

تیسرا اضافی فنکشن:

    self.balanceAccount = function() {
        var account = exchange.GetAccount()
        if (!account) {
            return
        }
        self.account = account
        var now = new Date().getTime()
        if (self.orderBook.Bids.length > 0 && now - self.preCalc > (CalcNetInterval * 1000)) {
            self.preCalc = now
            var net = _N(account.Balance + account.FrozenBalance + self.orderBook.Bids[0].Price * (account.Stocks + account.FrozenStocks))
            if (net != self.preNet) {
                self.preNet = net
                LogProfit(net)
            }
        }
        self.btc = account.Stocks
        self.cny = account.Balance
        self.p = self.btc * self.prices[self.prices.length-1] / (self.btc * self.prices[self.prices.length-1] + self.cny)
        var balanced = false
        
        if (self.p < 0.48) {
            Log ( \"\" Start Balance \"\", self. P)
            self.cny -= 300
            if (self.orderBook.Bids.length >0) {
                exchange.Buy(self.orderBook.Bids[0].Price + 0.00, 0.01)
                exchange.Buy(self.orderBook.Bids[0].Price + 0.01, 0.01)
                exchange.Buy(self.orderBook.Bids[0].Price + 0.02, 0.01)
            }
        } else if (self.p > 0.52) {
            Log ( \"\" Start Balance \"\", self. P)
            self.btc -= 0.03
            if (self.orderBook.Asks.length >0) {
                exchange.Sell(self.orderBook.Asks[0].Price - 0.00, 0.01)
                exchange.Sell(self.orderBook.Asks[0].Price - 0.01, 0.01)
                exchange.Sell(self.orderBook.Asks[0].Price - 0.02, 0.01)
            }
        }
        Sleep(BalanceTimeout)
        var orders = exchange.GetOrders()
        if (orders) {
            for (var i = 0; i < orders.length; i++) {
                if (orders[i].Id != self.tradeOrderId) {
                    exchange.CancelOrder(orders[i].Id)
                }
            }
        }
    }

جب بلڈرLeeksReaper ()ایک اعتراض کی تعمیر،balanceAccount ()اعتراض میں شامل تقریب میں محفوظ اکاؤنٹ اثاثہ کی معلومات کو اپ ڈیٹ کرتا ہےself.account، یعنی،accountتعمیر شدہ شے کی صفت. آمدنی کی قیمت کا حساب لگائیں اور اسے وقت پر پرنٹ کریں۔ پھر ، تازہ ترین اکاؤنٹ اثاثہ کی معلومات کے مطابق ، اسپاٹ کرنسی بیلنس تناسب (اسپاٹ پوزیشن بیلنس) کا حساب لگائیں ، جب آفسیٹ کی حد کو متحرک کریں تو ، پوزیشن کو ایک چھوٹے آرڈر کے ساتھ بند کریں ، تاکہ کرنسی (پوزیشن) توازن کی حالت میں واپس آجائے۔ تجارت کرنے کے لئے کچھ وقت انتظار کریں ، پھر تمام سازوں کو منسوخ کریں ، فنکشن کے عمل درآمد کا اگلا دور ، یہ بیلنس کی جانچ کرے گا اور اسی پروسیسنگ کو دوبارہ کرے گا۔

آئیے اس فنکشن کا کوڈ جملہ بہ جملہ دیکھیں: سب سے پہلے، پہلا جملہvar account = exchange.GetAccount ()ایک مقامی متغیر کا اعلان کرتا ہےaccountاور کی تقریب بلاتا ہےexchange.GetAccountFMZ API انٹرفیس پر. موجودہ اکاؤنٹ کے تازہ ترین ڈیٹا حاصل کریں اور متغیر کو تفویضaccount. پھر متغیر کا فیصلہaccount. اگر متغیر ہےnull(مثال کے طور پر، ٹائم آؤٹ، نیٹ ورک، تبادلے انٹرفیس استثناء، وغیرہ) ، یہ واپس آئے گا (مطابقif (!account) {...}) براہ راست.

self.account = accountمقامی متغیر تفویض کرنا ہےaccountکرنے کے لئےaccountتعمیر شدہ شے کی خصوصیت جو تعمیر شدہ شے میں تازہ ترین اکاؤنٹ کی معلومات کو ریکارڈ کرتی ہے۔

Var now = new Date().getTime ()ایک مقامی متغیر کا اعلان کرتا ہےnowاور پکارتا ہےgetTime()موجودہ ٹائم اسٹیمپ واپس کرنے کے لئے جاوا اسکرپٹ زبانs وقت کی تاریخ آبجیکٹ کی تقریب۔ متغیر کو ایک قدر تفویض کرتا ہے۔now.

if (self.orderBook.Bids.length > 0 && now - self.preCalc > (CalcNetInterval * 1000)){...}اس بات کا تعین کرتا ہے کہ اگر موجودہ ٹائم اسٹیمپ اور آخری بار ریکارڈ ٹائم اسٹیمپ کے درمیان فرق پیرامیٹر سے زیادہ ہےCalcNet Interval * 1000، اس کا مطلب یہ ہے کہ یہ آخری بار سے اپ ڈیٹ کیا گیا ہے۔ اب تک ، اس سے زیادہ ہوچکا ہےCalcNetInterval * 1000ملی سیکنڈ (CalcNetIntervalسیکنڈ) ، جو باقاعدگی سے وقت پر پرنٹنگ آمدنی کا کام کرتا ہے۔ چونکہ ایک خریدنے کی قیمت کا استعمال آمدنی کا حساب کرنے کے لئے کیا جاتا ہے ، اس کی شرط ہے کہ اس کی آمدنی میں اضافہ ہوجائے۔self.orderBook.Bids.length > 0بھی شرط میں بیان کیا جاتا ہے (گہرائی کے اعداد و شمار، حکم کی فہرست میں درست سطح کی معلومات ہونا ضروری ہے).self.PreCalc = nowتازہ ترین پرنٹ شدہ واپسی کی ٹائم اسٹیمپ متغیر کو اپ ڈیٹ کرنے کے لئے پھانسی دی جاتی ہےself.preCalcموجودہ ٹائم اسٹیمپ پرnowیہاں، خالص قدر کے حساب کے طریقہ کار کو واپسی کے اعداد و شمار میں استعمال کیا جاتا ہے۔ کوڈ ہےvar net = _N(account.Balance + account.FrozenBalance + self.orderBook.Bids[0].Price * (account.Stocks + account.FrozenStocks))، یعنی، کرنسی کو پیسے میں تبدیل کریں (قیمت میں کرنسی) موجودہ خریدنے کی ایک قیمت کے مطابق، اور پھر اکاؤنٹ میں رقم کی رقم میں شامل کریں اور اس کا اعلان مقامی متغیر کو تفویض کریںnetفیصلہ کریں کہ موجودہ کل خالص مالیت آخری بار درج کل خالص مالیت کے مطابق ہے یا نہیں:

            if (net != self.preNet) {
                self.preNet = net
                LogProfit(net)
            }

اگر یہ مسلسل نہیں ہے، یہ ہے،net! = self.preNetدرست ہے تو، کی صفت کو اپ ڈیٹ کریںself.preNetمتغیر کے ساتھ خالص قیمت ریکارڈ کرنے کے لئے استعمال کیا جاتا ہےnet. پھر کل خالص پرنٹ کریںnetFMZ Quant ٹریڈنگ پلیٹ فارم روبوٹ کے پیداوار وکر چارٹ کے اعداد و شمار (کےLogProfitفنکشن FMZ API دستاویز میں سوال کیا جا سکتا ہے).

اگر آمدنی کی باقاعدگی سے پرنٹنگ شروع نہیں ہوتی ہے تو ، درج ذیل عمل کو جاری رکھیں تاکہ آمدنی کو ریکارڈ کیا جاسکے۔account.Stocks(کرنٹ اکاؤنٹ میں دستیاب کرنسی) اورaccount.Balance(کرنٹ اکاؤنٹ میں دستیاب کرنسی)self.BTCاورself.CNY. آفسیٹ پیمانے کا حساب لگائیں اور تفویض کو ریکارڈ کریںself.p.

self.p = self.btc * self.prices[self.prices.length-1] / (self.btc * self.prices[self.prices.length-1] + self.cny)

الگورتھم بھی بہت سادہ ہے، جو کرنسی کی موجودہ قیمت کا فیصد اکاؤنٹ کی کل خالص قیمت پر شمار کرنا ہے.

پیسے کے توازن (پوزشن) کو چالو کرنے کا فیصلہ کرنے کے بارے میں کیا خیال ہے؟ یہاں، میں 50٪ پلس یا مائنس 2 فیصد پوائنٹس کے طور پر بفر لے، اور بفر سے باہر توازن کو انجام دیتا ہے، یہ ہے کہ اگرself.p < 0.48، رقم کا توازن انحراف سے شروع ہوتا ہے۔ اگر رقم کم ہے تو ، قیمت ہر بار مارکیٹ کے افتتاح پر خریدنے کی پوزیشن سے 0.01 فیصد بڑھ جائے گی ، اور تین چھوٹے آرڈرز کا اہتمام کیا جائے گا۔ اسی طرح ، رقم کا توازنself.p > 0.52، اگر کرنسی زیادہ ہے تو، ایک فروخت اور چھوٹے احکامات جاری. آخر میں، انتظار کرنے کے بعد تمام احکامات منسوخSleep(BalanceTimeout)پیرامیٹرز کی ترتیبات کے مطابق ایک مخصوص وقت کے لئے.

        Var orders = exchange. Get Orders () # Get all current makers, with orders variable
        If (orders) { # If the variable orders used to obtain the current order data is not null
            for (var i = 0; i < orders.length; I + +) { # Loop through orders and cancel orders one by one
                if (orders[i].Id != self.tradeOrderId) {
                    Exchange. CancelOrder (orders [I]. Id) # Call exchange. CancelOrder to cancel orders based on orders [I]. Id
                }
            }
        }

چوتھا اضافی فنکشن:

حکمت عملی کے بنیادی حصے میں، یہاں اہم کھیل آتا ہے.self.poll = function(){...}اس سے پہلے کہ ہم نے پچھلے مضمون میں کہا تھا، اس سے پہلے کہ ہم نے اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ ہم اس سے پہلے کہ اس سےmain()تقریب کو چلانے کے لئے شروع ہوتا ہے اور لامحدود میں داخل ہوتا ہےwhileلوپ، ہم استعمال کرتے ہیںvar reaper = LeeksReaper()leeksreaper آبجیکٹ کی تعمیر، اور پھر لوپ کال کو انجام دینے کے لئےreaper.poll()میںmain() function.

کےself.pollتقریب کو انجام دینے کے لئے شروع ہوتا ہے، ہر لوپ سے پہلے کچھ تیاری کا کام کر رہا ہے.self.numTick++اضافہ ہوتا ہے.self.updateTrades()تازہ ترین مارکیٹ ٹریڈنگ ریکارڈ کو اپ ڈیٹ کرتا ہے اور متعلقہ استعمال کے اعداد و شمار کا حساب لگاتا ہے۔self.updateOrderBook()آرڈر کے اعداد و شمار کو اپ ڈیٹ کرتا ہے اور متعلقہ اعداد و شمار کا حساب لگاتا ہے۔self.balanceAccount()پیسے (پوزشن) بیلنس چیک کریں.

        Var burstPrice = self. Prices [self. Prices. Length-1] * BurstThresholdPct # Calculate Burst Price
        Var bull = false                   # Declare a bull-marked variable, initially false
        Var bear = false                  # Declare a bear marked variable, initially false
        Var tradeAmount = 0         # Declare the transaction amount variable, initially 0

اگلا قدم یہ فیصلہ کرنا ہے کہ موجودہ قلیل مدتی مارکیٹ بیل ہے یا ریچھ۔

        if (self.numTick > 2 && (
            self.prices[self.prices.length-1] - _.max(self.prices.slice(-6, -1)) > burstPrice ||
            self.prices[self.prices.length-1] - _.max(self.prices.slice(-6, -2)) > burstPrice && self.prices[self.prices.length-1] > self.prices[self.prices.length-2]
            )) {
            bull = true
            tradeAmount = self.cny / self.bidPrice * 0.99
        } else if (self.numTick > 2 && (
            self.prices[self.prices.length-1] - _.min(self.prices.slice(-6, -1)) < -burstPrice ||
            self.prices[self.prices.length-1] - _.min(self.prices.slice(-6, -2)) < -burstPrice && self.prices[self.prices.length-1] < self.prices[self.prices.length-2]
            )) {
            bear = true
            tradeAmount = self.btc
        }

کیا آپ کو یادself.updateOrderBook()پچھلے مضمون سے تقریب جہاں ہم نے ایک وزن اوسط الگورتھم کا استعمال کیا ایک وقت کا حکم دیا تعمیر کرنے کے لئےpricesتین نئے افعال:_.min, _.max، اورsliceکوڈ میں استعمال ہوتے ہیں اور وہ سمجھنے میں آسان ہیں۔

· _. min: فنکشن پیرامیٹر صف میں کم سے کم قدر تلاش کرنا ہے.

· _.max: فنکشن پیرامیٹر صف میں زیادہ سے زیادہ قدر تلاش کرنا ہے.

· slice: فنکشن ایک رکن فنکشن ہےJavaScriptarray object۔ یہ array کے ایک حصے کو انڈیکس کے مطابق واپس کرنے کے لئے استعمال ہوتا ہے۔ مثال کے طور پر:

function main() {
    // index     .. -8 -7 -6 -5 -4 -3 -2 -1
    var arr = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
    Log (arr. Slice (-5, -1))   // it will intercept the elements from 4 to 1 and return a new array: [4,3,2,1]
}

img

ریڑھ کی ہڈی یا بیل مارکیٹ کا جائزہ لینے کی شرائط یہ ہیں:

·self.numTick > 2سچ ہونا ضروری ہے، یعنی جب پتہ لگانے کی قیمت کا ایک نیا راؤنڈ شروع ہوتا ہے، تو اسے پتہ لگانے کے کم از کم تین راؤنڈ کے بعد چالو کرنا ضروری ہے، تاکہ شروع میں چالو کرنے سے بچنے کے لۓ. · آخری اعداد و شمار کے درمیان فرقself.pricesقیمت کے تسلسل، یعنی تازہ ترین اعداد و شمار، اور پچھلے رینج میں زیادہ سے زیادہ یا کم از کم قیمتself.pricesarray کے پھٹنے کی قیمت سے تجاوز کرنا چاہئےburstPrice.

اگر تمام شرائط درست ہیں، نشان زد کریںbullیاbearسچ کے طور پر، اور متغیر کو ایک قدر تفویضtradeAmountسٹڈ ٹرانزیکشن کی منصوبہ بندی کرنے کے لئے.

پھر، کے مطابقself.volاپ ڈیٹ اور پچھلے میں حساب کیا جاتا ہے.self.updateTrades()فنکشن،BurstThresholdVolپیرامیٹر کا تعین کرتا ہے کہ کیا ٹرانزیکشن شدت کو کم کرنا ہے (منصوبہ بند ٹرانزیکشن حجم کو کم کرنا) ۔

        if (self.vol < BurstThresholdVol) {
            TradeAmount * = self. Vol/BurstThresholdVol      //Reduce the planned volume by self. Vol/BurstThresholdVol times of the previous volume
        }
        
        if (self.numTick < 5) {
            TradeAmount * = 0.8      // reduced to 80% of the plan
        }
        
        If (self. NumTick < 10) {       // reduce to 80% of the plan
            tradeAmount *= 0.8
        }

اگلا، فیصلہ کریں کہ کیا ٹریڈنگ سگنل اور حجم ضروریات کو پورا کرتے ہیں:

        If ( (!Bull && !Bear) | | tradeAmount &lt; MinStock) {     # If it is not a bull market and not a bear market, or the amount tradeAmount planned to trade is less than the minimum trading volume MinStock set by the parameter, the poll function returns without trading operations directly
            return
        }

مذکورہ بالا فیصلے کے بعد، پھانسیvar tradePrice = bull ? self.bidPrice: self.askPriceٹرانزیکشن کی قیمت کا تعین کرتا ہے کہ آیا یہ ایک ریچھ مارکیٹ ہے یا ایک بیل مارکیٹ ، اور اس کی قیمت کو متعلقہ بل کی قیمت کے ساتھ تفویض کرتا ہے۔

آخر میں، ایکwhileلوپ میں داخل کیا جاتا ہے، اور لوپ کی واحد سٹاپ شرط یہ ہے کہtradeAmount > = MinStockکم از کم تجارتی حجم سے کم ہے۔ لوپ میں، حکم موجودہ مارکیٹ کی حالت کے مطابق عملدرآمد کیا جاتا ہے. اور متغیر میں آرڈر ID ریکارڈ.orderId. Sleep(200)ہر لوپ میں آرڈر دینے کے بعد 200 ملی سیکنڈ تک انتظار کرتا ہے۔ اس کے بعد لوپ کا تعین کرتا ہے کہ آیاorderIdدرست ہے (اگر آرڈر ناکام ہوجاتا ہے تو آرڈر ID واپس نہیں کیا جائے گا ، اور اگر شرط کو متحرک نہیں کیا جائے گا) ۔ اگر شرط درست ہے۔ آرڈر ID حاصل کریں اور اسے تفویض کریںself.tradeOrderId.

متغیر کا اعلان کریںorderآرڈر کے اعداد و شمار کو ذخیرہ کرنے کے لئے استعمال کیا جاتا ہے، جس کی ابتدائی قیمت ہےnull. پھر آئی ڈی کے آرڈر کے اعداد و شمار ایک لوپ میں حاصل کیا جاتا ہے، اور حکم بنانے والے ریاست ہے یا نہیں کا فیصلہ، اگر ایسا ہے تو، آئی ڈی کے حکم منسوخ کر دیا جاتا ہے، اور اگر نہیں، پتہ لگانے لوپ ختم ہو گیا ہے.

                Var order = null         // Declare a variable to hold the order data
                While (true) {             // a while loop
                    Order = exchange. GetOrder (orderId)          // Call GetOrder to query the order data whose order ID is orderId
                    If (order) {                                                   // If the order data is queried and the query fails and the order is null, the current if condition will not be triggered
                        If (order. Status = = ORDER _ STATE _ PENDING) {              // Judge whether the order status is maker
                            Exchange. CancelOrder (orderId)                                    // If the order is maker, cancel the order
                            Sleep(200)
                        } else {                                                                               // otherwise execute break to end the current while loop
                            break
                        }
                    }
                }

پھر مندرجہ ذیل عمل انجام دیا جاتا ہے:

                Self. TradeOrderId = 0                         // Reset self. TradeOrderId.
                TradeAmount-= order. DealAmount    // Update tradeAmount, subtract the quantity of the order on the bill of lading that has been completed
                TradeAmount * = 0.9                          //Decrease the order amount
                If (order. Status = = ORDER _ STATE _ CANCELED) {                   // if the order is already cancelled
                    Self. UpdateOrderBook ()                                                      // Update data such as order book
                    While (bull & & self. BidPrice-tradePrice &gt; 0.1) {               // In a bull market, if the updated bill of lading price exceeds the current trading price by 0.1, the trading amount will be reduced and the trading price will be adjusted slightly
                        tradeAmount *= 0.99
                        tradePrice += 0.1
                    }
                    While (bear & & self. AskPrice-tradePrice &lt; -0.1) {             // In a bear market, if the updated bill of lading price exceeds the current trading price by 0.1, the trading amount will be reduced and the trading price will be adjusted slightly
                        tradeAmount *= 0.99
                        tradePrice -= 0.1
                    }
                }

پروگرام کے عمل کے لوپ کے اختتام پر جبwhile (tradeAmount > = MinStock){...}، یہ اس قیمت دھماکے کے لین دین کے عمل کے عمل کو مکمل کیا جاتا ہے کہ ظاہر کرتا ہے. عملدرآمدself.numTick = 0، یعنی، ری سیٹ کریںself.numTick0 تک

کےLeeksReaper()کنسٹرکٹر واپس کرتا ہےselfکے اختتام پر اعتراض، یعنی، جبvar reaper = LeeksReaper()، اسے واپس کر دیا جاتا ہےreaper.

اب تک، ہم نے تجزیہ کیا ہے کہ کس طرحLeeksReaper()کنسٹرکٹر لیکس ریپر آبجیکٹ ، لیکس ریپر آبجیکٹ کا ہر طریقہ ، اور اہم منطقی افعال کے عمل کو تشکیل دیتا ہے۔ مجھے یقین ہے کہ اس مضمون کو پڑھنے کے بعد آپ کو اس اعلی تعدد حکمت عملی الگورتھم کے عمل کی واضح تفہیم ہوگی۔


متعلقہ

مزید