وسائل لوڈ ہو رہے ہیں... لوڈنگ...

آپ کو حکمت عملی لکھنے کے لئے سکھانے -- ایک MyLanguage حکمت عملی کو منتقل (اعلی درجے کی)

مصنف:FMZ~Lydia, تخلیق: 2022-12-26 18:56:00, تازہ کاری: 2023-09-20 09:46:34

img

آپ کو حکمت عملی لکھنے کے لئے سکھائیں ایک MyLanguage حکمت عملی کو منتقل (اعلی درجے کی)

پچھلے مضمون میںآپ کو حکمت عملی لکھنے کے لئے سکھانے کے -- ایک MyLanguage حکمت عملی کا پیوند، ایک سادہ MyLanguage حکمت عملی کو ٹرانسپلانٹ کے لئے تجربہ کیا گیا ہے۔ اگر یہ ایک زیادہ پیچیدہ MyLanguage ہے تو ، اسے جاوا اسکرپٹ زبان کی حکمت عملی میں کیسے ٹرانسپلانٹ کیا جاسکتا ہے؟ وہاں کیا مہارتیں ہیں؟

آئیے پہلے ٹرانسپلانٹ کرنے کی حکمت عملی پر نظر ڈالتے ہیں:

(*backtest
start: 2019-05-01 00:00:00
end: 2019-11-12 00:00:00
period: 1d
exchanges: [{"eid":"Futures_OKCoin","currency":"BTC_USD"}]
args: [["SlideTick",10,126961],["ContractType","quarter",126961]]
*)

N1:=10;
N2:=21;
AP:=(HIGH+LOW+CLOSE)/3;
ESA:=EMA(AP,N1);
D:=EMA(ABS(AP-ESA),N1);
CI:=(AP-ESA)/(0.015*D);
TCI:=EMA(CI,N2);
WT1:TCI;
WT2:SMA(WT1,4,1);
AA:=CROSS(WT1,WT2);
BB:=CROSSDOWN(WT1,WT2);
REF(AA,1),BPK;
REF(BB,1),SPK;

کے(* backtest... *)MyLanguage حکمت عملی کے آغاز میں بیک ٹیسٹنگ کی ترتیبات کے لئے ترتیب کا کوڈ ہے۔ موازنہ کی سہولت کے ل a ، بیک ٹیسٹنگ کی ایک متحد ترتیب مرتب کی گئی ہے۔ یہ حکمت عملی بھی بے ترتیب ہے ، جو بہت پیچیدہ نہیں ہے (پچھلے مضمون میں اس سے زیادہ پیچیدہ) ۔ یہ ایک نمائندہ حکمت عملی ہے۔ MyLanguage حکمت عملی کو ٹرانسپلانٹ کرنے کے ل you ، آپ کو پہلے پوری حکمت عملی کو دیکھنا چاہئے۔ حکمت عملی کا کوڈ جامع ہے ، اور آپ کو مجموعی حکمت عملی کی ایک خاص تفہیم حاصل ہوسکتی ہے۔ اس حکمت عملی کے ل we ، ہم نے دیکھا ہے کہ کئی اشارے کام کرتے ہیں۔EMA, SMAاستعمال کیا گیا ہے:

پہلے ایک پہیا بنائیں

  • ای ایم اے اشارے کا فنکشن ، جاوا اسکرپٹ زبان میں حکمت عملی لکھتے وقت ایف ایم زیڈ پلیٹ فارم میں براہ راست دستیاب تیار اشارے لائبریری کے افعال موجود ہیں۔ یعنی:TA.MA.

  • ایس ایم اے جو ہمیں کرنے کی ضرورت ہےSMAاشارے، جو ہم نے FMZ کے ٹی اے لائبریری میں پایا SMA اشارے کی تقریب کی حمایت نہیں کرتا، اور طالب لائبریری میں SMA اشارے اور MyLanguage میں ایک کے درمیان اختلافات ہیں.

img

جیسا کہ ہم دیکھ سکتے ہیں، پیرامیٹرز کے سیکشن میں وزن پیرامیٹر کے علاوہ مدت پیرامیٹر ہے.

ایف ایم زیڈ اے پی آئی دستاویزات میں طالب لائبریری میں ایس ایم اے اشارے کا فنکشن مندرجہ ذیل طور پر بیان کیا گیا ہے:

img

یہ دیکھا جا سکتا ہے کہtalib.SMAایک سادہ چلتی اوسط اشارے ہے. اس طرح ، ہم صرف خود ہی ایس ایم اے کو نافذ کرسکتے ہیں۔ حکمت عملی لکھنے کے لئے جاوا اسکرپٹ زبان کا استعمال کرنے والے ڈویلپر کی حیثیت سے ، یہ بھی ضروری مہارتوں میں سے ایک ہے۔ بہر حال ، اگر کوئی تیار پہیا نہیں ہے تو ، پروگرام کو ابھی بھی چلانے کی ضرورت ہے ، بس ایک بنائیں۔

حقیقت یہ ہے کہ اشارے وغیرہ پر زیادہ تحقیق نہیں کی گئی ہے۔ عام طور پر ، لوگ معلومات کی تلاش کرتے ہیں اگر وہ اسے نہیں سمجھتے ہیں۔ ایس ایم اے کے لئے ان کو تلاش کرنے کے لئے:

img

ایسا لگتا ہے کہ اس نظریے کا الگورتھم عمل کافی قابل اعتماد ہے ، اور اس کا نفاذ مندرجہ ذیل ہے:

function SMA (arr, n, m) {
    var sma = []
    var currSMA = null
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] && !isNaN(arr[i])) {
            if (!currSMA) {
                currSMA = arr[i]
                sma.push(currSMA)
                continue
            }  

            // [M*C2+(N-M)*S1]/N
            currSMA = (m * arr[i] + (n - m) * currSMA) / n
            sma.push(currSMA)
        } else {
            sma.push(NaN)
        }
    }  

    return sma
}

بھرا ہوا سیکشن لکھیں

اسٹریٹیجی فریم ورک میں اسی فریم ورک کا استعمال کیا گیا ہے جو آرٹیکل میں ہے۔آپ کو حکمت عملی لکھنے کے لئے سکھانے کے -- ایک MyLanguage حکمت عملی کا پیونداور بنیادی طور پر دو حصوں میں بھرا ہوا ہے:

سب سے پہلے، ٹکر ڈیٹا پروسیسنگ اور انڈیکس کا حساب لگائیں.

img

آئیے MyLanguage کے اس حصے کو ایک وقت میں ایک جملہ ، فنکشن کے ذریعہ فنکشن لیتے ہیں:

    1. AP:=(HIGH+LOW+CLOSE)/3;

یہ سمجھا جا سکتا ہے کہ K لائن کے اعداد و شمار میں ہر BAR کی سب سے زیادہ قیمت، سب سے کم قیمت اور اختتامی قیمت کو جمع کیا جانا چاہئے اور پھر اوسط قدر کا حساب کرنے کے لئے 3 سے تقسیم کیا جانا چاہئے، اور پھر ایک صف کے طور پر محفوظ کیا جانا چاہئے، جو ہر ایک BAR کے مطابق ہے. یہ مندرجہ ذیل طریقے سے عملدرآمد کیا جا سکتا ہے:

function CalcAP (r) {   // AP:=(HIGH+LOW+CLOSE)/3;
    var arrAP = []      // Declare an empty array

    for (var i = 0; i < r.length; i++) {      // r is the incoming K-line data, which is an array, use for to traverse this array.
        v = (r[i].High + r[i].Low + r[i].Close) / 3      // Calculate the average value.
        arrAP.push(v)                                    // Add to the end of the arrAP array, the end is the first when arrAP is empty.
    }  

    return arrAP     // Returns this average array, i.e., the AP calculated in the MyLanguage 
}

اس فنکشن کو مین لوپ آن ٹِک فنکشن میں بلایا جاسکتا ہے ، مثال کے طور پر:

// Calculation of indicators
// AP
var ap = CalcAP(records)
    1. AP حساب مکمل ہونے کے بعد، حساب کرنے کے لئے آگے بڑھیںESA:=EMA(AP,N1);:

یہاں ، ہم ای ایس اے کا حساب کتاب کرنے کے لئے پچھلے مرحلے میں شمار ہونے والے اے پی کے اعداد و شمار کا استعمال کریں گے۔ در حقیقت ، ای ایس اے اے پی کا اضافی حرکت پذیر اوسط ہے ، یعنی ای ایم اے اشارے۔ لہذا ہم ای ایم اے اشارے کا حساب کتاب کرنے کے لئے اے پی کو ڈیٹا اور این 1 کو ای ایم اے اشارے کے پیرامیٹر کے طور پر استعمال کریں گے۔

function CalcESA (ap, n1) {   // ESA:=EMA(AP,N1);
    if (ap.length <= n1) {    // If the AP length is less than the indicator parameter, valid data cannot be calculated. At this time, let the function return false.
        return false
    }  

    return TA.EMA(ap, n1)
}
    1. D:=EMA(ABS(AP-ESA),N1);

حساب کا استعمال کریںAP, ESAاعداد و شمار کا حساب کرنے کے لئےD. یہاں کے کوڈ تبصرے میں ان اشارے کا حساب کرنے کے بارے میں کچھ تجاویز پڑھ سکتے ہیں۔

function CalcD (ap, esa, n1) {    // D:=EMA(ABS(AP-ESA),N1);
    var arrABS_APminusESA = []
    if (ap.length != esa.length) {
        throw "ap.length != esa.length"
    }  

    for (var i = 0; i < ap.length; i++) {
        // When calculating the value of the indicator, it is necessary to determine the validity of the data, because the first few EMA calculations may be the beginning of the array of data is NaN, or null.
        // So it must be judged that the data involved in the calculation are all valid values to proceed, and if there are any invalid values, they are filled with NaN to arrABS_APminusESA.
        // The data thus calculated, each position corresponds to the previous data one by one, without misalignment.
        if (ap[i] && esa[i] && !isNaN(ap[i]) && !isNaN(esa[i])) {
            v = Math.abs(ap[i] - esa[i])     // According to ABS(AP-ESA), the specific value is calculated and put into the arrABS_APminusESA array.
            arrABS_APminusESA.push(v)
        } else {
            arrABS_APminusESA.push(NaN)
        }
    }  

    if (arrABS_APminusESA.length <= n1) {
        return false
    }  

    return TA.EMA(arrABS_APminusESA, n1)    // Calculate the EMA indicator of the array arrABS_APminusESA and get the data D (array structure).
}
    1. CI:=(AP-ESA)/(0.015*D);حساب کتاب کا طریقہ کار مرحلہ 1 کی طرح ہے اور کوڈ براہ راست جاری کیا جاتا ہے۔
function CalcCI (ap, esa, d) {    // CI:=(AP-ESA)/(0.015*D);
    var arrCI = []
    if (ap.length != esa.length || ap.length != d.length) {
        throw "ap.length != esa.length || ap.length != d.length"
    }
    for (var i = 0; i < ap.length; i++) {
        if (ap[i] && esa[i] && d[i] && !isNaN(ap[i]) && !isNaN(esa[i]) && !isNaN(d[i])) {
            v = (ap[i] - esa[i]) / (0.015 * d[i])
            arrCI.push(v)
        } else {
            arrCI.push(NaN)
        }
    }  

    if (arrCI.length == 0) {
        return false
    }  

    return arrCI
}
  • TCI:=EMACI،N2) ؛ صرف CI صف کے لئے EMA اشارے کا حساب لگائیں.
function CalcTCI (ci, n2) {   // TCI:=EMA(CI,N2);
    if (ci.length <= n2) {
        return false
    }  

    return TA.EMA(ci, n2)
}
  • WT2:SMA ((WT1,4,1) ؛

اس آخری مرحلے میں، ہم نے پہلے تعمیر پہیا کے SMA تقریب استعمال کیا جاتا ہے.

function CalcWT2 (wt1) {    // WT2:SMA(WT1,4,1);
    if (wt1.length <= 4) {
        return false 
    }  

    return SMA(wt1, 4, 1)   // The SMA indicator for wt1 is calculated by using our own implementation of the SMA function.
}

تجارتی سگنلز کی نقل بہت آسان ہے۔

AA:=CROSS(WT1,WT2);
BB:=CROSSDOWN(WT1,WT2);
REF(AA,1),BPK;
REF(BB,1),SPK;

MyLanguage کے ان کوڈز کو پڑھنے کے بعد ، ہم دیکھ سکتے ہیں کہ WT1 اور WT2 کے گولڈن کراس اور بیرش کراس اوور کو افتتاحی شرائط کے طور پر استعمال کیا جاتا ہے۔ یہ نوٹ کیا جانا چاہئے کہ پچھلے کراس سگنل کا استعمال کیا جاتا ہے۔ براہ راست MyLanguage حکمت عملی بیک ٹسٹ کا استعمال کرتے ہوئے، ہم نے مشاہدہ کیا کہ:

img

یہ MyLanguage حکمت عملی کے اصل آپریشن کی مشاہدے سے دیکھا جا سکتا ہے کہ جب ایک سگنل افتتاحی پوزیشن پر پتہ چلا جاتا ہے، تو یہ اصل میں پتہ لگانے کے لئے ہے کہ آیا افتتاحی نقطہ پر BAR کی پوزیشن 2 BARs آگے گنتی ہے. مندرجہ بالا شکل واضح طور پر ظاہر کرتی ہے کہ:

img img

سگنل کا پتہ لگانے والے حصے کا بھرنے کا کوڈ اس طرح لکھا جا سکتا ہے:

if ((_State == IDLE || _State == SHORT) && wt1[wt1.length - 4] < wt2[wt2.length - 4] && wt1[wt1.length - 3] > wt2[wt2.length - 3]) {
    if (_State == IDLE) {
        _State = OPENLONG
        Log("OPENLONG")    // test
    }
    if (_State == SHORT) {
        _State = COVERSHORT
        Log("COVERSHORT")  // test
    }
    isOK = false  
}

if ((_State == IDLE || _State == LONG) && wt1[wt1.length - 4] > wt2[wt2.length - 4] && wt1[wt1.length - 3] < wt2[wt2.length - 3]) {
    if (_State == IDLE) {
        _State = OPENSHORT
        Log("OPENSHORT")  // test
    }
    if (_State == LONG) {
        _State = COVERLONG
        Log("COVERLONG")  // test
    }
    isOK = false   
}

یہاں آپ اس بارے میں سوچ سکتے ہیں کہ ایس پی کے اور بی پی کے ہدایات کو اوپر کے کوڈ کے ساتھ کیوں لاگو کیا جا سکتا ہے.

بیک ٹیسٹ

بیک ٹیسٹ کی ترتیب:

img

MyLanguage میں بیک ٹیسٹ:

img

جاوا اسکرپٹ ورژن میں بیک ٹیسٹ:

img img

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

function OnTick(){
    // The ticker processing part of the driving strategy.
    var records = _C(exchange.GetRecords)
    if (records[records.length - 1].Time == preTime) {
        if (isOK) {
            Sleep(500)
            return 
        }
    } else {
        preTime = records[records.length - 1].Time
    }
    ...
    ..
    .

مکمل تدریسی حکمت عملی کا کوڈ:https://www.fmz.com/strategy/174457

پڑھنے کے لئے شکریہ.


مزید