dYdX কৌশল ডিজাইনের উদাহরণ
অনেক ব্যবহারকারীর চাহিদার প্রতিক্রিয়ায়, FMZ প্ল্যাটফর্ম সম্প্রতি বিকেন্দ্রীভূত বিনিময় dYdX সমর্থন করেছে। কৌশল সহ বন্ধুরা আনন্দের সাথে dYdX খনি করতে পারে। এটা ঠিক তাই হয় যে আমি অনেক দিন আগে একটি এলোমেলো ট্রেডিং কৌশল লিখতে চেয়েছিলাম এটা কোন ব্যাপার না যে আমি অর্থ উপার্জন করি বা হারাই আমার দক্ষতা অনুশীলন করা এবং কৌশল ডিজাইন শেখানো। তাই এর পরে, আসুন কৌশলটির কার্যকারিতা সম্পর্কে চিন্তা করবেন না।
প্রথমে আপনাকে কিছু খনন দেখাই
এই নিবন্ধে কৌশলগত খনির স্ক্রিনশট।
যে বন্ধুদের ভাল মাইনিং কৌশল ধারনা আছে তাদেরও একটি বার্তা দিতে স্বাগতম!
র্যান্ডম ট্রেডিং কৌশল ডিজাইন
আসুন কিছু "এলোমেলো চিন্তা" আছে! এমন একটি কৌশল ডিজাইন করার পরিকল্পনা করুন যা সূচক বা দাম না দেখেই অর্ডার দেওয়া দীর্ঘ বা সংক্ষিপ্ত নয়, এবং এটি সবই সম্ভাবনার বিষয়ে। তারপরে আমরা দীর্ঘ এবং সংক্ষিপ্ত অবস্থান নির্ধারণ করতে 1 থেকে 100 পর্যন্ত র্যান্ডম সংখ্যা ব্যবহার করি।
দীর্ঘ শর্ত: এলোমেলো সংখ্যা 1~50।
সংক্ষিপ্ত বিক্রয় শর্ত: এলোমেলো সংখ্যা 51~100।
দীর্ঘ এবং ছোট উভয় সংখ্যাই 50। এর পরে, আসুন কীভাবে অবস্থানটি বন্ধ করা যায় সে সম্পর্কে চিন্তা করি যেহেতু এটি জুয়া, সেখানে একটি জয়ী বা হারানো মান থাকতে হবে। তারপরে ট্রেডিংয়ে, আমাদের জয়ী এবং হারানোর মান হিসাবে নির্দিষ্ট টেক-প্রফিট এবং স্টপ-লস সেট করা উচিত। আপনি যদি লাভ বন্ধ করেন তবে আপনি জিতবেন, যদি আপনি ক্ষতি বন্ধ করেন তবে আপনি হারবেন। স্টপ প্রফিট এবং স্টপ লসের উপযুক্ত স্তরের জন্য, এটি আসলে লাভ এবং ক্ষতির অনুপাতকে প্রভাবিত করে, ওহ হ্যাঁ! এটি জয়ের হারকেও প্রভাবিত করে! (এই নকশা কৌশলটি কি কার্যকর? এটি একটি ইতিবাচক গাণিতিক প্রত্যাশা হওয়ার গ্যারান্টি দেওয়া যেতে পারে? প্রথমে এটি করুন এবং তারপর এটি সম্পর্কে কথা বলুন! যাইহোক, এটি শেখার এবং গবেষণা!)
লেনদেন মূল্যহীন নয় যেমন স্লিপেজ এবং হ্যান্ডলিং ফি আমাদের এলোমেলো ট্রেডিং জয়ের হারকে 50% এর কম করার জন্য যথেষ্ট। এই চিন্তা, আমি কিভাবে ডিজাইন চালিয়ে যেতে হবে?
পজিশন বাড়ানোর জন্য একটি মাল্টিপল ডিজাইন করা ভালো, যেহেতু এটি একটি বাজি, তাই পরপর 10 বার র্যান্ডম লেনদেনে হারানোর সম্ভাবনা খুব বেশি হওয়া উচিত নয়। তাই আমি প্রথম লেনদেনের জন্য অর্ডারের পরিমাণ ডিজাইন করতে চাই, যতটা সম্ভব ছোট। তারপর বাজি হারলে, অর্ডারের পরিমাণ বাড়ান এবং এলোমেলো অর্ডার দেওয়া চালিয়ে যান।
ঠিক আছে, কৌশলটি ডিজাইনের মতোই সহজ।
ডিজাইন সোর্স কোড:
var openPrice = 0
var ratio = 1
var totalEq = null
var nowEq = null
function cancelAll() {
while (1) {
var orders = _C(exchange.GetOrders)
if (orders.length == 0) {
break
}
for (var i = 0 ; i < orders.length ; i++) {
exchange.CancelOrder(orders[i].Id, orders[i])
Sleep(500)
}
Sleep(500)
}
}
function main() {
if (isReset) {
_G(null)
LogReset(1)
LogProfitReset()
LogVacuum()
Log("重置所有数据", "#FF0000")
}
exchange.SetContractType(ct)
var initPos = _C(exchange.GetPosition)
if (initPos.length != 0) {
throw "策略启动时有持仓!"
}
exchange.SetPrecision(pricePrecision, amountPrecision)
Log("设置精度", pricePrecision, amountPrecision)
if (!IsVirtual()) {
var recoverTotalEq = _G("totalEq")
if (!recoverTotalEq) {
var currTotalEq = _C(exchange.GetAccount).Balance // equity
if (currTotalEq) {
totalEq = currTotalEq
_G("totalEq", currTotalEq)
} else {
throw "获取初始权益失败"
}
} else {
totalEq = recoverTotalEq
}
} else {
totalEq = _C(exchange.GetAccount).Balance
}
while (1) {
if (openPrice == 0) {
// 更新账户信息,计算收益
var nowAcc = _C(exchange.GetAccount)
nowEq = IsVirtual() ? nowAcc.Balance : nowAcc.Balance // equity
LogProfit(nowEq - totalEq, nowAcc)
var direction = Math.floor((Math.random()*100)+1) // 1~50 , 51~100
var depth = _C(exchange.GetDepth)
if (depth.Asks.length <= 2 || depth.Bids.length <= 2) {
Sleep(1000)
continue
}
if (direction > 50) {
// long
openPrice = depth.Bids[1].Price
exchange.SetDirection("buy")
exchange.Buy(Math.abs(openPrice) + slidePrice, amount * ratio)
} else {
// short
openPrice = -depth.Asks[1].Price
exchange.SetDirection("sell")
exchange.Sell(Math.abs(openPrice) - slidePrice, amount * ratio)
}
Log("下", direction > 50 ? "买单" : "卖单", ",价格:", Math.abs(openPrice))
continue
}
var orders = _C(exchange.GetOrders)
if (orders.length == 0) {
var pos = _C(exchange.GetPosition)
if (pos.length == 0) {
openPrice = 0
continue
}
// 平仓检测
while (1) {
var depth = _C(exchange.GetDepth)
if (depth.Asks.length <= 2 || depth.Bids.length <= 2) {
Sleep(1000)
continue
}
var stopLossPrice = openPrice > 0 ? Math.abs(openPrice) - stopLoss : Math.abs(openPrice) + stopLoss
var stopProfitPrice = openPrice > 0 ? Math.abs(openPrice) + stopProfit : Math.abs(openPrice) - stopProfit
var winOrLoss = 0 // 1 win , -1 loss
// 画线
$.PlotLine("bid", depth.Bids[0].Price)
$.PlotLine("ask", depth.Asks[0].Price)
// 止损
if (openPrice > 0 && depth.Bids[0].Price < stopLossPrice) {
exchange.SetDirection("closebuy")
exchange.Sell(depth.Bids[0].Price - slidePrice, pos[0].Amount)
winOrLoss = -1
} else if (openPrice < 0 && depth.Asks[0].Price > stopLossPrice) {
exchange.SetDirection("closesell")
exchange.Buy(depth.Asks[0].Price + slidePrice, pos[0].Amount)
winOrLoss = -1
}
// 止盈
if (openPrice > 0 && depth.Bids[0].Price > stopProfitPrice) {
exchange.SetDirection("closebuy")
exchange.Sell(depth.Bids[0].Price - slidePrice, pos[0].Amount)
winOrLoss = 1
} else if (openPrice < 0 && depth.Asks[0].Price < stopProfitPrice) {
exchange.SetDirection("closesell")
exchange.Buy(depth.Asks[0].Price + slidePrice, pos[0].Amount)
winOrLoss = 1
}
// 检测挂单
Sleep(2000)
var orders = _C(exchange.GetOrders)
if (orders.length == 0) {
pos = _C(exchange.GetPosition)
if (pos.length == 0) {
if (winOrLoss == -1) {
ratio++
} else if (winOrLoss == 1) {
ratio = 1
}
break
}
} else {
// 撤销挂单
cancelAll()
Sleep(2000)
pos = _C(exchange.GetPosition)
// 撤销后更新持仓,需要再次检查
if (pos.length == 0) {
if (winOrLoss == -1) {
ratio++
} else if (winOrLoss == 1) {
ratio = 1
}
break
}
}
var tbl = {
"type" : "table",
"title" : "info",
"cols" : ["totalEq", "nowEq", "openPrice", "bid1Price", "ask1Price", "ratio", "pos.length"],
"rows" : [],
}
tbl.rows.push([totalEq, nowEq, Math.abs(openPrice), depth.Bids[0].Price, depth.Asks[0].Price, ratio, pos.length])
tbl.rows.push(["pos", "type", "amount", "price", "--", "--", "--"])
for (var j = 0 ; j < pos.length ; j++) {
tbl.rows.push([j, pos[j].Type, pos[j].Amount, pos[j].Price, "--", "--", "--"])
}
LogStatus(_D(), "\n", "`" + JSON.stringify(tbl) + "`")
}
} else {
// 撤销挂单
// 重置openPrice
cancelAll()
openPrice = 0
}
Sleep(1000)
}
}
কৌশল পরামিতি:
ওহ হ্যাঁ! কৌশলটির একটি নাম প্রয়োজন, আসুন এটিকে বলি "আকার অনুমান করুন (dYdX সংস্করণ)"।
ব্যাকটেস্ট
ব্যাকটেস্ট শুধুমাত্র রেফারেন্সের জন্য, >_<!
মূল উদ্দেশ্য হ'ল কৌশলটিতে কোনও বাগ আছে কিনা তা পরীক্ষা করা এবং ব্যাকটেস্ট করার জন্য বিনান্স ফিউচার ব্যবহার করা।
ব্যাকটেস্ট শেষ হয়েছে এবং কোন বাগ নেই। কিন্তু আমার মনে হচ্ছে আমি ব্যাকটেস্ট সিস্টেমটি সঠিকভাবে ফিট করছি না...T_T, আমি রিয়েল টাইমে এটি চেষ্টা করব।
বাস্তব অফার চলমান
এই কৌশল শুধুমাত্র শেখার এবং রেফারেন্স জন্য.দশ মিলিয়ন~দশ মিলিয়নবাস্তব সময়ে এটি ব্যবহার করবেন না! !
问一下, dydx去中心化交易所现在是否支持现货交易? 还是只能永续合约? 从来没用过 去中心化交易所, 如果dydx支持现货交易, 可以考虑做个现货网格交易策略. 还有就是去中心化交易所, 确认买卖是否成功还需要等待时间, 不像中心化交易所那么闪电般快, 需要旷工确认. 要是速度这些克服了, 又支持写网格等量化策略, 那是非常好.
- 1











