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

পরিমাণগত যাত্রা শুরু হয় FMZ থেকে

তৈরি: 2025-04-18 09:31:42, আপডেট করা হয়েছে: 2025-04-26 11:50:01
comments   0
hits   941

পরিমাণগত যাত্রা শুরু হয় FMZ থেকে

ভূমিকা

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

পরিমাণগত ট্রেডিং নতুনদের বিভ্রান্তি

আমি প্রায়ই প্ল্যাটফর্মের নতুনদের সাথে যোগাযোগ করি এবং চ্যাট করি। পরিমাণগত ট্রেডিংয়ের নতুনরা সাধারণত সম্পূর্ণ নকশা প্রক্রিয়া দ্বারা বিভ্রান্ত হন। যখন আমার কাছে ট্রেডিং এর আইডিয়া আসে, তখন আমি প্রায়শই বুঝতে পারি না কোথা থেকে শুরু করবো এবং অভিভূত বোধ করি।

সম্পর্কে বিভ্রান্ত:

  • খোলার এবং বন্ধের অবস্থানগুলি কীভাবে ডিজাইন করবেন
  • রাজস্ব গণনা কীভাবে ডিজাইন করবেন
  • ট্রেডিং অগ্রগতি পুনরায় চালু এবং চালিয়ে যাওয়ার জন্য কৌশলগুলি কীভাবে ডিজাইন করবেন
  • কিভাবে একটি কৌশল চার্ট প্রদর্শন ডিজাইন করবেন
  • কৌশলগত মিথস্ক্রিয়া নিয়ন্ত্রণ কীভাবে ডিজাইন করবেন

আসুন একসাথে উপরের বিভ্রান্তিটি সমাধান করি।

নকশা ব্যাখ্যা

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

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

এই কৌশলটি নিম্নলিখিত নকশার প্রয়োজনীয়তার উপর ভিত্তি করে তৈরি:

বিভিন্ন স্তরে মূল্যের অগ্রগতি অনুসারে পজিশন যোগ করুন এবং পজিশন বন্ধ করুন

পজিশনের ধীরে ধীরে বৃদ্ধি নিয়ন্ত্রণ করতে দুটি অ্যারে সেট আপ করুন।

var arrUp = null 
var arrDown = null 

প্রতিবার যখন আপনি একটি অবস্থান যোগ করেন, অবস্থানের তথ্য অ্যারেতে পুশ করা হয়, যা অবস্থান নিয়ন্ত্রণ করা এবং কৌশল রিয়েল-টাইম ইন্টারফেসে ডেটা প্রদর্শন করা সহজ করে তোলে।

মূল্যের অগ্রগতির স্তর অনুসারে পজিশন খুলুন এবং বন্ধ করুন। সরলতার স্বার্থে, খোলা এবং সমাপনী উভয় অবস্থানেই বাজারের অর্ডার ব্যবহার করা হয়, যা সহজ এবং কার্যকর।

            if (close > up && i >= arrUp.length && !isPaused) {
                var id = exchange.CreateOrder(symbol, "sell", -1, tradeAmount)
                if (!id) {
                    Log("下单失败")
                    continue
                }
                arrUp.push({"symbol": symbol, "ratio": (i + 1), "amount": tradeAmount, "price": close})
                _G("arrUp", arrUp)
                arrSignal.push([r[r.length - 1].Time, "short", close, tradeAmount])
                Log([r[r.length - 1].Time, "short", close, tradeAmount], "@")
            } else if (close < down && i >= arrDown.length && !isPaused) {
                var id = exchange.CreateOrder(symbol, "buy", -1, tradeAmount)
                if (!id) {
                    Log("下单失败")
                    continue 
                }
                arrDown.push({"symbol": symbol, "ratio": (i + 1), "amount": tradeAmount, "price": close})
                _G("arrDown", arrDown)
                arrSignal.push([r[r.length - 1].Time, "long", close, tradeAmount])
                Log([r[r.length - 1].Time, "long", close, tradeAmount], "@")
            } else if (((arrUp.length > 0 && close < mid) || (arrDown.length > 0 && close > mid)) && !isPaused) {
                clear(pos, r)
            }

ইনভেন্টরি পরিষ্কার করুন এবং এটি পরিচালনা করার জন্য একটি ফাংশন ব্যবহার করুন। প্রতিবার ইনভেন্টরি সাফ করার সময় কিছু ডেটা স্ট্রাকচার রিসেট করতে হয়, তাই ক্লিয়ারিং ফাংশনটিকে ইন্টারেক্টিভ মডিউলে পুনঃব্যবহারের জন্য একটি ফাংশনে এনক্যাপসুলেট করতে হয়।

function clear(positions, r) {
    var close = r[r.length - 1].Close
    for (var p of positions) {
        if (p.Type == PD_LONG) {
            var id = exchange.CreateOrder(symbol, "closebuy", -1, p.Amount)
            if (!id) {
                Log("下单失败")
                continue 
            }
            arrSignal.push([r[r.length - 1].Time, "closelong", close, p.Amount])
            Log([r[r.length - 1].Time, "closelong", close, p.Amount], "@")
        } else if (p.Type == PD_SHORT) {
            var id = exchange.CreateOrder(symbol, "closesell", -1, p.Amount)
            if (!id) {
                Log("下单失败")
                continue 
            }
            arrSignal.push([r[r.length - 1].Time, "closeshort", close, p.Amount])
            Log([r[r.length - 1].Time, "closeshort", close, p.Amount], "@")
        }
    }
    arrUp = []
    arrDown = []
    _G("arrUp", arrUp)
    _G("arrDown", arrDown)
    var profit = calcProfit()
    LogProfit(profit)
}

ধাপে ধাপে পদ বরাদ্দ

এটি একাধিক স্তরে বিভক্ত, এবং সর্বোচ্চ স্তর হল: maxRatio। প্রতিটি স্তর একটি ভিন্ন মূল্য সীমা গণনা করে।

        for (var i = 0; i < maxRatio; i++) {                        
            var up = open + atr[atr.length - 1] * (i + 1)
            var mid = open
            var down = open - atr[atr.length - 1] * (i + 1)
            atrs.push([open, (i + 1), atr])
            
            var tradeAmount = baseAmount * Math.pow(2, i)
            if (isAmountForUSDT) {
                tradeAmount = tradeAmount * 1.05 / close
            }
            tradeAmount = _N(tradeAmount, amountPrecision)

            var balance = acc.Balance
            if (balance - initAcc.Equity * reserve < tradeAmount * close) {
                continue 
            }
        // ...
        }

গতিশীল প্যারামিটার সমন্বয়, বিরতি অপারেশন, দ্রুত ক্লিয়ারেন্স এবং অন্যান্য মিথস্ক্রিয়া সমর্থন করে

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

        var cmd = GetCommand()
        if (cmd) {
            Log("交互指令:", cmd)
            var arrCmd = cmd.split(":")
            if (arrCmd.length == 2) {
                var strCmd = arrCmd[0]
                var param = parseFloat(arrCmd[1])
                if (strCmd == "atrPeriod") {
                    atrPeriod = param
                    Log("修改ATR参数:", atrPeriod)
                }
            } else {
                if (cmd == "isPaused" && !isPaused) {
                    isPaused = true
                    Log("暂停交易")
                } else if (cmd == "isPaused" && isPaused) {
                    isPaused = false 
                    Log("取消暂停交易")
                } else if (cmd == "clearAndPaused") {
                    clear(pos, r)
                    isPaused = true
                    Log("清仓、暂停交易")
                }
            }
        }

খোলা/বন্ধ করার অনুস্মারক ব্যবস্থা সহ

কোনও কৌশল খোলা বা বন্ধ করার সময়, আপনি সহজেই বার্তাগুলি এখানে পুশ করতে পারেনমেইল, FMZ APP, তৃতীয় পক্ষের ইন্টারফেস, ইত্যাদি।

Log([r[r.length - 1].Time, "long", close, tradeAmount], "@")  // 消息推送

পুশ বিজ্ঞপ্তি পান (FMZ APP এবং অন্যান্য অ্যাপগুলিও পুশ বিজ্ঞপ্তি পাবে):

পরিমাণগত যাত্রা শুরু হয় FMZ থেকে

রিয়েল-টাইম পরিসংখ্যান এবং লাভ এবং অবস্থানের প্রদর্শন

প্রতিবার যখন কোনও পজিশন বন্ধ করা হয়, তখন লাভ এবং ক্ষতি গণনা করে লাভ এবং ক্ষতির বক্ররেখা আউটপুট করার জন্য লাভ এবং ক্ষতি গণনার ফাংশনটি ডাকা হয়।

function calcProfit() {
    var initAcc = _G("initAcc")
    var nowAcc = _C(exchange.GetAccount)
    var profit = nowAcc.Equity - initAcc.Equity
    return profit
}

অবস্থা স্থিরতা সমর্থন (ব্রেকপয়েন্ট পুনরুদ্ধার)

FMZ ব্যবহার করুন_G()ফাংশন, একটি কৌশল অগ্রগতি পুনরুদ্ধার প্রক্রিয়া ডিজাইন করা সহজ।

    if (isReset) {
        _G(null)
        LogProfitReset()
        LogReset(1)
        c.reset()
    }

    arrUp = _G("arrUp")
    if (!arrUp) {
        arrUp = []
        _G("arrUp", arrUp)
    }

    arrDown = _G("arrDown")
    if (!arrDown) {
        arrDown = []
        _G("arrDown", arrDown)
    }

পরিমাণ অনুসারে অর্ডার দেওয়ার নকশা

চুক্তি ট্রেড করার সময়, অর্ডার ইন্টারফেসে অর্ডারের পরিমাণ হল চুক্তির সংখ্যা, তাই ব্যবহারকারীরা প্রায়শই জিজ্ঞাসা করেন যে আমাদের সংখ্যায় কীভাবে অর্ডার দেবেন:

            if (isAmountForUSDT) {
                tradeAmount = tradeAmount * 1.05 / close
            }
            tradeAmount = _N(tradeAmount, amountPrecision)

এটা আসলে খুবই সহজ, শুধু পরিমাণটিকে দাম দিয়ে ভাগ করুন।

রিজার্ভ অনুপাত নকশা

আপনি যদি ঝুঁকি নিয়ন্ত্রণ হিসেবে আপনার অ্যাকাউন্টে একটি নির্দিষ্ট পরিমাণ তহবিল সর্বদা সংরক্ষণ করতে চান, তাহলে আপনি এই সহজ পদ্ধতিটি ডিজাইন করতে পারেন।

            var balance = acc.Balance
            if (balance - initAcc.Equity * reserve < tradeAmount * close) {
                continue 
            }

ভিজ্যুয়ালাইজেশন চার্ট

একটি বাস্তব বাজার পরিচালনা করার সময়, অ্যাকাউন্ট ইকুইটি, কৌশলগত অবস্থা, কৌশলগত অবস্থান, অর্ডার তথ্য, বাজার চার্ট ইত্যাদি সহ কৌশলটি পর্যবেক্ষণ করা অবশ্যই প্রয়োজন। এগুলি নিম্নরূপ ডিজাইন করা হয়েছে:

        if (isShowPlot) {
            r.forEach(function(bar, index) {
                c.begin(bar)
                for (var i in atrs) {
                    var arr = atrs[i]
                    var up = arr[0] + arr[2][index] * arr[1]
                    var mid = arr[0]
                    var down = arr[0] - arr[2][index] * arr[1]
                    c.plot(up, 'up_' + (i + 1))
                    c.plot(mid, 'mid_' + (i + 1))
                    c.plot(down, 'down_' + (i + 1))
                }

                for (var signal of arrSignal) {
                    if (signal[0] == bar.Time) {
                        c.signal(signal[1], signal[2], signal[3])
                    }
                }

                c.close()
            })
        }

        // ...

        var orderTbl = {"type": "table", "title": "order", "cols": ["symbol", "type", "ratio", "price", "amount"], "rows": []}
        for (var i = arrUp.length - 1; i >= 0; i--) {
            var order = arrUp[i]
            orderTbl["rows"].push([order["symbol"], "short", order["ratio"], order["price"], order["amount"]])
        }
        for (var i = 0; i < arrDown.length; i++) {
            var order = arrDown[i]
            orderTbl["rows"].push([order["symbol"], "long", order["ratio"], order["price"], order["amount"]])
        }

        var posTbl = {"type": "table", "title": "pos", "cols": ["symbol", "type", "price", "amount"], "rows": []}
        for (var i = 0; i < pos.length; i++) {
            var p = pos[i]
            posTbl["rows"].push([p.Symbol, p.Type == PD_LONG ? "long" : "short", p.Price, p.Amount])
        }

        LogStatus(_D(), "初始权益:" + initAcc.Equity, ", 当前权益:" + acc.Equity, ", 运行状态:" + (isPaused ? "暂停交易" : "运行中"), 
            "\n`" + JSON.stringify(orderTbl) + "`\n", "`" + JSON.stringify(posTbl) + "`")

শেষ পর্যন্ত, ২০০ টিরও বেশি লাইনের কোড একটি সম্পূর্ণ কৌশল বাস্তবায়ন করেছে যা বাস্তব ট্রেডিংয়ে ব্যাকটেস্ট এবং প্রয়োগ করা যেতে পারে। আমরা আমাদের চূড়ান্ত লক্ষ্য অর্জন করেছি: FMZ-তে একটি সর্বাত্মক পরিমাণগত ট্রেডিং সিস্টেম তৈরি করা যা “ভিজ্যুয়ালাইজেশন + ইন্টারঅ্যাকশন + অটোমেশন” এর সমন্বয়ে গঠিত।

কৌশলগত ক্রিয়াকলাপের প্রভাব এবং ব্যাকটেস্টিংয়ের ফলাফল

ব্যাকটেস্টিং শুধুমাত্র রেফারেন্সের জন্য। যারা পরিমাণগত ট্রেডিং করেন তারা জানেন যে “ব্যাকটেস্টিং” প্রকৃত পরিস্থিতি ১০০% অনুকরণ করতে পারে না। ব্যাকটেস্টিংয়ের মূল উদ্দেশ্য হল কৌশলের যুক্তি পরীক্ষা করা, কৌশলের দৃঢ়তা পরীক্ষা করা এবং মৌলিক ফাংশন পরীক্ষা করা।

পরিমাণগত যাত্রা শুরু হয় FMZ থেকে

পরিমাণগত যাত্রা শুরু হয় FMZ থেকে

কৌশল কোড, প্যারামিটার ডিজাইন

প্যারামিটার ডিজাইন:

পরিমাণগত যাত্রা শুরু হয় FMZ থেকে

মিথস্ক্রিয়া নকশা:

পরিমাণগত যাত্রা শুরু হয় FMZ থেকে

কৌশল সোর্স কোড:

/*backtest
start: 2024-04-27 18:40:00
end: 2025-04-10 00:00:00
period: 15m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":100}]
*/

var atrPeriod = 20
var arrUp = null 
var arrDown = null 
var arrSignal = []

function calcProfit() {
    var initAcc = _G("initAcc")
    var nowAcc = _C(exchange.GetAccount)
    var profit = nowAcc.Equity - initAcc.Equity
    return profit
}

function clear(positions, r) {
    var close = r[r.length - 1].Close
    for (var p of positions) {
        if (p.Type == PD_LONG) {
            var id = exchange.CreateOrder(symbol, "closebuy", -1, p.Amount)
            if (!id) {
                Log("下单失败")
                continue 
            }
            arrSignal.push([r[r.length - 1].Time, "closelong", close, p.Amount])
            Log([r[r.length - 1].Time, "closelong", close, p.Amount], "@")
        } else if (p.Type == PD_SHORT) {
            var id = exchange.CreateOrder(symbol, "closesell", -1, p.Amount)
            if (!id) {
                Log("下单失败")
                continue 
            }
            arrSignal.push([r[r.length - 1].Time, "closeshort", close, p.Amount])
            Log([r[r.length - 1].Time, "closeshort", close, p.Amount], "@")
        }
    }
    arrUp = []
    arrDown = []
    _G("arrUp", arrUp)
    _G("arrDown", arrDown)
    var profit = calcProfit()
    LogProfit(profit)
}

function main() {
    var symbolInfo = symbol.split(".")
    if (symbolInfo.length != 2) {
        throw "error symbol:" + symbol
    } else {
        exchange.SetCurrency(symbolInfo[0])
        exchange.SetContractType(symbolInfo[1])
    }

    exchange.SetPrecision(pricePrecision, amountPrecision)

    let c = KLineChart({
        overlay: true
    }) 

    if (isReset) {
        _G(null)
        LogProfitReset()
        LogReset(1)
        c.reset()
    }

    arrUp = _G("arrUp")
    if (!arrUp) {
        arrUp = []
        _G("arrUp", arrUp)
    }

    arrDown = _G("arrDown")
    if (!arrDown) {
        arrDown = []
        _G("arrDown", arrDown)
    }

    var initAcc = _G("initAcc")
    if (!initAcc) {
        initAcc = _C(exchange.GetAccount)
        _G("initAcc", initAcc)
    }

    var isPaused = false     
    while (true) {
        var atrs = []        
        var r = _C(exchange.GetRecords, symbol)
        var pos = _C(exchange.GetPositions, symbol)
        var acc = _C(exchange.GetAccount)
        var open = r[r.length - 1].Open
        var close = r[r.length - 1].Close
        var atr = TA.ATR(r, atrPeriod)
        
        for (var i = 0; i < maxRatio; i++) {                        
            var up = open + atr[atr.length - 1] * (i + 1)
            var mid = open
            var down = open - atr[atr.length - 1] * (i + 1)
            atrs.push([open, (i + 1), atr])
            
            var tradeAmount = baseAmount * Math.pow(2, i)
            if (isAmountForUSDT) {
                tradeAmount = tradeAmount * 1.05 / close
            }
            tradeAmount = _N(tradeAmount, amountPrecision)

            var balance = acc.Balance
            if (balance - initAcc.Equity * reserve < tradeAmount * close) {
                continue 
            }

            if (close > up && i >= arrUp.length && !isPaused) {
                var id = exchange.CreateOrder(symbol, "sell", -1, tradeAmount)
                if (!id) {
                    Log("下单失败")
                    continue
                }
                arrUp.push({"symbol": symbol, "ratio": (i + 1), "amount": tradeAmount, "price": close})
                _G("arrUp", arrUp)
                arrSignal.push([r[r.length - 1].Time, "short", close, tradeAmount])
                Log([r[r.length - 1].Time, "short", close, tradeAmount], "@")
            } else if (close < down && i >= arrDown.length && !isPaused) {
                var id = exchange.CreateOrder(symbol, "buy", -1, tradeAmount)
                if (!id) {
                    Log("下单失败")
                    continue 
                }
                arrDown.push({"symbol": symbol, "ratio": (i + 1), "amount": tradeAmount, "price": close})
                _G("arrDown", arrDown)
                arrSignal.push([r[r.length - 1].Time, "long", close, tradeAmount])
                Log([r[r.length - 1].Time, "long", close, tradeAmount], "@")
            } else if (((arrUp.length > 0 && close < mid) || (arrDown.length > 0 && close > mid)) && !isPaused) {
                clear(pos, r)
            }
        }

        if (isShowPlot) {
            r.forEach(function(bar, index) {
                c.begin(bar)
                for (var i in atrs) {
                    var arr = atrs[i]
                    var up = arr[0] + arr[2][index] * arr[1]
                    var mid = arr[0]
                    var down = arr[0] - arr[2][index] * arr[1]
                    c.plot(up, 'up_' + (i + 1))
                    c.plot(mid, 'mid_' + (i + 1))
                    c.plot(down, 'down_' + (i + 1))
                }

                for (var signal of arrSignal) {
                    if (signal[0] == bar.Time) {
                        c.signal(signal[1], signal[2], signal[3])
                    }
                }

                c.close()
            })
        }

        var cmd = GetCommand()
        if (cmd) {
            Log("交互指令:", cmd)
            var arrCmd = cmd.split(":")
            if (arrCmd.length == 2) {
                var strCmd = arrCmd[0]
                var param = parseFloat(arrCmd[1])
                if (strCmd == "atrPeriod") {
                    atrPeriod = param
                    Log("修改ATR参数:", atrPeriod)
                }
            } else {
                if (cmd == "isPaused" && !isPaused) {
                    isPaused = true
                    Log("暂停交易")
                } else if (cmd == "isPaused" && isPaused) {
                    isPaused = false 
                    Log("取消暂停交易")
                } else if (cmd == "clearAndPaused") {
                    clear(pos, r)
                    isPaused = true
                    Log("清仓、暂停交易")
                }
            }
        }

        var orderTbl = {"type": "table", "title": "order", "cols": ["symbol", "type", "ratio", "price", "amount"], "rows": []}
        for (var i = arrUp.length - 1; i >= 0; i--) {
            var order = arrUp[i]
            orderTbl["rows"].push([order["symbol"], "short", order["ratio"], order["price"], order["amount"]])
        }
        for (var i = 0; i < arrDown.length; i++) {
            var order = arrDown[i]
            orderTbl["rows"].push([order["symbol"], "long", order["ratio"], order["price"], order["amount"]])
        }

        var posTbl = {"type": "table", "title": "pos", "cols": ["symbol", "type", "price", "amount"], "rows": []}
        for (var i = 0; i < pos.length; i++) {
            var p = pos[i]
            posTbl["rows"].push([p.Symbol, p.Type == PD_LONG ? "long" : "short", p.Price, p.Amount])
        }

        LogStatus(_D(), "初始权益:" + initAcc.Equity, ", 当前权益:" + acc.Equity, ", 运行状态:" + (isPaused ? "暂停交易" : "运行中"), 
            "\n`" + JSON.stringify(orderTbl) + "`\n", "`" + JSON.stringify(posTbl) + "`")
        Sleep(5000)
    }
}

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

প্রকৃত ব্যবসা একটি দীর্ঘ যাত্রা

পরিমাণগত যাত্রা শুরু হয় FMZ থেকে

জিপিটি থেকে একটি কাব্যিক সারাংশ:

প্রকৃত ব্যবসা একটি দীর্ঘ যাত্রা। তুমি যখনই ফিরে আসো না কেন, তুমি কেবল মানসিক শান্তি খুঁজবে। প্রতিবার যখন আপনি একটি পজিশন খোলেন, তখন আপনি বিশাল বাজারে আশার আলো বপন করেন; যতবার তুমি ক্ষতি থামাও, তুমি বাতাস এবং বৃষ্টিতে আরও দৃঢ়ভাবে এগিয়ে যেতে শিখো। বাজার হলো জোয়ারের মতো, আর লাভ-ক্ষতি হলো স্বপ্নের মতো। আমরা সংখ্যার তরঙ্গের চূড়ায় নাচছি এবং কৌশলের বাতিঘরের নীচে দেখছি। এই দীর্ঘ যাত্রায় যেন তুমি আর আমি পথ হারিয়ে না যাই, একাকীত্বের ভয় না পাই, এবং অবশেষে সেই আলোতে পৌঁছাই যা আমাদের।

সারাংশ: কৌশল উন্নয়ন থেকে সিস্টেম চিন্তাভাবনা পর্যন্ত

এই প্রবন্ধটি কেবল একটি সম্পূর্ণ কৌশলই নয়, বরং আরও গুরুত্বপূর্ণ বিষয় হল, একটি “পদ্ধতিগত” কৌশল উন্নয়নের ধারণাও উপস্থাপন করা হয়েছে। কৌশল নকশা, স্থিতি ব্যবস্থাপনা, ঝুঁকি নিয়ন্ত্রণ, চার্ট মিথস্ক্রিয়া থেকে শুরু করে প্রকৃত বাস্তবায়ন পর্যন্ত, এটি এমন এক ধরণের টেমপ্লেট যা বারবার পুনঃব্যবহার করা যেতে পারে এবং এটি পরিমাণগত ট্রেডিংকে পেশাদারীকরণের দিকে এগিয়ে যাওয়ার একমাত্র উপায়।

আমি আশা করি আপনি FMZ প্ল্যাটফর্ম ব্যবহার করে আপনার নিজস্ব স্বয়ংক্রিয় ট্রেডিং সিস্টেম তৈরি করতে পারবেন যাতে আপনি কখনও কোনও সংকেত মিস না করেন।

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