پچھلے مضمون میں ہم نے ایک سادہ ہیجنگ حکمت عملی پر عمل درآمد کیا ، اور اب ہم سیکھتے ہیں کہ اس حکمت عملی کو کس طرح اپ گریڈ کیا جائے۔ حکمت عملی میں کوئی بڑی تبدیلی نہیں ہوگی ، لیکن تبدیلیوں کی تفصیلات پر دھیان دینا ضروری ہے۔ کوڈ میں کچھ جگہوں کی تعریف اور اس سے پہلے کی تبدیلیوں کو سمجھنے کی ضرورت ہے۔
A交易所->B交易所
,B交易所->A交易所
ہم براہ راست استعمال کیا جاتا ہے کہ کس طرح ہم نے اس کے بارے میں بات کر رہے ہیں.画线类库
ہم نے یہاں ایف ایم زیڈ کا استعمال کرنے کا طریقہ سیکھا ہے اور ہم نے اس کا استعمال کرنے کے لئے بہت کچھ سیکھا ہے۔模版类库
آپ کا شکریہ۔اس کے بعد آئیے ان ڈیزائنوں کو ایک ایک کرکے لاگو کرتے ہیں۔
کرنسی کی نقد رقم کی حقیقی ڈسک کی مثال کے طور پر، نقد رقم کے لیورج موڈ میں تبدیل کرنے کے لئے کوڈ کا استعمال کرتے ہوئےexchanges[i].IO
، پیرامیٹرز کو منتقلtrade_normal
لیورز میں تبدیل ہو گیا، منتقلtrade_super_margin
لیور مکمل پوزیشن میں سوئچ کریں ، ری میٹر کی حمایت نہیں کرتا ہے۔ یہ صرف حقیقی وقت میں استعمال ہوتا ہے۔
میںmain
فنکشن کے آغاز کے لئے تیاری کے مرحلے میں اضافہ:
// 切换杠杆模式
for (var i = 0 ; i < exchanges.length ; i++) { // 遍历检测所有添加的交易所对象
if (exchanges[i].GetName() == "Binance" && marginType != 0) { // 如果当前i索引代表的交易所对象是币安现货,并且策略界面参数marginType选择的不是「普通币币」选项,执行切换
if (marginType == 1) {
Log(exchanges[i].GetName(), "设置为杠杆逐仓")
exchanges[i].IO("trade_normal")
} else if (marginType == 2) {
Log(exchanges[i].GetName(), "设置为杠杆全仓")
exchanges[i].IO("trade_super_margin")
}
}
}
یہاں کی حکمت عملی میں صرف کرنسی کی کرنسی کے لیول کوڈ کو شامل کیا گیا ہے ، لہذا حکمت عملی کے پیرامیٹرز پر سوئچ کرنا صرف کرنسی کی کرنسی پر لاگو ہوتا ہے۔
یہ بہت آسان ہے کہ آپ پہلے سے ہی پیکڈ پینٹنگ ٹیمپلیٹ استعمال کریں۔ ہم اس ٹیمپلیٹ کا نام استعمال کرتے ہیں画线类库
اس کے علاوہ ، آپ کو اپنے پیغامات کو ایف ایم زیڈ پلیٹ فارم پر تلاش کرنے کی ضرورت ہے۔
یا براہ راست اس لنک پر کلک کریں:https://www.fmz.com/strategy/27293اس ٹیمپلیٹ کی کاپی کے صفحے پر جائیں۔
اس ٹیمپلیٹ کو اپنی پالیسی لائبریری میں کلک کرنے کے ساتھ ہی کاپی کیا جاسکتا ہے۔
اس کے بعد، آپ کو اپنی مرضی کے مطابق ٹیمپلیٹ لائبریری منتخب کرنے کی ضرورت ہوگی۔ اس کے بعد آپ کو اپنی مرضی کے مطابق ٹیمپلیٹ لائبریری منتخب کرنے کی ضرورت ہوگی۔ اس کی پالیسی اس ٹیمپلیٹ کا حوالہ دیتی ہے۔ یہ صرف اس ٹیمپلیٹ لائبریری کا استعمال کرنے کی ایک مختصر وضاحت ہے ، اس کی پالیسی نے اس ٹیمپلیٹ کا حوالہ دیا ہے ، لہذا آپ کو دوبارہ کام کرنے کی ضرورت نہیں ہے۔ جب آپ اس پالیسی کو اسکوائر میں کاپی کرتے ہیں تو ، آپ کو اس کی پالیسی میں ترمیم کرنے والے صفحے کے ٹیمپلیٹ ٹیب میں دیکھا جاسکتا ہے۔画线类库
اس کے علاوہ ، اس کے بارے میں مزید معلومات حاصل کریں:
ہم بنیادی طور پر سیکھتے ہیں کہ اسے کس طرح استعمال کرنا ہے۔画线类库
اس کے علاوہ، آپ کو اس کے بارے میں مزید جاننے کی ضرورت ہے.
ہم منصوبہ بندی کر رہے ہیںA->B
اس کے علاوہ،B->A
اس کے علاوہ، آپ کو دو منحنی خطوط (موجودہ A سے B اور B سے A کے درمیان فرق) اور دو افقی لائنیں (فاریکس ٹریڈر لائن) ڈرائنگ کرنے کی ضرورت ہے، جیسا کہ اوپر عام طور پر دکھایا گیا ہے۔
ہم نے ایک طرفہ ہیجنگ ڈیزائن کیا ہے، اور ہم نے اس کے بارے میں سوچا ہے.A->B
اورB->A
اس کے علاوہ ، آپ کو اس کے بارے میں مزید جاننے کی ضرورت ہے۔
پچھلے مضمون میں:
var targetDiffPrice = hedgeDiffPrice
if (diffAsPercentage) {
targetDiffPrice = (depthA.Bids[0].Price + depthB.Asks[0].Price + depthB.Bids[0].Price + depthA.Asks[0].Price) / 4 * hedgeDiffPercentage
}
صرف ایک چیز نے فرق پیدا کیاtargetDiffPrice
◄
تو یہاں ہم کوڈ کو تبدیل کرنے کے لئے جا رہے ہیں، سب سے پہلے پیرامیٹرز کو تبدیل کرنے کے لئے.
اس کے بعد کوڈ میں ترمیم کریں:
var targetDiffPriceA2B = hedgeDiffPriceA2B
var targetDiffPriceB2A = hedgeDiffPriceB2A
if (diffAsPercentage) {
targetDiffPriceA2B = (depthA.Bids[0].Price + depthB.Asks[0].Price + depthB.Bids[0].Price + depthA.Asks[0].Price) / 4 * hedgeDiffPercentageA2B
targetDiffPriceB2A = (depthA.Bids[0].Price + depthB.Asks[0].Price + depthB.Bids[0].Price + depthA.Asks[0].Price) / 4 * hedgeDiffPercentageB2A
}
اس طرح قیمتوں میں فرق کی وجہ سے پہلے کی قیمتوں میں کمی واقع ہوئی ہے۔targetDiffPrice
ایک، دو بن گیاtargetDiffPriceA2B
、targetDiffPriceB2A
◄
اگلا، آپ کو اس اعداد و شمار کو چارٹ پر ڈرائنگ لائن کلاس لائبریری کے ڈرائنگ لائن فنکشن کا استعمال کرتے ہوئے ڈرائنگ لائن فنکشن کا استعمال کر سکتے ہیں.
// 画图
$.PlotHLine(targetDiffPriceA2B, "A->B") // 该函数第一个参数是水平线在Y轴方向上的值,第二个参数是显示文本
$.PlotHLine(targetDiffPriceB2A, "B->A")
اس طرح کے چارٹ میں دکھایا گیا ہے کہ جب یہ حکمت عملی کام کرتی ہے۔
اس کے بعد حقیقی وقت میں فرق کی لکیریں بنائیں تاکہ زیادہ سے زیادہ لکیروں سے بچیں۔ حقیقی وقت میں فرق کی اعداد و شمار کی لکیروں کا کوڈ توازن کی جانچ میں ڈالیں۔
if (ts - lastKeepBalanceTS > keepBalanceCyc * 1000) {
nowAccs = _C(updateAccs, exchanges)
var isBalance = keepBalance(initAccs, nowAccs, [depthA, depthB])
cancelAll()
if (isBalance) {
lastKeepBalanceTS = ts
if (isTrade) {
var nowBalance = _.reduce(nowAccs, function(sumBalance, acc) {return sumBalance + acc.Balance}, 0)
var initBalance = _.reduce(initAccs, function(sumBalance, acc) {return sumBalance + acc.Balance}, 0)
LogProfit(nowBalance - initBalance, nowBalance, initBalance, nowAccs)
isTrade = false
}
}
$.PlotLine("A2B", depthA.Bids[0].Price - depthB.Asks[0].Price) // 画实时差价曲线
$.PlotLine("B2A", depthB.Bids[0].Price - depthA.Asks[0].Price) // 第一个参数是曲线名称,第二个参数是曲线当前时刻的值,即当前时刻Y轴方向上的值
}
اس طرح گراف کوڈ کی صرف چار لائنیں ہیں، اس طرح حکمت عملی چلتی ہے جب گراف ظاہر ہوتا ہے.
اس مضمون میں ذکر کیا گیا ہے کہ قیمتوں میں فرق کی ٹرگر لائن کو دو لائنوں میں تبدیل کر دیا گیا ہے ، جن میں سے ہر ایک کو کنٹرول کیا گیا ہے۔A->B
اس کے علاوہ، اس نے ایک بار پھر اس کے بارے میں بات کی.B->A
اس طرح سے پہلے کے نیچے کی قیمت کے الگورتھم کا استعمال نہیں کیا جاسکتا ہے ، اس کے بجائے اس کی جگہ لیس قیمتوں میں سلائڈ قیمت کا استعمال کیا جاتا ہے۔
if (depthA.Bids[0].Price - depthB.Asks[0].Price > targetDiffPriceA2B && Math.min(depthA.Bids[0].Amount, depthB.Asks[0].Amount) >= minHedgeAmount) { // A -> B 盘口条件满足
var priceSell = depthA.Bids[0].Price - slidePrice
var priceBuy = depthB.Asks[0].Price + slidePrice
var amount = Math.min(depthA.Bids[0].Amount, depthB.Asks[0].Amount)
if (nowAccs[0].Stocks > minHedgeAmount && nowAccs[1].Balance * 0.8 / priceSell > minHedgeAmount) {
amount = Math.min(amount, nowAccs[0].Stocks, nowAccs[1].Balance * 0.8 / priceSell, maxHedgeAmount)
Log("触发A->B:", depthA.Bids[0].Price - depthB.Asks[0].Price, priceBuy, priceSell, amount, nowAccs[1].Balance * 0.8 / priceSell, nowAccs[0].Stocks) // 提示信息
hedge(exB, exA, priceBuy, priceSell, amount)
cancelAll()
lastKeepBalanceTS = 0
isTrade = true
}
} else if (depthB.Bids[0].Price - depthA.Asks[0].Price > targetDiffPriceB2A && Math.min(depthB.Bids[0].Amount, depthA.Asks[0].Amount) >= minHedgeAmount) { // B -> A 盘口条件满足
var priceBuy = depthA.Asks[0].Price + slidePrice
var priceSell = depthB.Bids[0].Price - slidePrice
var amount = Math.min(depthB.Bids[0].Amount, depthA.Asks[0].Amount)
if (nowAccs[1].Stocks > minHedgeAmount && nowAccs[0].Balance * 0.8 / priceBuy > minHedgeAmount) {
amount = Math.min(amount, nowAccs[1].Stocks, nowAccs[0].Balance * 0.8 / priceBuy, maxHedgeAmount)
Log("触发B->A:", depthB.Bids[0].Price - depthA.Asks[0].Price, priceBuy, priceSell, amount, nowAccs[0].Balance * 0.8 / priceBuy, nowAccs[1].Stocks) // 提示信息
hedge(exA, exB, priceBuy, priceSell, amount)
cancelAll()
lastKeepBalanceTS = 0
isTrade = true
}
}
اور چونکہ خرید و فروخت کی قیمتیں الگ الگ اعداد و شمار میں ہیں، لہذا ہم نے ہیجنگ فنکشن کے بارے میں سوچا ہے.hedge
اس میں تبدیلی کی ضرورت ہے۔
function hedge(buyEx, sellEx, priceBuy, priceSell, amount) {
var buyRoutine = buyEx.Go("Buy", priceBuy, amount)
var sellRoutine = sellEx.Go("Sell", priceSell, amount)
Sleep(500)
buyRoutine.wait()
sellRoutine.wait()
}
ان تبدیلیوں کی بنیاد پر کچھ چھوٹی چھوٹی تبدیلیاں بھی کی گئیں جن کا خلاصہ یہاں نہیں کیا گیا ہے۔ آپ کوڈ کو دیکھیں گے۔
حکمت عملی کے لئے تعامل کو بڑھانا تاکہ حکمت عملی کو حقیقی وقت میں فرق کی ٹرگر لائن میں ترمیم کی جاسکے۔ یہ ایک نیم خودکار حکمت عملی کے ڈیزائن کی ضرورت ہے ، جو یہاں بھی بطور تدریسی مظاہرہ کیا گیا ہے۔ اس طرح کی حکمت عملیوں کے ساتھ بات چیت کا ڈیزائن بھی بہت آسان ہے ، اس سے پہلے کہ آپ اپنی پالیسی میں ترمیم کے صفحے پر ان کے ساتھ بات چیت کا کنٹرول شامل کریں۔
دو کنٹرولرز شامل کیے گئے ہیں، ایک A2B اور ایک B2A. کنٹرول کے ان پٹ باکس میں اعداد درج کرنے کے بعد، ان پٹ باکس کے دائیں جانب والے بٹن پر کلک کریں. فوری طور پر پالیسی کو ایک کمانڈ بھیجا جاتا ہے، مثال کے طور پر: ان پٹ باکس میں اعداد درج کریں123
کلک کریںA2B
اس بٹن کے ذریعے، پالیسی کو فوری طور پر ہدایات موصول ہوتی ہیں۔
A2B:123
اسٹریٹجک کوڈ میں ڈیزائن پر انٹرایکٹو کا پتہ لگانے، کوڈ کو سنبھالنے کے لئے.
// 交互
var cmd = GetCommand() // 每次循环执行到这里时,都检测有没有交互指令过来,没有则返回空字符串
if (cmd) { // 检测到有交互指令,例如:A2B:123
Log("接收到命令:", cmd)
var arr = cmd.split(":") // 拆分出交互控件名称和输入框中的值,arr[0]就是A2B,arr[1]就是123
if (arr[0] == "A2B") { // 判断触发的交互控件是不是A2B
Log("修改A2B的参数,", diffAsPercentage ? "参数为差价百分比" : "参数为差价:", arr[1])
if (diffAsPercentage) {
hedgeDiffPercentageB2A = parseFloat(arr[1]) // 修改触发差价线
} else {
hedgeDiffPriceA2B = parseFloat(arr[1]) // 修改触发差价线
}
} else if (arr[0] == "B2A") { // 检测到触发的控件是B2A
Log("修改B2A的参数,", diffAsPercentage ? "参数为差价百分比" : "参数为差价:", arr[1])
if (diffAsPercentage) {
hedgeDiffPercentageA2B = parseFloat(arr[1])
} else {
hedgeDiffPriceB2A = parseFloat(arr[1])
}
}
}
اسٹیٹس ٹیب کے اعداد و شمار کو زیادہ منظم اور مشاہدہ کرنے میں آسان بنایا گیا ہے۔
var tbl = {
"type" : "table",
"title" : "数据",
"cols" : ["交易所", "币", "冻结币", "计价币", "冻结计价币", "触发差价", "当前差价"],
"rows" : [],
}
tbl.rows.push(["A:" + exA.GetName(), nowAccs[0].Stocks, nowAccs[0].FrozenStocks, nowAccs[0].Balance, nowAccs[0].FrozenBalance, "A->B:" + targetDiffPriceA2B, "A->B:" + (depthA.Bids[0].Price - depthB.Asks[0].Price)])
tbl.rows.push(["B:" + exB.GetName(), nowAccs[1].Stocks, nowAccs[1].FrozenStocks, nowAccs[1].Balance, nowAccs[1].FrozenBalance, "B->A:" + targetDiffPriceB2A, "B->A:" + (depthB.Bids[0].Price - depthA.Asks[0].Price)])
LogStatus(_D(), "\n", "`" + JSON.stringify(tbl) + "`")
دوبارہ جانچ صرف ایک ٹیسٹ کی حکمت عملی ہے ، ابتدائی پتہ لگانے کی خصوصیت ، بہت سے BUG اصل میں دوبارہ جانچ کے مرحلے میں ٹیسٹ کیے جاسکتے ہیں۔ دوبارہ جانچ کے نتائج پر زیادہ توجہ دینے کی ضرورت نہیں ہے ، حتمی حکمت عملی کو حقیقی ماحول میں حقیقی گولہ بارود کی ضرورت ہے۔
اسٹریٹجی کا ماخذ:https://www.fmz.com/strategy/302834
15570686905یہ تجارت کی حکمت عملی ہے، اور یہ معاہدے کی خصوصیات کو شامل کرتا ہے، اور یہ اچھا ہے کہ آپ مستقل معاہدے اور سودے کی شرح کے معاہدوں کو شامل کرتے ہیں.
ہلکے بادلاہم: 127:9 - TypeError: Cannot read property 'SetPrecision of undefined' (ٹائپ ایرر: undefined کی سیٹ پریسیشن پراپرٹی نہیں پڑھ سکتا)
مختلف کرنسیوں کے لئے فوری طور پر ہیجنگ کی حکمت عملی Ver1.1
ایجاد کاروں کی مقدار - خواباچھا، ایک سبق دینے کا موقع ہے۔
ہلکے بادلمیں سمجھ گیا، شکریہ ڈریم۔
ایجاد کاروں کی مقدار - خوابدو ایکسچینج آبجیکٹ شامل کرنے کی ضرورت ہے۔