معلومات جيدة جدا ، CockeyedCowboy. شكرا لجهودك! كلاكما أنت و rooicol معالجات MT4!Originally Posted by ;
معلومات جيدة جدا ، CockeyedCowboy. شكرا لجهودك! كلاكما أنت و rooicol معالجات MT4!Originally Posted by ;
هذا مثير للفضول ، لم أفكر في ذلك من قبل ، لقد افترضت بشكل غامض أنه فعل ذلك نوعًا ما في وقت واحد ، لكنني أعتقد أنه يعمل في طريقه بترتيب تسلسلي. يمكن أن تكون هذه معلومات مفيدة حول GlobalVariableSet () و FileWrite () ، في حالة وجود مخططات أخرى تقوم بتشغيل GlobalVariableGet () و FileRead ().Originally Posted by ;
Zznbrm شكرًا على الدرس اليوم ، هناك عدد قليل من الأشخاص سأفحص الكود الخاص بهم ، الرمز الخاص بك. ... ما أفهمه لكيفية عمل التصميمات الداخلية في MT هو أن جميع الأجزاء الداخلية تعمل على أساسها تستدعي MT الخيط الرئيسي مع النظام الأساسي ، وتعمل EAs والنصوص على مؤشر الترابط. لا تحصل المستشارين الخبراء على علامات في كل مرة ولكن قم بعمل نسخة من البيانات من الخيط للتشغيل عليها. هذا هو السبب في أنك إذا قمت بتشغيل برنامج نصي في حلقة واستخدامه للتداول ، فيجب عليك استخدام وظيفة refresshrate (). أو لن يرى البرنامج النصي أي بيانات جديدة. عندما يقوم EA أو Script باستدعاء indior مع ميزة iCustom ، فإنه في الواقع يقوم بتحميل نسخة ثانية من indior على الجزء الخلفي من EAs ، وبالتالي كلما استدعى EA أكثر كلما تم تحميل المزيد من الكود على الجزء الخلفي من EA كلما كان أبطأ سيتم تشغيله ، لا يتم الوصول إلى إندور الموجود على الرسم البياني بواسطة المستشار الخبير. كل ذلك حتى أكتشف أنك قادر على فتح مخططين باستخدام نفس الرمز وجميع الأجزاء الداخلية نفسها في كل نافذة. تتم ترقية نافذة واحدة فقط في وقت واحد ، ويتم تشغيل النافذة التي تستخدم شريط العنوان المضاء مع تشغيل النوافذ الأخرى بترتيب z واحدًا في وقت واحد. لقد قمت بتحميل نافذتين باستخدام التعليمات البرمجية لإبطاء التنفيذ ، للتحقق من ذلك. كيت
أنا سعيد لأنك عملت بها. فيما يتعلق بالبرمجة والتداول ، أتعلم شيئًا جديدًا في كل لحظة.Originally Posted by ;
نعم ، أنت محق تمامًا. قد تستغرق هذه الأجزاء الداخلية السهلة 1 مللي ثانية لمعالجة القراد. أفضل تخميني هو أن هناك معالجة MT4 داخلية أخرى (تحدث قبلبعد تنفيذ وظائف بدء التشغيل الداخلي لدينا) والتي تسبب التأخير في معالجة العلامات الجديدة. من الصعب التكهن دون رؤية رمز MT4 الداخلي. من المحتمل أن يتم استلام العلامات الواردة عبر نوع من قائمة انتظار الرسائل. أعتقد أن التصميمات الداخلية في خيط تنفيذها. غير متأكد بشأن المستشارين الخبراء. بالنسبة للديكورات الداخليةالمستشارين الخبراء ، من المحتمل أن يكون هناك حد أدنى لمقدار النفقات العامة المرتبطة بمعالجة كل علامة (خارج وظيفة البداية الخاصة بنا). يمكن أن يكون هذا الحمل 10 مللي ثانية أو 100 مللي ثانية حسب تعقيد المخططات. أراهن أن موقع mql4.com يحتوي على بعض المعلومات حول الأشياء التي تحدث لكل علامة واردة. بغض النظر ، أراهن أن الإجابة موجودة في مكان ما. . . ولكن من المرجح أن يكون الشرح تقنيًا للغاية ويستلزم قوائم انتظار للرسائل وإجراءات فرديةمتعددة الخيوط وهو أمر يفوق فهمي لـ MT4.Originally Posted by ;
نعم ، بمجرد إرفاقه ، يقوم الغرض الاستثنائي int init () بتعيين gadblVolume [0] إلى 0. يقوم بذلك مرة واحدة فقط. ثم يضيفها. عندما يتم إنشاء شمعة جديدة ، يتم تعيين gadblVolume [0] مرة أخرى إلى 0 مرة أخرى (يقوم MT بهذا كما ذكرت في منشور لاحق) ، ثم يبدأ في العد 1 على كل علامة. جميلة؛ لكني لا أرى الهدف من فهم عدد القراد التي لا تحصل عليها MT دون أن أفهم أنها لا تتلقاهاOriginally Posted by ;
شكرا لك ، سعيد أنك استمتعت بهم!Originally Posted by ;
هذا جيد ، لا تقلق.Originally Posted by ;
نعم ، لدي واحدة من هؤلاء أيضًا ، ببساطة لم أعتقد أن معظم الناس سيفكرون في الأمر. لقد فعلت ذلك بشكل مختلف قليلاً ، لأنه أكثر ذوقًا إلى حد ما على الرغم من أنني معجب بك اليوم. هذا هو بالضبط ما يبدو لي: رمز مدرج # ملكية حقوق النشر مشفر بواسطة: -RRB- #property indior_chart_window int start () static int TickCount؛ ثابت التاريخ والوقت CandleOpenTime ؛ إذا (CandleOpenTime!) = الوقت # 91 ؛ 0 # 93 ؛ -RRB- CandleOpenTime = الوقت # 91 ؛ 0 # 93 ؛؛ TickCount = 0 ؛ TickCount ؛ مزدوج PercentageProcessed = (TickCountVolume # 91؛ 0 # 93؛ -RRB- * 100؛ تعليق (DoubleToStr (PercentageProcessed، 1)،٪)؛ return (0)؛ ومع ذلك لا أعتقد أن سبب معالجة كمية التجزئة كن السبب الذي ذكرته (يتم تجاهل العلامات الواردة أثناء تنفيذ وظيفة معينة تبدأ ()). هذا ضئيل للغاية. حتى إذا قمت بعمل حلقة ، والسماح لها بتشغيل الكود 10000 مرة لكل علامة ، ووقتها لإنجاز ذلك ، يستغرق الأمر حوالي 200 مللي ثانية: رمز مُدرج # ملكية حقوق النشر مشفرة بواسطة: -RRB- #property indior_chart_window int start () int ms1 = GetTickCount () ؛ لـ (int I = 0 ؛ ilt؛ 10000؛ I ) int static int TickCount ؛ ثابت التاريخ والوقت CandleOpenTime ؛ إذا (CandleOpenTime!) = الوقت # 91 ؛ 0 # 93 ؛ -RRB- CandleOpenTime = الوقت # 91 ؛ 0 # 93 ؛ ؛ TickCount = 0 ؛ TickCount ؛ النسبة المئوية المزدوجة = (TickCountVolume # 91 ؛ 0 # 93 ؛ -RRB- * 100 ؛ تعليق (DoubleToStr (النسبة المئوية المعالجة ، 1 ) ،٪) ؛ int ms2 = GetTickCount () ، مدة int = ms2-ms1 ؛ التعليق (المدة) ؛ عودة (0) ؛ يأخذ هذا الرمز أعلاه جهاز الكمبيوتر الخاص بي حوالي 200 مللي ثانية ، وبالتالي 2/100 مللي ثانية لكل تكرار. أعتقد أنه من غير المحتمل أن يصل العديد من القراد حاليًا خلال هذه النافذة الصغيرة. أريد أن أعرف لماذا هو المجلد []! عدد القراد.Originally Posted by ;
Zznbrm See قلت في مقالتي الأولى ، إنك أفضل مبرمج ؛ أفتقد القارب تمامًا مع هذا. يبدو أنك لست مضطرًا إلى التخلص من القمامة أن المخازن المؤقتة للوفاء بها MT تفعل هذا لنا. شاهد كل مربع الحوار هذا الذي يمكن للمرء أن يتعلمه من أجل ذلك ، لقد أضفت نصوص الطباعة لملاحظة متى يفتح شريط جديد ، سيعيد MT نقل البيانات مرة أخرى. وهنا كنت أكتب حلقات من أجل لا شيء. كيت
نعم ، هذا صحيح.Originally Posted by ;
حسنًا ، لا أعرف بالضبط ماذا أقول لك. . . إنه يعمل بالضبط بالطريقة التي يجب أن يعمل بها بالنسبة لي. أضف indior إلى مخطط M1 وأنا واثق من أنك سترى أنه يحسب التكات لكل شريط كما هو متوقع.Originally Posted by ;
حسنًا ، دعنا نزيل جزء الرسم البياني. لا يزال الأمر غير صحيح ، فإن استدعاء الدور 'SetIndexEmptyValue ()' يعيّن فقط قيمة المخزن المؤقت عندما لا يكون له قيمة ، إلى جانب وظيفة init () التي يتم تنفيذها مرة واحدة فقط في بداية البرنامج. هناك بعد تشغيل وظيفة start () فقط ، حتى توقفها ، سيعمل deinit () عند المغادرة ، ولكن عند تشغيل هذا الرمز ، فإن الشيء الوحيد الذي تقوم به وظيفة start () هو إضافتك إلى العنصر الصفري في المخزن المؤقت على كل علامة ، فإنه لا يفرغ هذا المكون أبدًا في كل مرة يتم فيها فتح شريط جديد ، لذا فإن ما يعده هو كل علامة تصل إلى بداية البرنامج. وتستمر في الإضافة حتى تتوقف. لذلك لا تحصل على عدد حقيقي من القراد لكل شريط تصبح تكاتًا أثناء وجود البرنامج ، Keit
rooicol - آسف للتسريب. سيتم حذف أي من هذه المنشورات أو جميعها إذا كنت ترغب في ذلك. CockeyedCowboy - حسنًا ... أرى ما تقوله اليوم. لا يتم استخدام الرسم البياني لهذا التمرين. . . البيانات العازلة هي القطعة المهمة. لقد قمت ببساطة بنسخ داخلي قديم (بكل بساطة) قام برسم مدرج تكراري ، لكنني لم أستمع إليه على الإطلاق. أيضا ، لا يهم التاريخ بالنسبة لهذا الداخل. نظرًا لعدم وجود خلفية محددة على الإطلاق في MT4 ، فإن أي بيانات سابقة لا علاقة لها بالموضوع. الآن ، على سؤالك الأساسي (على ما أعتقد) حول التخلص من المخزن المؤقت لحانة جديدة. يدير هذا السطر في init أن: SetIndexEmptyValue (0، 0.0)؛ مع عدم وجود سطر ، تتم تهيئة قيمة المخزن المؤقت لكل شريط جديد إلى القيمة التي يبدو أنها القيمة القصوى للعدد الصحيح. ولكن مع وجود هذا السطر هناك ، تتم تهيئة قيمة المخزن المؤقت لكل شريط جديد إلى الصفر. هل هذه هي الطريقة الصحيحة لتهيئة كل حانة؟ لا ، ولكن مع هذا التمرين يبدو أنه يؤدي المهمة. لا نتحدث هنا عن تصميم داخلي جاهز للإنتاج. هذا مجرد مؤشر بسيط لاختبار شيء ما بسرعة. يمكنك إزالة مكون الرسم البياني منه وتشغيل هذا الكود فقط: رمز مدرج #property indior_chart_window #property indior_buffers 1 double gadblVolume # 91؛ # 93 ؛؛ int init () IndiorShortName (LiveVolume) ؛ IndiorDigits (0) ؛ SetIndexBuffer (0، gadblVolume) ؛ SetIndexLabel (0 ، حجم مباشر) ؛ SetIndexStyle (0، DRAW_NONE) ، SetIndexEmptyValue (0، 0.0) ، عودة (0) ؛ int start () gadblVolumeNumber 91 ؛ 0 # 93 ؛ = 1.0 ؛ عودة (0) ؛Originally Posted by ;