اے ٹی آر-آر ایس آئی کی حکمت عملی

مصنف:ایک چاقو، تاریخ: 2022-02-13 17:17:17
ٹیگز:

Atr اشاریہ

اوسط حقیقی رینج (Average True Range) ، جسے اے ٹی آر کے نام سے جانا جاتا ہے۔ یہ بنیادی طور پر مارکیٹ میں اتار چڑھاؤ کی شدت کا اندازہ کرنے کے لئے استعمال کیا جاتا ہے اور مارکیٹ میں تبدیلی کی شرح کا اشارہ کرتا ہے ، لیکن اس سے قیمتوں کی سمت اور رجحان کی استحکام کی عکاسی نہیں ہوتی ہے۔ اس اشارے کی قدر جتنی زیادہ ہوگی ، اس سے رجحان کی تبدیلی کا امکان زیادہ ہوگا اور اس کے برعکس رجحان کی تبدیلی کا امکان کم ہوگا۔

حساب کا طریقہ

اوسط حقیقی اتار چڑھاؤ کی حد ، جو پچھلے N دنوں کی حقیقی اتار چڑھاؤ اور اس دن کی حقیقی اتار چڑھاؤ کے حساب کے مطابق ہے۔ ایک دن کی حقیقی اتار چڑھاؤ کی جڑ سے نکلتی ہے ((اس دن کی سب سے زیادہ قیمت - دن کی سب سے کم قیمت) ، ((اس دن کی سب سے زیادہ قیمت - کل کی بندش کی قیمت) ، ((آج کی بندش کی قیمت - دن کی سب سے کم قیمت)) تینوں نتائج کے بیچ کا سب سے بڑا قدر ، جس کا مقصد زیادہ سے زیادہ اتار چڑھاؤ کی حد کی قیمت کا فرق حاصل کرنا ہے۔

Rsi اشارے

رشتہ دار طاقت اشاریہ (RSI) ۔ ایک تکنیکی اشاریہ جو مستقبل کی مارکیٹ کی رفتار کا اندازہ کرتا ہے جس میں ایک عرصے کے دوران زیادہ سے زیادہ خالی دونوں اطراف کی خرید و فروخت کی طاقت کی طاقت کا موازنہ کیا جاتا ہے۔

حساب کا طریقہ

RSI = 100 - (100/(1+RS) ؛ RS = n دن کے اختتامی گرنے اور / n دن کے اختتامی گرنے کا مجموعہ؛ عام طور پر آر ایس آئی 50 کے ساتھ وسط کی حد کے طور پر، 50 سے زیادہ ایک کثیر مارکیٹ کے طور پر سمجھا جاتا ہے، اور 50 سے کم ایک خالی مارکیٹ کے طور پر سمجھا جاتا ہے. RSI 70 سے زیادہ ایک oversold حالت ہے، جس کے بعد مارکیٹ میں واپسی یا تبدیلی کا امکان ہے، اور 30 سے کم ایک oversold حالت ہے، جس کے بعد اضافہ ہوسکتا ہے.

حکمت عملی کے اصول

اے ٹی آر فلٹرنگ کے لئے استعمال کیا جاتا ہے، جب اے ٹی آر> اے ٹی آر ایم اے (گذشتہ N دنوں کے اوسط اے ٹی آر) ، یہ ظاہر کرتا ہے کہ مارکیٹ میں اتار چڑھاؤ کی حد بڑھنے لگی ہے اور یہ رجحان بڑھ رہا ہے۔ آر ایس آئی ٹریڈنگ سگنل پیدا کرنے کے لئے استعمال ہوتا ہے۔


/*backtest
start: 2021-02-11 00:00:00
end: 2022-02-10 23:59:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Huobi","currency":"BCH_USDT"}]
args: [["rsi_period",12],["atrma_period",18]]
*/

/*
* rsi_period: 强弱指标计算周期
* atr_period: 平均真实波幅计算周期
* atrma_period: 平均真实波幅均值计算呢周期
* tick_interval: 时间间隔
* slide_price: 下单滑动值
*/

// RSI指示操作状态
var RSI_NONE = 0;
var RSI_BUY = 1;
var RSI_SELL = 2;

var last_rsi_staus;

// ATR活跃信号判断
function isAtrActive(records) {
    let atr = TA.ATR(records, atr_period);
    let atrma = atr[atr.length - 1];
    if (atr.length > atrma_period) {
        let tmp_atr = 0;
        for (let i = atr.length - atrma_period; i < atr.length; i++) {
            tmp_atr += atr[i];
        }
        atrma = tmp_atr / atr_period;
    }
    else {
        atrma = aval(atr.join("+")) / atr.length;
    }
    return atr[atr.length - 1] > atrma;
}

// 获取RSI操作状态
function getRsiStatus(records) {
    let rsi = TA.RSI(records, rsi_period)[records.length - 1];
    if (rsi < 30) {
        return RSI_BUY;
    }
    else if (rsi > 70) {
        return RSI_SELL;
    }
    else {
        return RSI_NONE;
    }
}

// 取消未成交下单
function canelPendingOrders() {
    while (true) {
        let orders = _C(exchange.GetOrders);
        if (orders.length == 0) {
            break;
        }
        for (let i = 0; i < orders.length; i++) {
            exchange.CancelOrder(orders[i].Id);
        }
    }
}

function onTick() {
    let records = _C(exchange.GetRecords, PERIOD_M15);
    let ticker = _C(exchange.GetTicker);
    if (records == null ||
        ticker == null ||
        records.length < rsi_period ||
        records.length < atr_period) {
        return;
    }

    if (isAtrActive(records)) {
        let rsi = getRsiStatus(records);
        if (rsi != RSI_NONE) {
            let account = _C(exchange.GetAccount);
            if (rsi == RSI_BUY && last_rsi_staus != RSI_BUY) {
                Log("买入信号");
                last_rsi_staus = RSI_BUY;
                canelPendingOrders();
                if(account.Balance>0){
                    let price = ticker.Last + slide_price;
                    let amount = account.Balance / price * 0.99;
                    exchange.Buy(price, amount);
                }
            } else if (rsi == RSI_SELL && last_rsi_staus != RSI_SELL) {
                Log("卖出信号");
                last_rsi_staus = RSI_SELL;
                canelPendingOrders();
                if (account.Stocks > 0) {
                    let price = ticker.Last - slide_price;
                    exchange.Sell(price, account.Stocks);
                }
            }
        }
    }
    last_records = records;
}

function main() {
    while (true) {
        onTick();
        Sleep(tick_interval * 1000);
    }
}

مزید

علیرن ٹائم غلطی: abort ((undefined) at Error at jsStackTrace، یہ پاگل ہے

ایک چاقوکیا آپ کے پاس مزید معلومات ہیں؟