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

مصنف:چھوٹا سا خواب, تخلیق: 2022-11-30 10:52:07, تازہ کاری: 2023-09-18 20:01:09

[TOC]

img

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

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

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

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

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

2، اصول:

img

اس منصوبے میں چار موضوعات شامل ہیں جن میں سے کچھ یہ ہیں:

نمبر موضوع تفصیل
1 ٹریڈنگ ویو (تصویر میں ٹریڈنگ ویو) ٹریڈنگ ویو پر پائن اسکرپٹ چل رہا ہے جو FMZ کے توسیعی API انٹرفیس تک رسائی حاصل کرنے کے لئے سگنل بھیج سکتا ہے
2 ایف ایم زیڈ پلیٹ فارم (تصویر میں ایف ایم زیڈ پلیٹ فارم (ویب سائٹ)) ڈسک کا انتظام، ڈسک کے صفحے پر انٹرایکٹو ہدایات بھیجنے کے قابل، اور ایک توسیع API انٹرفیس کے ذریعے FMZ پلیٹ فارم کو ڈسک کی پالیسیوں کے لئے میزبانوں کو انٹرایکٹو ہدایات بھیجنے کے قابل
3 مینیجر سافٹ ویئر پر اصلی ڈسک پروگرام (تصویر میں ایف ایم زیڈ حکمت عملی روبوٹ) ٹریڈنگ ویو سگنل پر عملدرآمد کی حکمت عملی اصل میں چل رہا ہے
4 ایکسچینج (تصویر میں exchange) ایکسچینج جس میں فلیٹ پر ترتیب دیا گیا ہے، جس میں منتظم پر فلیٹ پر عملدرآمد براہ راست درخواست کی درخواست کرنے والے ایکسچینج کو بھیجتا ہے

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

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

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

img

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

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

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

یہ درخواست یو آر ایلqueryاندرونیaccess_keyاورsecret_keyایف ایم زیڈ پلیٹ فارم کی توسیعAPI KEYیہاں ڈیمو ہے، تو اس کے لئے مقرر کیا جاتا ہےxxxاورyyyyاس صفحے پر: "کیے" کا استعمال کرتے ہوئے ، آپ کو یہ معلوم ہونا چاہئے کہ کیے کو کیسے بنایا گیا ہے۔https://www.fmz.com/m/accountاس کے علاوہ ، آپ کو یہ بھی بتانا چاہئے کہ آپ نے اس کے بارے میں کیا سوچا ہے۔

img

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

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

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

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

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

{
    Flag: "45M103Buy",     // 标识,可随意指定
    Exchange: 1,           // 指定交易所交易对
    Currency: "BTC_USDT",  // 交易对
    ContractType: "swap",  // 合约类型,swap,quarter,next_quarter,现货填写spot
    Price: "{{close}}",    // 开仓或者平仓价格,-1为市价
    Action: "buy",         // 交易类型[ buy:现货买入 , sell:现货卖出 , long:期货做多 , short:期货做空 , closesell:期货买入平空 , closebuy:期货卖出平多]
    Amount: "0",           // 交易量
}

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

اس کے بعد آپ کو حکمت عملی کا کوڈ ڈیزائن کرنے کی ضرورت ہے، مکمل حکمت عملی کا کوڈ:

//信号结构
var Template = {
    Flag: "45M103Buy",     // 标识,可随意指定
    Exchange: 1,           // 指定交易所交易对
    Currency: "BTC_USDT",  // 交易对
    ContractType: "swap",  // 合约类型,swap,quarter,next_quarter,现货填写spot
    Price: "{{close}}",    // 开仓或者平仓价格,-1为市价
    Action: "buy",         // 交易类型[ buy:现货买入 , sell:现货卖出 , long:期货做多 , short:期货做空 , closesell:期货买入平空 , closebuy:期货卖出平多]
    Amount: "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) {
        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("交易所最小编号为1,并且为整数", Danger)
        return
    }
    if (Signal.Amount <= 0 || typeof(Signal.Amount) != "number") {
        Log("交易量不能小于0,并且为数值类型", typeof(Signal.Amount), Danger)
        return
    }
    if (typeof(Signal.Price) != "number") {
        Log("价格必须是数值", Danger)
        return
    }
    if (Signal.ContractType == "spot" && Signal.Action != "buy" && Signal.Action != "sell") {
        Log("指令为操作现货,Action错误,Action:", Signal.Action, Danger)
        return 
    }
    if (Signal.ContractType != "spot" && Signal.Action != "long" && Signal.Action != "short" && Signal.Action != "closesell" && Signal.Action != "closebuy") {
        Log("指令为操作期货,Action错误,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("模拟TradingView的webhook请求,发送用于测试的POST请求:", url, "body:", cmd, "应答:", 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("创建任务:", 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 manager = createManager()
function HandleCommand(signal) {
    // 检测是否收到交互指令
    if (signal) {
        Log("收到交互指令:", signal)     // 收到交互指令,打印交互指令
    } else {
        return                            // 没有收到时直接返回,不做处理
    }
    
    // 检测交互指令是否是测试指令,测试指令可以由当前策略交互控件发出来进行测试
    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:期货卖出平多]", Danger)
    Log("指令模板:", JSON.stringify(Template), 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 * 10)
        }
    }
}

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

img

ٹریڈنگ ویو سگنل پر عملدرآمد کی حکمت عملی مکمل حکمت عملی کا پتہ:https://www.fmz.com/strategy/392048

سادہ ٹیسٹ

حکمت عملی کو چلانے سے پہلے تبادلہ آبجیکٹ کو ترتیب دینے کے لئے ، حکمت عملی کے پیرامیٹرز میں "FMZ پلیٹ فارم کی رسائی کی کلید" اور "FMZ پلیٹ فارم کی خفیہ کلید" دونوں پیرامیٹرز کو درست کریں ، غلط نہیں لگائیں۔

img

یہ مندرجہ ذیل پرنٹ کرتا ہے: ٹریڈنگ ویو میں ویب ہک ایڈریس ، معاون ایکشن اسٹریپٹس ، پیغام کی شکل۔ اہم ویب ہک ایڈریس:

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"}

اس وقت کی پالیسی کو ایک اور بات چیت کا پیغام موصول ہوتا ہے اور اسے انجام دیتا ہے:

img

اس کے علاوہ ، آپ کو اپنے صارفین کو بھی اس کے بارے میں بتانے کی ضرورت ہے۔

ٹریڈنگ ویو کا استعمال کرتے ہوئے حقیقی منظر نامے میں ٹیسٹ

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

مثال کے طور پر ایک سادہ پین اسکرپٹ (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}}اس کے بعد ، جب آرڈر ٹرگر ہوتا ہے تو ، ایک پیغام بھیجا جاتا ہے (بشمول الرٹ کی ترتیبات ، ای میل بھیجنے ، ویب ہک یو آر ایل کی درخواست ، پمپ ونڈو وغیرہ) جس میں اس آرڈر پر عملدرآمد کی تعداد شامل ہوتی ہے۔

{{strategy.position_size}}- پائن میں ایک ہی مطلوبہ الفاظ کی قدر واپس کرتا ہے ، یعنی موجودہ پوزیشن کا سائز۔{{strategy.order.action}}- اسکرین خریدنے یا فروخت کرنے کے لئے کمانڈ کی واپسی کی سٹرنگ۔{{strategy.order.contracts}}- آرڈر پر عملدرآمد کے معاہدوں کی تعداد واپس کریں۔{{strategy.order.price}}- آرڈر پر عملدرآمد کی قیمت واپس کریں۔{{strategy.order.id}}- آرڈر کا آئی ڈی واپس کرتا ہے جو عمل میں آیا ہے ((اسٹریج کی پہلی شرط کے طور پر استعمال کیا جاتا ہے جس میں آرڈر پیدا کرنے والے فنکشن کالز میں سے ایک میں: حکمت عملی.انٹری ، حکمت عملی.خریداری یا حکمت عملی.آرڈر) ؛){{strategy.order.comment}}- آرڈر پر تبصرہ واپس کرتا ہے جو عمل میں آیا ہے ((سٹرنگ جو آرڈر بنانے والے فنکشن کالز میں سے ایک میں تبصرہ پیرامیٹر میں استعمال ہوتی ہے:strategy.entry،strategy.exit、 یا strategy.order) 、 اگر کوئی تبصرہ نہیں دیا گیا ہے تو ، strategy.order.id کی قیمت استعمال کی جائے گی۔{{strategy.order.alert_message}}- alert_message پیرامیٹر کی قدر لوٹاتا ہے، جو پالیسی کے پائن کوڈ میں استعمال کیا جا سکتا ہے جب کسی فنکشن کو بلایا جائے جس کا حکم دیا جاتا ہے:strategy.entry،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}}- مطلق قدر (یعنی غیر منفی) کی شکل میں پچھلی پوزیشن کا سائز لوٹاتا ہے۔

2، "ٹریڈنگ ویو سگنل پر عملدرآمد کی حکمت عملی" کے ساتھ پیغام کی تشکیل

{
    "Flag":"{{strategy.order.id}}",
    "Exchange":1,
    "Currency":"BTC_USDT",
    "ContractType":"swap",
    "Price":"-1",
    "Action":"{{strategy.order.comment}}",
    "Amount":"{{strategy.order.contracts}}"
}

3، TradingView کو اس PINE اسکرپٹ کے مطابق چلتے وقت سگنل دینے کے لئے، TradingView میں اس اسکرپٹ کو لوڈ کرتے وقت الارم سیٹ کرنے کی ضرورت ہے۔

img

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

img

img

FMZ کی اصلی ڈسک اس سگنل کو انجام دے گی۔

img

img

ویڈیو ایڈریس

سیب کی ویڈیو:https://www.ixigua.com/7172134169580372513?utm_source=xiguastudioبی اسٹیشن:https://www.bilibili.com/video/BV1BY411d7c6/معلوم ہے:https://www.zhihu.com/zvideo/1581722694294487040

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


متعلقہ

مزید

wbe3- چھوٹی ٹماٹر کی ٹماٹرمنگو، ہم نے ایک ڈسک ماحولیاتی آپریشن کو کیسے چلانے کے لئے چاہتے ہیں؟ ہم سگنل کی درستگی کی جانچ کرنا چاہتے ہیں.

گووہوابراہ کرم مجھے ایک سوال بتائیں، کیا ٹریڈنگ ویو کے الرٹ پیغامات میں پچھلے آرڈر کے پیغامات شامل ہیں؟ میں چاہتا ہوں کہ آخری آرڈر منافع بخش ہو یا نقصان دہ۔ اگر آخری آرڈر نقصان دہ ہے تو روبوٹ آرڈر نہیں کرے گا جب تک کہ آخری آرڈر منافع بخش نہ ہو کیا آپ یہ کر سکتے ہیں؟ شکریہ!

13811047519/upload/asset/2a5a9fa2b97561c42c027.jpg براہ کرم خدا ، اس غلطی کا کیا مطلب ہے اور اسے کیسے ختم کیا جائے؟

بہترین حالاتمیں نے 6 اور 7 اکاؤنٹس کو اس سگنل کے ساتھ تجارت کرنے کے لئے شامل کیا ہے ، لیکن اس وقت یہ بہت بڑا ہے ، ایک ایکسچینج اکاؤنٹ کا سگنل مکمل ہونے کے بعد ہی اگلے اکاؤنٹ کا سگنل چلتا ہے ، یہ سلسلہ وار عمل ہے ، کیا کوئی طریقہ ہے کہ ہم آہنگ تجارت کے سگنل کو بیک وقت انجام دیں؟ میں نے دیکھا کہ اس میں ایک وقفہ وقت کی ترتیب ہے ، مجھے نہیں معلوم کہ 0 سیکنڈ میں تبدیل کیا گیا ہے ، کیا ہم آہنگ تجارت ممکن ہے؟

wbe3- چھوٹی ٹماٹر کی ٹماٹراگر آپ کے پاس کوئی اکاؤنٹ ہے تو ، براہ کرم ہمیں بتائیں کہ کیا آپ کے پاس اکاؤنٹ کے بارے میں معلومات کے ساتھ کوئی پالیسی ہے؟ براہ کرم ہمیں بتائیں کہ کیا آپ کے اکاؤنٹ کے بارے میں کوئی پالیسی ہے؟

چھوٹا سا خوابیہ ایک عوامی پالیسی کا جائزہ ہے ، جو صفحے کو خود بخود شامل کرتا ہے۔

wbe3- چھوٹی ٹماٹر کی ٹماٹرآپ کا شکریہ بھائی ، میں نے ٹیسٹ کیا ہے ، لیکن تجارت کے بعد کوئی حکمت عملی نہیں ہے درجہ بندی کا جائزہ لیں ، کیا آپ کو خود بخود شامل کرنے کی ضرورت ہے

چھوٹا سا خوابOKX انٹرفیس ، OKX کے ڈسک ٹیسٹ ماحول میں تبدیل کیا جاسکتا ہے ، جس میں تبادلہ استعمال کیا جاسکتا ہے۔ IO (("simulate" ، true) ، یا ڈسک ماحول میں تبدیل کیا جاسکتا ہے۔

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

چھوٹا سا خوابیہ ممکن ہونا چاہئے کہ آپ پیغامات کو آگے بڑھانے کے وقت {{strategy.order.price}} مواد کو آگے بڑھا سکتے ہیں، اور پھر FMZ پر حکمت عملی اس معلومات کو پروسیس کرتی ہے، موجودہ قیمت کے مقابلے پر مبنی ہے، یا نہیں.

چھوٹا سا خوابکیا اب ٹیسٹ ٹھیک ہے؟ میں یہاں ٹیسٹ ٹھیک کر رہا ہوں۔

بہترین حالاتبہت اچھا۔ شکریہ باس

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