4
ফোকাস
1271
অনুসারী

শেখার কৌশল নকশাকে বিপরীত করতে AI ব্যবহার: পরিমাণগত ট্রেডিং দক্ষতা উন্নত করার একটি নতুন উপায়

তৈরি: 2025-04-27 10:14:30, আপডেট করা হয়েছে: 2025-04-27 13:34:44
comments   2
hits   933

[TOC]

শেখার কৌশল নকশাকে বিপরীত করতে AI ব্যবহার: পরিমাণগত ট্রেডিং দক্ষতা উন্নত করার একটি নতুন উপায়

কৃত্রিম বুদ্ধিমত্তা (এআই) প্রযুক্তির দ্রুত বিকাশের সাথে সাথে, এটি বিভিন্ন ক্ষেত্রে অত্যন্ত উচ্চ দক্ষতা এবং সৃজনশীলতা প্রদর্শন করেছে। একটি অত্যন্ত প্রযুক্তিগত ক্ষেত্র হিসেবে, পরিমাণগত ট্রেডিং স্বাভাবিকভাবেই কৃত্রিম বুদ্ধিমত্তার প্রয়োগ সক্রিয়ভাবে অন্বেষণ করছে। তবে, বাস্তবে, আমরা দেখতে পাব যে সম্পূর্ণ, স্থিতিশীল এবং টেকসই লাভজনক ট্রেডিং কৌশল তৈরির জন্য শুধুমাত্র AI এর উপর নির্ভর করার ক্ষেত্রে এখনও বড় চ্যালেঞ্জ রয়েছে।

বিশেষ করে প্ল্যাটফর্মের নতুন ব্যবহারকারীদের জন্য, তাদের দুর্বল প্রোগ্রামিং দক্ষতার কারণে, তাদের ট্রেডিং ধারণাগুলিকে কৌশল কোডে বাস্তবায়ন করা কঠিন। যদিও আমরা বর্তমানে AI-কে আমাদের ধারণাগুলি বলতে পারি এবং এটিকে কৌশলগুলি প্রকাশ করতে দিতে পারি। তবে, বাস্তবায়নের প্রভাব প্রত্যাশা পূরণ করতে পারেনি। আমি প্রায়ই এমন ব্যবহারকারীদের মুখোমুখি হই যারা AI-জেনারেটেড কোড ব্যবহার করে প্রশ্ন জিজ্ঞাসা করতে আসে, এবং কখনও কখনও আমি এক নজরে AI-জেনারেটেড কৌশলগুলি দেখতে পাই। যেহেতু এই পর্যায়ে AI দ্বারা তৈরি কৌশল কোডগুলিতে এখনও অনেক সমস্যা রয়েছে, এইভাবে AI ব্যবহার কেবল কোনও সমস্যার সমাধান করে না, বরং নতুনদের জন্য আরও বিভ্রান্তি এবং সমস্যাও বয়ে আনে। যতই শিখছি, ততই বিভ্রান্ত হয়ে পড়েছি, এবং শেষ পর্যন্ত “শুরু করা ছেড়ে দিয়েছি”।

আমি ব্যক্তিগতভাবে মনে করি যে AI ডাইরেক্ট আউটপুট কৌশলগুলির বর্তমান সমস্যার দুটি প্রধান কারণ রয়েছে:

  • কৌশলগত প্রয়োজনীয়তার প্রতিটি ব্যক্তির বর্ণনার যুক্তি, নির্ভুলতা এবং প্রক্রিয়ার স্পষ্টতা ব্যাপকভাবে পরিবর্তিত হয় এবং এই প্রাকৃতিক ভাষাগুলির সম্পর্কে AI মডেলের বোধগম্যতা পক্ষপাতদুষ্ট হবে।
  • এআই বিগ মডেলের প্ল্যাটফর্মের কার্যকারিতা, এপিআই ইত্যাদি সম্পর্কে সীমিত ধারণা রয়েছে, কারণ সাধারণ মডেল প্ল্যাটফর্মের তথ্য সম্পর্কে প্রশিক্ষিত নয় এবং এটি যে তথ্য তৈরি করে তার নির্ভুলতা সীমিত।

তাহলে, আরও কি কার্যকর প্রয়োগ পদ্ধতি আছে? এই প্রবন্ধটি চিন্তাভাবনার একটি নতুন ধরণ ভাগ করে নিতে চাই: AI আমাদের বিদ্যমান কৌশলগুলি শিখতে, কৌশল নকশা বুঝতে, মূল বিশদ এবং কৌশলগুলি বের করতে এবং তাদের কার্যকারিতা এবং উন্নতির সুযোগ আরও বিশ্লেষণ করতে সহায়তা করুক। এই পদ্ধতিটি কেবল কৌশল নকশার সারমর্মকে আরও দ্রুত উপলব্ধি করতে সাহায্য করতে পারে না, বরং আমাদের পরিমাণগত ট্রেডিং স্তরকেও পদ্ধতিগতভাবে উন্নত করতে পারে।

AI-এর সুবিধা গ্রহণ করে, AI নির্দিষ্ট কোড বিশ্লেষণের তুলনামূলকভাবে সঠিক ধারণা অর্জন করতে পারে, কারণ AI-এর জন্য, কোড ডেটা “1 হল 1, 2 হল 2” এবং প্রাকৃতিক ভাষা বর্ণনার প্রয়োজনীয়তার কারণে কোনও যৌক্তিক বিভ্রান্তি, অস্পষ্টতা বা অন্যান্য সমস্যা থাকবে না। তাহলে কেন AI এর সুবিধাগুলি ব্যবহার করে কায়িক কাজের চাপ কমানো এবং কায়িক শ্রমের সুবিধাগুলিকে পূর্ণভাবে কাজে লাগানো যাবে না?

শেখার কৌশলগুলিকে বিপরীত করতে AI কীভাবে ব্যবহার করবেন?

এটিকে নিম্নলিখিত ধাপে ভাগ করা যেতে পারে:

  • একটি বিদ্যমান কৌশল নির্বাচন করুন এটি স্ব-লিখিত, ওপেন সোর্স, অথবা উদ্ভাবকের পরিমাণগত প্ল্যাটফর্মে একটি চমৎকার কৌশল নমুনা হতে পারে।

  • কৌশলটি ব্যাখ্যা করতে AI-কে আমাদের সাহায্য করতে দিন।

সামগ্রিক ধারণাটি বুঝুন

প্রতিটি অংশের কার্যকরী মডিউলগুলি বাছাই করুন।

ব্যবহৃত সূচক, পরামিতি এবং ট্রেডিং লজিক স্পষ্ট করুন।

  • কৌশলটির সুবিধা এবং অসুবিধা বিশ্লেষণ করতে AI-কে নির্দেশনা দেওয়ার জন্য আরও প্রশ্ন জিজ্ঞাসা করুন।

কোন বাজারের পরিস্থিতিতে কৌশলটি আরও ভালোভাবে কাজ করে?

সম্ভাব্য ঝুঁকির বিষয়গুলি কী কী?

কোন ক্ষেত্রগুলিকে অপ্টিমাইজ এবং উন্নত করা যেতে পারে?

  • আপনার নিজস্ব চিন্তাভাবনার উপর ভিত্তি করে যাচাই করুন এবং সমন্বয় করুন

বিভিন্ন পণ্য এবং পিরিয়ডের উপর ব্যাকটেস্টিং

অতিরিক্ত ফিল্টার বা ঝুঁকি নিয়ন্ত্রণ ব্যবস্থা যোগ করুন

কর্মক্ষমতা পরিবর্তনগুলি পর্যবেক্ষণ করুন এবং আপনার নিজস্ব অন্তর্দৃষ্টি তৈরি করুন

অনুশীলন

আসুন AI কে একটি কৌশল শিখতে দেই এবং আমাদের কাছে ব্যাখ্যা করি যে এটি আমাদের প্রত্যাশা পূরণ করে কিনা। এটি আমাদের পরিমাণ নির্ধারণ শিখতে সাহায্য করতে পারে।

নীতির নমুনা

EMA ট্রেন্ড ফিল্টারিংয়ের উপর ভিত্তি করে ধাপে ধাপে অবস্থান বৃদ্ধিকারী ট্রেডিং কৌশলের নকশা এবং বাস্তবায়ন কৌশল ঠিকানা: https://www.fmz.com/strategy/492116

/*backtest
start: 2024-10-01 00:00:00
end: 2025-04-23 00:00:00
period: 1h
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
args: [["targetProfit",20],["amount",20],["amountPrecision",3],["isAmountForUSDT",true]]
*/

function getTotalEquity_OKEX_V5() {
    var totalEquity = null 
    var ret = exchange.IO("api", "GET", "/api/v5/account/balance", "ccy=USDT")
    if (ret) {
        try {
            totalEquity = parseFloat(ret.data[0].details[0].eq)
        } catch(e) {
            Log("获取账户总权益失败!")
            return null
        }
    }
    return totalEquity
}

function getTotalEquity_Binance() {
    var totalEquity = null 
    var ret = exchange.GetAccount()
    if (ret) {
        try {
            totalEquity = parseFloat(ret.Info.totalWalletBalance)
        } catch(e) {
            Log("获取账户总权益失败!")
            return null
        }
    }
    return totalEquity
}

function getTotalEquity() {
    var exName = exchange.GetName()
    if (exName == "Futures_OKCoin") {
        return getTotalEquity_OKEX_V5()
    } else if (exName == "Futures_Binance") {
        return getTotalEquity_Binance()
    } else {
        throw "不支持该交易所"
    }
}

function ceilToDecimals(value, decimals) {
    const factor = Math.pow(10, decimals);
    return Math.ceil(value * factor) / factor;
}

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(interval)
        }
        Sleep(interval)
    }
}

function trade(distance, price, amount) {
    var tradeFunc = null 
    if (distance == "buy") {
        tradeFunc = exchange.Buy
    } else if (distance == "sell") {
        tradeFunc = exchange.Sell
    } else if (distance == "closebuy") {
        tradeFunc = exchange.Sell
    } else {
        tradeFunc = exchange.Buy
    }
    exchange.SetDirection(distance)
    return tradeFunc(price, amount)
}

function openLong(price, amount) {
    return trade("buy", price, amount)
}

function openShort(price, amount) {
    return trade("sell", price, amount)
}

function coverLong(price, amount) {
    return trade("closebuy", price, amount)
}

function coverShort(price, amount) {
    return trade("closesell", price, amount)
}

function plotRecords(c, buyOrder, sellOrder, pos) {
    var bars = _C(exchange.GetRecords)
    if (bars.length == 0) {
        return  
    }

    bars.forEach(function(bar, index) {
        c.begin(bar)
        if (index == bars.length - 1) {
            if (buyOrder) {
                c.hline(buyOrder.Price, "buy", "rgba(255, 0, 0, 0.2)", "dotted")
            }
            if (sellOrder) {
                c.hline(sellOrder.Price, "sell", "rgba(0, 255, 0, 0.2)", "dotted")
            }
            if (pos && pos.length == 1) {
                c.hline(pos[0].Price, "pos", "rgba(0, 0, 255, 0.2)", "dashed")
            }
        }
        c.close()
    })
}

var buyOrderId = null
var sellOrderId = null
var logStatusMsgBuff = ""

function main() {
    var exName = exchange.GetName()    
    if (isSimulate && exName == "Futures_OKCoin") {
        exchange.IO("simulate", true)
    }

    if (isReset) {
        _G(null)
        LogReset(1)
        LogProfitReset()
        LogVacuum()
        Log("重置所有数据", "#FF0000")
    }

    exchange.SetContractType(contractType)
    exchange.SetPrecision(pricePrecision, amountPrecision)
    Log("设置精度", pricePrecision, amountPrecision)
    exchange.SetMarginLevel(marginLevel)

    if (totalEq == -1 && !IsVirtual()) {
        var recoverTotalEq = _G("totalEq")
        if (!recoverTotalEq) {
            var currTotalEq = getTotalEquity()
            if (currTotalEq) {
                totalEq = currTotalEq
                _G("totalEq", currTotalEq)
            } else {
                throw "获取初始权益失败"
            }
        } else {
            totalEq = recoverTotalEq
        }
    }

    var addCounter = _G("addCounter")
    if (!addCounter) {
        addCounter = 1
        if (setAddCounter != -1) {
            addCounter = setAddCounter
        }
        _G("addCounter", addCounter)
    } else {
        addCounter -= 1
    }

    let c = KLineChart({
        overlay: true
    })
    
    var isLock = false 
    while (true) {
        var ticker = _C(exchange.GetTicker)        
        var pos = _C(exchange.GetPosition)
        if (pos.length > 1) {
            Log(pos)
            throw "同时有多空持仓"
        }

        var r = _C(exchange.GetRecords, 60 * 60)
        var ema = TA.EMA(r, 60)
        if (Math.abs(ticker.Last - ema[ema.length - 2]) / ema[ema.length - 2] > 0.03) {
            cancelAll()
            isLock = true 
        }
        if (Math.abs(ticker.Last - ema[ema.length - 2]) / ema[ema.length - 2] < 0.02) {
            isLock = false 
        }
        if (isLock) {
            LogStatus(_D(), "暂停, 检测阈值:", _N(Math.abs(ticker.Last - ema[ema.length - 2]) / ema[ema.length - 2], 3), logStatusMsgBuff)
            plotRecords(c, null, null, pos)
            Sleep(interval)
            continue 
        }

        var currentAcc = _C(exchange.GetAccount)
        if (currentAcc.Balance < totalEq * reserve) {
            throw "no money, stop"
        }

        if (addCounter > maxAddCounter) {
            LogStatus(_D(), "加仓已达到上限", logStatusMsgBuff)
            if (isMaxAddCounterClear && pos.length >= 1) {
                Log("加仓已达到上限,撤单,清仓")
                cancelAll()
                if (pos[0].Type == PD_LONG) {
                    var coverId = coverLong(-1, pos[0].Amount)
                } else if (pos[0].Type == PD_SHORT) {
                    var coverId = coverShort(-1, pos[0].Amount)
                }
                addCounter = 1
            }
            continue
        }

        if (pos.length == 0) {
            if (!IsVirtual()) {
                var currTotalEq = getTotalEquity()
                if (currTotalEq) {
                    LogProfit(currTotalEq - totalEq, "当前总权益:", currTotalEq)
                }
            }

            var tradeAmountLong = amount
            var tradeAmountShort = amount
            if (isAmountForUSDT) {
                tradeAmountLong = ceilToDecimals(tradeAmountLong * 1.01 / (ticker.Last - targetProfit / 5) / oneCtValue, amountPrecision)
                tradeAmountShort = ceilToDecimals(tradeAmountShort * 1.01 / (ticker.Last + targetProfit / 5) / oneCtValue, amountPrecision)
            }

            buyOrderId = openLong(ticker.Last - targetProfit / 5, tradeAmountLong)
            sellOrderId = openShort(ticker.Last + targetProfit / 5, tradeAmountShort)

            addCounter = 1
            _G("addCounter", addCounter)
        } else if (pos[0].Type == PD_LONG) {
            var n = ratio
            var price = ticker.Last
            var addAmount = isDoubling ? pos[0].Amount : (isAmountForUSDT ? (ceilToDecimals(amount * 1.01 / (price - targetProfit * n) / oneCtValue, amountPrecision)) : amount)
            buyOrderId = openLong(price - targetProfit * n, addAmount)
            sellOrderId = coverLong(pos[0].Price + targetProfit, pos[0].Amount)

            addCounter++
            _G("addCounter", addCounter)
        } else if (pos[0].Type == PD_SHORT) {
            var n = ratio
            var price = ticker.Last
            var addAmount = isDoubling ? pos[0].Amount : (isAmountForUSDT ? (ceilToDecimals(amount * 1.01 / (price + targetProfit * n) / oneCtValue, amountPrecision)) : amount)
            buyOrderId = coverShort(pos[0].Price - targetProfit, pos[0].Amount)
            sellOrderId = openShort(price + targetProfit * n, addAmount)

            addCounter++
            _G("addCounter", addCounter)
        }

        if (!sellOrderId || !buyOrderId) {
            cancelAll()
            buyOrderId = null 
            sellOrderId = null
            continue
        } 

        while (1) { 
            var isFindBuyId = false 
            var isFindSellId = false
            var orders = _C(exchange.GetOrders)
            var buyOrder = null 
            var sellOrder = null 
            for (var i = 0 ; i < orders.length ; i++) {
                if (buyOrderId == orders[i].Id) {
                    isFindBuyId = true 
                    buyOrder = orders[i]
                }
                if (sellOrderId == orders[i].Id) {
                    isFindSellId = true 
                    sellOrder = orders[i]
                }               
            }
            if (!isFindSellId && !isFindBuyId) {    
                cancelAll()
                break
            } else if (!isFindBuyId) {   
                Log("买单成交")
                cancelAll()
                break
            } else if (!isFindSellId) {  
                Log("卖单成交")
                cancelAll()
                break
            }

            var acc = _C(exchange.GetAccount)
            var tbl = {"type": "table", "title": "data", "cols": ["data", "symbol", "type", "price", "amount"], "rows": []}
            if (buyOrder) {
                tbl.rows.push(["订单", buyOrder.Symbol, buyOrder.Type == ORDER_TYPE_BUY ? "买入" : "卖出", buyOrder.Price, buyOrder.Amount])
            }
            if (sellOrder) {
                tbl.rows.push(["订单", sellOrder.Symbol, sellOrder.Type == ORDER_TYPE_BUY ? "买入" : "卖出", sellOrder.Price, sellOrder.Amount])
            }
            if (pos && pos.length == 1) {
                tbl.rows.push(["持仓", pos[0].Symbol, pos[0].Type == PD_LONG ? "多" : "空", pos[0].Price, pos[0].Amount])
            }

            logStatusMsgBuff = "当前权益:" + acc.Equity + ", 初始权益:" + totalEq + (!IsVirtual() ? ", 浮动盈亏:" + (acc.Equity - totalEq) : "") + ", 加仓次数:" + addCounter + "\n`" + JSON.stringify(tbl) + "`"
            LogStatus(_D(), "当前权益:", acc.Equity, ", 初始权益:", totalEq, !IsVirtual() ? ", 浮动盈亏:" + (acc.Equity - totalEq) : "", ", 加仓次数:" + addCounter, "\n`" + JSON.stringify(tbl) + "`")

            plotRecords(c, buyOrder, sellOrder, pos)            
            Sleep(interval)
        }
        Sleep(interval)
    }
}

function onexit() {
    Log("扫尾,撤销所有挂单")
    cancelAll()
}

FMZ প্ল্যাটফর্মের নতুন শিক্ষার্থীদের জন্য, এত কোডের স্তূপ দেখে আপনি হতাশ বোধ করতে পারেন। কোড লাইন বাই লাইন অধ্যয়ন করার পরিবর্তে, আমরা (অলস হয়ে) এটি AI-এর কাছে ছুঁড়ে দিতে পারি, AI-কে আমাদের ব্যাখ্যা করতে দেই, এবং শেখার দক্ষতা উন্নত করি।

এআই ব্যাখ্যা

আমি এখানে GPT ব্যবহার করছি, এবং নিম্নলিখিত বিষয়বস্তুটি AI দ্বারা ব্যাখ্যা করা হয়েছে:

  • ১. সংক্ষিপ্তসার এই প্রবন্ধে EMA (এক্সপোনেনশিয়াল মুভিং এভারেজ) ট্রেন্ড ফিল্টারিংয়ের উপর ভিত্তি করে ধাপে ধাপে পজিশন-বৃদ্ধিকারী ট্রেডিং কৌশল উপস্থাপন করা হবে। এই কৌশলটি মূলত Binance Futures (Futures_Binance) এ ব্যবহৃত হয়, ১-ঘন্টা ব্যাকটেস্টিং সমর্থন করে এবং ১-মিনিটের K-লাইন ডেটা একত্রীকরণের উপর ভিত্তি করে। মূল্য এবং EMA-এর মধ্যে বিচ্যুতির রিয়েল-টাইম পর্যবেক্ষণের মাধ্যমে, কৌশলটি গতিশীলভাবে ট্রেডিং মোড (স্বাভাবিক ট্রেডিং/স্থগিত ট্রেডিং) পরিবর্তন করে, স্থিতিশীল বাজার পরিস্থিতিতে ধীরে ধীরে অবস্থান বৃদ্ধি করে এবং ঝুঁকি এড়াতে অস্বাভাবিক ওঠানামার ক্ষেত্রে স্বয়ংক্রিয়ভাবে অবস্থান স্থগিত করে।

    1. কৌশলগত যুক্তি
      1. ট্রেন্ড ফিল্টারিং (লক পজিশন নিয়ন্ত্রণ) সাম্প্রতিক ঘন্টার ক্যান্ডেলস্টিক ডেটার 60-পিরিয়ড EMA গণনা করুন। যখন বর্তমান মূল্য EMA থেকে 3% এর বেশি বিচ্যুত হয়, তখন অর্ডার দেওয়া স্থগিত করুন এবং মুলতুবি থাকা অর্ডার বাতিল করুন। যখন বিচ্যুতি ২% এর মধ্যে ফিরে আসবে, তখন স্বাভাবিক লেনদেন পুনরায় শুরু হবে। ট্রেন্ড ফিল্টারিংয়ের মাধ্যমে, আপনি অস্থির বাজার পরিস্থিতিতে ঘন ঘন পজিশন বৃদ্ধির ফলে সৃষ্ট লিকুইডেশনের ঝুঁকি এড়াতে পারেন।
      1. পজিশন যোগ করার যুক্তি (ধীরে ধীরে পজিশন যোগ করা) যখন প্রাথমিকভাবে কোনও পজিশন থাকে না, তখন একই সময়ে দুটি পেন্ডিং অর্ডার, একটি বাই লো অর্ডার এবং একটি সেল হাই অর্ডার স্থাপন করা হয়। অর্ডার মূল্য: বর্তমান মূল্যের নিচে ক্রয় অর্ডার স্থাপন করা হয়েছে (লক্ষ্য লাভ/৫ দূরত্ব) বিক্রয় অর্ডার বর্তমান মূল্যের উপরে স্থাপন করা হয়েছে (লক্ষ্য লাভ/৫ দূরত্ব) যদি মুলতুবি অর্ডারটি কার্যকর করা হয়, তাহলে ধাপে ধাপে অবস্থান বৃদ্ধি করা হবে: যদি ক্রয় আদেশ কার্যকর করা হয়, তাহলে পরবর্তী ক্রয় আদেশটি কম দামে স্থাপন করা চালিয়ে যান এবং বিদ্যমান অবস্থানের জন্য একটি বিক্রয়-বিরতি-লাভ অর্ডার সেট করুন। যদি বিক্রয় আদেশ কার্যকর করা হয়, তাহলে পরবর্তী বিক্রয় আদেশটি আরও বেশি দামে স্থাপন করা চালিয়ে যান এবং বিদ্যমান অবস্থানের জন্য একটি বাই স্টপ-প্রফিট অর্ডার সেট করুন। পজিশন বৃদ্ধির পরিমাণ দ্বিগুণ বা একটি নির্দিষ্ট পরিমাণে সেট করা যেতে পারে। যখন পজিশন সংযোজনের সংখ্যা maxAddCounter-এ পৌঁছায়, তখন কৌশলটি জোরপূর্বক লিকুইডেশন বেছে নিতে পারে।
      1. অবস্থান নিয়ন্ত্রণ এবং মূলধন সুরক্ষা প্রাথমিক মোট ইকুইটির (totalEq) উপর ভিত্তি করে খোলা প্রতিটি পজিশনের পরিমাণ নির্ধারণ করুন। USDT পরিমাণ অনুসারে চুক্তির সংখ্যা অনুমান করার জন্য সহায়তা (অন্তর্নিহিত মূল্যের উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে অর্ডারের পরিমাণ গণনা করা)। নিশ্চিত করুন যে অ্যাকাউন্টে অবশিষ্ট ব্যালেন্স একটি নির্দিষ্ট অনুপাতের (রিজার্ভ) চেয়ে বেশি। যদি ব্যালেন্স অপর্যাপ্ত হয়, তাহলে ট্রেডিং বন্ধ করুন।
  • ৩. মূল ফাংশন এবং মডিউলের ভূমিকা

      1. মোট অ্যাকাউন্ট ইকুইটি পান getTotalEquity ফাংশনটি Binance Futures (Futures_Binance) এবং OKEX V5 (Futures_OKCoin) এর জন্য এনক্যাপসুলেট করা হয়েছে। বিভিন্ন এক্সচেঞ্জের API পার্থক্যের সাথে সামঞ্জস্যপূর্ণ, অ্যাকাউন্টের বর্তমান মোট সম্পদ (USDT তে চিহ্নিত) অভিন্নভাবে ফেরত দেয়।
      1. অর্ডার প্লেসমেন্ট এবং বাতিলকরণ মডিউল বাণিজ্য (নির্দেশনা, মূল্য, পরিমাণ): একটি ইউনিফাইড অর্ডার ইন্টারফেসকে অন্তর্ভুক্ত করে। cancelAll(): অনেক বেশি মুলতুবি অর্ডারের কারণে ঝুঁকি রোধ করতে সমস্ত মুলতুবি অর্ডার বাতিল করুন।
      1. লং পজিশন খোলা, শর্ট পজিশন খোলা এবং ক্লোজিং পজিশন openLong(মূল্য, পরিমাণ): দীর্ঘ সময় খোলা। openShort(মূল্য, পরিমাণ): একটি সংক্ষিপ্ত অবস্থান খুলুন। কভারলং (মূল্য, পরিমাণ): লং এর কাছাকাছি। কভারশর্ট (মূল্য, পরিমাণ): খালি।
      1. যোগ করা পদের সংখ্যা এবং স্থিতির রেকর্ড ব্যবহার_সংযোগ বিচ্ছিন্ন এবং পুনরায় চালু করার পরে অবস্থান সংযোজনের স্থিতি হারানো এড়াতে G() ক্রমাগতভাবে addCounter পজিশন সংযোজনের সংখ্যা রেকর্ড করে। LogStatus ব্যবহার করে রিয়েল-টাইম অ্যাকাউন্ট তথ্য, মুলতুবি অর্ডার স্ট্যাটাস এবং অবস্থানের তথ্য গতিশীলভাবে প্রদর্শন করুন।
      1. চার্ট অঙ্কন ভিজ্যুয়াল ব্যাকটেস্টিং এবং রিয়েল-টাইম পর্যবেক্ষণে সহায়তা করার জন্য বাই অর্ডার মূল্য, বিক্রয় আদেশ মূল্য, গড় অবস্থান মূল্য ইত্যাদির মতো মূল লাইনগুলি আঁকতে KLineChart ব্যবহার করুন।
  • ৪. কৌশল ফ্লোচার্ট

  flowchart TD
      开始 --> 初始化参数
      初始化参数 --> 账户余额检查
      账户余额检查 --> 计算EMA
      计算EMA --> 判断是否锁仓
      判断是否锁仓 -->|是| 暂停交易
      判断是否锁仓 -->|否| 正常交易
      正常交易 --> 是否有持仓
      是否有持仓 -->|无| 首次挂单
      是否有持仓 -->|有| 按持仓方向加仓与止盈挂单
      首次挂单 --> 等待成交
      按持仓方向加仓与止盈挂单 --> 等待成交
      等待成交 --> 挂单成交检测
      挂单成交检测 --> 成交后调整
      成交后调整 --> 更新加仓次数
      更新加仓次数 --> 是否超出最大加仓次数
      是否超出最大加仓次数 -->|是| 平仓
      是否超出最大加仓次数 -->|否| 继续交易
  • ৫. সংক্ষিপ্ত বিবরণ EMA ফিল্টারিংয়ের উপর ভিত্তি করে ধাপে ধাপে অবস্থান বৃদ্ধির এই কৌশলটি রিটার্ন এবং ঝুঁকি নিয়ন্ত্রণ উভয়কেই বিবেচনা করে এবং একটি অস্থির এবং দুর্বলভাবে অস্থির বাজারে পরিচালনার জন্য উপযুক্ত। পজিশন যোগ করার নমনীয় পদ্ধতি এবং ট্রেন্ড পজ মেকানিজমের মাধ্যমে, লিকুইডেশনের সম্ভাবনা কার্যকরভাবে হ্রাস করা যেতে পারে এবং মূলধন ব্যবহারের দক্ষতা উন্নত করা যেতে পারে। এটি ব্যাকটেস্টিং এবং রিয়েল ট্রেডিং উভয়কেই সমর্থন করে এবং এর মডুলার ডিজাইন এটিকে প্রসারিত করা সহজ করে তোলে। উদাহরণস্বরূপ, এটি লক্ষ্য লাভ এবং পরিমাণের গতিশীল সমন্বয় আরও প্রবর্তন করতে পারে, অথবা ফিল্টারিং প্রভাব বাড়ানোর জন্য অন্যান্য প্রযুক্তিগত সূচক যোগ করতে পারে।

    • তুমি কি চাও আমি তোমাকে একটা উন্নত পরামর্শ দেই? উদাহরণস্বরূপ: দ্বিমুখী অবস্থান বৃদ্ধিতে কীভাবে উন্নতি করা যায় (দ্বিমুখী অবস্থান) অবস্থান বৃদ্ধির অনুপাত কীভাবে গতিশীলভাবে সামঞ্জস্য করবেন ঝুঁকি নিয়ন্ত্রণ স্টপ-লস লজিক কীভাবে এম্বেড করবেন?

স্থানীয় প্রশ্ন/ব্যাখ্যা

জিপিটি প্রশ্ন সম্পর্কে:

শেখার কৌশল নকশাকে বিপরীত করতে AI ব্যবহার: পরিমাণগত ট্রেডিং দক্ষতা উন্নত করার একটি নতুন উপায়

নিম্নলিখিত বিষয়বস্তুটি AI দ্বারা ব্যাখ্যা করা হয়েছে:

এই কৌশলে, ট্রেন্ড ফিল্টারিং অর্জন করা হয়:

var ema = TA.EMA(r, 60)
if (Math.abs(ticker.Last - ema[ema.length - 2]) / ema[ema.length - 2] > 0.03) {
    cancelAll()
    isLock = true 
}
if (Math.abs(ticker.Last - ema[ema.length - 2]) / ema[ema.length - 2] < 0.02) {
    isLock = false 
}
if (isLock) {
    LogStatus(_D(), "暂停, 检测阈值:", _N(Math.abs(ticker.Last - ema[ema.length - 2]) / ema[ema.length - 2], 3), logStatusMsgBuff)
    plotRecords(c, null, null, pos)
    Sleep(interval)
    continue 
}
  • কোড বিশ্লেষণ EMA ট্রেন্ড ফিল্টার: TA.EMA(r, 60) গত 60 ঘন্টার সূচকীয় চলমান গড় (EMA) গণনা করতে ব্যবহৃত হয়। r হল exchange.GetRecords দ্বারা প্রাপ্ত ঐতিহাসিক K-লাইন ডেটা, এবং প্রতিটি ডেটা পয়েন্ট এক ঘন্টার মূল্য তথ্য উপস্থাপন করে। EMA অ্যারে প্রতি ঘন্টার জন্য EMA মান সংরক্ষণ করে।[ema.length - 2] বর্তমান সময় বিন্দুতে পূর্ববর্তী ঘন্টার EMA মান প্রতিনিধিত্ব করে।

ট্রেন্ড লক এবং রিলিজ: বর্তমান মূল্য (ticker.Last) এবং পূর্ববর্তী ঘন্টার EMA মানের মধ্যে পার্থক্য তুলনা করে, EMA থেকে মূল্য কত শতাংশ বিচ্যুত হয় তা গণনা করা হয়। Math.abs(ticker.Last - ema[ema.length - 2]) / ema[ema.length - 2] পূর্ববর্তী ঘন্টার EMA থেকে বর্তমান মূল্যের শতাংশ বিচ্যুতি গণনা করে। যদি বিচ্যুতি 3% (> 0.03) এর বেশি হয়, তাহলে বাজারের প্রবণতা উল্লেখযোগ্যভাবে পরিবর্তিত হয়েছে বলে মনে করা হয়, এবং সমস্ত মুলতুবি অর্ডার বাতিল করার জন্য cancelAll() ফাংশনটি ডাকা হয়, এবং isLock সত্যে সেট করা হয়, অর্থাৎ পজিশনটি লক করা হয়, যা পরবর্তী ট্রেডিংকে বাধা দেয়। যদি মূল্য EMA থেকে 2% (< 0.02) এর কম বিচ্যুত হয়, তাহলে লক অবস্থা প্রকাশিত হয় এবং isLock মিথ্যাতে সেট করা হয়।

ট্রেডিং স্থগিতাদেশ: যদি isLock সত্য হয় (যা নির্দেশ করে যে পজিশনটি বর্তমানে লক করা আছে), তাহলে আর কোনও ট্রেডিং কার্যক্রম সম্পাদিত হবে না। প্রোগ্রামটি লগ রেকর্ড আউটপুট করবে এবং বর্তমান ট্রেন্ড এবং অবস্থানের অবস্থা দেখানোর জন্য একটি চার্ট আঁকতে plotRecords() কল করবে। নির্দিষ্ট সময়ের জন্য বিরতি দিতে Sleep(interval) ব্যবহার করুন এবং তারপর লুপটি চালিয়ে যান।

  • ব্যাকটেস্ট টেস্টিং

শেখার কৌশল নকশাকে বিপরীত করতে AI ব্যবহার: পরিমাণগত ট্রেডিং দক্ষতা উন্নত করার একটি নতুন উপায়

মনে হচ্ছে কিছু ট্রেন্ড ফিল্টার করে বাদ দেওয়া যেতে পারে। কোডটি নিজে পড়ে, আমি দেখতে পেলাম যে AI এর ব্যাখ্যা খুবই স্পষ্ট, এমনকি যদি আমি নিজে ব্যাখ্যা করতাম তার চেয়েও স্পষ্ট।

সারসংক্ষেপ

AI-কে সামগ্রিক কৌশল বিশ্লেষণ এবং ব্যাখ্যা করার অনুমতি দিয়ে, এবং তারপর AI-এর সামগ্রিক কৌশলের ব্যাখ্যার উপর ভিত্তি করে, ধীরে ধীরে কৌশলের স্থানীয় বিবরণ বিশ্লেষণ, বিচ্ছিন্নকরণ এবং ব্যাখ্যা করা এবং নকশা ধারণাগুলি ব্যাখ্যা করা। আমরা যে ব্যাখ্যা পেয়েছি তা তুলনামূলকভাবে সঠিক ছিল। এআই কৌশলটিতে পরিকল্পিত প্রায় সমস্ত বিবরণ বাদ না দিয়ে তালিকাভুক্ত করেছে এবং আরও জিজ্ঞাসাবাদের মাধ্যমে বিশদ বিশ্লেষণ করেছে। সম্পূর্ণ কৌশলগত চিন্তাভাবনা শেখার এই পদ্ধতি, কোড ডিজাইনের বিশদ বিবরণ এবং কৌশলগত নকশার অভিজ্ঞতা বৃদ্ধি করা খুবই সহায়ক।

পরিমাণগত বাণিজ্যের পথে, কৃত্রিম বুদ্ধিমত্তা আমাদের জন্য একটি অত্যন্ত শক্তিশালী শিক্ষণ এবং বৃদ্ধির অংশীদার হয়ে উঠতে পারে। এক ক্লিকেই কৃত্রিম বুদ্ধিমত্তার উপর নির্ভর করে কৌশল তৈরি করার পরিবর্তে, AI পারে:

  • বিদ্যমান কৌশলগুলি গভীরভাবে শেখা
  • জটিল যুক্তি দ্রুত বুঝতে পারবে
  • পদ্ধতিগত নকশার অভিজ্ঞতা
  • ক্রমাগত অপ্টিমাইজেশন এবং উদ্ভাবন

কেবলমাত্র এই পথই আমাদের পরিমাণগত ট্রেডিং ক্ষমতাকে সত্যিকার অর্থে উন্নত করতে পারে এবং আমাদের নিজস্ব নিয়মতান্ত্রিক ট্রেডিং ব্যবস্থা প্রতিষ্ঠা করতে পারে। ইনভেনটর কোয়ান্টিটেটিভ ট্রেডিং প্ল্যাটফর্মে, আমরা AI এর শক্তির পূর্ণ ব্যবহার করতে পারি এবং এটিকে আমাদের নিজস্ব অনুশীলনের সাথে একত্রিত করে আরও এগিয়ে যেতে এবং আরও উঁচুতে উড়তে পারি।