آپ کو حکمت عملی لکھنے کے لئے سکھانے کے -- ایک MyLanguage حکمت عملی کا پیوند

مصنف:لیدیہ, تخلیق: 2022-12-26 15:23:08, تازہ کاری: 2023-09-13 19:44:28

img

آپ کو حکمت عملی لکھنے کے لئے سکھائیں ایک MyLanguage حکمت عملی منتقل

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

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

دوبارہ استعمال کے قابل نمونہ کا کوڈ:

ایک مثال کے طور پر OKX مستقبل کے لئے حکمت عملی لے لو.

// Global variables
var IDLE = 0
var LONG = 1
var SHORT = 2
var OPENLONG = 3
var OPENSHORT = 4
var COVERLONG = 5
var COVERSHORT = 6  

var BREAK = 9
var SHOCK = 10  

var _State = IDLE
var Amount = 0                 // Record the number of positions
var TradeInterval = 500        // Polling intervals
var PriceTick = 1              // Price per jump
var Symbol = "this_week"  

function OnTick(){
    // Ticker processing part of the driving strategy
    // To be filled...
     
    // Trading signal trigger processing section
    // To be filled...  

    // Execution of trading logic
    var pos = null
    var price = null
    var currBar = records[records.length - 1]
    if(_State == OPENLONG){
        pos = GetPosition(PD_LONG)
        // Determine whether the state is satisfied, and if so, modify the state.
        if(pos[1] >= Amount){
            _State = LONG
            Amount = pos[1]   // Update the actual volume.
            return
        }
        price = currBar.Close - (currBar.Close % PriceTick) + PriceTick * 2
        Trade(OPENLONG, price, Amount - pos[1], pos, PriceTick)                // (Type, Price, Amount, CurrPos, PriceTick)
    }  

    if(_State == OPENSHORT){
        pos = GetPosition(PD_SHORT)
        if(pos[1] >= Amount){
            _State = SHORT
            Amount = pos[1]   // Update the actual volume.
            return
        }
        price = currBar.Close - (currBar.Close % PriceTick) - PriceTick * 2
        Trade(OPENSHORT, price, Amount - pos[1], pos, PriceTick)
    }  

    if(_State == COVERLONG){
        pos = GetPosition(PD_LONG)
        if(pos[1] == 0){
            _State = IDLE
            return
        }
        price = currBar.Close - (currBar.Close % PriceTick) - PriceTick * 2
        Trade(COVERLONG, price, pos[1], pos, PriceTick)
    }
    
    if(_State == COVERSHORT){
        pos = GetPosition(PD_SHORT)
        if(pos[1] == 0){
            _State = IDLE
            return
        }
        price = currBar.Close - (currBar.Close % PriceTick) + PriceTick * 2
        Trade(COVERSHORT, price, pos[1], pos, PriceTick)
    }
}  

// Trading logic section
function GetPosition(posType) {
    var positions = _C(exchange.GetPosition)
    var count = 0
    for(var j = 0; j < positions.length; j++){
        if(positions[j].ContractType == Symbol){
            count++
        }
    }  

    if(count > 1){
        throw "positions error:" + JSON.stringify(positions)
    }  

    for (var i = 0; i < positions.length; i++) {
        if (positions[i].ContractType == Symbol && positions[i].Type === posType) {
            return [positions[i].Price, positions[i].Amount];
        }
    }
    Sleep(TradeInterval);
    return [0, 0];
}  

function CancelPendingOrders() {
    while (true) {
        var orders = _C(exchange.GetOrders)
        for (var i = 0; i < orders.length; i++) {
            exchange.CancelOrder(orders[i].Id);
            Sleep(TradeInterval);
        }
        if (orders.length === 0) {
            break;
        }
    }
}  

function Trade(Type, Price, Amount, CurrPos, OnePriceTick){    // Processing transactions
    if(Type == OPENLONG || Type == OPENSHORT){                 // Processing of opening positions
        exchange.SetDirection(Type == OPENLONG ? "buy" : "sell")
        var pfnOpen = Type == OPENLONG ? exchange.Buy : exchange.Sell
        var idOpen = pfnOpen(Price, Amount, CurrPos, OnePriceTick, Type)
        Sleep(TradeInterval)
        if(idOpen) {
            exchange.CancelOrder(idOpen)
        } else {
            CancelPendingOrders()
        }
    } else if(Type == COVERLONG || Type == COVERSHORT){        // Processing of closing positions
        exchange.SetDirection(Type == COVERLONG ? "closebuy" : "closesell")
        var pfnCover = Type == COVERLONG ? exchange.Sell : exchange.Buy
        var idCover = pfnCover(Price, Amount, CurrPos, OnePriceTick, Type)
        Sleep(TradeInterval)
        if(idCover){
            exchange.CancelOrder(idCover)
        } else {
            CancelPendingOrders()
        }
    } else {
        throw "Type error:" + Type
    }
}  

function main() { 
    // Set up the contract
    exchange.SetContractType(Symbol)  

    while(1){
        OnTick()
        Sleep(1000)
    }
}

مثال: ڈبل ای ایم اے حکمت عملی کی منتقلی

MyLanguage بیک ٹیسٹ:

img

MyLanguage حکمت عملی کا کوڈ:

MA5^^MA(C,5);
MA15^^MA(C,15);
CROSSUP(MA5,MA15),BPK;
CROSSDOWN(MA5,MA15),SPK;

جاوا اسٹریٹجی میں ٹرانسپلانٹ کریں

سب سے پہلے، دوبارہ استعمال کے قابل نمونہ کوڈ کے لئے ٹکر حصول اور اشارے کے حساب کے حصوں کو بھریں:

// The ticker processing part of the driving strategy
var records = _C(exchange.GetRecords)  

if (records.length < 15) {
    return 
}  

var ma5 = TA.MA(records, 5)
var ma15 = TA.MA(records, 15)
var ma5_pre = ma5[ma5.length - 3]
var ma15_pre = ma15[ma15.length - 3]
var ma5_curr = ma5[ma5.length - 2]
var ma15_curr = ma15[ma15.length - 2]

جیسا کہ آپ دیکھ سکتے ہیں، ڈبل EMA حکمت عملی بہت آسان ہے. سب سے پہلے، K لائن کے اعداد و شمار حاصل کریں.records، اور پھر EMA فنکشن استعمال کریںTA.MAکےTA function library5 دن کے EMA اور 15 دن کے EMA کا حساب کرنے کے لئے (جیسا کہ ہم بیک ٹیسٹ انٹرفیس میں دیکھ سکتے ہیں ، K لائن کی مدت روزانہ K لائن پر مقرر کی گئی ہے ، لہذاTA.MA(records, 5)پانچ روزہ EMA کا حساب لگانا ہے،TA.MA(records, 15)15 دن کے EMA کا حساب لگانا ہے۔ پھر آخری نقطہ حاصل کریںma5_curr(انڈیکیٹر ویلیو) ، آخری تیسرا نقطہma5_pre(انڈیکیٹر ویلیو) انڈیکیٹر ڈیٹا کاma5، اور اسی کے لئےma15اشارے کے اعداد و شمار۔ پھر ہم ان اشارے کے اعداد و شمار کو گولڈن کراس اور بیرش کراس اوور کا فیصلہ کرنے کے لئے استعمال کرسکتے ہیں ، جیسا کہ اعداد و شمار میں دکھایا گیا ہے:

img

جب بھی ایسی حالت بنتی ہے، یہ ایک قطعی گولڈن کراس یا بیرش کراس اوور ہوتا ہے۔

پھر سگنل کا فیصلہ کرنے کا حصہ مندرجہ ذیل طور پر لکھا جا سکتا ہے:

if(_State == IDLE && ma5_pre < ma15_pre && ma5_curr > ma15_curr){     
    _State = OPENLONG
    Amount = 1
}  

if(_State == IDLE && ma5_pre > ma15_pre && ma5_curr < ma15_curr){     
    _State = OPENSHORT
    Amount = 1
}  

if(_State == LONG && ma5_pre > ma15_pre && ma5_curr < ma15_curr){     
    _State = COVERLONG
    Amount = 1
}  

if(_State == SHORT && ma5_pre < ma15_pre && ma5_curr > ma15_curr){     
    _State = COVERSHORT
    Amount = 1
}

اس طرح، ٹرانسپلانٹ ٹھیک ہے۔ ہم بیک ٹیسٹ کر سکتے ہیں: جاوا اسٹریٹجی کا بیک ٹیسٹنگ بیک ٹسٹنگ کی ترتیب:

img

بیک ٹیسٹنگ کا نتیجہ:

img

MyLanguage کا بیک ٹسٹنگ

img

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

اگر آپ دلچسپی رکھتے ہیں تو، براہ مہربانی کوشش کریں۔


متعلقہ

مزید