وسائل لوڈ ہو رہے ہیں... لوڈنگ...

ایک اور ٹریڈنگ ویو سگنل عملدرآمد کی حکمت عملی اسکیم

مصنف:FMZ~Lydia, تخلیق: 2022-12-15 21:23:24, تازہ کاری: 2023-09-18 20:01:55

img

ایک اور ٹریڈنگ ویو سگنل عملدرآمد کی حکمت عملی اسکیم

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

منظرنامے اور اصول

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

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

  2. اصول:

img

پورے نظام میں چار موضوعات شامل ہیں، جو مختصر طور پر مندرجہ ذیل ہیں:

img

لہذا اگر آپ اسے ان طریقوں سے استعمال کرنا چاہتے ہیں، تو آپ کو ان تیاریوں کی ضرورت ہے:

  1. ٹریڈنگ ویو پر چلنے والی اسکرپٹ FMZ کے توسیع شدہ API انٹرفیس کو سگنل کی درخواستیں بھیجنے کے لئے ذمہ دار ہے۔ ٹریڈنگ ویو اکاؤنٹ کم از کم PRO ممبر ہونا ضروری ہے۔
  2. ایف ایم زیڈ پر ڈوکر پروگرام کو تعینات کرنے کے ل it ، اسے اس قسم کی ضرورت ہے جو تبادلہ انٹرفیس تک رسائی حاصل کرسکے (جیسے سنگاپور ، جاپان ، ہانگ کانگ ، وغیرہ میں سرورز) ۔
  3. ایکسچینج کی API KEY کو (آرڈر کی جگہ) آپریشن کے لئے تشکیل دیں جب FMZ پر ٹریڈنگ ویو سگنل بھیجا جاتا ہے۔
  4. آپ کو ایک TradingView سگنل عملدرآمد کی حکمت عملی ، جو بنیادی طور پر اس مضمون میں بحث کی ضرورت ہے.

ٹریڈنگ ویو سگنل عملدرآمد کی حکمت عملی

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

img

پھر ٹریڈنگ ویو کو ترتیب دیا جاسکتا ہے جیسا کہ شبیہہ میں دکھایا گیا ہے تاکہ پیغام کو درخواست باڈی میں لکھیں اور اسے ایف ایم زیڈ کے توسیعی API انٹرفیس پر بھیجیں۔ ایف ایم زیڈ کے توسیعی API انٹرفیس کو کیسے کال کریں؟

FMZ کے توسیع API انٹرفیس کی ایک سیریز میں، ہم استعمال کرنے کی ضرورت ہےCommandRobotانٹرفیس، جسے عام طور پر مندرجہ ذیل کہا جاتا ہے:

https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyyy&method=CommandRobot&args=[186515,"ok12345"]

کےaccess_keyاورsecret_keyمیںqueryاس درخواست کا یو آر ایل توسیع شدہ ہےAPI KEYFMZ پلیٹ فارم کے، یہاں ڈیمو سیٹ کرنے کے لئےxxxاورyyyy. پھر کس طرح اس کلید تخلیق کرنے کے لئے؟ اس صفحے میں:https://www.fmz.com/m/account، اس پر تخلیق کریں، اسے مناسب طریقے سے رکھیں، اسے ظاہر نہ کریں.

img

واپس نقطہ پر، کی انٹرفیس مسئلہ کے بارے میں بات کرنے کے لئے جاری رکھیںCommandRobot. اگر آپ کو رسائی کی ضرورت ہےCommandRobotانٹرفیس،methodدرخواست میں مقرر کیا جائے گا:CommandRobot.CommandRobotانٹرفیس FMZ پلیٹ فارم کے ذریعے ایک ID کے ساتھ ایک حقیقی بوٹ کو ایک انٹرایکٹو پیغام بھیجنے کے لئے ہے، تو پیرامیٹرargsاصل بوٹ ID اور پیغام پر مشتمل ہے. مندرجہ بالا درخواست یو آر ایل مثال پیغام بھیجنے کے لئے ہےok12345ایک حقیقی بوٹ پروگرام کے لئے ایک ID کے ساتھ 186515

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

https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyyy&method=CommandRobot&args=[130350,+""]

اس طرح کی درخواست کی درخواست میں جسم کے مواد کو ایک انٹرایکٹو پیغام کے طور پر آئی ڈی کے ساتھ حقیقی بوٹ کو بھیج سکتے ہیں130350ایف ایم زیڈ پلیٹ فارم کے ذریعے۔ اگر ٹریڈنگ ویو پر پیغام کو:{"close": {{close}}, "name": "aaa"}، پھر اصلی روبوٹ ID کے ساتھ130350انٹرایکٹو ہدایات حاصل کریں گے:{"close": 39773.75, "name": "aaa"}

تاکہ TradingView سگنل ایگزیکیوشن حکمت عملی انٹرایکٹو کمانڈ وصول کرتے وقت TradingView کی طرف سے بھیجے گئے کمانڈ کو صحیح طریقے سے سمجھ سکے، مندرجہ ذیل پیغام فارمیٹس پر پہلے سے اتفاق کیا جانا چاہئے:

{
    Flag: "45M103Buy",     // Marker, which can be specified at will
    Exchange: 1,           // Specify exchange trading pairs
    Currency: "BTC_USDT",  // Trading pair
    ContractType: "swap",  // Contract type, swap, quarter, next_quarter, fill in spot for spot
    Price: "{{close}}",    // Opening position or closing position price, -1 is the market price
    Action: "buy",         // Transaction type [buy: spot buying, sell: spot selling, long: go long futures, short: go short futures, closesell: buy futures and close short positions, close buy: sell futures and close long positions]
    Amount: "0",           // Transaction amount
}

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

اگلا، آپ حکمت عملی کا کوڈ ڈیزائن کر سکتے ہیں۔ مکمل حکمت عملی کا کوڈ:

//Signal structure
var Template = {
    Flag: "45M103Buy",     // Marker, which can be specified at will
    Exchange: 1,           // Specify exchange trading pairs
    Currency: "BTC_USDT",  // Trading pair
    ContractType: "swap",  // Contract type, swap, quarter, next_quarter, fill in spot for spot
    Price: "{{close}}",    // Opening position or closing position price, -1 is the market price
    Action: "buy",         // Transaction type [buy: spot buying, sell: spot selling, long: go long futures, short: go short futures, closesell: buy futures and close short positions, close buy: sell futures and close long positions]
    Amount: "0",           // Transaction amount
}

var BaseUrl = "https://www.fmz.com/api/v1"   // FMZ extended API interface address
var RobotId = _G()                           // Current real bot ID
var Success = "#5cb85c"    // Color for success
var Danger = "#ff0000"     // Color for danger
var Warning = "#f0ad4e"    // Color for alert
var buffSignal = []

// Check signal message format
function DiffObject(object1, object2) {
    const keys1 = Object.keys(object1)
    const keys2 = Object.keys(object2)
    if (keys1.length !== keys2.length) {
        return false
    }
    for (let i = 0; i < keys1.length; i++) {
        if (keys1[i] !== keys2[i]) {
            return false
        }
    }
    return true
}

function CheckSignal(Signal) {
    Signal.Price = parseFloat(Signal.Price)
    Signal.Amount = parseFloat(Signal.Amount)
    if (Signal.Exchange <= 0 || !Number.isInteger(Signal.Exchange)) {
        Log("The minimum number of the exchange is 1 and it is an integer", Danger)
        return
    }
    if (Signal.Amount <= 0 || typeof(Signal.Amount) != "number") {
        Log("The transaction amount cannot be less than 0 and it is numerical type", typeof(Signal.Amount), Danger)
        return
    }
    if (typeof(Signal.Price) != "number") {
        Log("Price must be a value", Danger)
        return
    }
    if (Signal.ContractType == "spot" && Signal.Action != "buy" && Signal.Action != "sell") {
        Log("The command is to operate spot, Action error, Action:", Signal.Action, Danger)
        return 
    }
    if (Signal.ContractType != "spot" && Signal.Action != "long" && Signal.Action != "short" && Signal.Action != "closesell" && Signal.Action != "closebuy") {
        Log("The command is to operate future, Action error, Action:", Signal.Action, Danger)
        return 
    }
    return true
}

function commandRobot(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 postData = {
        method:'POST', 
        data: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, "", headers)
    Log("Simulate a webhook request from TradingView, sending a POST request for testing purposes:", url, "body:", cmd, "response:", ret)
}

function createManager() {
    var self = {}
    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("Create task:", 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) {
            // Non-spot, then set the contract
            e.SetContractType(task.ContractType)
        } else if (task.ContractType == "spot" && name.indexOf("Futures_") == -1) {
            isFutures = false 
        } else {
            task.error = "The ContractType in the command does not match the configured exchange object type"
            return 
        }
        
        var depth = e.GetDepth()
        if (!depth || !depth.Bids || !depth.Asks) {
            task.error = "Order book data exception"
            return 
        }
        
        if (depth.Bids.length == 0 && depth.Asks.length == 0) {
            task.error = "No orders on the market entry position"
            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 = "Failed to obtain precision"
            return 
        }
        
        e.SetPrecision(self.pricePrecision, self.amountPrecision)
        
        // buy: spot buying, sell: spot selling, long: go long futures, short: go short futures, closesell: buy futures and close short positions, close buy: sell futures and close long positions
        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 = "Wrong transaction direction:" + 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 = "Wrong transaction direction:" + task.Action
                return 
            }
        }
        var id = tradeFunc(task.Price, task.Amount)
        if (!id) {
            task.error = "Failed to place an order"
        }
        
        task.finished = true
    }
    
    return self
}

var manager = createManager()
function HandleCommand(signal) {
    // Detect whether interactive command is received
    if (signal) {
        Log("Receive interactive command:", signal)     // Receive the interactive command, print the interactive command
    } else {
        return                            // If it is not received, it will be returned directly without processing
    }
    
    // Check whether the interactive command is a test instruction. The test instruction can be sent out by the current strategy interaction control for testing
    if (signal.indexOf("TestSignal") != -1) {
        signal = signal.replace("TestSignal:", "")
        // Call the FMZ extended API interface to simulate the webhook of the TradingView, and the message sent by the interactive button 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("Execute debug code:", js)
        eval(js)
    } else {
        // Process signal command
        objSignal = JSON.parse(signal)
        if (DiffObject(Template, objSignal)) {
            Log("Received transaction signal command:", objSignal)
            buffSignal.push(objSignal)
            
            // Check the trading volume and exchange number
            if (!CheckSignal(objSignal)) {
                return
            }
            
            // Create task
            manager.newTask(objSignal)
        } else {
            Log("Command cannot be recognized", signal)
        }
    }
}

function main() {
    Log("WebHook address:", "https://www.fmz.com/api/v1?access_key=" + FMZ_AccessKey + "&secret_key=" + FMZ_SecretKey + "&method=CommandRobot&args=[" + RobotId + ',+""]', Danger)
    Log("Transaction type [buy: spot buying, sell: spot selling, long: go long futures, short: go short futures, closesell: buy futures and close short positions, close buy: sell futures and close long positions]", Danger)
    Log("Command template:", JSON.stringify(Template), Danger)
    
    while (true) {
        try {
            // Process interactions
            HandleCommand(GetCommand())
            
            // Process tasks
            manager.process()
            
            if (buffSignal.length > maxBuffSignalRowDisplay) {
                buffSignal.shift()
            }
            var buffSignalTbl = {
                "type" : "table",
                "title" : "Signal recording",
                "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 * 10)
        }
    }
}

حکمت عملی کے پیرامیٹرز اور تعاملات:

img

Trading View Signal Execution Strategy کا مکمل حکمت عملی پتہ:https://www.fmz.com/strategy/392048

سادہ ٹیسٹ

حکمت عملی کو چلانے سے پہلے ، تبادلہ آبجیکٹ کو تشکیل دیا جانا چاہئے ، اور دو پیرامیٹرز AccessKey on FMZ Platform اور SecretKey on FMZ Platform کو حکمت عملی کے پیرامیٹرز میں ترتیب دیا جانا چاہئے۔ چلانے پر ، یہ دکھائے گا:

img

یہ WebHook ایڈریس، حمایت کارروائی کے احکامات، اور پیغام کی شکل ہے کہ TradingView پر بھرنے کی ضرورت ہے پرنٹ کریں گے. اہم بات یہ ہے کہ WebHook ایڈریس ہے:

https://www.fmz.com/api/v1?access_key=22903bab96b26584dc5a22522984df42&secret_key=73f8ba01014023117cbd30cb9d849bfc&method=CommandRobot&args=[505628,+""]

بس کاپی کریں اور براہ راست ٹریڈنگ ویو پر متعلقہ مقام پر پیسٹ کریں.

اگر آپ ٹریڈنگ ویو کی طرف سے بھیجے گئے سگنل کی نقل کرنا چاہتے ہیں تو، آپ حکمت عملی کے تعامل پر ٹیسٹ سگنل بٹن پر کلک کر سکتے ہیں.

img

یہ حکمت عملی اپنی ہی درخواست بھیجتی ہے (ایک سگنل کی درخواست بھیجنے والے ٹریڈنگ ویو کی تقلید کرتی ہے) ، FMZ کے توسیعی API انٹرفیس کو کال کرکے حکمت عملی کو خود پیغام بھیجنے کے لئے:

{"Flag":"45M103Buy","Exchange":1,"Currency":"BTC_USDT","ContractType":"swap","Price":"16000","Action":"buy","Amount":"1"}

موجودہ حکمت عملی ایک اور انٹرایکٹو پیغام وصول کرے گا اور عملدرآمد، اور لین دین کے لئے ایک آرڈر رکھیں گے.

اصل منظر میں ٹریڈنگ ویو کا استعمال کرنے کا ٹیسٹ

ٹریڈنگ ویو ٹیسٹ کا استعمال کرنے کے لئے ضروری ہے کہ ٹریڈنگ ویو اکاؤنٹ پرو سطح پر ہو۔ ٹیسٹ سے پہلے ، آپ کو کچھ پیشگی علم کی ضرورت ہے۔

مثال کے طور پر ایک سادہ PINE اسکرپٹ لیں (TradingView پر تصادفی طور پر پایا اور ترمیم)

//@version=5
strategy("Consecutive Up/Down Strategy", overlay=true)
consecutiveBarsUp = input(3)
consecutiveBarsDown = input(3)
price = close
ups = 0.0
ups := price > price[1] ? nz(ups[1]) + 1 : 0
dns = 0.0
dns := price < price[1] ? nz(dns[1]) + 1 : 0
if (not barstate.ishistory and ups >= consecutiveBarsUp and strategy.position_size <= 0)
    action = strategy.position_size < 0 ? "closesell" : "long"
    strategy.order("ConsUpLE", strategy.long, 1, comment=action)
if (not barstate.ishistory and dns >= consecutiveBarsDown and strategy.position_size >= 0)
    action = strategy.position_size > 0 ? "closebuy" : "short"
    strategy.order("ConsDnSE", strategy.short, 1, comment=action)
  1. PINE اسکرپٹ کچھ معلومات منسلک کر سکتے ہیں جب اسکرپٹ حکم کی ہدایات بھیجتا ہے

مندرجہ ذیل پلیس ہولڈرز ہیں. مثال کے طور پر، اگر میں لکھتا ہوں{{strategy.order.contracts}}انتباہ کے message باکس میں ، جب آرڈر ٹرگر ہوتا ہے تو ایک پیغام بھیجا جائے گا (انتباہ ، میل پش ، ویب ہک یو آر ایل کی درخواست ، پاپ اپ ، وغیرہ کی ترتیبات کے مطابق) ، اور پیغام میں اس بار عمل میں آنے والے احکامات کی تعداد شامل ہوگی۔

{{strategy.position_size}}- پائن میں ایک ہی مطلوبہ الفاظ کی قدر واپس، یعنی موجودہ پوزیشن کا سائز.{{strategy.order.action}}- واپس string buy یا sell عملدرآمد کے حکم کے لئے.{{strategy.order.contracts}}- معاہدوں کی تعداد جس کے لئے احکامات پر عملدرآمد کیا گیا ہے واپس.{{strategy.order.price}}- عملدرآمد کے حکم کی قیمت واپس.{{strategy.order.id}}- عملدرآمد کے حکم کی شناخت واپس (فنانشن کالز میں سے ایک میں پہلا پیرامیٹر کے طور پر استعمال کیا تار ہے کہ حکم پیدا: strategy.entry،strategy.exitیا حکمت عملی.آرڈر).{{strategy.order.comment}}- عملدرآمد کے حکم کا تبصرہ واپس کریں (آرڈر پیدا کرنے والے فنکشن کالز میں سے ایک میں تبصرہ پیرامیٹر میں استعمال کیا سٹرنگ: strategy.entry،strategy.exit، یا حکمت عملی.آرڈر) ۔ اگر کوئی تبصرہ نہیں کیا جاتا ہے تو ،strategy.order.idاستعمال کیا جائے گا.{{strategy.order.alert_message}}- alert_message پیرامیٹر کی قدر واپس کرتا ہے جو حکمت عملی میں استعمال کیا جا سکتا ہے s پائن کوڈ جب آرڈر رکھنے کے لئے استعمال ہونے والے افعال میں سے ایک کو کال کریں: حکمت عملی.انٹری،strategy.exit، یا strategy.order۔ یہ صرف پائن v4 میں معاون ہے۔{{strategy.market_position}}- ایک تار کے طور پر حکمت عملی کی موجودہ پوزیشن واپس: long، flat، یا short.{{strategy.market_position_size}}- موجودہ پوزیشن کا سائز مطلق قدر (یعنی غیر منفی تعداد) کی شکل میں لوٹاتا ہے۔{{strategy.prev_market_position}}- ایک تار کے طور پر حکمت عملی کی پچھلی پوزیشن واپس: long، flat، یا short.{{strategy.prev_market_position_size}}- ایک مطلق قدر کی شکل میں پچھلی پوزیشن کا سائز لوٹاتا ہے (یعنی ، ایک غیر منفی نمبر) ۔

  1. TradingView سگنل عملدرآمد کی حکمت عملی کے ساتھ مل کر پیغامات کی تعمیر
{
    "Flag":"{{strategy.order.id}}",
    "Exchange":1,
    "Currency":"BTC_USDT",
    "ContractType":"swap",
    "Price":"-1",
    "Action":"{{strategy.order.comment}}",
    "Amount":"{{strategy.order.contracts}}"
}
  1. PINE اسکرپٹ کے چلانے کے مطابق TradingView ایک سگنل بھیج دیں. آپ TradingView پر اسکرپٹ لوڈ کرتے وقت ایک انتباہ مقرر کرنے کی ضرورت ہے

جب ٹریڈنگ ویو پر PINE اسکرپٹ ٹرانزیکشن کو ٹرگر کرتا ہے تو ، ایک ویب ہک یو آر ایل کی درخواست بھیجی جائے گی۔

img

FMZ حقیقی روبوٹ اس سگنل کو انجام دے گا.

img

اس مضمون کا کوڈ صرف حوالہ کے لیے ہے، اور آپ اسے اپنے استعمال میں خود ایڈجسٹ اور بڑھا سکتے ہیں۔


متعلقہ

مزید