2.7 اشارے کا استعمال

مصنف:چھوٹا سا خواب, تخلیق: 2016-11-10 16:19:36, تازہ کاری: 2019-08-01 09:25:06

اشارے کا استعمال


  • UR - زیادہ سے زیادہ استعمال شدہ اشارے کی فائلوں کو دوبارہ لکھنے کے لئے اصلاحات

TA 指标库
MACD       指数平滑异同平均线
KDJ        随机指标
RSI        强弱指标
ATR        平均真实波幅
OBV        能量潮
MA         移动平均线
EMA        指数平均数指标
BOLL       布林带
Alligator  Alligator Indicator
CMF        蔡金货币流量指标
Highest    周期最高价
Lowest     周期最低价

اس سے پہلے کہ ہم ایک ٹیسٹ لکھنے کے لئے MACD اشارے کو آزمائیں ، ہم نے پہلے API دستاویزات میں MACD ٹیگ کو کھول دیا اور اس کی تفصیل دیکھی۔

img

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

function main(){
    var records = null;
    var macd = null;
    while(true){
        records = _C(exchange.GetRecords);  // 获取K线数据 ,默认为策略界面设置的K线周期, _C 是一个容错的内置函数。
                                            // _C 详见 https://www.fmz.com/bbs-topic/320  问题7。
        macd = TA.MACD(records);   // 不加参数的话,使用的是默认参数  12, 26, 9
        Log("macd[0]", macd[0]);   // DIF
        Log("macd[1]", macd[1]);   // DEA
        Log("macd[2]", macd[2]);   // MACD 
        Log("macd[0]长度", macd[0].length);   // DIF 长度
        Log("macd[1]长度", macd[1].length);   // DEA 长度
        Log("macd[2]长度", macd[2].length);   // MACD 长度
        Log("records 长度:", records.length);  // 显示一下 records 的长度。
        Sleep(1000 * 60 * 5);
    }
}

ماڈیول ٹیسٹ کے نتائج:

img

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

ذیل میں ہم چارٹ انٹرفیس کا استعمال کرتے ہوئے چارٹ پر دکھائے جانے والے حساب والے اشارے کو دکھاتے ہیں اور تبادلے کے حقیقی چارٹ (حقیقی چارٹ کا انتخاب OKCoin) کے مقابلے میں ، پہلے کوڈ دیکھیں:

var ChartCfg = {
tooltip: {xDateFormat: '%Y-%m-%d %H:%M:%S, %A'},
    chart: { zoomType:'x',panning:true },//图表类型  
    title: { text: "K-macd"}, //标题
    rangeSelector: {
            buttons:  [{type: 'hour',count: 1, text: '1h'}, {type: 'hour',count: 3, text: '3h'}, {type: 'hour', count: 8, text: '8h'}, {type: 'all',text: 'All'}],
            selected: 0,
            inputEnabled: false
        },
    subtitle: {text: "测试macd"},//副标题
    xAxis:{type: 'datetime'},
    yAxis: [{
            title: {text: 'K线'},//标题
            style: {color: '#4572A7'},//样式 
            opposite: false  //生成右边Y轴
        },
       {
            title:{text: "macd"},
            opposite: true  //生成右边Y轴  ceshi
       }
    ],
    series: [//系列
        {type:'candlestick',yAxis:0,name:'K',id:'KLine',data:[]},
        {name:"DIF",type:'spline',yAxis:1,data:[]},
        {name:"DEA",type:'spline',yAxis:1,data:[]},
        {name:"MACD量柱",type:'spline',yAxis:1,data:[]},
        ]                  
};
function main(){
    var records = null;
    var macd = null;
    var perRecords = _C(exchange.GetRecords);
    var perRecordTime = perRecords[perRecords.length - 1].Time;
    var chart_obj = Chart(ChartCfg); // 初始化图表
    chart_obj.reset();
    while(true){
        records = _C(exchange.GetRecords);  // 获取K线数据 ,默认为策略界面设置的K线周期, _C 是一个容错的内置函数。
        if(!records && records.length < 26 ){
            continue;
        }
        macd = TA.MACD(records, 12, 26, 9);   // 不加参数的话,使用的是默认参数  12, 26, 9
        if(records[records.length - 1].Time !== perRecordTime){                                    // _C 详见 https://www.fmz.com/bbs-topic/320  问题7。
            //先更新,再添加K线
            chart_obj.add(0, [records[records.length - 2].Time, records[records.length - 2].Open, records[records.length - 2].High, records[records.length - 2].Low, records[records.length - 2].Close], -1);   // 跟新刚完成的bar。
            chart_obj.add(0, [records[records.length - 1].Time, records[records.length - 1].Open, records[records.length - 1].High, records[records.length - 1].Low, records[records.length - 1].Close]);       // 添加新出现的bar
            //先更新,添加指标线
            chart_obj.add(1, [records[records.length - 2].Time, macd[0][records.length - 2]], -1);   // 更新
            chart_obj.add(1, [records[records.length - 1].Time, macd[0][records.length - 1]]);
            
            chart_obj.add(2, [records[records.length - 2].Time, macd[1][records.length - 2]], -1);   // 更新
            chart_obj.add(2, [records[records.length - 1].Time, macd[1][records.length - 1]]);
            
            chart_obj.add(3, [records[records.length - 2].Time, macd[2][records.length - 2]], -1);   // 更新
            chart_obj.add(3, [records[records.length - 1].Time, macd[2][records.length - 1]]);
            
            perRecordTime = records[records.length - 1].Time;
        }else{
            //只更新当前的bar 和 线
            chart_obj.add(0, [records[records.length - 1].Time, records[records.length - 1].Open, records[records.length - 1].High, records[records.length - 1].Low, records[records.length - 1].Close], -1);
            chart_obj.add(1, [records[records.length - 1].Time, macd[0][records.length - 1]], -1);   // 更新
            chart_obj.add(2, [records[records.length - 1].Time, macd[1][records.length - 1]], -1);   // 更新
            chart_obj.add(3, [records[records.length - 1].Time, macd[2][records.length - 1]], -1);   // 更新
        }
        chart_obj.update(ChartCfg);
        Sleep(1000);
    }
}

روبوٹ انٹرفیس پر K لائن سائیکل پیرامیٹرز کو 1 منٹ پر سیٹ کیا گیا ہے ، کیونکہ اثر دیکھنے کے لئے کچھ وقت چلنا پڑتا ہے ، لہذا تھوڑا سا چھوٹا سائیکل منتخب کریں۔

img img

جیسا کہ گراف سے دیکھا جاسکتا ہے موجد کی مقدار روبوٹ چل رہا ہے حساب لگایا گیا ڈی آئی ایف تقریبا 2.729 ، ڈی ای اے تقریبا 2.646 MACD مقدار کے ستون تقریبا 0.0831 اصل OKCoin تبادلے کے چارٹ میں دکھایا گیا ہے کہ DIF 2.73 ہے ، DEA 2.65 ہے ، MACD مقدار 0.17 ہے۔ جیسا کہ آپ دیکھ سکتے ہیں کہ پہلے دو ڈی آئی ایف، ڈی ای اے میں بہت کم فرق ہے، اوکی کوئن نے چار سے پانچ بنایا ہے، اور ایم اے سی ڈی دوگنا ہے کیونکہ اوکی کوئن اس طرح شمار ہوتا ہے: (DIF - DEA) * 2، عام طور پر DIF - DEA = 2.729 - 2.646 = 0.083، اگر 2 سے ضرب کیا جائے تو 0.166 تقریبا 0.17 کے برابر ہے۔

دوسرے اشارے کا استعمال بنیادی طور پر اسی طرح ہے۔

  • طالب -http://ta-lib.org/

    ٹی اے کی کتاب میں عام طور پر استعمال ہونے والے اشارے کے علاوہ طالب کی کتاب میں بہت سے اشارے موجود ہیں۔ مثال کے طور پر، ہم نے talib.STOCHRSI اشارے کا استعمال کرنے کی کوشش کی، اور API دستاویزات کی وضاحت دیکھیں:
STOCHRSI	Stochastic Relative Strength Index
STOCHRSI(Records[Close],Time Period = 14,Fast-K Period = 5,Fast-D Period = 3,Fast-D MA = 0) = [Array(outFastK),Array(outFastD)]

جیسا کہ آپ دیکھ سکتے ہیں ، پیرامیٹرز کی ترتیب talib.STOCHRSI ((records ، 14 ، 14 ، 3 ، 3) ہے) ؛ بنیادی طور پر اوپر MACD جیسے کوڈ ، کچھ تبدیلیاں کیں ، چلیں اور دیکھیں۔

var ChartCfg = {
tooltip: {xDateFormat: '%Y-%m-%d %H:%M:%S, %A'},
    chart: { zoomType:'x',panning:true },//图表类型  
    title: { text: "stochrsi"}, //标题
    rangeSelector: {
            buttons:  [{type: 'hour',count: 1, text: '1h'}, {type: 'hour',count: 3, text: '3h'}, {type: 'hour', count: 8, text: '8h'}, {type: 'all',text: 'All'}],
            selected: 0,
            inputEnabled: false
        },
    subtitle: {text: "测试stochrsi"},//副标题
    xAxis:{type: 'datetime'},
    yAxis: [{
            title: {text: 'K线'},//标题
            style: {color: '#4572A7'},//样式 
            opposite: false  //生成右边Y轴
        },
       {
            title:{text: "K-D"},
            opposite: true  //生成右边Y轴  ceshi
       }
    ],
    series: [//系列
        {type:'candlestick',yAxis:0,name:'K',id:'KLine',data:[]},
        {name:"K",type:'line',yAxis:1,data:[]},
        {name:"D",type:'line',yAxis:1,data:[]},
        ]                  
};
function main(){
    var records = null;
    //var macd = null;
    var stochrsi = null;
    var perRecords = _C(exchange.GetRecords);
    var perRecordTime = perRecords[perRecords.length - 1].Time;
    var chart_obj = Chart(ChartCfg); // 初始化图表
    chart_obj.reset();
    while(true){
        records = _C(exchange.GetRecords);  // 获取K线数据 ,默认为策略界面设置的K线周期, _C 是一个容错的内置函数。
        if(!records && records.length < 26 ){
            continue;
        }
        //macd = TA.MACD(records, 12, 26, 9);   // 不加参数的话,使用的是默认参数  12, 26, 9
        stochrsi = talib.STOCHRSI(records, 14, 5, 3, 0);
        if(records[records.length - 1].Time !== perRecordTime){                                    // _C 详见 https://www.fmz.com/bbs-topic/320  问题7。
            //添加K线
            chart_obj.add(0, [records[records.length - 2].Time, records[records.length - 2].Open, records[records.length - 2].High, records[records.length - 2].Low, records[records.length - 2].Close], -1);   // 跟新刚完成的bar。
            chart_obj.add(0, [records[records.length - 1].Time, records[records.length - 1].Open, records[records.length - 1].High, records[records.length - 1].Low, records[records.length - 1].Close]);       // 添加新出现的bar
            //添加指标线
            chart_obj.add(1, [records[records.length - 2].Time, stochrsi[0][records.length - 2]], -1);   // 更新
            chart_obj.add(1, [records[records.length - 1].Time, stochrsi[0][records.length - 1]]);
            
            chart_obj.add(2, [records[records.length - 2].Time, stochrsi[1][records.length - 2]], -1);   // 更新
            chart_obj.add(2, [records[records.length - 1].Time, stochrsi[1][records.length - 1]]);
            
            perRecordTime = records[records.length - 1].Time;
        }else{
            //只更新当前的bar 和 线
            chart_obj.add(0, [records[records.length - 1].Time, records[records.length - 1].Open, records[records.length - 1].High, records[records.length - 1].Low, records[records.length - 1].Close], -1);
            chart_obj.add(1, [records[records.length - 1].Time, stochrsi[0][records.length - 1]], -1);   // 更新
            chart_obj.add(2, [records[records.length - 1].Time, stochrsi[1][records.length - 1]], -1);   // 更新
        }
        chart_obj.update(ChartCfg);
        LogStatus("倒数第一组数据:", stochrsi[0][stochrsi[0].length - 1], stochrsi[1][stochrsi[1].length - 1], "    倒数第二组数据:", stochrsi[0][stochrsi[0].length - 2], stochrsi[1][stochrsi[1].length - 2]);
        Sleep(1000);
    }
}

میں نے اسکرین شاٹ نہیں دکھایا، لیکن یہ OKCoin کے سرکاری اعداد و شمار سے مختلف ہے، BOSS نے کہا کہ طالب کوک کے عملدرآمد کا الگورتھم OKCoin کے مقابلے میں مختلف ہوسکتا ہے۔ میں نے آن لائن ایک چکر لگایا اور صرف ایک چھوٹا سا ٹکڑا پایا، اس کے بعد ایک اور پوسٹ:STOCHRSI اشارے کو سمجھناآپ دیکھ سکتے ہیں کہ اشارے کس طرح لکھے گئے ہیں۔ میں نے یہ لکھا ہے کہ اس میں کوئی اصلاح نہیں ہے ، اس کی کارکردگی بہت کم ہے ، یہ بہت آہستہ چل رہا ہے ، لہذا سیکھنے کا حق ہے۔


مزید

ہاکسلاٹوآپ کہتے ہیں کہ آخری K لائن کو پہلے اپ ڈیٹ اور شامل کرنے کی ضرورت ہے ، کیونکہ آخری K لائن ہمیشہ بدلتی رہتی ہے ، اور صرف اس وقت جب نئی K لائن بن جاتی ہے تو پہلی K لائن طے ہوجاتی ہے۔ میں سمجھ نہیں پا رہا ہوں، کیا K لائن کے اعداد و شمار کو `GetRecords (() ` کے ذریعے حاصل کیا گیا ہے؟ کیا یہ یقینی نہیں ہے؟ `records [length -1] ` کا مطلب ہے کہ موجودہ ٹائم لائن کے تحت K لائن کے اعداد و شمار کو براہ راست چارٹ میں ڈرائنگ کیا جاسکتا ہے ، اور پھر نئے ٹائم لائن کے اعداد و شمار کو چارٹ کے آخری عنصر میں شامل کیا جاسکتا ہے ، ٹھیک ہے؟

شاندیانلیوبراہ کرم TA.ATR ((records، 14) کے بارے میں مزید تفصیلات بتائیں، جو میں نے BotVS کے API دستاویزات، ویڈیوز اور مکمل استعمال کے دستی میں نہیں مل سکے۔ جب میں TA.ATR ((records، 14) کو کال کرتا ہوں (پراگرامات 30 منٹ کی لائن ہیں) ، تو 177 کی لمبائی کا ایک صف واپس آتا ہے۔ براہ کرم اس صف کا کیا مطلب ہے؟

فینگ بیpython ورژن https://dn-filebox.qbox.me/b5d2b0ecc1e196a6bfc68eb45cd818c50d279915.png https://dn-filebox.qbox.me/157db5e2659fd13bcf552cd82fe456ba469939f8.png

فینگ بیpython ورژن def اہم (: while true: records = _C ((exchange.GetRecords) ؛ # K لائن ڈیٹا حاصل کرتا ہے ، اس کی پالیسی انٹرفیس کی طرف سے طے شدہ K لائن دورانیے کو پیش کرتا ہے ، _C ایک غلطی سے معذور بلٹ ان فنکشن ہے۔ macd = TA.MACD ((records) ؛ # اگر آپ کوئی پیرامیٹرز شامل نہیں کرتے ہیں تو ، آپ ڈیفالٹ پیرامیٹرز 12 ، 26 ، 9 استعمال کرتے ہیں۔ Log (("macd[0]", macd[0]); # DIF Log (("macd[1]"، macd[1]); # DEA Log (("macd[2]"، macd[2]); # MACD لاگ (("macd[0] لمبائی"، len ((macd[0])); # DIF لمبائی Log (("macd[1] لمبائی"، len ((macd[1])); # DEA لمبائی لاگ (("macd[2] لمبائی"، len ((macd[2])); # MACD لمبائی log (("records کی لمبائی:", len ((records)); # records کی لمبائی دکھاتا ہے۔ Sleep ((1000 * 60 * 5) ؛

چھوٹا سا خوابK لائن بار کا ٹائم ٹیبل اس بار کا آغاز وقت ہے، نہ کہ حقیقی وقت۔ بار کا آغاز وقت تبدیل نہیں ہوتا ہے۔

ہاکسلاٹواوہ ، میں نے پہلے غلط فہمی کو K لائن کے ** ٹائم لائن ** پر سمجھا تھا۔ ڈیبگنگ کے بعد پتہ چلا کہ BotVS کا طریقہ کار کچھ اس طرح ہے ، مثال کے طور پر آپ نے کہا ہے کہ ** دن K لائن **: اگر میں یکم مارچ کے لئے اس دن کے لئے K لائن ڈیٹا حاصل کرنا چاہتا ہوں تو ، getRecords (D1) کو کال کرنا بہت سارے ریکارڈ واپس کرے گا ، لیکن ان کی ٹائم لائنیں ایک جیسی ہیں ، `2018-03-01 00:00:00 `. اس کا مطلب یہ ہے کہ اگر میں نے یکم مارچ کو 10 بجے GetRecords ((D1)) کو کال کیا تو بھی ، K لائن کا ٹائم لائن ابھی بھی 2018-03-01 **00**:00:00 ہے۔ لہذا آپ نے جو آخری لائن کا ذکر کیا ہے وہ غیر یقینی ہے ، جب تک کہ نیا ٹائم لائن نہ ہو ، یعنی 2018-03-**02** 00:00: 00 ، یکم مارچ کا دن غیر یقینی ہے۔ مجھے اس سے پہلے غلط فہمی ہوئی تھی کہ میں نے سوچا تھا کہ 1 مارچ کو 1، 2 اور 3 بجے کال کرنے کے بعد میں مختلف اوقات میں واپس آؤں گا ، یعنی 2018-03-01 **01**:00:00، 2018-03-01 **02**:00:00، 2018-03-01 **03**:00:00؛

چھوٹا سا خوابGetRecords (() سے حاصل کردہ K لائن کے اعداد و شمار کے علاوہ ، باقی کا شمار پہلے نمبر پر ہوتا ہے ، باقی کا تعین ہوتا ہے (چونکہ سائیکل ختم ہوچکا ہے) ، اور دوسرے نمبر پر غیر یقینی ہوتا ہے کیونکہ سائیکل ختم نہیں ہوا ہے ، اور قریب ہمیشہ بدلتا رہتا ہے۔ مثال کے طور پر ، یومیہ K لائن ، موجودہ یومیہ K لائن کالم ، جب آج ختم نہیں ہوتا ہے تو ، کوئی نہیں جانتا ہے کہ آج کی قیمت آخر میں کتنی ہوگی۔ اختتام۔

چھوٹا سا خوابغیر مہذب

شاندیانلیوبہت بہت شکریہ!

چھوٹا سا خوابجی ہاں، ہم آہنگ۔ پہلی K لائن بار کو منفی کریں۔

شاندیانلیوٹھیک ہے، آپ کے جواب کا بہت بہت شکریہ۔ آخر میں، تصدیق کریں کہ var a = TA.ATR ((records، 14) ، a[a.length-1] یہ تازہ ترین k-string ڈیٹا کا ATR ہے، ٹھیک ہے؟

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

شاندیانلیویہ میں سمجھتا ہوں، TA.ATR ((() اصل میں ان پٹ ریکارڈز پر ایک ریاضی کا آپریشن ہے۔ میں نے پہلے واضح نہیں کیا تھا، میں پوچھنا چاہتا ہوں کہ کیا تبادلے کی طرف سے واپس آنے والی لمبائی کا تعین کیا جاتا ہے جب k لائن کے اعداد و شمار کو تبادلہ.GetRecords (() کے ساتھ حاصل کیا جاتا ہے؟

چھوٹا سا خواباس اشارے کی تقریب واپس کرتا ہے کہ کتنے اعداد و شمار K لائن کے اعداد و شمار کے مطابق ہیں ، یعنی ریکارڈز ، اور آپ نے جو ریکارڈز درج کیے ہیں ان کی لمبائی کتنی ہے ، اور اس کی لمبائی کتنی ہے۔

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

چھوٹا سا خوابیہ K لائن کی لمبائی کی طرف سے مقرر کیا جاتا ہے ^^

شاندیانلیوآپ کے جواب کا شکریہ، یہ واضح ہے، اور میں پوچھنا چاہتا ہوں کہ 117 کی لمبائی کا تعین کیا ہے؟

چھوٹا سا خوابمثال کے طور پر ، داخل کردہ ریکارڈز دن کی K لائن ہیں ، جس کا حساب لگایا گیا ہے ATR ایک عددی سیٹ ہے ، اس سیٹ کا پہلا عنصر اس دن کے (K لائن کی آخری تاریخ کی تاریخ) ATR اشارے ہیں۔ اس کے بعد 30 منٹ کی K لائن ، 15 منٹ کی K لائن کی درجہ بندی کی جاتی ہے۔ آپ نے 177 کی گنتی کی ہے ، جو کہ 177 K لائن کے دورانیے ہیں ، جو ہر KBar لائن کے لئے ATR اشارے کے مترادف ہیں۔

چھوٹا سا خوابہلاتے ہوئے ایک کشمش اگر اب K لائن کے اعداد و شمار میں صرف 10 بار ہیں، تو میں نے MA ((15) ، یعنی 15 سائیکل اوسط لائن کا مطالبہ کیا ہے، تو یہ یقینی طور پر ناممکن ہے، کیونکہ صرف 10 سائیکلوں کے ساتھ، 15 سائیکلوں کا اوسط شمار نہیں کیا جاسکتا ہے۔

فینگ بیاس کے علاوہ، میں نے ریئل ڈسک کی سطح پر ٹِک ریورس کیا، اور کوئی ڈیٹا واپس نہیں آیا۔

فینگ بییہ اعداد و شمار کیوں سائیکل کی ضروریات کو پورا نہیں کرتے ہیں؟

چھوٹا سا خوابیہ مثال اچھی ہے ، لیکن عملی استعمال میں ، تازہ ترین اشارے کا ڈیٹا صف کے آخر میں ہے ، یعنی اشاریہ -1 کا عنصر۔ اس سے پہلے کہ وہ دورانیہ کی ضرورت کو پورا نہ کرے۔ اعداد و شمار کا حساب لگایا گیا ہے ، یہ کوئی نہیں ہے ، لیکن یہ ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں ایک ہی وقت میں اس کے بعد کچھ قابل عمل اعداد و شمار ہیں: https://dn-filebox.qbox.me/b7837ea30e5d8396ffa91c48204f2fbc9a7f4504.png