جے ایس کا استعمال کرتے ہوئے کوانٹیمیٹڈ روبوٹ کے لئے ایک سبق:https://www.fmz.com/bbs-topic/705(پہلے مارک کے نیچے)
کیا K لائن ڈیٹا ہے:
K لائن چارٹ کی ابتدا جاپان کے دارالحکومت ٹیکواوا کے دور میں ہوئی تھی اور اس وقت جاپان کے چینی مارکیٹ کے تاجروں کی طرف سے چینی مارکیٹ کے رجحانات اور قیمتوں میں اتار چڑھاؤ کو ریکارڈ کرنے کے لئے استعمال کیا جاتا تھا ، بعد میں اس کی باریک بینی اور منفرد لیبلنگ کے لئے اسٹاک مارکیٹ اور فیوچر مارکیٹ میں متعارف کرایا گیا۔ فی الحال ، اس طرح کے چارٹ تجزیہ کا طریقہ ہمارے ملک میں اور پورے جنوب مشرقی ایشیاء میں خاص طور پر مقبول ہے۔ چونکہ اس طریقہ کار کے ذریعہ تیار کردہ چارٹ کی شکل ایک جھاڑی کی طرح ہے ، جس میں سیاہ اور سفید منفی ہیں ، لہذا اسے سورج کی لائن چارٹ بھی کہا جاتا ہے۔ (بائیوٹا سے تلاش)
اس کے علاوہ، ہم نے اس کی وضاحت کرنے کے لئے کچھ گرافکس نہیں بنائے ہیں، لیکن ہم K لائن کے اعداد و شمار کی ساخت کو دیکھیں گے جو JS زبان کے ساتھ بیان کیا گیا ہے:
{
Time : 1487034000000, // 一个时间戳, 精确到毫秒,与Javascript的 new Date().getTime() 得到的结果格式一样
Open : 3425, // 开盘价
High : 3446, // 最高价
Low : 3423, // 最低价
Close : 3438, // 收盘价
Volume : 177657.99, // 交易量
}
اب ہم دیکھتے ہیں کہ GetRecords فنکشن کو کال کرنے سے کیا ڈیٹا حاصل ہوتا ہے: (یاد رکھیں کہ پہلے exchange.SetContractType کو کال کریں ((
[
{"Time":1487034000000,"Open":3425,"High":3446,"Low":3423,"Close":3438,"Volume":177657.9999999999},
{"Time":1487035800000,"Open":3438,"High":3448,"Low":3382,"Close":3385,"Volume":494882},
{"Time":1487037600000,"Open":3385,"High":3398,"Low":3383,"Close":3394,"Volume":83656.00000000015}
]
K لائن کے اعداد و شمار کو ایک صف کے طور پر دیکھا جاسکتا ہے، ہر ایک K لائن بار ہے، جس میں اس بار سائیکل میں سب سے زیادہ قیمت، سب سے کم قیمت، کھولنے کی قیمت (یعنی اس K لائن کی ٹائم لائن شروع ہونے کی قیمت) ، بند ہونے کی قیمت (یعنی اس K لائن سائیکل کے وقت ختم ہونے کی قیمت) ، تجارت (سائیکل میں تجارت) ؛ اور یہ سائیکل K لائن سائیکل ہے۔ مثال کے طور پر، مندرجہ بالا صف میں اعداد و شمار کا تعین کس طرح کرتے ہیں کہ کس طرح طویل عرصے سے K لائن ہے؟ آپ کو صرف 2 بار کے وقت کی گھنٹی کے ساتھ غلط حساب کر سکتے ہیں: 1487035800000 - 1487034000000 اس کے نتیجے میں: 1800000، جس کی عددی یونٹ ملی سیکنڈ ہے، لہذا اس کے بدلے میں: 1800000 / 1000 / 60 = 30 (منٹ) ، یہ K لائن کا دورانیہ 30 منٹ ہے۔
اس کے علاوہ ، آپ کو یہ بھی معلوم ہونا چاہئے کہ آپ کو کیا کرنا چاہئے:
جب ہم K لائن کے اعداد و شمار کا استعمال کرتے ہیں تو ، صف کی لمبائی کو نظرانداز کیا جاتا ہے۔ اس کی وجہ سے صف تک رسائی کا بہاؤ ہوتا ہے (اس طرح کے BUG پہلے C پروگرام لکھنے میں عام تھے) ۔ لہذا ہمیں K لائن کا استعمال کرنے سے پہلے اس کا فیصلہ کرنے کی ضرورت ہے۔
مثال کے طور پر K لائن حاصل کریں:
exchange.SetContractType ((
if(records.length < n){ // n 就是我们限定的 n线数量。
return; // 当前函数返回。
}
دوسری آسان بات یہ ہے: K لائن کے آخری بار کے اعداد و شمار کے علاوہ Time، Open اور Close کے علاوہ دیگر خصوصیات میں تبدیلی کا امکان ہے۔ ابتدائیوں کے لئے یہ بہت الجھن کا باعث بن سکتا ہے کیونکہ وہ K لائن کے ساتھ کام کرتے وقت اس بات کو نہیں سمجھتے ہیں۔ مثال کے طور پر ، پچھلے باب میں ، ہموار لائن کراسنگ کے بارے میں بات کی گئی تھی۔ منفی پہلا بار استعمال کریں یا منفی دوسرا بار؟
تیسرا سوال: K لائن کے دورانیے کے لئے ، ٹائم لائن اس دورانیے کے آغاز کا وقت ہے ، ٹائم لائن ایک ملی سیکنڈ ہے ، جس کی قیمت 0 ہے۔ اس وقت کا نمائندہ 1 جنوری 1970 ہے (مخصوص پروگرام لکھنے کے وقت فیصلہ کرنے کے لئے اس وقت کے زون کو بھی مدنظر رکھنا ضروری ہے) ۔ اس جملے کا استعمال کریں:w3schoolیا BotVS Sandbox سسٹم میں آزمائیں:
var arr = new Date(0);
یہ دکھایا گیا ہے:
Thu Jan 01 1970 08:00:00 GMT+0800 (CST) // دکھایا گیا ہے مشرقی آٹھ ٹائم زون یہ قدر 1970 سے اب تک اپنے آپ میں شامل ہے (ہر ایک سیکنڈ میں 1000 اضافہ ہوتا ہے کیونکہ ایک سیکنڈ 1000 ملی سیکنڈ ہے) ، لہذا یہ تعداد کافی بڑی ہے۔ یہاں ایک چھوٹی سی چال ہے: چونکہ ٹائم بیگ K لائن کے ہر بار میں منفرد ہے جس میں K لائن کے دورانیے کا تعین کیا گیا ہے ، لہذا جب ٹائم بیگ میں تبدیلی آتی ہے تو ، یہ یقینی بنایا جاسکتا ہے کہ تازہ ترین K لائن کا ڈیٹا موصول ہوا ہے۔ یہ اصل میں K لائن کے اعداد و شمار کو سنبھالنے میں بھی مفید ہے۔
جب پروگرامنگ یا مقداری حکمت عملی لکھتے ہیں تو ، بہت سارے اشارے کے افعال بھی استعمال کیے جاتے ہیں۔ اس سے کہیں زیادہ مفید اشارے کا ذخیرہ طالب ہے ، جس کے مختلف ورژن ہیں ، ہم یہاں جے ایس ورژن استعمال کرتے ہیں۔
اس کے علاوہ، جب وہ پہلی بار انڈیکس بیس کے افعال کا استعمال کرتے تھے تو بہت سی غلطیاں ہوئیں:
پہلا ، پیرامیٹرز کا دورانیہ ((انڈیکیٹر پیرامیٹرز ، K لائن کے دورانیے سے مختلف ، K لائن کا دورانیہ کتنا ہے ، حساب لگایا گیا اشارے K لائن کا دورانیہ کتنا ہے ، مثال کے طور پر 30 منٹ کی لائن کا حساب لگایا گیا ہے 30 منٹ کے دورانیے کا MACD اشارے ، پیرامیٹرز کے لئے پیرامیٹرز کا دورانیہ) بہت بڑا ، K لائن ڈیٹا کی لمبائی کم ہے: مثال کے طور پر، MACD اشاریہ بیان کرتا ہے:
MACD(Records[Close],Fast Period = 12,Slow Period = 26,Signal Period = 9) = [Array(outMACD),Array(outMACDSignal),Array(outMACDHist)]
اگر استعمال کے دوران پیرامیٹرز کی مدت 12، 26، 9 پر سیٹ کی گئی ہے تو، ہم کالم ڈیٹا ریکارڈز میں داخل ہوتے ہیں جو اشارے کا حساب کرنے کے لئے استعمال کیا جاتا ہے، کوڈ لکھتا ہے:
var macd = talib.MACD(records, 12, 26, 9);
اگر اس وقت ریکارڈز کی لمبائی بہت کم ہے تو ، اس کا حساب لگایا جاتا ہے:
[
[null,null,null,null,null,null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null,null,null,null,null,null]
]
اس کی وجہ یہ ہے کہ K لائن کے اعداد و شمار کی کمی کی وجہ سے ، حساب کتاب کرنے والے اشارے اگر استعمال کیے جائیں تو BUG پیدا کریں گے ، لہذا ہم نے پروگرام سے پہلے ایک محدود شرط شامل کی:
while(!records || records.length < 50){
records = exchange.GetRecords();
Sleep(1000);
}
جب تک آپ کو 50 کلو گرام نہ ملیں، آپ کو لوپ سے باہر نکلنے کی ضرورت ہے۔
محتاط قارئین دیکھ سکتے ہیں کہ اس اشارے کے حساب سے اعداد و شمار ایک دو جہتی صف (یعنی ایک صف کے ہر عنصر کے لئے ایک صف ہے) کیوں ہے کیونکہ MACD اشارے کی حساب سے ایک لائن نہیں بلکہ تین لائنیں ہوتی ہیں: diff ،dea ،macd مقدار کالم۔ لہذا ہر اشارے کی واپسی کی قیمت مختلف ہوسکتی ہے ، یا اس کی تفصیل کو دیکھنے کی ضرورت ہے۔
[
[null,null,null,null,null,null,null,null,数据...],
[null,null,null,null,null,null,null,null,数据...],
[null,null,null,null,null,null,null,null,数据...]
]
کچھ معاملات میں ، بیگ اس وجہ سے بھی ظاہر ہوتا ہے کہ اشارے کی واپسی کی ساخت پر توجہ نہیں دی جاتی ہے۔
دوسرا، اشارے کی تقریب کے حساب کے لئے استعمال کیا جاتا ہے کہ ایک مختلف اوسط یا اشارے کے الگورتھم مختلف نتائج کے نتیجے میں مختلف ہے.
اس کے مقابلے میں زیادہ واضح STOCH RSI اشارے ہے، جو مندرجہ ذیل بیان کرتا ہے:
STOCHRSI(Records[Close],Time Period = 14,Fast-K Period = 5,Fast-D Period = 3,Fast-D MA = 0) = [Array(outFastK),Array(outFastD)]
اس حساب سے حاصل ہونے والی قیمت دوسرے الگورتھم سے نمایاں طور پر مختلف ہے، جس کے بارے میں میں نے اپنی الگورتھم کا کوڈ اس سیریز کے پہلے باب میں دیا ہے۔ دلچسپی رکھنے والے قارئین اس کا موازنہ کر سکتے ہیں۔ اس کی وجہ ممکنہ طور پر استعمال شدہ یکساں نظام کی عدم مطابقت کی وجہ سے ہوسکتی ہے ، کچھ کتابوں کے الگورتھم MA استعمال کرنے کے عادی ہیں ، کچھ EMA استعمال کرنے کے عادی ہیں۔ کچھ اشارے ہر دن بار بار حساب لگائے جاتے ہیں ، اگر K لائن ڈیٹا کی دی گئی تعداد مختلف ہے تو حساب کتاب کی قیمتوں میں فرق ہوسکتا ہے۔
Cannot read property
اس کی وجہ یہ ہے کہ اے پی آئی میں بعض اوقات مختلف وجوہات کی بناء پر ڈیٹا حاصل کرنے میں غلطی ہوتی ہے ، یا ڈیٹا حاصل نہیں ہوتا ہے۔ اس وقت کچھ ڈیٹا حاصل کرنے والے اے پی آئیز null ویلیو حاصل کرتے ہیں۔ یہ اعداد و شمار عام طور پر ایک صفاتی ڈھانچہ ہوتے ہیں ، اور اکثر صفوں کی لمبائی تک رسائی کی ضرورت ہوتی ہے۔
تمام API کالوں کے لیے غلطیوں کا معالجہ کرنے کی ضرورت ہوتی ہے، اور بعض اوقات یہ بھی جانچنے کی ضرورت ہوتی ہے کہ آیا اعداد و شمار درست ہیں (کبھی کبھی غیر معمولی اعداد و شمار ظاہر ہوتے ہیں) ۔ ہمارے پروگرام صرف اپنے کوڈ میں درستگی کی ضمانت دے سکتے ہیں، لیکن نیٹ ورک پر چلنے والے ڈیٹا کی معلومات کے لیے اس کی 100٪ درستگی کی ضمانت نہیں دی جاسکتی ہے (کچھ بھی ضائع ہونا ناگزیر ہے) ، لہذا حاصل کردہ اعداد و شمار کو غلطیوں کا معالجہ کرنے کی ضرورت ہوتی ہے اور تمام غیر معمولی اعداد و شمار کو فلٹر کرنا پڑتا ہے۔
اس کے علاوہ ، یہ ایک بہت ہی آسان طریقہ ہے کہ آپ کو ایک ہی مرحلے میں ڈیبگنگ ، وقفے وقفے سے ڈیبگنگ ، متغیر کی نگرانی وغیرہ کی ضرورت نہیں ہے۔ میرا عام طریقہ DEBUG کرنے کا سب سے آسان طریقہ ہے لاگ ان! پروگرام کے عمل میں منطقی استعمال کے لئے لاگ آؤٹ پٹ ٹیکسٹ انفارمیشن ، تجزیہ پروگرام کی پیداوار کے لئے لاگ۔ شاید آپ پروگرام کے عمل کو سمجھ سکتے ہیں ، یا کوشش کریں ، پکڑو ، پھینک دو JS کے ساتھ مل کر BUG کو سنبھال سکتے ہیں ، لیکن میرا مشورہ ہے کہ جب آپ کو غیر معمولی گرفتاری کا استعمال کرنا پڑے تو ، اس سے بچنے کی کوشش کریں۔ ((پروگرامنگ کا مطالبہ ہے کہ ہمیں ٹرانزیکشن ، تجزیہ ڈیٹا کے تمام پہلوؤں کو سنبھالنا ہوگا ، اگر ہم کسی بھی طرح سے چلنے کے لئے مجبور نہیں ہوسکتے ہیں تو ، ممکنہ طور پر تباہ کن BUG کسی کونے میں ٹرگر کا انتظار کر رہے ہیں) ۔ DEBUG کے لئے، سب سے زیادہ بنیادی لاگ ان کا استعمال کرتے ہوئے ایک تجربہ کار طریقہ کار ہے، جو DEBUG کی صلاحیتوں کو فروغ دینے کے نقطہ نظر سے بہت مؤثر ہے.
https://www.fmz.com/bbs-topic/728