فیشر اشارے کی جاوا اسکرپٹ زبان کی نفاذ اور ایف ایم زیڈ پر گراف

مصنف:چھوٹا سا خواب, تخلیق: 2021-12-27 09:51:39, تازہ کاری: 2023-09-15 21:04:46

img

فیشر اشارے کی جاوا اسکرپٹ زبان کی نفاذ اور ایف ایم زیڈ پر گراف

جب تجارت میں تکنیکی تجزیہ کرتے ہیں تو ، تاجروں نے اسٹاک کی قیمت کے اعداد و شمار کو باقاعدہ تقسیم کے اعداد و شمار کے طور پر تجزیہ کیا ہے۔ تاہم ، اسٹاک کی قیمت کے اعداد و شمار کی تقسیم معیاری باقاعدہ تقسیم کے مطابق نہیں ہے۔Fisher Transformationیہ ایک ایسا طریقہ ہے جس میں قیمت کے اعداد و شمار کو باقاعدہ تقسیم کی طرح تبدیل کیا جاسکتا ہے۔Fisher Transformationمارکیٹ کے اعداد و شمار کو ہموار کریں اور کچھ تیز چھوٹے سائیکل اتار چڑھاؤ کو ختم کریں۔ اس دن اور پچھلے دن کے اشارے کے اختلاط کا استعمال کرتے ہوئے تجارتی سگنل جاری کیا جاسکتا ہے۔

کے بارے میںFisher Transformاس کے علاوہ ، یہ بھی کہا گیا ہے کہ یہ ایک بہت بڑا مسئلہ ہے۔

اشارے کا الگورتھم:

  • آج کی درمیانی قیمت:

    mid=(low + high) / 2

  • حساب کتاب کے دورانیے کا تعین کرنے کے لئے ، 10 دن کا استعمال کیا جاسکتا ہے۔ حساب کتاب کے دورانیے میں سب سے زیادہ قیمت اور سب سے کم قیمت:

    lowestLow = 周期内最低价highestHigh = 周期内最高价

  • قیمت متغیر کی وضاحت (جس میںratio0 سے 1 کے درمیان ایک مستقل کے لئے، مثال کے طور پر 0.5 یا 0.33 کے لئے قابل قبول ہے:

    img

  • قیمتوں میں تبدیلی کے پیرامیٹرزxاستعمالFisherتبدیل، حاصلFisherاشارے:

    img

جاوا اسکرپٹ زبان کا استعمال کرتے ہوئے اس الگورتھم کو لاگو کریں

اس اشارے کے الگورتھم کے مطابق آہستہ آہستہ عملدرآمد۔ یہ نوٹ کرنا ضروری ہے کہ یہ الگورتھم ایک تکرار الگورتھم ہے ، جس کا مطلب یہ ہے کہ اس کے لئے ایک الگورتھم کی ضرورت ہے۔preXpreFishشروع میں 0 کا تعین کیا جاتا ہے۔Math.logاگر آپ کو یہ معلوم نہیں ہے کہ آپ کو کیا کرنا ہے تو ، آپ کو یہ بھی معلوم ہونا چاہئے کہ آپ کو کیا کرنا چاہئے۔ آپ کو یہ بھی معلوم ہونا چاہئے کہ آپ کو کیا کرنا چاہئے۔

اصلاح کی گئی x کی قدر 0.99 سے زیادہ ہے تو اسے 0.999 پر مقرر کرنا ضروری ہے۔ -0.99 سے کم۔

        if (x > 0.99) {
            x = 0.999
        } else if (x < -0.99) {
            x = -0.999
        }

پہلی بار اس الگورتھم کو دیکھا، اشارے، الگورتھم کی نقل کے بعد. میں نے بھی اس کی تصدیق نہیں کی ہے، دلچسپی رکھنے والے ساتھیوں کو اس کی تصدیق کر سکتے ہیں کہ غلطی نہیں ہے۔ غلطیوں کی نشاندہی کرنے کا بہت شکریہ.

Fisher Transformاشارے کے الگورتھم کا ماخذ:

function getHighest(arr, period) {
    if (arr.length == 0 || arr.length - period < 0) {
        return null 
    }
    var beginIndex = arr.length - period
    var ret = arr[beginIndex].High
    for (var i = 0 ; i < arr.length - 1 ; i++) {
        if (arr[i + 1].High > ret) {
            ret = arr[i + 1].High
        }
    }
    return ret
}

function getLowest(arr, period) {
    if (arr.length == 0 || arr.length - period < 0) {
        return null 
    }
    var beginIndex = arr.length - period
    var ret = arr[beginIndex].Low
    for (var i = 0 ; i < arr.length - 1 ; i++) {
        if (arr[i + 1].Low < ret) {
            ret = arr[i + 1].Low
        }
    }
    return ret
}

function calcFisher(records, ratio, period) {
    var preFish = 0 
    var preX = 0
    var arrFish = []
    // 当K线长度不足,不满足周期时
    if (records.length < period) {
        for (var i = 0 ; i < records.length ; i++) {
            arrFish.push(0)
        }
        return arrFish
    }

    // 遍历K线
    for (var i = 0 ; i < records.length ; i++) {
        var fish = 0
        var x = 0
        var bar = records[i]
        var mid = (bar.High + bar.Low) / 2
        // 当前BAR不足period计算时
        if (i < period - 1) {
            fish = 0
            preFish = 0
            arrFish.push(fish)
            continue
        }

        // 计算周期内最高价和最低价
        var bars = []
        for (var j = 0 ; j <= i ; j++) {
            bars.push(records[j])
        }
        var lowestLow = getLowest(bars, period)
        var highestHigh = getHighest(bars, period)               
        
        // 价变参数
        x = ratio * 2 * ((mid - lowestLow) / (highestHigh - lowestLow) - 0.5) + (1 - ratio) * preX
        if (x > 0.99) {
            x = 0.999
        } else if (x < -0.99) {
            x = -0.999
        }
        preX = x 
        fish = 0.5 * Math.log((1 + x) / (1 - x)) + 0.5 * preFish
        preFish = fish
        arrFish.push(fish)
    }
    return arrFish
}

تصویر

اس کے علاوہ ، ہم نے اپنے صارفین کو بتایا کہ ہم نے اپنے صارفین کو اس کے بارے میں کیا بتایا ہے:https://www.fmz.com/squareاس کے علاوہ ، آپ کو اپنی مرضی کے مطابق تلاش کرنے کی ضرورت ہے۔ درمیان میں ، مندرجہ ذیل گراف ٹیسٹ کوڈ میں مندرجہ بالا calcFisher فنکشن کی عمل درآمد کو شامل کرنے کی ضرورت ہے تاکہ یہ کام کرے۔

var cfg = {    // 用来初始化设置图表的对象(即图表设置)
    plotOptions: {
        candlestick: {
            color: '#d75442',  // 颜色值
            upColor: '#6ba583' // 颜色值
        }
    },
    title: { text: 'Fisher Transform'},     //标题
    subtitle: {text: ''},     //副标题
    plotOptions: {
        candlestick: {
        tooltip: {
            pointFormat: 
            '<span style="color:{point.color}">\u25CF</span> <b> {series.name}</b><br/>' +
            '开盘: {point.open}<br/>' +
            '最高: {point.high}<br/>' +
            '最低: {point.low}<br/>' +
            '收盘: {point.close}<br/>'
            }
        }
    },
    yAxis: [{
        title: {
            text: 'K线行情'
        },
        height: '70%',
        lineWidth: 1
    }, {
        title: {
            text: 'Fisher Transform'
        },
        top: '75%',
        height: '30%',
        offset: 0,
        lineWidth: 1
    }],
    series: [//系列
        {
            type: 'candlestick',
            yAxis: 0,
            name: 'K线',
            id: 'KLine',
            // 控制走势为跌的蜡烛颜色
            color: 'green',
            lineColor: 'green',
            // 控制走势为涨的蜡烛颜色
            upColor: 'red',
            upLineColor: 'red',
            data: []
        },{
            type: 'line',         // 设置当前的数据序列 类型为: 线
            yAxis: 1,             // 使用的y轴 为索引为 0 的y轴(highcharts 图表 可以有 多个 y 坐标轴,这里指定索引0的y轴)
            showInLegend: true,   // 
            name: 'fish',          // 根据 函数传入的 参数 label 设置
            lineWidth: 1,
            data: [],             // 数据序列的数据项
            tooltip: {            // 工具提示
                valueDecimals: 2  // 值的小数点 保留5位
            }
        },{
            type: 'line',         // 设置当前的数据序列 类型为: 线
            yAxis: 1,             // 使用的y轴 为索引为 0 的y轴(highcharts 图表 可以有 多个 y 坐标轴,这里指定索引0的y轴)
            showInLegend: true,   // 
            name: 'preFish',      // 根据 函数传入的 参数 label 设置
            lineWidth: 1,
            data: [],             // 数据序列的数据项
            tooltip: {            // 工具提示
                valueDecimals: 2  // 值的小数点 保留5位
            }
        }
    ]
}

var chart = Chart(cfg)
function main() {
    var ts = 0
    chart.reset()
    while (true) {
        var r = exchange.GetRecords()
        var fisher = calcFisher(r, 0.33, 10)                
        if (!r || !fisher) {
            Sleep(500)
            continue
        }
        
        for (var i = 0; i < r.length; i++){
            if (ts == r[i].Time) {
                chart.add([0,[r[i].Time, r[i].Open, r[i].High, r[i].Low, r[i].Close], -1])
                chart.add([1,[r[i].Time, fisher[i]], -1])
                if (i - 1 >= 0) {
                    chart.add([2,[r[i].Time, fisher[i - 1]], -1])
                }
            }else if (ts < r[i].Time) {
                chart.add([0,[r[i].Time, r[i].Open, r[i].High, r[i].Low, r[i].Close]])
                chart.add([1,[r[i].Time, fisher[i]]])
                if (i - 1 >= 0) {
                    chart.add([2,[r[i].Time, fisher[i - 1]]])
                }
                ts = r[i].Time
            }
        }
    }
}

img

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


متعلقہ

مزید