[TOC]

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

پورے منصوبے میں چار اہم ادارے شامل ہیں، جو مختصراً یہ ہیں:
| سیریل نمبر | مرکزی جسم | بیان کریں |
|---|---|---|
| 1 | TradingView (تصویر میں تجارتی منظر) | TradingView PINE اسکرپٹ چلاتا ہے، جو سگنل بھیج سکتا ہے اور FMZ کے توسیعی API انٹرفیس تک رسائی حاصل کر سکتا ہے۔ |
| 2 | ایف ایم زیڈ پلیٹ فارم (تصویر میں ایف ایم زیڈ پلیٹ فارم (ویب سائٹ)) | حقیقی مارکیٹ کا نظم کریں، حقیقی مارکیٹ کے صفحہ پر انٹرایکٹو ہدایات بھیجیں، اور ایف ایم زیڈ پلیٹ فارم کو کسٹوڈین پر حقیقی مارکیٹ حکمت عملی پروگرام کو انٹرایکٹو ہدایات بھیجنے کے لیے توسیعی API انٹرفیس کا بھی استعمال کریں۔ |
| 3 | ہوسٹنگ سافٹ ویئر پر حقیقی پروگرام (تصویر میں FMZ حکمت عملی روبوٹ) | اصل پروگرام جو TradingView سگنل پر عمل درآمد کی حکمت عملی کو انجام دیتا ہے۔ |
| 4 | تبادلہ (تصویر میں تبادلہ) | ریئل مارکیٹ پر ترتیب شدہ ایکسچینج، وہ ایکسچینج جس کو کسٹوڈین پر حقیقی مارکیٹ پروگرام براہ راست آرڈر دینے کی درخواست بھیجتا ہے |
لہذا اگر آپ اس طرح کھیلنا چاہتے ہیں تو آپ کو درج ذیل تیاریوں کی ضرورت ہے: 1. TradingView پر چلنے والی اسکرپٹ FMZ کے توسیعی API انٹرفیس کو سگنل کی درخواستیں بھیجنے کے لیے ذمہ دار ہے TradingView اکاؤنٹ کا کم از کم ایک PRO ممبر ہونا ضروری ہے۔ 2. FMZ پر ایک نگہبان پروگرام تعینات کریں، جس کے لیے ایکسچینج انٹرفیس تک رسائی حاصل کرنے کے قابل ہونا ضروری ہے (جیسے کہ سنگاپور، جاپان، ہانگ کانگ وغیرہ میں سرورز)۔ 3. ٹریڈنگ ویو سگنل بھیجے جانے پر کام کرنے (آرڈر کرنے) کے لیے FMZ پر ایکسچینج کی API KEY کو ترتیب دیں۔ 4. آپ کے پاس “TradingView سگنل پر عمل درآمد کی حکمت عملی” کی ضرورت ہے، جس کے بارے میں یہ مضمون بنیادی طور پر بات کرتا ہے۔
“TradingView Signal Execution Strategy” کا پچھلا ورژن لچکدار ہونے کے لیے ڈیزائن نہیں کیا گیا تھا، اور پیغام کو TradingView کے ذریعے بھیجی گئی درخواست کے URL میں ہی سخت کوڈ کیا جا سکتا ہے۔ اگر ہم چاہتے ہیں کہ TradingView پیغام کو آگے بڑھاتے وقت باڈی میں کچھ متغیر معلومات لکھے، تو اس وقت ہم کچھ نہیں کر سکتے۔ مثال کے طور پر، TradingView پر پیغام کا مواد اس طرح لگتا ہے:

پھر TradingView ترتیب دیا جا سکتا ہے جیسا کہ تصویر میں دکھایا گیا ہے، درخواست کے باڈی میں پیغام لکھ کر اور FMZ کے توسیعی API انٹرفیس پر بھیج کر۔ تو آپ FMZ کے اس توسیعی 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یہ FMZ پلیٹ فارم کی توسیع ہے۔API KEY، یہاں ہم ظاہر کرتے ہیں تو اسے سیٹ کریں۔xxxاورyyyy. اس KEY کو کیسے بنایا جائے؟ اس صفحہ پر:https://www.fmz.com/m/account، صرف ایک بنائیں، اسے صحیح طریقے سے رکھیں اور اسے کبھی ظاہر نہ کریں۔

موضوع پر واپس، چلیں جاری رکھیںCommandRobotانٹرفیس کا مسئلہ۔ اگر آپ کو رسائی کی ضرورت ہے۔CommandRobotانٹرفیس، درخواست میںmethodبس اسے سیٹ کریں:CommandRobot。CommandRobotاس انٹرفیس کا کام ایف ایم زیڈ پلیٹ فارم کے ذریعے کسی مخصوص ID کی حقیقی ڈسک پر ایک انٹرایکٹو پیغام بھیجنا ہے، لہذا پیرامیٹرزargsدرخواست کا مواد اصلی ID اور پیغام ہے مندرجہ بالا درخواست یو آر ایل کی مثال ID کو درخواست بھیجنا ہے۔186515حقیقی پروگرام، پیغام بھیجیں۔ok12345。
پہلے، یہ طریقہ FMZ ایکسٹینشن API کے کمانڈروبوٹ انٹرفیس کی درخواست کرنے کے لیے استعمال کیا جاتا تھا، جیسا کہ اوپر کی مثال میں پیغام کو صرف ہارڈ کوڈ کیا جا سکتا ہے۔ok12345. اگر پیغام درخواست کے باڈی میں ہے تو، ایک اور طریقہ کی ضرورت ہے:
https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyyy&method=CommandRobot&args=[130350,+""]
اس طرح، درخواست کو FMZ پلیٹ فارم کے ذریعے بھیجا جا سکتا ہے، اور درخواست کے باڈی کا مواد ID کے ساتھ صارف کو ایک انٹرایکٹو پیغام کے طور پر بھیجا جاتا ہے۔130350اصل سودا۔ اگر TradingView پر پیغام اس پر سیٹ ہے:{"close": {{close}}, "name": "aaa"}، پھر ID ہے۔130350اصلی ڈسک کو انٹرایکٹو ہدایات موصول ہوں گی۔{"close": 39773.75, "name": "aaa"}
“TradingView سگنل پر عمل درآمد کی حکمت عملی” کے لیے TradingView کی طرف سے بھیجی گئی ہدایات کو درست طریقے سے سمجھنے کے لیے جب اسے انٹرایکٹو ہدایات موصول ہوتی ہیں، تو پیغام کی شکل پر پہلے سے اتفاق کرنا ضروری ہے:
{
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 پر سیٹ کرنے کا مطلب ہے کہ یہ سگنل پہلے شامل کردہ ایکسچینج آبجیکٹ کے مطابق ایکسچینج اکاؤنٹ کو آپریٹ کرے گا۔ اگر اسپاٹ کنٹریکٹ کو آپریٹ کرنا ہے تو فیوچرز کے لیے ContractType کو اسپاٹ پر سیٹ کریں، مخصوص کنٹریکٹ لکھیں، مثال کے طور پر دائمی معاہدوں کے لیے سویپ لکھیں۔ مارکیٹ آرڈر کی قیمت کے لیے، صرف -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)
}
}
}
حکمت عملی کے پیرامیٹرز اور تعاملات:

「TradingView سگنل پر عمل درآمد کی حکمت عملی」مکمل حکمت عملی کا پتہ: https://www.fmz.com/strategy/392048
حکمت عملی کو چلانے سے پہلے، آپ کو ایکسچینج آبجیکٹ کو ترتیب دینا ہوگا اور حکمت عملی کے پیرامیٹرز میں دو پیرامیٹرز “FMZ پلیٹ فارم کی ایکسیس کی” اور “SecretKey of FMZ پلیٹ فارم” کو سیٹ کرنا ہوگا۔ اسے چلانے سے ظاہر ہوتا ہے:

درج ذیل کو ترتیب کے ساتھ پرنٹ کیا جائے گا: WebHook ایڈریس جسے TradingView پر بھرنے کی ضرورت ہے، معاون کارروائی کی ہدایات، اور پیغام کی شکل۔ اہم چیز WebHook ایڈریس ہے:
https://www.fmz.com/api/v1?access_key=22903bab96b26584dc5a22522984df42&secret_key=73f8ba01014023117cbd30cb9d849bfc&method=CommandRobot&args=[505628,+""]
بس اسے کاپی اور پیسٹ کریں اور TradingView پر متعلقہ پوزیشن میں لکھیں۔
اگر آپ TradingView کو سگنل بھیجنے کی نقل کرنا چاہتے ہیں، تو آپ حکمت عملی کے تعامل پر TestSignal بٹن پر کلک کر سکتے ہیں:

یہ حکمت عملی بذات خود ایک درخواست بھیجے گی (TradingView کی نقل کرتے ہوئے سگنل کی درخواست بھیجے گی)، 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)
مندرجہ ذیل پلیس ہولڈرز ہیں مثال کے طور پر، میں نے الارم میں “پیغام” باکس میں لکھا:{{strategy.order.contracts}}، پھر جب کوئی آرڈر ٹرگر ہوتا ہے تو، ایک پیغام بھیجا جائے گا (الارم پر سیٹنگز، ای میل پش، ویب ہک یو آر ایل کی درخواست، پاپ اپ ونڈو وغیرہ کی بنیاد پر)، اور پیغام میں اس پر عمل درآمد کرنے والے آرڈر کی مقدار شامل ہوگی۔ وقت
{{strategy.position_size}} - پائن میں اسی مطلوبہ الفاظ کی قدر لوٹاتا ہے، جو موجودہ پوزیشن کا سائز ہے۔
{{strategy.order.action}} - ایک عملدرآمد آرڈر کے لیے “خرید” یا “فروخت” کی تار لوٹاتا ہے۔
{{strategy.order.contracts}} - عملدرآمد آرڈر کے لیے معاہدوں کی تعداد لوٹاتا ہے۔
{{strategy.order.price}} - وہ قیمت لوٹاتا ہے جس پر آرڈر پر عمل کیا گیا تھا۔
{{strategy.order.id}} - پھانسی شدہ آرڈر کی ID لوٹاتا ہے (ایک سٹرنگ جو فنکشن کالز میں سے ایک میں پہلی دلیل کے طور پر استعمال ہوتی ہے جس نے آرڈر تیار کیا تھا: strategy.entry، strategy.exit یا strategy.order)۔
{{strategy.order.comment}} - پھانسی شدہ آرڈر کا تبصرہ لوٹاتا ہے (اس فنکشن کالز میں سے ایک میں کمنٹ پیرامیٹر میں استعمال ہونے والی سٹرنگ جس نے آرڈر تیار کیا ہے: strategy.entry، strategy.exit، یا strategy.order)۔ اگر کوئی تشریح بیان نہیں کی گئی ہے، تو strategy.order.id کی قدر استعمال کی جائے گی۔
{{strategy.order.alert_message}} - alert_message پیرامیٹر کی قدر لوٹاتا ہے، جسے حکمت عملی کے پائن کوڈ میں استعمال کیا جا سکتا ہے جب آرڈر دینے کے لیے کسی ایک فنکشن کو کال کریں: strategy.entry، strategy.exit، یا strategy.order۔ یہ خصوصیت صرف Pine v4 میں تعاون یافتہ ہے۔
{{strategy.market_position}} - حکمت عملی کی موجودہ پوزیشن کو سٹرنگ کے طور پر لوٹاتا ہے: “لمبا”، “فلیٹ” یا “مختصر”۔
{{strategy.market_position_size}} - موجودہ پوزیشن کا سائز بطور مطلق قدر لوٹاتا ہے (یعنی غیر منفی نمبر)۔
{{strategy.prev_market_position}} - حکمت عملی کی آخری پوزیشن کو سٹرنگ کے طور پر لوٹاتا ہے: “لمبا”، “فلیٹ” یا “مختصر”۔
{{strategy.prev_market_position_size}} - پچھلی پوزیشن کا سائز بطور مطلق قدر (یعنی غیر منفی نمبر) لوٹاتا ہے۔
{
"Flag":"{{strategy.order.id}}",
"Exchange":1,
"Currency":"BTC_USDT",
"ContractType":"swap",
"Price":"-1",
"Action":"{{strategy.order.comment}}",
"Amount":"{{strategy.order.contracts}}"
}

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


FMZ کی حقیقی تجارت اس سگنل پر عمل کرے گی۔


Xigua ویڈیو: https://www.ixigua.com/7172134169580372513?utm_source=xiguastudio اسٹیشن بی: https://www.bilibili.com/video/BV1BY411d7c6/ Zhihu: https://www.zhihu.com/zvideo/1581722694294487040
مضمون میں موجود کوڈز صرف حوالہ کے لیے ہیں آپ ان کو درست استعمال کے لیے بڑھا سکتے ہیں۔