
پچھلے کچھ مضامین میں، ہم نے مرکزی دھارے کے DEXs تک رسائی پر تبادلہ خیال کیا ہے، اور یہ مضمون اصل استعمال پر توجہ مرکوز کرے گا اور حقیقی حکمت عملی کی تعیناتی کے ٹیسٹ کرائے گا۔ FMZ پلیٹ فارم نے حال ہی میں WOOFi اور EdgeX وکندریقرت تبادلے کے لیے تعاون شامل کیا ہے۔ اس مضمون میں، ہم ان دو تبادلوں پر کچھ آسان تدریسی حکمت عملیوں کو چلانے کی مشق کریں گے۔
اپنے بٹوے کو WOOFi پر جوڑیں، اور پھر API KEY صفحہ پر، آپ API کلیدی معلومات دیکھ سکتے ہیں، اسے کاپی اور پیسٹ کر سکتے ہیں اور اسے FMZ پر کنفیگر کر سکتے ہیں۔
FMZ کا تازہ ترین میزبان استعمال کریں، جو پہلے سے ہی WOOFi DEX اور EdgeX DEX کو سپورٹ کرتا ہے، ڈاؤن لوڈ اور تعیناتی کے بعد۔ صفحہ پر ایکسچینج آبجیکٹ کو ترتیب دیں: https://www.fmz.com/m/platforms/add، اور WOOFi کی AccountId، AccessKey، اور SecretKey کو ترتیب دیں۔
اس ٹیسٹ میں، ہم نے استعمال کیا aبنیادی مارکیٹ بنانے کی حکمت عملی پروٹو ٹائپمارکیٹ کے اتار چڑھاؤ کے اشارے (ATR) کے ساتھ مل کر، زیر التواء آرڈرز کے درمیان وقفہ کو متحرک طور پر شمار کیا جاتا ہے، اور پوزیشنوں کی ذہین شناخت اور بند ہونے والی پوزیشنوں پر ترجیح کے ساتھ آرڈر پلیسنگ منطق کا ادراک کیا جاتا ہے۔ حکمت عملی ہر دور میں آرڈر بک کو تازہ کرتی ہے، گہرائی اور پوزیشن کی معلومات کو دوبارہ حاصل کرتی ہے، اور مقررہ قیمت کے وقفے اور آرڈر کی مقدار کے مطابق آرڈر دیتی ہے۔ پورے عمل کا احاطہ کرتا ہے:
اس حکمت عملی کے ذریعے، ہم WOOFi پر حقیقی لین دین کی کارکردگی، آرڈر میں تاخیر، اور مماثلت کے تجربے کا مشاہدہ کر سکتے ہیں، اور مزید پیچیدہ حکمت عملیوں کے بعد کے ڈیزائن کی بنیاد رکھ سکتے ہیں۔
ہم WOOFi کا ٹیسٹ ماحول اور ٹیسٹ نیٹ ورک استعمال کرتے ہیں: Arbitrum Sepolia۔
exchange.SetBase(”https://testnet-api.orderly.org”)
WOOFi ٹیسٹ نیٹ ورک پر ایک ٹونٹی ہے جو آپ کو آسانی سے جانچ کے لیے USDC حاصل کرنے کی اجازت دیتی ہے۔
حکمت عملی کوڈ:
function createOrders(e, symbol, side, ordersNum, beginPrice, firstAmount, spacing, pos) {
if (side == "buy" || side == "closesell") {
if (spacing > 0) {
throw "spacing error"
}
} else if (side == "sell" || side == "closebuy") {
if (spacing < 0) {
throw "spacing error"
}
} else {
throw "side error"
}
var holdAmount = 0
if (pos) {
holdAmount = pos.Amount
}
var amount = firstAmount
for (var i = 0 ; i < ordersNum ; i++) {
var id = null
amount = amount * 2
var price = beginPrice + i * spacing
if (price <= 0 || amount <= 0) {
Log("continue loop:", price, amount, "#FF0000")
continue
}
if (holdAmount - amount >= 0) {
id = e.CreateOrder(symbol, side == "buy" ? "closesell" : "closebuy", price, holdAmount)
holdAmount = 0
} else {
id = e.CreateOrder(symbol, side, price, amount)
}
Sleep(100)
}
}
function cancelAll(e, symbol) {
while (true) {
var orders = _C(e.GetOrders, symbol)
var sideOrders = []
for (var o of orders) {
sideOrders.push(o)
}
if (sideOrders.length == 0) {
break
}
for (var o of sideOrders) {
e.CancelOrder(o.Id, o)
}
Sleep(500)
}
}
function main() {
LogReset(1)
LogProfitReset()
exchange.SetBase("https://testnet-api.orderly.org")
// 参数
var symbol = "ETH_USDC.swap"
var ordersNum = 5
var orderAmount = 0.01
var priceSpace = 0
// 初始化
exchange.SetPrecision(2, 3)
var msg = []
var buyOrdersNum = ordersNum
var sellOrdersNum = ordersNum
while (true) {
cancelAll(exchange, symbol)
var r = _C(exchange.GetRecords, symbol, 60 * 5)
var art = TA.ATR(r, 20)
priceSpace = art[art.length - 1]
var pos = _C(exchange.GetPositions, symbol)
// depth
var depth = _C(exchange.GetDepth, symbol)
if (depth.Bids.length == 0 || depth.Asks.length == 0) {
msg.push("invalid depth")
} else {
var bid1Price = depth.Bids[0].Price
var ask1Price = depth.Asks[0].Price
var longPos = null
var shortPos = null
for (var p of pos) {
if (p.Type == PD_LONG) {
longPos = p
} else if (p.Type == PD_SHORT) {
shortPos = p
}
}
// long
createOrders(exchange, symbol, "buy", buyOrdersNum, bid1Price, orderAmount, -priceSpace, shortPos)
// short
createOrders(exchange, symbol, "sell", sellOrdersNum, ask1Price, orderAmount, priceSpace, longPos)
}
var acc = _C(exchange.GetAccount)
var orders = _C(exchange.GetOrders, symbol)
LogProfit(acc.Equity, "&")
var posTbl = {"type": "table", "title": "pos", "cols": ["Symbol", "Type", "Price", "Amount"], "rows": []}
for (var p of pos) {
posTbl["rows"].push([p.Symbol, p.Type == PD_LONG ? "多" : "空", p.Price, p.Amount])
}
var ordersTbl = {"type": "table", "title": "orders", "cols": ["Symbol", "Type", "Price", "Amount"], "rows": []}
for (var o of orders) {
ordersTbl["rows"].push([o.Symbol, o.Type == ORDER_TYPE_BUY ? "买" : "卖", o.Price, o.Amount])
}
LogStatus(_D(), "priceSpace:", priceSpace, "\n`" + JSON.stringify([posTbl, ordersTbl]) + "`")
Sleep(1000 * 60)
LogReset(1000)
}
}
WOOFi پر حکمت عملی کی مشق



FMZ پر EdgeX کو ترتیب دینے کے لیے API کی معلومات بنیادی طور پر WOOFi کے لیے جیسی ہے، لیکن مختلف تبادلے کے لیے مختلف API معلومات درکار ہوتی ہیں۔ EdgeX پر، آپ کو صرف AccountId اور SecretKey کو کنفیگر کرنے کی ضرورت ہے۔ EdgeX فرنٹ اینڈ سے جڑنے کے لیے والیٹ کا استعمال کرنے کے بعد انہیں اکاؤنٹ API مینجمنٹ پیج پر بھی دیکھا جا سکتا ہے۔
EdgeX پر ہم جس حکمت عملی کو نافذ کرنے جا رہے ہیں اس پر مبنی ہے۔ملٹی لیئر بولنگر بینڈزریورس اوپننگ + مڈ ٹریک کلوزنگ کی مقداری تجارتی منطق قلیل مدتی اتار چڑھاؤ کا ادراک کر سکتی ہے۔
حکمت عملی بہت آسان ہے، بنیادی خیال یہ ہے:
آپ شاید اس پر یقین نہ کریں، لیکن FMZ پر مکمل حکمت عملی لکھنے میں صرف 50 لائنوں کا کوڈ لگتا ہے۔ بڑے AI ماڈلز کی موجودہ ترقی نے حکمت عملی کے ڈیزائن کی حد کو بہت کم کر دیا ہے۔ ہم نے جن حکمت عملی کے خیالات کا تجربہ کیا ہے وہ آسانی سے AI کے ذریعہ تیار کیا جا سکتا ہے، اور تحریری معیار کافی ہے۔ صرف یہ ہے کہ دستی اصلاح کی ضرورت ہے، لیکن اس نے عام لوگوں کے لیے مقداری تجارتی ٹیکنالوجی کے استعمال کی حد کو بہت کم کر دیا ہے۔
حکمت عملی کوڈ:
function main() {
var symbol = "ETH_USDT.swap"
var arrUp = []
var arrDown = []
let c = KLineChart({
overlay: true
})
while (true) {
var bolls = []
var r = _C(exchange.GetRecords, symbol)
for (var i = 0; i < 3; i++) {
var boll = TA.BOLL(r, 20, i + 1)
bolls.push(boll)
var up = boll[0][boll[0].length - 1]
var mid = boll[1][boll[1].length - 1]
var down = boll[2][boll[2].length - 1]
var close = r[r.length - 1].Close
if (close > up && i >= arrUp.length) {
exchange.CreateOrder(symbol, "sell", -1, 0.01 * (i + 1))
arrUp.push({"symbol": symbol, "amount": 0.01 * (i + 1)})
} else if (close < down && i >= arrDown.length) {
exchange.CreateOrder(symbol, "buy", -1, 0.01 * (i + 1))
arrDown.push({"symbol": symbol, "amount": 0.01 * (i + 1)})
} else if ((arrUp.length > 0 && close < mid) || (arrDown.length > 0 && close > mid)) {
var pos = exchange.GetPositions(symbol)
for (var p of pos) {
if (p.Type == PD_LONG) {
exchange.CreateOrder(symbol, "closebuy", -1, p.Amount)
} else if (p.Type == PD_SHORT) {
exchange.CreateOrder(symbol, "closesell", -1, p.Amount)
}
}
arrUp = []
arrDown = []
}
}
r.forEach(function(bar, index) {
c.begin(bar)
for (var i in bolls) {
var b = bolls[i]
c.plot(b[0][index], 'up_' + (i + 1))
c.plot(b[1][index], 'mid_' + (i + 1))
c.plot(b[2][index], 'down_' + (i + 1))
}
c.close()
})
LogStatus(_D(), "\n", arrUp, "\n", arrDown)
Sleep(500)
}
}
آئیے پہلے ایک طویل مدتی بیک ٹیسٹ کریں:


EdgeX ٹیسٹ تعینات کریں۔

مذکورہ بالا حکمت عملی صرف تدریسی اور تحقیقی مقاصد کے لیے ہیں۔ براہ کرم ان کا اطلاق کرتے وقت محتاط رہیں۔ پڑھنے کے لیے آپ کا شکریہ۔