
গত কয়েকটি প্রবন্ধে, আমরা মূলধারার DEX-এর অ্যাক্সেস নিয়ে আলোচনা করেছি, এবং এই প্রবন্ধটি প্রকৃত ব্যবহারের উপর আলোকপাত করবে এবং প্রকৃত কৌশল স্থাপনের পরীক্ষা পরিচালনা করবে। FMZ প্ল্যাটফর্ম সম্প্রতি WOOFi এবং EdgeX বিকেন্দ্রীভূত এক্সচেঞ্জের জন্য সমর্থন যোগ করেছে। এই প্রবন্ধে, আমরা এই দুটি বিনিময়ের উপর কিছু সহজ শিক্ষণ কৌশল অনুশীলন করব।
WOOFi-তে আপনার ওয়ালেট সংযুক্ত করুন, এবং তারপর API KEY পৃষ্ঠায়, আপনি API কী তথ্য দেখতে, কপি এবং পেস্ট করতে এবং FMZ-এ কনফিগার করতে পারেন।
ডাউনলোড এবং স্থাপনের পরে FMZ এর সর্বশেষ হোস্ট ব্যবহার করুন, যা ইতিমধ্যেই WOOFi DEX এবং EdgeX DEX সমর্থন করে। পৃষ্ঠায় এক্সচেঞ্জ অবজেক্টটি কনফিগার করুন: https://www.fmz.com/m/platforms/add, এবং WOOFi এর AccountId, AccessKey এবং SecretKey কনফিগার করুন।
এই পরীক্ষায়, আমরা একটি ব্যবহার করেছিবাজার তৈরির মৌলিক কৌশলের প্রোটোটাইপ, বাজারের অস্থিরতা নির্দেশক (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-এ যে কৌশলটি বাস্তবায়ন করতে যাচ্ছি তা হলমাল্টি-লেয়ার বলিঙ্গার ব্যান্ডরিভার্স ওপেনিং + মিড-ট্র্যাক ক্লোজিংয়ের পরিমাণগত ট্রেডিং লজিক স্বল্পমেয়াদী অস্থিরতা সালিসি উপলব্ধি করতে পারে।
কৌশলটি খুবই সহজ, মূল ধারণাটি হল:
তুমি হয়তো বিশ্বাস করবে না, কিন্তু FMZ-এ একটি সম্পূর্ণ কৌশল লিখতে মাত্র ৫০ লাইন কোড লাগে। বৃহৎ এআই মডেলের বর্তমান উন্নয়ন কৌশল নকশার সীমা অনেকাংশে কমিয়ে দিয়েছে। আমরা যে কৌশলগত ধারণাগুলি পরীক্ষা করেছি তা সহজেই 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 পরীক্ষা স্থাপন করুন

উপরোক্ত কৌশলগুলি শুধুমাত্র শিক্ষাদান এবং গবেষণার উদ্দেশ্যে। এগুলো প্রয়োগ করার সময় দয়া করে সতর্ক থাকুন। পড়ার জন্য ধন্যবাদ।