كيفية برمجة مؤشر باستخدام OBV و MA الخاص به؟
Results 1 to 9 of 9

Thread: كيفية برمجة مؤشر باستخدام OBV و MA الخاص به؟

  1. #1
    4 مرفق (مرفقات) مرحبًا بالجميع ،

    أنا مبتدئ في برمجة MQL4 ولدي بعض المعرفة في لغات البرمجة الأخرى. لقد كنت أعاني من هذا الرمز الذي يبدو سهلاً والذي أرفقته أدناه. ما أرغب في تحقيقه بشكل أساسي هو وجود مؤشر OBV (On Balance Volume) مع متوسط ​​متحرك (SMA أو EMA أو SMMA أو LWMA) في نافذة مؤشر منفصلة في أسفل الرسم البياني. هكذا يجب أن تبدو كما يلي:


    لقد استخدمت OBV.mq4 كبداية وبدأت في بناء الكود تدريجيًا: أضفت وظيفتي SetIndexBuffer و SetIndexStyle في init () للمخزن المؤقت الثاني الذي سيحتفظ بقيم MA الخاصة بي ، وأنشأت حلقة تبدو للخلف MA_period = 200 وحدة زمنية في الماضي ، تأخذ قيم OBV لتلك ، وتضعها جميعًا في مصفوفة OBV_vals ، ثم تستخدم وظيفة iMAOnArray () للحصول على SMA أو EMA أو SMMA أو LWMA. لقد وضعت قيمة المتوسط ​​المتحرك التي أرجعها iMAOnArray () في MABuffer على أمل أن تظهر في نافذة المؤشر. تمكنت من الحصول على كل شيء حتى السطر الذي أحفظ فيه المتوسطات المتحركة في المخزن المؤقت. لدي قيم ماجستير ، لقد طبعتها في المجلة وبدت صالحة. ومع ذلك ، في اللحظة التي ألغيت فيها التعليق على السطر MABuffer [i] = nOBVMA بقصد إظهار قيم المتوسطات المتحركة هذه على شاشة المؤشر ، يتلف كل شيء كما ترى في هذه الصورة:


    من المثير للاهتمام ، مع تعليق سطر MABuffer [i] = nOBVMA ، فإن OBV يعمل بشكل جيد:


    ها هو مقتطف الشفرة ولكني أرفقت أيضًا الكود الكامل أدناه.
    رمز مدرج/حلقة بالنظر إلى الوراء MA_period = 200 فترة وأخذ/قيم OBV المقابلة لتلك الشموع لـ (int j = 1؛ jlt؛ = MA_period؛ j ) {nOBV_vals # 91؛ j-1 # 93؛ = iOBV (NULL، 0، PRICE_CLOSE، i j) ؛ }/باستخدام مصفوفة nOBV_vals المأهولة حديثًا ،/يحسب هذا السطر MA nOBVMA = iMAOnArray (nOBV_vals، 0، MA_period، 0، MA_method، i)؛/اطبع قيمة المتوسط ​​المتحرك Print (قيمة OBV EMA هي DoubleToStr (nOBVMA)) ؛/أضف MA إلى MABuffer بحيث يظهر في نافذة المؤشر/عندما يتم تمكين هذا الخط ، حتى بيانات OBVBuffer تتلف! مابوفر # 91 ؛ أنا # 93 ؛ = nOBVMA ؛
    إذا استطاع أحد أن يساعد مبتدئًا متحمسًا ، فسأكون ممتنًا للغاية!
    إذا كان لديك أي ملاحظات أخرى تتبادر إلى أذهانك عند النظر في مشكلتي ، فالرجاء عدم التردد في المشاركة ، فأنا مصمم حقًا على تحسين مهارات الترميز الخاصة بي في MQL4 بأسرع ما يمكن وبكفاءة.

    ملاحظة: أدرك أنه يمكنني إضافة متوسط ​​متحرك إلى مؤشر OBV على MetaTrader. ومع ذلك ، فإن OBV مع MA سيكون جزءًا من EA في المستقبل الذي أخطط لبرمجته ، وبالتالي أحتاج إلى مؤشر مع OBV و MA للمخازن المؤقتة لتمريره إلى بقية EA لاحقًا.

    شكرا جزيلا لتقديم مساعدتكم!

    https://www.forexdrop.com/attachment...2255590709.mq4

  2. #2
    2 المرفقات والنصر! تمكنت من حلها! المؤشر الموجود في الأعلى هو مؤشري ، والمؤشر الموجود في الأسفل هو MT4 الافتراضي.
    والمثير للدهشة أن الأمر كان في الواقع أسهل مما كنت أتخيله. فقط اثنان للحلقات. من المهم أيضًا أنه في وقت سابق ، وضعت كل شيء عن طريق الخطأ في حلقة for واحدة. كان السر هو وضع جميع قيم OBV في مصفوفة واحدة ثم استخدام iMAOnArray () على جميع قيم OBV في حلقة for ثانية. أترك الكود الخاص بي هنا أدناه ، ربما يحتاج شخص ما إلى OBV مع MA في المستقبل.

    https://www.forexdrop.com/attachment...8216145924.mq4

  3. #3
    2 مرفق (مرفقات) أوقعي ، فلدي بعض الأخبار السارة. كنت أشك في أن رمز OBV الأصلي ربما لم يكن صحيحًا تمامًا ، لذلك قمت بتنزيل رمز آخر وأعدت العملية بأكملها ، وأضفت سطورًا واحدة تلو الأخرى ، وقمت بالتجميع والتشغيل والتحقق مما إذا كان كل شيء لا يزال منطقيًا. هكذا وصلت إلى هنا: تبدو أفضل بكثير الآن ، أخبار جيدة أن MABuffer يعمل بشكل جيد أيضًا! في هذه الصورة ، يكون المؤشر السفلي هو On Balance Volume الافتراضي مع إرفاق 200 EMA والمؤشر العلوي هو المكان الذي يقف عنده المؤشر المبرمج.
    أشعر نوعًا ما بأن المشكلة تكمن في مكان ما في مقتطف الشفرة أدناه ، على الرغم من أنني لا أستطيع أن أفهم سبب عدم قيامها بما أتمناه. يرتفع خط MA في مؤشري من 0 إلى 400000 تقريبًا (وهو ما يقرب من النطاق الصحيح) عند الشمعة 200 وهو ما يعادل MA_period ... تم إرفاق الكود المحدث بالكامل أدناه. تم إدراج الرمز nLimit = Bars-nCountedBars-1 ؛ لـ (i = nLimit؛ igt؛ = 0؛ i--) {for (int j = 1؛ jlt؛ = MA_period؛ j ) {nOBV_vals # 91؛ j-1 # 93؛ = iOBV (NULL، 0، PRICE_CLOSE، i j) ؛ } nOBVMA = iMAOnArray (nOBV_vals، 0، MA_period، 0، MA_method، i) ؛ مابوفر # 91 ؛ أنا # 93 ؛ = nOBVMA ؛ }
    https://www.forexdrop.com/attachment...1031865325.mq4

  4. #4
    Quote Originally Posted by ;
    {quote} نعم ، لحسن الحظ تمكنت من إحراز الكثير من التقدم منذ ذلك الحين وحصلت على iMAOnArray () يعمل ولكن اصطدمت بجدار مع المخازن المؤقتة. شكرًا لرموز MA ، سأحاول دمجها في كود OBV-MA الخاص بي ومعرفة ما إذا كان يقود إلى مكان آخر
    لذلك يتم تعديل العرض فقط. إذا نظرت إلى قيم الطباعة الخاصة بك عند التعليق على MABuffer ثم نظرت عند عدم التعليق ، فهي متشابهة وقيم OBV هي نفسها. ربما تحتاج إلى القيام ببعض التحجيم الخطي؟

  5. #5
    Quote Originally Posted by ;
    {quote} كنت أتذكر من الموضوع الآخر الذي قلته أنه لم يُرجع سوى صفر.
    نعم ، لحسن الحظ تمكنت من تحقيق الكثير من التقدم منذ ذلك الحين وحصلت على iMAOnArray () يعمل ولكن اصطدمت بجدار مع المخازن المؤقتة. شكرًا لرموز MA ، سأحاول دمجها في كود OBV-MA الخاص بي ومعرفة ما إذا كان يقود إلى مكان آخر

  6. #6

    Quote Originally Posted by ;
    {quote} مرحبًا ، بالنسبة لـ SMA ، الأمر سهل ولكن بالنسبة لـ EMA و SMMA و LWMA أيضًا؟ بالإضافة إلى ذلك ، لا أشعر أن أفضل إستراتيجية هي تجنب استخدام وظيفة iMAOnArray تمامًا لأنها وظيفة شائعة جدًا وتعيد القيم بالفعل.
    يا سيئ ، كنت أتذكر من الخيط الآخر الذي قلته إنه لم يعيد سوى الصفر. فيما يلي أكواد mql MA ، لكن ليس أكواد OnArray: الرمز المدرج/ -------------------------------- ---------------------------------- /| المتوسط ​​المتحرك البسيط |/ ----------------------------------------------- ------------------- double SimpleMA (موضع const int ، فترة const int ، سعر const مزدوج # 91 ؛ # 93 ؛) {//--- نتيجة مزدوجة = 0.0 ؛/--- تحقق من المركز إذا (positiongt؛ = period-1 periodgt؛ 0) {//--- حساب قيمة (int i = 0؛ ilt؛ period؛ i ) result = price # 91؛ position-i # 93 ؛ ؛ النتيجة= فترة ؛ }/--- إرجاع (نتيجة) ؛ }/ ---------------------------------------------- -------------------- /| المتوسط ​​المتحرك الأسي |/ ----------------------------------------------- ------------------- مزدوج أسي (موضع ثابت ثابت ، فترة كثافة ثابتة ، قيمة ثابتة مضاعفة prev_value ، سعر ثابت مزدوج # 91 ؛ # 93 ؛) {//- - نتيجة مزدوجة = 0.0 ؛/--- حساب القيمة إذا (periodgt؛ 0) {double pr = 2.0(period 1.0)؛ النتيجة = السعر # 91 ؛ المركز # 93 ؛ * العلاقات العامة prev_value * (1-العلاقات العامة) ؛ }/--- إرجاع (نتيجة) ؛ }/ ---------------------------------------------- -------------------- /| المتوسط ​​المتحرك السلس |/ ----------------------------------------------- ------------------- double SmoothedMA (موضع ثابت ، فترة كثافة ثابتة ، قيمة ثابتة مضاعفة prev_value ، سعر ثابت مزدوج # 91 ؛ # 93 ؛) {//- - نتيجة مزدوجة = 0.0 ؛/--- تحقق من المركز إذا (periodgt؛ 0) {if (position == period-1) {for (int i = 0؛ ilt؛ period؛ i ) result = price # 91؛ position-i # 93 ؛؛ النتيجة= فترة ؛ } إذا كانت (positiongt؛ = period) النتيجة = (prev_value * (period-1) price # 91؛ position # 93؛)period؛ }/--- إرجاع (نتيجة) ؛ }/ ---------------------------------------------- -------------------- /| المتوسط ​​المتحرك الخطي المرجح |/ ----------------------------------------------- ------------------- double LinearWeightedMA (موضع ثابت ، فترة كثافة ثابتة ، سعر ثابت مزدوج # 91 ؛ # 93 ؛) {//--- نتيجة مزدوجة = 0.0 ، المجموع = 0.0 ؛ int أنا ، wsum = 0 ؛/--- احسب القيمة إذا (positiongt؛ = period-1 periodgt؛ 0) {for (i = period؛ igt؛ 0؛ i--) {wsum = i؛ المجموع = السعر # 91 ؛ الموضع- i 1 # 93 ؛ * (الفترة- i 1) ؛ } النتيجة = sumwsum ؛ }/--- إرجاع (نتيجة) ؛ }

  7. #7

    Quote Originally Posted by ;
    مرحبًا بالجميع ، أنا مبتدئ في برمجة MQL4 ولدي بعض المعرفة في لغات البرمجة الأخرى. لقد كنت أعاني من هذا الرمز الذي يبدو سهلاً والذي أرفقته أدناه. ما أرغب في تحقيقه بشكل أساسي هو وجود مؤشر OBV (On Balance Volume) مع متوسط ​​متحرك (SMA أو EMA أو SMMA أو LWMA) في نافذة مؤشر منفصلة في أسفل الرسم البياني. هذا هو الشكل الذي يجب أن يبدو عليه: {image} لقد استخدمت OBV.mq4 كبداية وبدأت في بناء الكود تدريجيًا: أضفت وظائف SetIndexBuffer و SetIndexStyle في init () للمرة الثانية ...
    بدلاً من iMAOnArray ، يمكنك حساب قيم MA بنفسك. يحتوي مجلد التضمين الخاص بتثبيت MT4 على رمز يمكنك استخدامه ، مثل حسابات MA.

  8. #8

    Quote Originally Posted by ;
    {quote} بدلاً من iMAOnArray ، يمكنك حساب قيم MA بنفسك. يحتوي مجلد التضمين الخاص بتثبيت MT4 على رمز يمكنك استخدامه ، مثل حسابات MA.
    مرحبًا Beerrun ، بالنسبة لـ SMA ، الأمر سهل ولكن بالنسبة لـ EMA و SMMA و LWMA أيضًا؟ بالإضافة إلى ذلك ، لا أشعر أن أفضل إستراتيجية هي تجنب استخدام وظيفة iMAOnArray تمامًا لأنها وظيفة شائعة جدًا وتعيد القيم بالفعل.

  9. #9
    @ levix95 شكرا جزيلا على هذا OBV MA indi !!!! هل لي أن أزعجك بإضافة متوسط ​​متحرك آخر ، بحيث يكون هناك اثنان ؟؟؟ أقوم بمخططات لفروة الرأس M1 ، وأعتقد أن 200MA مع 34MA سريع مع OBV سيكملان نظام التداول الخاص بي ، من فضلك كبيرة جدًا؟ شكرًا مقدمًا PS في نوع الحقل MA ، nrs 1 إلى 4 ، أعتبر أنه في نفس التسلسل كما هو الحال في جميع MT4 Indies الأخرى؟

أذونات النشر

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  
  • رمز BB مفعل
  • الابتسامات مفعلة
  • رمز[IMG] مفعل
  • رمز [VIDEO] مفعل
  • رمز HTML غير مفعل
This website uses cookies
We use cookies to store session information to facilitate remembering your login information, to allow you to save website preferences, to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners.