avatar of 发明者量化-小小梦 发明者量化-小小梦
پر توجہ دیں نجی پیغام
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 بڑے ماڈل میں پلیٹ فارم کے افعال، APIs وغیرہ کی محدود سمجھ ہوتی ہے، کیونکہ عام ماڈل پلیٹ فارم کی معلومات پر تربیت یافتہ نہیں ہوتا ہے، اور پیدا کی گئی معلومات کی درستگی محدود ہوتی ہے۔

تو، کیا دیگر زیادہ موثر درخواست کے طریقے ہیں؟ یہ مضمون سوچنے کے ایک نئے انداز کا اشتراک کرنا چاہتا ہے: آئیے 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 ہمیں اس کی وضاحت کرنے دیں، اور سیکھنے کی کارکردگی کو بہتر بنائیں۔

AI وضاحت

میں یہاں GPT استعمال کر رہا ہوں، اور مندرجہ ذیل مواد کی وضاحت AI نے کی ہے۔

  • ایک جائزہ یہ مضمون EMA (ایکسپونینشل موونگ ایوریج) ٹرینڈ فلٹرنگ پر مبنی ایک مرحلہ وار پوزیشن بڑھانے والی تجارتی حکمت عملی متعارف کرائے گا۔ یہ حکمت عملی بنیادی طور پر Binance Futures (Futures_Binance) پر استعمال ہوتی ہے، 1 گھنٹے کی بیک ٹیسٹنگ کو سپورٹ کرتی ہے، اور 1 منٹ کے K-line ڈیٹا ایگریگیشن پر مبنی ہے۔ قیمت اور EMA کے درمیان انحراف کی اصل وقتی نگرانی کے ذریعے، حکمت عملی متحرک طور پر تجارتی طریقوں کو تبدیل کرتی ہے (عام ٹریڈنگ/معطل ٹریڈنگ)، بتدریج مستحکم مارکیٹ میں پوزیشنوں کو بڑھاتی ہے، اور خطرات سے بچنے کے لیے غیر معمولی اتار چڑھاؤ میں پوزیشنوں کو خود بخود معطل کر دیتی ہے۔

    1. حکمت عملی کی منطق
      1. ٹرینڈ فلٹرنگ (لاک پوزیشن کنٹرول) حالیہ گھنٹے کے کینڈل سٹک ڈیٹا کے 60 مدت کے EMA کا حساب لگائیں۔ جب موجودہ قیمت EMA سے 3% سے زیادہ ہٹ جاتی ہے، تو آرڈر دینے کو معطل کریں اور زیر التواء آرڈرز کو منسوخ کریں۔ جب انحراف 2% کے اندر واپس آجائے گا تو معمول کی تجارت دوبارہ شروع ہو جائے گی۔ ٹرینڈ فلٹرنگ کے ذریعے، آپ مارکیٹ کے ہنگامہ خیز حالات میں پوزیشنوں کے بار بار اضافے کی وجہ سے لیکویڈیشن کے خطرے سے بچ سکتے ہیں۔
      1. عہدوں کو شامل کرنے کی منطق (آہستہ آہستہ پوزیشنیں شامل کرنا) جب ابتدائی طور پر کوئی پوزیشن نہیں ہوتی ہے، تو ایک ہی وقت میں دو زیر التواء آرڈرز، ایک خرید لو آرڈر اور ایک اعلیٰ فروخت کا آرڈر دیا جاتا ہے۔ آرڈر کی قیمت: خرید آرڈر موجودہ قیمت سے نیچے رکھا گیا ہے (ٹارگٹ پرافٹ/5 فاصلہ) فروخت کا آرڈر موجودہ قیمت سے اوپر رکھا گیا ہے (ٹارگٹ پرافٹ/5 فاصلہ) اگر زیر التواء آرڈر پر عمل درآمد ہوتا ہے تو، پوزیشن میں مرحلہ وار اضافہ کیا جائے گا: اگر خرید آرڈر پر عمل ہو جاتا ہے، تو اگلا خرید آرڈر کم قیمت پر دینا جاری رکھیں اور موجودہ پوزیشن کے لیے سیل اسٹاپ پرافٹ آرڈر سیٹ کریں۔ اگر فروخت کے آرڈر پر عمل درآمد ہو جاتا ہے، تو اگلا سیل آرڈر زیادہ قیمت پر دینا جاری رکھیں اور موجودہ پوزیشن کے لیے خرید سٹاپ پرافٹ آرڈر سیٹ کریں۔ شامل کردہ عہدوں کی مقدار کو دوگنا یا ایک مقررہ رقم پر سیٹ کیا جا سکتا ہے۔ جب پوزیشن میں اضافے کی تعداد maxAddCounter تک پہنچ جاتی ہے، حکمت عملی جبری لیکویڈیشن کا انتخاب کر سکتی ہے۔
      1. پوزیشن کنٹرول اور سرمائے کا تحفظ ابتدائی کل ایکویٹی (totalEq) کی بنیاد پر کھولی گئی ہر پوزیشن کی رقم مقرر کریں۔ USDT کی رقم کے حساب سے معاہدوں کی تعداد کا تخمینہ لگانے میں معاونت (بنیادی قیمت کی بنیاد پر آرڈر کی مقدار کا خود بخود حساب لگانا)۔ اس بات کو یقینی بنائیں کہ اکاؤنٹ میں بقیہ بیلنس ایک خاص تناسب (ریزرو) سے زیادہ ہے۔ اگر بیلنس ناکافی ہے تو تجارت بند کر دیں۔
    1. بنیادی افعال اور ماڈیولز کا تعارف
      1. کل اکاؤنٹ ایکویٹی حاصل کریں۔ getTotalEquity فنکشن Binance Futures (Futures_Binance) اور OKEX V5 (Futures_OKCoin) کے لیے شامل ہے۔ مختلف ایکسچینجز کے API فرقوں کے ساتھ ہم آہنگ، اکاؤنٹ کے موجودہ کل اثاثوں کو یکساں طور پر واپس کرتا ہے (USDT میں نامزد)۔
      1. آرڈر کی جگہ کا تعین اور منسوخی ماڈیول تجارت (سمت، قیمت، رقم): ایک متحد آرڈر انٹرفیس کو سمیٹتا ہے۔ cancelAll(): بہت سارے زیر التواء آرڈرز کی وجہ سے خطرے کے جمع ہونے سے بچنے کے لیے تمام زیر التواء آرڈرز کو منسوخ کریں۔
      1. طویل کھولنا، مختصر اور اختتامی پوزیشنوں کو کھولنا اوپن لانگ (قیمت، رقم): لمبی لمبی کھولیں۔ اوپن شارٹ (قیمت، رقم): ایک مختصر پوزیشن کھولیں۔ coverLong(قیمت، رقم): لمبے کے قریب۔ coverShort(قیمت، رقم): خالی۔
      1. شامل کردہ عہدوں کی تعداد اور اسٹیٹس ریکارڈ استعمال_G() مستقل طور پر پوزیشن میں اضافے کی تعداد کو ریکارڈ کرتا ہے addCounter منقطع ہونے اور دوبارہ شروع ہونے کے بعد پوزیشن اضافی حیثیت کے نقصان سے بچنے کے لیے۔ LogStatus کو متحرک طور پر ریئل ٹائم اکاؤنٹ کی معلومات، زیر التواء آرڈر کی حیثیت، اور پوزیشن کی معلومات کو ظاہر کرنے کے لیے استعمال کریں۔
      1. چارٹ ڈرائنگ بصری بیک ٹیسٹنگ اور ریئل ٹائم مانیٹرنگ میں مدد کرنے کے لیے KLineChart کا استعمال کریں جیسے کہ خرید آرڈر کی قیمت، فروخت کے آرڈر کی قیمت، اوسط پوزیشن کی قیمت وغیرہ۔
    1. حکمت عملی کا فلو چارٹ
  flowchart TD
      开始 --> 初始化参数
      初始化参数 --> 账户余额检查
      账户余额检查 --> 计算EMA
      计算EMA --> 判断是否锁仓
      判断是否锁仓 -->|是| 暂停交易
      判断是否锁仓 -->|否| 正常交易
      正常交易 --> 是否有持仓
      是否有持仓 -->|无| 首次挂单
      是否有持仓 -->|有| 按持仓方向加仓与止盈挂单
      首次挂单 --> 等待成交
      按持仓方向加仓与止盈挂单 --> 等待成交
      等待成交 --> 挂单成交检测
      挂单成交检测 --> 成交后调整
      成交后调整 --> 更新加仓次数
      更新加仓次数 --> 是否超出最大加仓次数
      是否超出最大加仓次数 -->|是| 平仓
      是否超出最大加仓次数 -->|否| 继续交易
  • پانچواں، خلاصہ EMA فلٹرنگ پر مبنی یہ مرحلہ وار پوزیشن بڑھانے کی حکمت عملی ریٹرن اور رسک کنٹرول دونوں کو مدنظر رکھتی ہے، اور یہ ایک غیر مستحکم اور کمزور طور پر غیر مستحکم مارکیٹ میں کام کرنے کے لیے موزوں ہے۔ پوزیشنز اور ٹرینڈ پاز میکانزم کو شامل کرنے کے لچکدار طریقوں کے ذریعے، لیکویڈیشن کے امکان کو مؤثر طریقے سے کم کیا جا سکتا ہے اور سرمائے کے استعمال کی کارکردگی کو بہتر بنایا جا سکتا ہے۔ یہ بیک ٹیسٹنگ اور حقیقی تجارت دونوں کو سپورٹ کرتا ہے، اور اس کا ماڈیولر ڈیزائن اسے پھیلانا آسان بناتا ہے۔ مثال کے طور پر، یہ ٹارگٹ پرافٹ اور رقم کی متحرک ایڈجسٹمنٹ کو مزید متعارف کرا سکتا ہے، یا فلٹرنگ اثر کو بڑھانے کے لیے دیگر تکنیکی اشارے شامل کر سکتا ہے۔

    • کیا آپ چاہتے ہیں کہ میں آپ کو کوئی ایڈوانس تجویز دوں؟ مثال کے طور پر: دو طرفہ پوزیشن میں اضافہ (دو طرفہ پوزیشن) کو کیسے بہتر بنایا جائے پوزیشن میں اضافے کے تناسب کو متحرک طور پر کیسے ایڈجسٹ کریں۔ رسک کنٹرول اسٹاپ لاس منطق کو کیسے سرایت کریں؟

مقامی سوالات / وضاحتیں۔

GPT سوالات کے بارے میں:

حکمت عملی ڈیزائن سیکھنے کے لیے 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 ایک تاریخی K-line ڈیٹا ہے جو exchange.GetRecords کے ذریعے حاصل کیا جاتا ہے، اور ہر ڈیٹا پوائنٹ قیمت کی معلومات کے ایک گھنٹے کی نمائندگی کرتا ہے۔ 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() کو کال کرے گا۔ ایک خاص مدت کے لیے وقفہ کرنے کے لیے سلیپ (وقفہ) کا استعمال کریں اور پھر لوپ کو جاری رکھیں۔

  • بیک ٹیسٹنگ

حکمت عملی ڈیزائن سیکھنے کے لیے AI کا استعمال: مقداری تجارتی مہارت کو بہتر بنانے کا ایک نیا طریقہ

ایسا لگتا ہے کہ کچھ رجحانات کو فلٹر کیا جا سکتا ہے۔ کوڈ کو خود پڑھ کر، میں نے محسوس کیا کہ AI کی وضاحت بہت واضح تھی، اس سے بھی زیادہ واضح اگر میں نے خود اس کی وضاحت کی ہو۔

خلاصہ کریں۔

AI کو مجموعی حکمت عملی کا تجزیہ کرنے اور اس کی وضاحت کرنے کی اجازت دے کر، اور پھر مجموعی حکمت عملی کی AI کی وضاحت کی بنیاد پر، بتدریج تجزیہ کرنا، الگ کرنا، اور حکمت عملی کی مقامی تفصیلات کی وضاحت کرنا اور ڈیزائن کے خیالات کی وضاحت کرنا۔ ہمیں جو وضاحت موصول ہوئی وہ نسبتاً درست تھی۔ AI نے حکمت عملی میں ڈیزائن کی گئی تقریباً تمام تفصیلات کو بغیر کسی غلطی کے درج کیا، اور مزید سوالات کے ذریعے تفصیلی تجزیہ کیا۔ پوری حکمت عملی سوچ سیکھنے کا یہ طریقہ، کوڈ ڈیزائن کی تفصیلات، اور حکمت عملی کے ڈیزائن کے تجربے میں اضافہ سب بہت مددگار ہیں۔

مقداری تجارت کے راستے پر، AI ہمارے لیے سیکھنے اور ترقی کا ایک انتہائی طاقتور پارٹنر بن سکتا ہے۔ ایک کلک کے ساتھ مکمل حکمت عملی تیار کرنے کے لیے AI پر انحصار کرنے کے بجائے، AI یہ کر سکتا ہے:

  • گہری سیکھنے کی موجودہ حکمت عملی
  • پیچیدہ منطق کو جلدی سمجھیں۔
  • منظم ڈیزائن کا تجربہ
  • مسلسل اصلاح اور جدت

صرف یہی راستہ ہماری مقداری تجارتی صلاحیتوں کو صحیح معنوں میں بڑھا سکتا ہے اور ہمارا اپنا منظم تجارتی نظام قائم کر سکتا ہے۔ موجد کوانٹیٹیو ٹریڈنگ پلیٹ فارم پر، ہم AI کی طاقت کا بھرپور استعمال کر سکتے ہیں اور اسے اپنی مشق کے ساتھ جوڑ کر مزید آگے بڑھ سکتے ہیں اور اونچی پرواز کر سکتے ہیں۔