اعلانات المواقع والشركات

الترند المكسور في سباق "المضاعفات"  
[ 1 من 10 ] [ الكاتب : أبو عبد الله ] [ آخر مشاركة : أبو عبد الله ] [ عدد الزوار : 48465 ] [ عدد الردود : 933 ]
اكسبرت يضاعف راس المال 3 مرات  
[ 2 من 10 ] [ الكاتب : shael alashour ] [ آخر مشاركة : aksa85 ] [ عدد الزوار : 8098 ] [ عدد الردود : 214 ]
الهارمونيك طريقك للمليون بإذن الله  
[ 3 من 10 ] [ الكاتب : ناشيء الفوركس ] [ آخر مشاركة : الزلزال ] [ عدد الزوار : 172554 ] [ عدد الردود : 6650 ]
@@ توصيــــــــــات يوميــــــــــــه على الباونـــد / دولار @@  
[ 4 من 10 ] [ الكاتب : ماجد ،،،، ] [ آخر مشاركة : mu7amd ] [ عدد الزوار : 572622 ] [ عدد الردود : 13299 ]
برنامج MetaStock FX  
[ 5 من 10 ] [ الكاتب : ساحه الفوركس ] [ آخر مشاركة : سمير صيام ] [ عدد الزوار : 11 ] [ عدد الردود : 1 ]
صوتوا لضم مصر  
[ 6 من 10 ] [ الكاتب : mohsen224 ] [ آخر مشاركة : Misho Elmasri ] [ عدد الزوار : 115 ] [ عدد الردود : 12 ]
الـــيـــــورو مـــــع أبـــو الـعــــــــربــي غــيــــــر  
[ 7 من 10 ] [ الكاتب : أبو العربي ] [ آخر مشاركة : إسلام1983 ] [ عدد الزوار : 56 ] [ عدد الردود : 4 ]
الباوند دولار الاتجاه المتوقع له  
[ 8 من 10 ] [ الكاتب : aljameel ] [ آخر مشاركة : rann ] [ عدد الزوار : 1507 ] [ عدد الردود : 78 ]
اخي طارق حسين  
[ 9 من 10 ] [ الكاتب : حماده يلعب ] [ آخر مشاركة : طارق حسين ] [ عدد الزوار : 77 ] [ عدد الردود : 6 ]
توصيات بن واصل السديراوي  
[ 10 من 10 ] [ الكاتب : user0101 ] [ آخر مشاركة : ashehri ] [ عدد الزوار : 20071 ] [ عدد الردود : 428 ]

اعلانات منتجات وخدمات المتداول العربي

العودة   منتديات المتداول العربي > مـنـتـديــات الـمـتـداول الـعـربي > منتدى المؤشرات والاكسبيرتات والبرمجة Indicators & Experts Advisors
التسجيل مركز رفع الملفات الأسئلة الشائعة التقويم اجعل كافة المشاركات مقروءة

رد
 
LinkBack أدوات الموضوع
قديم 22-01-2008, 02:42 AM   #106 (permalink)
معلومات العضو
مشرف الإكسبيرتات والمؤشرات
 
الصورة الرمزية وضاح عطار

إحصائية العضو
افتراضي رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف

بسم الله الرحمن الرحيم

هذا الدرس سيخصص بالكامل لشرح الوظائف الرسومية والتي مهمتها التعامل مع الكائنات Objects الرسومية التي يمكن لنا وضعها أو رسمها على الشارت مباشرة وتعديل موقعها والبيانات التي تظهرها.

الكائنات الرسومية هي ( مع أسمائها البرمجية ) :

- الخط العمودي OBJ_VLINE:
وهو عبارة عن خط عمودي على كامل الشارت له خصائص مثل اللون والسماكة وطريقة رسم الخط هل هو منقط أو متصل وهكذا.

وهو يحتاج فقط إلى معرفة الزمن الذي سيرسم عليه الخط العمودي.

- الخط الأفقي OBJ_HLINE:
وهو عبارة عن خط أفقي يرسم على كامل الشارت وله مثل خصائص الخط العمودي أعلاه.

وهو يحتاج فقط إلى السعر الذي سيرسم عليه الخط الأفقي.

- الخط المائل OBJ_TREND:
وهو خط الترند المعروف ويتم تحديده بنقطتين فقط. بحيث يكون لكل نقطة زمن وسعر.

وله أيضا نفس الخصائص الرسومية السابقة.

كما أن له أيضا خاصية جديدة هي Ray والتي تأخذ قيمتين هما true أو false.

في حال كانت true فإن خط الترند يرسم حتى يخرج من حدود الشارت.

في حال كانت false فإن خط الترند يرسم فقط بين النقطتين المحددتين.

- الخط المائل بزاوية OBJ_TRENDBYANGLE:
وهو مشابه للترند السابق ولكنه يرسم من نقطة واحدة فقط مع إعطائه زاوية معينة.

- نسب فيبوناتشي OBJ_FIBO:
وهي كائن فيبوناتشي المعروفة وترسم بتحديد نقطين فقط. وسيظهر الكائن على الشارت وفق الإعدادات الإفتراضية لمستوياته.

مع إمكانية التحكم بهذه المستويات برمجيا كما سنرى بعد قليل.

- المستطيل OBJ_RECTANGLE:
يتم رسم مستطيل على الشارت بتحديد نقطتين فقط بحيث تكون كل نقطة زمن وسعر.

- المثلث OBJ_TRIANGLE:
يتم رسم مثلث على الشارت بتحديد ثلاث نقط.

- القطع الناقص OBJ_ELLIPSE:
يتم رسمه بتحديد نقطتين فقط.

- الدائرة OBJ_CYCLES:
يتم رسمها أيضا بتحديد نقطتين فقط.

- أسهم أو أشكال أخرى OBJ_ARROW:
يمكن بواسطة هذا الشكل رسم أسهم لفوق أو لتحت أو إشارات مثل يد لتحت أو يد لفوق أو إشارة صح أو اشارة خطأ أو مستطيل صغير يظهر السعر الحالي.

يتم تحديد نوع السهم بواسطة رقم خاص بكل نوع.

هذه الأسهم والأشكال مختلفة عن أسهم المؤشرات المتعارف عليها في رسم أسهم المؤشرات.

لأن هذه الأسهم والإشارات هي كائنات رسومية ترسم بشكل خاص ولها اسم وموقع وصفات أخرى.

يعني هذه الأسهم والإشارات هي كائنات رسومية مثلها مثل الترند والمستطيل فانتبه لهذا الفرق.


- مربع نص OBJ_TEXT:
لرسمه نحتاج فقط إلى نقطة واحدة مكونة من زمن وسعر. حيث دائما الزمن يكون محور X والسعر هو محور Y.



كل الكائنات الرسومية السابقة تعتمد على نقاط تموضع على الشارت مكونة من زمن X وسعر Y.

وهذه الكائنات تتحرك مع الشارت يمينا ويسارا كما أنها تكبر بتصغير الفريم وتصغر بتكبير الفريم.

هناك نوع أخير لا يتحرك مع الشارت ويبقى ثابتا عليه مهما حركنا الشارت يمينا أو يسارا أو مهما غيرنا نوع الفريم المستخدم وهو:

- بطاقة نص OBJ_LABEL:
لرسم هذه البطاقة التي تظهر لنا نصا داخلها بلون وخط محددين فإننا نحتاج إلى تحديد X و Y لها بالبيكسل.

والبيكسل هو أصغر نقطة ضوئية على الشاشة بالدقة المحددة مثلا 1024 × 768 بيكسل.

والنقطة صفر × صفر هي النقطة اليسارية العلوية من نافذة الشارت.

أي أن مبدأ الاحدائيات هو من الزاوية اليسارية العلوية لنافذة الشارت.

وكلما زدنا القيمة بالموجب فإن النقطة تنزل إلى الأسفل وتقترب من اليمين أكثر.

نستفيد من هذا الكائن لعرض معلومات نصية ثابتة على الشارت
وهذه المعلومات ستظل ثابتة على الشارت مهما غيرنا الفريم المستخدم أو أزحنا السعر إلى اليمين أو اليسار.

وهو حل جيد لمشكلة Comment التي واجهناها في السابق.

يوجد كائنات رسومية أخرى مثل مراوح فيبوناتشي وقنوات فيبوناتشي والقناة السعرية وغيرها من الكائنات الأخرى الموجودة في برنامج التداول.

يمكن التمرن الآن على الكائنات الرسومية من خلال برنامج التداول ومعرفة خصائص كل كائن رسومي من خلال برنامج التداول نفسه.

وسنرى بعد قليل كيف نستطيع جعل مؤشرنا يقوم برسم هذه الكائنات على الشارت آليا وفق آلية معينة

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

التوقيع

________________
لا إله إلا الله محمد رسول الله
________________

وضاح عطار غير متواجد حالياً   رد باقتباس
قديم 22-01-2008, 02:49 AM   #107 (permalink)
معلومات العضو
مشرف الإكسبيرتات والمؤشرات
 
الصورة الرمزية وضاح عطار

إحصائية العضو
افتراضي رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف

شرح الوظائف المستخدمة مع الكائنات الرسومية:

إن أهم وظيفة سوف نستخدمها هي الوظيفة ObjectCreate والتي من خلالها نستطيع رسم أي كائن رسومي من الأنواع التي شرحناها سابقا على الشارت.


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

تستخدم الوظيفة ObjectCreate كالتالي:

كود PHP:
bool ObjectCreate(string nameint typeint windowdatetime time1double price1datetime time2=0double price2=0datetime time3=0double price3=0
البارامتر الأول هو اسم الكائن الرسومي البرمجي والذي من خلاله نستطيع تعديل صفاته الرسومية أو تغيير مكانه أو حتى حذفه.

وهو كما قلنا يجب ان يكون فريدا أي غير مكرر.


البارامتر الثاني هو نوع الكائن الرسومي الذي نريد رسمه على الشارت وهو أحد الأنواع المشروحة سابقا.

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

البارامترات الستة الباقية هو نقاط تمركز وتموضع هذا الكائن على الشارت.

يجب إدخال نقطة تموضع واحدة على الأقل لأي كائن رسومي.

وكما وجدنا سابقا فإن أي كائن رسومي قد يحتاج لنقطة واحدة أو اثنتين أو ثلاثة معا حسب نوعه.

في حال نجحت الوظيفة في رسم الكائن المطلوب فإنها تعود بقيمة true أما إذا فشلت فإنها تعود بقيمة false.

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

مثال لرسم خط عمودي:

كود PHP:
if (ObjectCreate("VerLine1",OBJ_VLINE,0D'2007.07.25 12:30',0))
{
   ..... 
نجاح الوظيفة في رسم الخط العمودي
}
else
{
  Print(
"Cant Draw VLINE");

الكود السابق يعني ارسم خط عمودي باسم VerLine1 على النافذة الأساسية في التاريخ 2007.07.25 12:30

واستخدمنا الشرط لمعرفة هل نجحت الوظيفة في عملها أم لا.



مثال آخر لرسم الترند المرتكز على نقطتين:

كود PHP:
ObjectCreate("Trend1",OBJ_TREND,0,Time[0],Low[0],Time[10],High[9]); 
الكود السابق يرسم ترند باسم Trend1 على النافذة الأساسية من لو الشمعة الأخيرة إلى هاي الشمعة العاشرة.



الوظيفة ObjectDelete:


تقوم هذه الوظيفة بحذف الكائن الرسومي الموجود على الشارت وذلك من خلال اسمه.

وليس لهذه الوظيفة إلا بارامتر واحد هو اسم الكائن الذي نريد حذفه.

فمثلا الكود التالي يحذف الكائن الرسومي الذي اسمه Trend1.

كود PHP:
ObjectDelete("Trend1"); 
وهي تعود بقيمة true في حال نجحت في حذف الكائن أو false في حال فشلت.

والفشل يكون هنا في حال لم تعثر الوظيفة على كائن بهذا الاسم.



الوظيفة ObjectsDeleteAll:

هذه الوظيفة لها ثلاثة استخدامات:

1- تقوم هذه الوظيفة بحذف كل الكائنات الرسومية الموجودة على الشارت وذلك باستدعائها دون بارامترات مثل:

كود PHP:
ObjectsDeleteAll(); 
- أو حذف كل الكائنات الرسومية من نافذة محددة ( صفر للرئيسية ثم واحد للفرعية وهكذا )

فمثلا المثال التالي يحذف كل الكائنات الرسومية الموجودة على النافذة الفرعية الأولى:


كود PHP:
ObjectsDeleteAll(1); 
- أو حذف كل الكائنات الرسومية التي لها نوع محدد من النافذة المحددة.

فمثلا الكود التالي يحذف كل الترندات المرسومة على النافذة الرئيسية للشارت:


كود PHP:
ObjectsDeleteAll(0,OBJ_TREND); 
الوظيفة ObjectFind:

تستخدم للبحث عن الكائنات الرسومية عن طريق اسمها وتعيد لنا في حال عثورها على هذا الكائن رقم النافذة الموجود فيها.


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

في حال لم تجد الوظيفة الكائن الذي نبحث عنه فإنها تعيد لنا القيمة -1 والتي من خلالها نعرف أنه لا يوجد كائن رسومي بهذا الاسم.

فمثلا هذا الكود يبحث لنا عن الترند Trend1 ويخبرنا هل وجده أم لا.

كود PHP:
int wi=ObjectFind("Trend1");
if (
wi==-1)
{
  Print (
"الترند غير موجود");
}
else
{
  Print(
"الترند موجود على النافذة رقم  " ,wi);

الوظيفة ObjectTotal:

أي كائن رسومي يتم رسمه على الشارت يأخذ رقم يبدأ من الصفر.


بمعنى إن أول كائن رسومي مهما كان نوعه يتم رسمه على الشارت يأخذ الرقم صفر. وثاني كائن يأخذ رقم واحد وهكذا.

الوظيفة ObjectTotal تعطينا عدد الكائنات الرسومية الموجودة على الشارت.

إذا أردنا معرفة فقط عدد الترندات مثلا فإننا نحدد لهذه الوظيفة نوع الكائن الذي نريد عدده مثل الكود التالي:

كود PHP:
Print("عدد كل الكائنات " ObjectTotal());
Print(
"عدد الترندات فقط " ObjectTotal(OBJ_TREND)); 
الوظيفة ObjectType:

تعطينا هذه الوظيفة نوع الكائن الرسومي هل هو ترند أو خط أفقي مثلا من خلال اسمه.


فمثلا الكود التالي يعطينا نوع الكائن الرسومي الذي اسمه Line.

كود PHP:
Print(ObjectType("Line")); 

التوقيع

________________
لا إله إلا الله محمد رسول الله
________________

وضاح عطار غير متواجد حالياً   رد باقتباس
قديم 22-01-2008, 02:53 AM   #108 (permalink)
معلومات العضو
مشرف الإكسبيرتات والمؤشرات
 
الصورة الرمزية وضاح عطار

إحصائية العضو
افتراضي رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف

بقي شرح بسيط وننتهي من درس الكائنات الرسومية

الوظيفة ObjectSet :


هذه الوظيفة تقوم بتغيير مواصفات الكائن الرسومي على الشارت وتستخدم على الشكل التالي:

كود PHP:
bool ObjectSetstring nameint indexdouble value
البارامتر الأول هو اسم الكائن الرسومي الذي نريد تغيير إحدى خصائصه.

البارامتر الثاني هو رقم الخاصية التي نريد تغيير قيمتها.


البارامتر الثالث هي القيمة الجديدة للخاصية.

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

بل لكل نوع كائن هناك خصائص خاصة به فقط وقد لا تكون مشتركة مع الكائنات الأخرى.

كود PHP:
OBJPROP_PRICE1            1
لتغيير موقع الكائن السعري الأول
.
OBJPROP_TIME2              2
لتغيير موقع الكائن الزمني الثاني
.
OBJPROP_PRICE2            3
لتغيير موقع الكائن السعري الأول
.
OBJPROP_TIME3              4
لتغيير موقع الكائن الزمني الثالث
.
OBJPROP_PRICE3            5
لتغيير موقع الكائن السعري الأول
.
OBJPROP_COLOR            6
لتغيير لون الكائن الرسومي
.
OBJPROP_STYLE             7
لتغيير طريقة رسم الكائن الرسومي وهي تأخذ إحدى الحالات التالية
STYLE_SOLIDSTYLE_DASHSTYLE_DOT
STYLE_DASHDOTSTYLE_DASHDOTDOT 
OBJPROP_WIDTH             8
لتغيير عرض وسماكة الخط وتأخذ قيم من 1 إلى 5 
.
OBJPROP_BACK              9
لجعل الخلفية مصبوغة بالكامل أو مجرد حدود فقط
.
OBJPROP_RAY               10
لتغيير خاصية RAY والتي تجعل الترند ممتدا إلى خارج الشارت أو فقط خط بين نقطيتن
.
OBJPROP_ANGLE           13 
لتغيير زاوية رسم الكائن الرسومي أو زاوية الاستدارة
.
OBJPROP_ARROWCODE 14
لتغيير رمز السهم للكائن الرسومي الذي يظهر أشكال محددة أو أسهم
.
OBJPROP_TIME*****S 15
لتغيير خاصية ظهور الكائن على بعض الفريمات فقط وليس كلها
.OBJPROP_FONTSIZE     100
لتغيير حجم الفونت للكائنات التي تظهر نصا داخلها
.
OBJPROP_CORNER       101
لتغيير زاوية تموضع كائن البطاقة النصية وهي تأخذ قيم من 0 إلى ثلاثة حيث الصفر هي الزاوية العلوية اليسارية للشارت وهكذا

OBJPROP_XDISTANCE   102
لتغيير قيمة المحور X للكائن البطاقة النصية وهذه القيمة بالبيكسل
.
OBJPROP_YDISTANCE   103
لتغيير قيمة المحور Y للكائن البطاقة النصية وهذه القيمة بالبيكسل
.
OBJPROP_LEVELCOLOR  201
لتغيير ألوان مستويات الكائن الرسومي
.
OBJPROP_LEVELSTYLE   202
لتغيير طريقة رسم خطوط المستويات
.OBJPROP_LEVELWIDTH   203
لتغيير عرض خطوط المستويات

أمثلة:

كود PHP:
// لتغيير تموضع الكائن الزمني الأول
ObjectSet("MyTrend"OBJPROP_TIME1Time[0]);
// لتغيير عرض خط الترند إلى 3
ObjectSet("MyTrend"OBJPROP_WIDTH3);
// لجعل الكائن يظهر فقط على الفريم ربع الساعة والساعة
ObjectSet("MyObject"OBJPROP_TIME*****SOBJ_PERIOD_M15 OBJ_PERIOD_H1); 
الوظيفة ObjectGet
وهي تقوم بإعادة قيمة أية خاصية لأي كائن رسومي موجود على الشارت. وهي معاكسة لمهمة الوظيفة السابقة ObjectSet.


في المصطلحات البرمجية فإن Set دائما تعني تغيير قيمة. و Get تعني الحصول على قيمة.

فمثلا لو أردنا معرفة عرض خط الترند الذي اسمه MyTrend فإننا نستخدم الكود التالي:

كود PHP:
Print(ObjectGet("MyTrend"OBJPROP_WIDTH));
// النتيجة ستكون 3 
وهي تستخدم نفس الجدول السابق تماما.

الوظيفة ObjectSetText:


وهي تستخدم فقط مع كائن مربع النص المرتبط مع احدائيات الشارت الزمنية. وكائن البطاقة النصية المرتبط بإحداثيات البيكسل للشارت.

وهي تقوم بتغيير النص الظاهر عليهما مع تحديد لحجم واسم ولون الخط المستخدم.

وهي تستخدم على الشكل التالي:

كود PHP:
bool ObjectSetTextstring namestring textint font_sizestring font=NULLcolor text_color=CLR_NONE
وطريقة استخدامها واضحة جدا والمثال التالي يشرح بشكل أفضل:

كود PHP:
ObjectSetText("text_object""Hello world!"10"Times New Roman"Green); 

التوقيع

________________
لا إله إلا الله محمد رسول الله
________________

وضاح عطار غير متواجد حالياً   رد باقتباس
قديم 22-01-2008, 02:56 AM   #109 (permalink)
معلومات العضو
مشرف الإكسبيرتات والمؤشرات
 
الصورة الرمزية وضاح عطار

إحصائية العضو
افتراضي رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف

مؤشر Waddah Attar Strong Level بنسخته القديمة مثال جيد عن التعامل مع الكائنات الرسومية .

والشرح الخاص بها موجود في نص الكود التالي:

كود PHP:
#property copyright "Copyright © 2007, Waddah Attar"
#property link      waddahattar@hotmail.com
//---- 
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 Red
#property indicator_color2 Green
#property indicator_color3 Blue
#property indicator_color4 Red
#property indicator_color5 Green
#property indicator_color6 Blue
#property indicator_color7 Orange
#property indicator_color8 Orange
extern bool BackTest=false;
extern bool DrawMonth=true;
extern bool DrawWeek=true;
extern bool DrawDay=true;
extern bool DrawH4=false;
//---- buffers
double P1Buffer[];
double P2Buffer[];
double P3Buffer[];
double P4Buffer[];
double P5Buffer[];
double P6Buffer[];
double P7Buffer[];
double P8Buffer[];
//---- 
int levelPeriod1 PERIOD_D1;
int levelPeriod2 PERIOD_H4;
int levelPeriod3 PERIOD_W1;
int levelPeriod4 PERIOD_MN1;
bool FixSunday;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   
SetIndexBuffer(0P1Buffer);
   
SetIndexBuffer(1P2Buffer);
   
SetIndexBuffer(2P3Buffer);
   
SetIndexBuffer(3P4Buffer);
   
SetIndexBuffer(4P5Buffer);
   
SetIndexBuffer(5P6Buffer);
   
SetIndexBuffer(6P7Buffer);
   
SetIndexBuffer(7P8Buffer);
//---- 
   
SetIndexStyle(0DRAW_LINESTYLE_SOLID2);
   
SetIndexStyle(1DRAW_LINESTYLE_SOLID1);
   
SetIndexStyle(2DRAW_LINESTYLE_SOLID3);
   
SetIndexStyle(3DRAW_LINESTYLE_SOLID2);
   
SetIndexStyle(4DRAW_LINESTYLE_SOLID1);
   
SetIndexStyle(5DRAW_LINESTYLE_SOLID3);
   
SetIndexStyle(6DRAW_LINESTYLE_SOLID4);
   
SetIndexStyle(7DRAW_LINESTYLE_SOLID4);
//---- 
   
Comment("Strong Level By eng.Waddah Attar ");
   
FixSunday=false;
   for(
int i 0<7i++)
     {
       if (
TimeDayOfWeek(iTime(Symbol(),PERIOD_D1,i))==0)
       {
         
FixSunday=true;
       }
     }
   return(
0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
 
// تنظيف الشارت من الكائنات الرسومية التي ولدها هذا المؤشر وهي عملية ضرورية لمؤشر احترافي
// والحذف يكون طبعا فقط للكائنات الخاصة به وليس حذف عام
   
ObjectDelete("level1");
   
ObjectDelete("txtlevel1");
   
ObjectDelete("level2");
   
ObjectDelete("txtlevel2");
   
ObjectDelete("level3");
   
ObjectDelete("txtlevel3");
   
ObjectDelete("level4");
   
ObjectDelete("txtlevel4");
   
ObjectDelete("level5");
   
ObjectDelete("txtlevel5");
   
ObjectDelete("level6");
   
ObjectDelete("txtlevel6");
   
ObjectDelete("level7");
   
ObjectDelete("txtlevel7");
   
ObjectDelete("level8");
   
ObjectDelete("txtlevel8");
//---- 
   
Comment("");
   return(
0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   if(
DrawDayDrawPeriod1();
   if(
DrawH4DrawPeriod2();
   if(
DrawWeekDrawPeriod3();
   if(
DrawMonthDrawPeriod4();
   if (
BackTest==false)
   {
     for(
int i=1Barsi++)
     {
       
P1Buffer[i]=P1Buffer[0];
       
P2Buffer[i]=P2Buffer[0];
       
P3Buffer[i]=P3Buffer[0];
       
P4Buffer[i]=P4Buffer[0];
       
P5Buffer[i]=P5Buffer[0];
       
P6Buffer[i]=P6Buffer[0];
       
P7Buffer[i]=P7Buffer[0];
       
P8Buffer[i]=P8Buffer[0];
     }
   }
   return(
0);
  }
 
int DrawPeriod1()
{
   
int iiicounted_bars IndicatorCounted();
   
double c1c2dc;
   
string TrendType;
//---- check for possible errors
   
if(counted_bars 0
       return(-
1);
//---- last counted bar will be recounted
   
if(counted_bars 0
       
counted_bars--;  
   
int limit Bars counted_bars;
//---- 
   
for(limit 1>= 0i--)
     {
       
ii iBarShift(Symbol(), levelPeriod1Time[i],true);
       if (
TimeDayOfWeek(Time[i])==&& FixSunday==true)
       {
         
ii=ii+1;
       }
       if(
ii != -1)
         {
           
c1 iClose(Symbol(), levelPeriod1ii 1);
           
c2 iClose(Symbol(), levelPeriod1ii 2);
           
//----
           
dc c1 c2;
           
//----
           
if(dc == 0)
             {
               
c2 iClose(Symbol(), levelPeriod1ii 3);
             }
           
//----
           
dc c1 c2;
           
//----
           
if(dc == 0)
             {
               
dc c1;
             }
           
//----
           
P1Buffer[i] = c1-dc;
           
P4Buffer[i] = c1+dc;
           if (
P1Buffer[i]<P4Buffer[i])
           {
             
TrendType="Day Up                           ";
           }
           else
           {
             
TrendType="Day Down                         ";
           }
 
// عملت وظيفتين تختصر الكثير من كتابة الكود لوضع كائن سعري وكائن نصي
           
SetPrice("level1"Time[i],P1Buffer[i], Red);
           
SetText("txtlevel1"TrendTypeTime[i], P1Buffer[i], Red);
 
           
SetPrice("level4"Time[i],P4Buffer[i], Red);
           
SetText("txtlevel4"TrendTypeTime[i], P4Buffer[i], Red);
           
//----
        
}
     }
//----
   
return(0);
}
int DrawPeriod2()
{
   
int iiicounted_bars IndicatorCounted();
   
double c1c2dc;
   
string TrendType;
//---- check for possible errors
   
if(counted_bars 0
       return(-
1);
//---- last counted bar will be recounted
   
if(counted_bars 0
       
counted_bars--;  
   
int limit Bars counted_bars;
//---- 
   
for(limit 1>= 0i--)
     {
       
ii iBarShift(Symbol(), levelPeriod2Time[i],true);
       if(
ii != -1)
         {
           
c1 iClose(Symbol(), levelPeriod2ii 1);
           
c2 iClose(Symbol(), levelPeriod2ii 2);
           
//----
           
dc c1 c2;
           
//----
           
if(dc == 0)
             {
               
c2 iClose(Symbol(), levelPeriod2ii 3);
             }
           
//----
           
dc c1 c2;
           
//----
           
if(dc == 0)
             {
               
dc c1;
             }
           
//----
           
P2Buffer[i] = c1-dc;
           
P5Buffer[i] = c1+dc;
           if (
P2Buffer[i]<P5Buffer[i])
           {
             
TrendType="H4 Up                       ";
           }
           else
           {
             
TrendType="H4 Down                     ";
           }
           
SetPrice("level2"Time[i],P2Buffer[i], Green);
           
SetText("txtlevel2"TrendTypeTime[i], P2Buffer[i], Green);
           
SetPrice("level5"Time[i],P5Buffer[i], Green);
           
SetText("txtlevel5"TrendTypeTime[i], P5Buffer[i], Green);
           
//----
        
}
     }
//----
   
return(0);
}
int DrawPeriod3()
{
   
int iiicounted_bars IndicatorCounted();
   
double c1c2dc;
   
string TrendType;
//---- check for possible errors
   
if(counted_bars 0
       return(-
1);
//---- last counted bar will be recounted
   
if(counted_bars 0
       
counted_bars--;  
   
int limit Bars counted_bars;
//---- 
   
for(limit 1>= 0i--)
     {
       
ii iBarShift(Symbol(), levelPeriod3Time[i],true);
       if(
ii != -1)
         {
           
c1 iClose(Symbol(),