براہ کرم بتائیں کہ اگر آپ کے پاس اسی سمت میں اسٹاک موجود ہے اور آپ کو کوئی نیا آرڈر نہیں مل رہا ہے تو آپ کو اس سگنل وصول کرنے کے طریقہ کار کو کیسے تبدیل کرنا چاہئے؟

مصنف:جیٹر, تخلیق: 2023-01-26 20:31:05, تازہ کاری:

/*بیک ٹیسٹ آغاز: 2022-01-15 00:00:00 اختتام: 2023-01-21 00:00:00 مدت: 1 گھنٹہ بیسپیریڈ: 15 میٹر تبادلے: {eid:Futures_Binance,currency:ETH_USDT}] */

// سگنل کی ساخت var ٹیمپلیٹ = { Flag: 45M103Buy, // علامت (لوگو) ، اپنی مرضی کے مطابق مقرر کیا جا سکتا ہے ایکسچینج: 1، // مخصوص ایکسچینج ٹریڈنگ جوڑی کرنسی: ETH_USDT , // ٹرانزیکشن جوڑی ContractType: swap, // معاہدہ کی قسم,swap,quarter,next_quarter, فوری طور پر بھرنے کی جگہ قیمت: -1، // کھلنے یا ختم ہونے کی قیمت، -1 مارکیٹ کی قیمت Action: long, // ٹرانزیکشن کی قسم [ buy: فوری طور پر خریدنا, sell: فوری طور پر فروخت کرنا, long: فیوچر زیادہ کرنا, short: فیوچر خالی کرنا, closesell: فیوچر خریدنے کے لئے خالی, closebuy: فیوچر فروخت کرنے کے لئے سستا] رقم: 0، // تجارت کی مقدار }

var BaseUrl = https://www.fmz.com/api/v1 // FMZ توسیع API انٹرفیس ایڈریس var RobotId = _G() // موجودہ ڈسک ID var Success = #5cb85c // کامیابی کا رنگ var Danger = #ff0000 // خطرناک رنگ var Warning = #f0ad4e // انتباہی رنگ var buffSignal = []

// چیک سگنل پیغام کی شکل function DiffObject ((object1، object2) { const keys1 = Object.keys ((object1)) const keys2 = Object.keys ((object2)) if (keys1.length!== keys2.length) { واپس جھوٹا } for (let i = 0؛ i < keys1.length; i++) { if (keys1[i]!== keys2[i]) { واپس جھوٹا } } واپسی درست }

چیک کریںSignal ((Signal) { سگنل.قیمت = پارس فلوٹ ((سگنل.قیمت) Signal.Amount = parseFloat ((Signal.Amount) اگر (Signal.Exchange<= 0 کے بعد!نمبر.انٹیجر ہے(Signal.Exchange{ Log ((جنگل تبادلہ کی کم از کم تعداد 1 ہے اور یہ ایک عدد جنگل ، خطرہ ہے) واپسی } if (Signal.Amount <= 0 の の typeof ((Signal.Amount)!= number ) { لاگ ((سگنل کی رقم 0 سے کم نہیں ہوسکتی ہے، اور اس کی تعداد کی قسم ہے لاگ، typeof ((Signal.Amount، Danger) واپسی } if (typeof ((Signal.Price)!= number ) { Log ((پانی کی قیمت کو عددی پانی ہونا ضروری ہے، خطرہ)) واپسی } if (Signal.ContractType == spot لنک && Signal.Action!= buy لنک && Signal.Action!= sell لنک) { Log (ایکشن غلطی، ایکشن: ایشن، سگنل.ایکشن، خطرہ) واپسی } if (Signal.ContractType!= spot && Signal.Action!= long && Signal.Action!= short && Signal.Action!= closesell && Signal.Action!= closebuy) { Log (ملاحظہ کریں) (ملاحظہ کریں) واپسی } واپسی درست }

فنکشن کمانڈRobot(url, accessKey, secretKey, robotId, cmd) { //https://www.fmz.com/api/v1?access_key=xxx&secret_key=xxx&method=CommandRobot&args=[xxx+""] url = url + ؟access_key= + accessKey + &secret_key= + secretKey + &method=CommandRobot&args=[ + robotId + ,+""] var پوسٹ ڈیٹا = { method: پوسٹ ٹائپ کریں، ڈیٹا: cmd } var headers = User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36\nContent-Type: application/json var ret = HttpQuery ((url، postData، آرک، ہیڈر) لاگ (( ٹریڈنگ ویو کی ویب ہوک درخواست کی نقل کرتا ہے ، جس میں ٹیسٹ کے لئے پی او ایس ٹی کی درخواستیں بھیجی جاتی ہیں: ، یو آر ایل ، body: ، cmd ، جواب: ، ret) }

فنکشن createManager() { var خود = {} self.tasks = []

self.process = function() {
    var processed = 0
    if (self.tasks.length > 0) {
        _.each(self.tasks, function(task) {
            if (!task.finished) {
                processed++
                self.pollTask(task)
            }
        })
        if (processed == 0) {
            self.tasks = []
        }
    }
}

self.newTask = function(signal) {
    // {"Flag":"45M103Buy","Exchange":1,"Currency":"BTC_USDT","ContractType":"swap","Price":"10000","Action":"buy","Amount":"0"}
    var task = {}
    task.Flag = signal["Flag"]
    task.Exchange = signal["Exchange"]
    task.Currency = signal["Currency"]
    task.ContractType = signal["ContractType"]
    task.Price = signal["Price"]
    task.Action = signal["Action"]
    task.Amount = signal["Amount"]
    task.exchangeIdx = signal["Exchange"] - 1
    task.pricePrecision = null
    task.amountPrecision = null 
    task.error = null 
    task.exchangeLabel = exchanges[task.exchangeIdx].GetLabel()
    task.finished = false 
    
    Log("创建任务:", task)
    self.tasks.push(task)
}

self.getPrecision = function(n) {
    var precision = null 
    var arr = n.toString().split(".")
    if (arr.length == 1) {
        precision = 0
    } else if (arr.length == 2) {
        precision = arr[1].length
    } 
    return precision
}

self.pollTask = function(task) {
    var e = exchanges[task.exchangeIdx]
    var name = e.GetName()
    var isFutures = true
    e.SetCurrency(task.Currency)
    if (task.ContractType != "spot" && name.indexOf("Futures_") != -1) {
        // 非现货,则设置合约
        e.SetContractType(task.ContractType)
    } else if (task.ContractType == "spot" && name.indexOf("Futures_") == -1) {
        isFutures = false 
    } else {
        task.error = "指令中的ContractType与配置的交易所对象类型不匹配"
        return 
    }
    
    var depth = e.GetDepth()
    if (!depth || !depth.Bids || !depth.Asks) {
        task.error = "订单薄数据异常"
        return 
    }
    
    if (depth.Bids.length == 0 && depth.Asks.length == 0) {
        task.error = "盘口无订单"
        return 
    }
    
    _.each([depth.Bids, depth.Asks], function(arr) {
        _.each(arr, function(order) {
            var pricePrecision = self.getPrecision(order.Price)
            var amountPrecision = self.getPrecision(order.Amount)
            if (Number.isInteger(pricePrecision) && !Number.isInteger(self.pricePrecision)) {
                self.pricePrecision = pricePrecision
            } else if (Number.isInteger(self.pricePrecision) && Number.isInteger(pricePrecision) && pricePrecision > self.pricePrecision) {
                self.pricePrecision = pricePrecision
            }
            if (Number.isInteger(amountPrecision) && !Number.isInteger(self.amountPrecision)) {
                self.amountPrecision = amountPrecision
            } else if (Number.isInteger(self.amountPrecision) && Number.isInteger(amountPrecision) && amountPrecision > self.amountPrecision) {
                self.amountPrecision = amountPrecision
            }
        })
    })

    if (!Number.isInteger(self.pricePrecision) || !Number.isInteger(self.amountPrecision)) {
        task.err = "获取精度失败"
        return 
    }
    
    e.SetPrecision(self.pricePrecision, self.amountPrecision)
    
    // buy:现货买入 , sell:现货卖出 , long:期货做多 , short:期货做空 , closesell:期货买入平空 , closebuy:期货卖出平多
    var direction = null 
    var tradeFunc = null 
    if (isFutures) {
        switch (task.Action) {
            case "long": 
                direction = "buy"
                tradeFunc = e.Buy 
                break
            case "short": 
                direction = "sell"
                tradeFunc = e.Sell
                break
            case "closesell": 
                direction = "closesell"
                tradeFunc = e.Buy 
                break
            case "closebuy": 
                direction = "closebuy"
                tradeFunc = e.Sell
                break
        }
        if (!direction || !tradeFunc) {
            task.error = "交易方向错误:" + task.Action
            return 
        }
        e.SetDirection(direction)
    } else {
        if (task.Action == "buy") {
            tradeFunc = e.Buy 
        } else if (task.Action == "sell") {
            tradeFunc = e.Sell 
        } else {
            task.error = "交易方向错误:" + task.Action
            return 
        }
    }
    var id = tradeFunc(task.Price, task.Amount)
    if (!id) {
        task.error = "下单失败"
    }
    
    task.finished = true
}

return self

}

var مینیجر = createManager ((() function HandleCommand ((signal) { ہینڈل کمانڈ (signal) { // چیک کرتا ہے کہ آیا انٹرایکٹو کمانڈ موصول ہوئی ہے if (signal) { لاگ (( موصول ہونے والی انٹرایکٹو ہدایات:, signal) // موصول ہونے والی انٹرایکٹو ہدایات، پرنٹ ہونے والی انٹرایکٹو ہدایات } else { واپسی // براہ راست واپسی جب موصول نہیں ہوتا ہے، عمل نہیں کرتا }

// 检测交互指令是否是测试指令,测试指令可以由当前策略交互控件发出来进行测试
if (signal.indexOf("TestSignal") != -1) {
    signal = signal.replace("TestSignal:", "")
    // 调用FMZ扩展API接口,模拟Trading View的webhook,交互按钮TestSignal发送的消息:{"Flag":"45M103Buy","Exchange":1,"Currency":"BTC_USDT","ContractType":"swap","Price":"10000","Action":"buy","Amount":"0"}
    commandRobot(BaseUrl, FMZ_AccessKey, FMZ_SecretKey, RobotId, signal)
} else if (signal.indexOf("evalCode") != -1) {
    var js = signal.split(':', 2)[1]
    Log("执行调试代码:", js)
    eval(js)
} else {
    // 处理信号指令
    objSignal = JSON.parse(signal)
    if (DiffObject(Template, objSignal)) {
        Log("接收到交易信号指令:", objSignal)
        buffSignal.push(objSignal)
        
        // 检查交易量、交易所编号
        if (!CheckSignal(objSignal)) {
            return
        }
        
        // 创建任务
        manager.newTask(objSignal)
    } else {
        Log("指令无法识别", signal)
    }
}

}

function main (() { Log (( WebHook ایڈریس: ہہ، ہہhttps://www.fmz.com/api/v1?access_key= + FMZ_AccessKey + &secret_key= + FMZ_SecretKey + &method=CommandRobot&args=[ + RobotId + ,+""], Danger) Log ((مختلف تجارت کی قسمیں[ buy: فوری طور پر خریدنا ، sell: فوری طور پر فروخت کرنا ، long: فیوچر زیادہ کرنا ، short: فیوچر خالی کرنا ، closesell: فیوچر خریدنے میں خالی ، closebuy: فیوچر فروخت کرنے میں سستا] لاگ (شامل کریں) کمانڈ ٹیمپلیٹ: شامل کریں، JSON.stringify (شامل کریں) ، Danger

while (true) {
    try {
        // 处理交互
        HandleCommand(GetCommand())
        
        // 处理任务
        manager.process()
        
        if (buffSignal.length > maxBuffSignalRowDisplay) {
            buffSignal.shift()
        }
        var buffSignalTbl = {
            "type" : "table",
            "title" : "信号记录",
            "cols" : ["Flag", "Exchange", "Currency", "ContractType", "Price", "Action", "Amount"],
            "rows" : []
        }
        for (var i = buffSignal.length - 1 ; i >= 0 ; i--) {
            buffSignalTbl.rows.push([buffSignal[i].Flag, buffSignal[i].Exchange, buffSignal[i].Currency, buffSignal[i].ContractType, buffSignal[i].Price, buffSignal[i].Action, buffSignal[i].Amount])
        }
        LogStatus(_D(), "\n", "`" + JSON.stringify(buffSignalTbl) + "`")
        Sleep(1000 *SleePinterval )
    } catch (error) {
        Log("e.name:", error.name, "e.stack:", error.stack, "e.message:", error.message)
        Sleep(1000 * 5)
    }
}

}


مزید

مدد کے لئے کلک کریں (تصویر پر رابطہ کریں)exchange.GetPosition (()) ، موجودہ ہولڈنگ کی معلومات حاصل کرتا ہے۔ اگر زیادہ ہولڈنگ 0 سے زیادہ ہے تو ، آرڈر نہ کریں۔

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

جیٹربہت اچھا۔ شکریہ! کیا یہ کوڈ ہے؟ var nowRefPosAmount = getPosAmount ((_C ((exchange.GetPosition) ، ct) var x = owRefPosAmount.long var y = owRefPosAmount.short کیا آپ اس سی ٹی کو چاہتے ہیں؟

جیٹربہت اچھا۔ شکریہ!