كيف المؤشرات الفنية في سوق الأوراق المالية تعمل فعلا؟

أي شخص ، كان مهتما في أي وقت مضى في الأسهم أو العملات المشفرة رأى هذه الخطوط الإضافية على الرسوم البيانية. ربما سمعت الآراء التي لا تعمل. لكنها تحسن بشكل كبير من قدرتي التجارية ، مع عرض الكثير من البيانات المهمة. ولكن كيف تعمل في الواقع؟ ولمن يمكن أن يكون مفيدا؟

يجب عليك بالتأكيد قراءة هذا إذا:

  1. يمكنك استخدامها في التداول اليوم
  2. أنت تخطط لكتابة روبوت التداول
  3. إذا كنت ترغب في تنفيذ إستراتيجية أو مؤشرات تداول بنفسك




غالبًا ما تكون المؤشرات الفنية عبارة عن وظيفة نافذة أو وظيفة متكررة أو دالة مرجحة للأسعار / الكميات التي يتم سحبها من البورصة بتنسيق UOHLCV (وقت يونيكس ، مفتوح ، مرتفع ، منخفض ، قريب ، حجم). ليس من غير المألوف أن تستخدم المؤشرات ترشيحًا مختلفًا ، والحد الأدنى والحد الأقصى أو مؤشرات أخرى كأساس لإجراء عمليات حسابية لاحقة.

المتوسط ​​المتحرك البسيط (SMA)


عند مؤشرات الترميز ، من المريح جدًا استخدام النهج الوظيفي. على سبيل المثال ، فإن المتوسط ​​المتحرك هو مجرد متوسط ​​لكل قيمة من نافذة النافذة.

function sma($close, window) { return rolling(x => mean(x), window, $close); } 

حيث mean هو العملية التي تحسب متوسط ​​الصفيف و rolling هي توليفة من وظيفة النافذة التي تنتج عن كل عنصر موجود في الصفيف مجموعة من آخر عناصر n والعملية التي تطوي هذه النافذة إلى رقم.

 function rolling(operation, window, array) { let result = []; for (let i = 0; i < array.length; i++) { if (i + 1 < window) { result.push(NaN); } else { result.push(operation(array.slice(i + 1 - window, i + 1))); } } return result; } 

SMA هو مؤشر متخلف ويساعد في تحديد الاتجاه. يتم رسمها كتراكب على الرسم البياني ويتم تجاهل القيم الأولى عادة. يمكن استخدام متوسطين متحركين معًا لإنشاء إشارات متقاطعة.

المتوسط ​​المتحرك البسيط (SMA)

يحدث تقاطع صعودي عندما يندفع متوسط ​​متحرك قصير المدى نسبيًا. غالبًا ما يتم استخدام المتوسط ​​المتحرك المرجح بشكل كبير في الممارسة العملية ، لأن وظيفة النافذة الموزونة تقلل من تأثير التأخير.

الانحراف المعياري (STDEV)


إذا استبدلنا الدالة الوسيطة في SMA بالانحراف المعياري ، فسنحصل على انحراف معياري انزلاقي

 function stdev($close, window) { return rolling(x => sd(x), window, $close); } 

حيث يعتبر sd ليكون الجذر التربيعي للفرق وبشكل شائع دون تصحيح بسل. سنفترض أن الجميع يفهم كيفية تنفيذ sd

sd(x)= sqrt frac sum(xi hatx)2N.


يتم استخدام الجذر التربيعي للفرق لأن التباين نفسه يقاس بدولارات suqare من حيث نظرية البعد وليس بسبب قيام شخص ما بتسجيل علامة تجارية أو أيًا كان.

بولنجر باند (BBAND)


وبالتالي قمنا بالفعل بتنفيذ اثنين من المؤشرات الأساسية التي يمكننا الجمع بين والحصول على مؤشرات جديدة. على سبيل المثال ، إذا أخذنا في الاعتبار إضافة نقطة الحركة للمتوسط ​​المتحرك والانحراف المعياري بمقدار 2 ، فسنحصل على الجزء العلوي من شريط بولينغر والجزء السفلي الذي سنحصل عليه إذا طرحنا.

 function bb($close, window, mult) { let middle = sma($close, window); let upper = pointwise((a, b) => a + b * mult, middle, stdev($close, window)); let lower = pointwise((a, b) => a - b * mult, middle, stdev($close, window)); return { lower : lower, upper : upper}; } 

حيث دالة pointwise هي وظيفة مفيدة أخرى

 export function pointwise(operation, ...arrays) { let result = []; for (let i = 0, len = arrays[0].length; i < len; i++) { let iarr = (i) => arrays.map(x => x[i]); result[i] = operation(...iarr(i)); } return result; } 

وانها مجرد إجراء العملية مع العديد من المصفوفات

بولنجر باند (BBAND)

تساعد خطوط البولنجر في تحديد الهدوء قبل حركة السعر الكبيرة ، وتستخدم كأداة لإزاحة التقلبات مباشرة على الرسم البياني ، حيث يتم استبدال / إضافة الانحراف المعياري عن المتوسط ​​المتحرك ليتم عرضه على شكل تراكب على مخطط واحد مع السعر.

المتوسط ​​المتحرك الأسي (EMA)


كيف يمكننا تقليل تأخر المتوسط ​​المتحرك البسيط؟ نظرًا لأنه يحسب متوسط ​​أسعار الإغلاق الأخيرة ، يمكننا أن نفهم أنه يمكننا إجراء الجمع مع بعض الوزن وتقليل مساهمة الأسعار القديمة.

 barx= frac sumxiN= frac sum1 cdotxi sum1 quad Rightarrow quad widetildex= frac sumxiwi sumwi


على سبيل المثال إذا اخترنا wn=qn وثابت فدولافدولا هذا أقل من واحد ، ثم نحصل على وزن متناقص بشكل لا نهائي ، إذا قمنا بإضافة الأسعار بدءًا من الأحدث.

وظائف مرجحة

كما أنه من الممكن تقريب الحسابات والحصول على معادلة تكرارية إذا قمنا بتوسيع النافذة إلى أقصى طول وافترض أن مساهمة ذيول صغيرة.

1+q+q2+...+qn undersetn to infty undersetq<0= frac11q mathrmEMAcurr= frac sumxiqi sumqi=(1q) sumxiqi mathrmEMAnext= fracxnext+q cdot sumxiqi1+q cdot sumqi=(1q) cdot left[xnext+q cdot مجموعxiqi right] mathrmEMAnext=(1q) cdotxnext+q) cdot mathrmEMAcurr

مجموع



في النهاية ، نحتاج إلى بعض القيمة α = 1 - q كطريقة صقل ثابتة. من الممكن إثبات أنه عندما نختار  alpha=2/(N+1) مركز كتلة من EMA و SMA المخططات الوزن أعلاه تصبح متساوية. في رمز هذا يبدو أكثر بساطة.

 function ema($close, window, weight = null) { weight = weight ? weight : 2 / (window + 1); let ema = [ mean($close.slice(0, window)) ]; for (let i = 1; i < $close.length; i++) { ema.push($close[i] * weight + ema[i - 1] * (1 - weight)); }; return ema; } 

بشكل عام هذا هو نفس المتوسط ​​المتحرك ولكنه أكثر حساسية.

المتوسط ​​المتحرك الأسي (EMA)
يعتمد فاعلية الاستخدام على تجربتك والإعدادات المستخدمة. على سبيل المثال على هذا الموقع يتم اختيار المعلمات بشكل جيد.

الانتقال المتوسط ​​التقارب التباعد (MACD)


جاء جيرالد أبيل في عام 1979 مع واحد من أبسط وأكثر المؤشرات المتاحة فعالية. إنه يحول اثنين من مؤشرات EMA الاتجاه إلى مذبذب الزخم ويقدم أفضل ما في العالمين: تتبع الاتجاه والزخم. يتحدث تقريبا الماكد المدرج الاحصائي وهو مشتق من السعر. يتم رسمها في نظام إحداثيات جديد بدلاً من تراكب ويمثل بسطرين ورسم بياني واحد.

الانتقال المتوسط ​​التقارب التباعد (MACD)

لحساب خط MACD ، نحتاج إلى استبدال EMA الطويل من القصير ، هذا كل شيء. سوف EMA آخر من هذا الخط مع نافذة صغيرة تنتج خط الإشارة. يتم الحصول على الرسم البياني بالفرق بين النتيجتين السابقتين.

 function macd($close, wshort, wlong, wsig) { let line = pointwise((a, b) => a - b, ema($close, wshort), ema($close, wlong)); let signal = ema(line, wsig); let hist = pointwise((a, b) => a - b, line, signal); return { line : line, signal : signal, hist : hist }; } 

مصفوفة الارتباط


إذا كنت مهتمًا بالاستثمار طويل الأجل وتحليل المحافظ ، فستجد مصفوفة الارتباط مفيدة.

 function cor(f, g) { let Ef = mean(f), Eg = mean(g); let Ef2 = mean(pointwise((a) => a * a, f)); let Eg2 = mean(pointwise((a) => a * a, g)); let Efg = mean(pointwise((a, b) => a * b, f, g)); return (Efg - Ef * Eg) / Math.sqrt((Ef2 - Ef * Ef) * (Eg2 - Eg * Eg)); } 

هنا مصفوفة الارتباط من مجموعات التشفير المختلفة في 2 الشهر.



اختبار وحدة المؤشر


إذا كان لدينا جداول دقيقة لقيم المؤشر ، يمكننا اختبار حسابنا بدقة. هناك عدة طرق لتحديد مقياس الخطأ بين الدالتين ، لكن في هذه الحالة يكون الخطأ التربيعي المتوسط ​​المقطوع مناسبًا بشكل أفضل لأنه كمية غير محددة على عكس RMSE وهو نسبي.

 mathrmNRMSE= اليسار. sqrt frac sum( hatxixi)2N middle/( maxxi minxi) right.

اليسار


على سبيل المثال ، يمكن أن تبلغ تكلفة البيتكوين 20،000 دولار ، والفرق في 10 دولارات صغير ، بينما عندما يكلف altcoin دولارًا واحدًا ويكون الفرق في 10 دولارات كبيرًا.

 function nrmse(f, g) { let sqrDiff = pointwise((a, b) => (a - b) * (a - b), f, g); return Math.sqrt(mean(sqrDiff)) / (Math.max(...f) - Math.min(...f)); } 

يمكننا أيضًا استخدام MAPE ولكنها ليست حتمية وتواجه مشكلة بالقرب من الصفر.

الخاتمة


هذا كل شيء. في بضعة سطور من التعليمات البرمجية يمكننا التعبير عن المؤشرات الفنية الأساسية ، إذا كنت تحب هذا التوضيح ، فتحقق من مكتبتي على جيثب. هناك يمكنك أن تجد أكثر من ذلك بكثير. إذا كنت ترغب في استخدام بعض خوارزميات التعلم الآلي لبرنامج الروبوت الخاص بك ، فافحص مؤشر Zig-Zag كنقاط دخول.

المراجع


1. StockCharts - قائمة الخوارزميات مع بيانات الاختبار في الجداول.
2. Cryptowatch - معلمات ضبطها بشكل جيد من المؤشرات.
3. جيثب - شفرة المصدر الخاصة بي.

ملاحظة: إذا وجدت أي أخطاء في النص من فضلك قل لي مباشرة.

Source: https://habr.com/ru/post/ar440090/


All Articles