النتائج 106 إلى 120 من 237
- 22-01-2008, 02:42 AM #106
رد: تعال وتعلم معنا لغة 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
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
شرح الوظائف المستخدمة مع الكائنات الرسومية:
إن أهم وظيفة سوف نستخدمها هي الوظيفة ObjectCreate والتي من خلالها نستطيع رسم أي كائن رسومي من الأنواع التي شرحناها سابقا على الشارت.
إن أي كائن رسومي نريد رسمه على الشارت يجب أن يكون له اسم فريد غير مكرر على الشارت وكذلك أن يكون له نقاط تموضع مرتبطة بالسعر والزمن.
تستخدم الوظيفة ObjectCreate كالتالي:
كود PHP:bool ObjectCreate(string name, int type, int window, datetime time1, double price1, datetime time2=0, double price2=0, datetime time3=0, double price3=0)
وهو كما قلنا يجب ان يكون فريدا أي غير مكرر.
البارامتر الثاني هو نوع الكائن الرسومي الذي نريد رسمه على الشارت وهو أحد الأنواع المشروحة سابقا.
البارامتر الثالث هو رقم النافذة التي نريد وضع الكائن الرسومي عليها وهي عادة تكون النافذة رقم صفر وهي الأساسية ثم الرقم واحد لأول نافذة فرعية وهكذا.
البارامترات الستة الباقية هو نقاط تمركز وتموضع هذا الكائن على الشارت.
يجب إدخال نقطة تموضع واحدة على الأقل لأي كائن رسومي.
وكما وجدنا سابقا فإن أي كائن رسومي قد يحتاج لنقطة واحدة أو اثنتين أو ثلاثة معا حسب نوعه.
في حال نجحت الوظيفة في رسم الكائن المطلوب فإنها تعود بقيمة true أما إذا فشلت فإنها تعود بقيمة false.
والفشل قد يعود لعدة أسباب منها تكرار اسم موجود على الشارت أو إنقاص في معلومات نقاط التموضع.
مثال لرسم خط عمودي:
كود PHP:if (ObjectCreate("VerLine1",OBJ_VLINE,0, D'2007.07.25 12:30',0))
{
..... نجاح الوظيفة في رسم الخط العمودي
}
else
{
Print("Cant Draw VLINE");
}
واستخدمنا الشرط لمعرفة هل نجحت الوظيفة في عملها أم لا.
مثال آخر لرسم الترند المرتكز على نقطتين:
كود PHP:ObjectCreate("Trend1",OBJ_TREND,0,Time[0],Low[0],Time[10],High[9]);
الوظيفة ObjectDelete:
تقوم هذه الوظيفة بحذف الكائن الرسومي الموجود على الشارت وذلك من خلال اسمه.
وليس لهذه الوظيفة إلا بارامتر واحد هو اسم الكائن الذي نريد حذفه.
فمثلا الكود التالي يحذف الكائن الرسومي الذي اسمه Trend1.
كود PHP:ObjectDelete("Trend1");
والفشل يكون هنا في حال لم تعثر الوظيفة على كائن بهذا الاسم.
الوظيفة ObjectsDeleteAll:
هذه الوظيفة لها ثلاثة استخدامات:
1- تقوم هذه الوظيفة بحذف كل الكائنات الرسومية الموجودة على الشارت وذلك باستدعائها دون بارامترات مثل:
كود PHP:ObjectsDeleteAll();
فمثلا المثال التالي يحذف كل الكائنات الرسومية الموجودة على النافذة الفرعية الأولى:
كود PHP:ObjectsDeleteAll(1);
فمثلا الكود التالي يحذف كل الترندات المرسومة على النافذة الرئيسية للشارت:
كود PHP:ObjectsDeleteAll(0,OBJ_TREND);
تستخدم للبحث عن الكائنات الرسومية عن طريق اسمها وتعيد لنا في حال عثورها على هذا الكائن رقم النافذة الموجود فيها.
فإذا كان موجودا على النافذة الرئيسية للشارت فهي تعيد لنا الرقم صفر وإذا كان موجودا في النافذة الفرعية الأولى فإنها تعيد لنا الرقم واحد وهكذا.
في حال لم تجد الوظيفة الكائن الذي نبحث عنه فإنها تعيد لنا القيمة -1 والتي من خلالها نعرف أنه لا يوجد كائن رسومي بهذا الاسم.
فمثلا هذا الكود يبحث لنا عن الترند Trend1 ويخبرنا هل وجده أم لا.
كود PHP:int wi=ObjectFind("Trend1");
if (wi==-1)
{
Print ("الترند غير موجود");
}
else
{
Print("الترند موجود على النافذة رقم " ,wi);
}
أي كائن رسومي يتم رسمه على الشارت يأخذ رقم يبدأ من الصفر.
بمعنى إن أول كائن رسومي مهما كان نوعه يتم رسمه على الشارت يأخذ الرقم صفر. وثاني كائن يأخذ رقم واحد وهكذا.
الوظيفة ObjectTotal تعطينا عدد الكائنات الرسومية الموجودة على الشارت.
إذا أردنا معرفة فقط عدد الترندات مثلا فإننا نحدد لهذه الوظيفة نوع الكائن الذي نريد عدده مثل الكود التالي:
كود PHP:Print("عدد كل الكائنات " , ObjectTotal());
Print("عدد الترندات فقط " , ObjectTotal(OBJ_TREND));
تعطينا هذه الوظيفة نوع الكائن الرسومي هل هو ترند أو خط أفقي مثلا من خلال اسمه.
فمثلا الكود التالي يعطينا نوع الكائن الرسومي الذي اسمه Line.
كود PHP:Print(ObjectType("Line"));
- 22-01-2008, 02:53 AM #108
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
بقي شرح بسيط وننتهي من درس الكائنات الرسومية
الوظيفة ObjectSet :
هذه الوظيفة تقوم بتغيير مواصفات الكائن الرسومي على الشارت وتستخدم على الشكل التالي:
كود PHP:bool ObjectSet( string name, int index, double value)
البارامتر الثاني هو رقم الخاصية التي نريد تغيير قيمتها.
البارامتر الثالث هي القيمة الجديدة للخاصية.
وهذا جدول يبين فيه الخصائص التي يمكن تغييرها لأي كائن مع ملاحظة أن هذه الخصائص ليست مشتركة لكل أنواع الكائنات الرسومية.
بل لكل نوع كائن هناك خصائص خاصة به فقط وقد لا تكون مشتركة مع الكائنات الأخرى.
كود PHP:OBJPROP_PRICE1 1
لتغيير موقع الكائن السعري الأول.
OBJPROP_TIME2 2
لتغيير موقع الكائن الزمني الثاني.
OBJPROP_PRICE2 3
لتغيير موقع الكائن السعري الأول.
OBJPROP_TIME3 4
لتغيير موقع الكائن الزمني الثالث.
OBJPROP_PRICE3 5
لتغيير موقع الكائن السعري الأول.
OBJPROP_COLOR 6
لتغيير لون الكائن الرسومي.
OBJPROP_STYLE 7
لتغيير طريقة رسم الكائن الرسومي وهي تأخذ إحدى الحالات التالية: STYLE_SOLID, STYLE_DASH, STYLE_DOT,
STYLE_DASHDOT, STYLE_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_TIME1, Time[0]);
// لتغيير عرض خط الترند إلى 3
ObjectSet("MyTrend", OBJPROP_WIDTH, 3);
// لجعل الكائن يظهر فقط على الفريم ربع الساعة والساعة
ObjectSet("MyObject", OBJPROP_TIME*****S, OBJ_PERIOD_M15 | OBJ_PERIOD_H1);
وهي تقوم بإعادة قيمة أية خاصية لأي كائن رسومي موجود على الشارت. وهي معاكسة لمهمة الوظيفة السابقة ObjectSet.
في المصطلحات البرمجية فإن Set دائما تعني تغيير قيمة. و Get تعني الحصول على قيمة.
فمثلا لو أردنا معرفة عرض خط الترند الذي اسمه MyTrend فإننا نستخدم الكود التالي:
كود PHP:Print(ObjectGet("MyTrend", OBJPROP_WIDTH));
// النتيجة ستكون 3
الوظيفة ObjectSetText:
وهي تستخدم فقط مع كائن مربع النص المرتبط مع احدائيات الشارت الزمنية. وكائن البطاقة النصية المرتبط بإحداثيات البيكسل للشارت.
وهي تقوم بتغيير النص الظاهر عليهما مع تحديد لحجم واسم ولون الخط المستخدم.
وهي تستخدم على الشكل التالي:
كود PHP:bool ObjectSetText( string name, string text, int font_size, string font=NULL, color text_color=CLR_NONE)
كود PHP:ObjectSetText("text_object", "Hello world!", 10, "Times New Roman", Green);
- 22-01-2008, 02:56 AM #109
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
مؤشر Waddah Attar Strong Level بنسخته القديمة مثال جيد عن التعامل مع الكائنات الرسومية .
والشرح الخاص بها موجود في نص الكود التالي:
كود PHP:#property copyright "Copyright © 2007, Waddah Attar"
#property link [email protected]
//----
#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(0, P1Buffer);
SetIndexBuffer(1, P2Buffer);
SetIndexBuffer(2, P3Buffer);
SetIndexBuffer(3, P4Buffer);
SetIndexBuffer(4, P5Buffer);
SetIndexBuffer(5, P6Buffer);
SetIndexBuffer(6, P7Buffer);
SetIndexBuffer(7, P8Buffer);
//----
SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2);
SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 1);
SetIndexStyle(2, DRAW_LINE, STYLE_SOLID, 3);
SetIndexStyle(3, DRAW_LINE, STYLE_SOLID, 2);
SetIndexStyle(4, DRAW_LINE, STYLE_SOLID, 1);
SetIndexStyle(5, DRAW_LINE, STYLE_SOLID, 3);
SetIndexStyle(6, DRAW_LINE, STYLE_SOLID, 4);
SetIndexStyle(7, DRAW_LINE, STYLE_SOLID, 4);
//----
Comment("Strong Level By eng.Waddah Attar ");
FixSunday=false;
for(int i = 0; i <7; i++)
{
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(DrawDay) DrawPeriod1();
if(DrawH4) DrawPeriod2();
if(DrawWeek) DrawPeriod3();
if(DrawMonth) DrawPeriod4();
if (BackTest==false)
{
for(int i=1; i < Bars; i++)
{
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 i, ii, counted_bars = IndicatorCounted();
double c1, c2, dc;
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(i = limit - 1; i >= 0; i--)
{
ii = iBarShift(Symbol(), levelPeriod1, Time[i],true);
if (TimeDayOfWeek(Time[i])==1 && FixSunday==true)
{
ii=ii+1;
}
if(ii != -1)
{
c1 = iClose(Symbol(), levelPeriod1, ii + 1);
c2 = iClose(Symbol(), levelPeriod1, ii + 2);
//----
dc = c1 - c2;
//----
if(dc == 0)
{
c2 = iClose(Symbol(), levelPeriod1, ii + 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", TrendType, Time[i], P1Buffer[i], Red);
SetPrice("level4", Time[i],P4Buffer[i], Red);
SetText("txtlevel4", TrendType, Time[i], P4Buffer[i], Red);
//----
}
}
//----
return(0);
}
int DrawPeriod2()
{
int i, ii, counted_bars = IndicatorCounted();
double c1, c2, dc;
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(i = limit - 1; i >= 0; i--)
{
ii = iBarShift(Symbol(), levelPeriod2, Time[i],true);
if(ii != -1)
{
c1 = iClose(Symbol(), levelPeriod2, ii + 1);
c2 = iClose(Symbol(), levelPeriod2, ii + 2);
//----
dc = c1 - c2;
//----
if(dc == 0)
{
c2 = iClose(Symbol(), levelPeriod2, ii + 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", TrendType, Time[i], P2Buffer[i], Green);
SetPrice("level5", Time[i],P5Buffer[i], Green);
SetText("txtlevel5", TrendType, Time[i], P5Buffer[i], Green);
//----
}
}
//----
return(0);
}
int DrawPeriod3()
{
int i, ii, counted_bars = IndicatorCounted();
double c1, c2, dc;
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(i = limit - 1; i >= 0; i--)
{
ii = iBarShift(Symbol(), levelPeriod3, Time[i],true);
if(ii != -1)
{
c1 = iClose(Symbol(), levelPeriod3, ii + 1);
c2 = iClose(Symbol(), levelPeriod3, ii + 2);
//----
dc = c1 - c2;
//----
if(dc == 0)
{
c2 = iClose(Symbol(), levelPeriod3, ii + 3);
}
//----
dc = c1 - c2;
//----
if(dc == 0)
{
dc = c1;
}
//----
P3Buffer[i] = c1-dc;
P6Buffer[i] = c1+dc;
if (P3Buffer[i]<P6Buffer[i])
{
TrendType="Week Up ";
}
else
{
TrendType="Week Down ";
}
SetPrice("level3", Time[i],P3Buffer[i], Blue);
SetText("txtlevel3", TrendType, Time[i], P3Buffer[i], Blue);
SetPrice("level6", Time[i],P6Buffer[i], Blue);
SetText("txtlevel6", TrendType, Time[i], P6Buffer[i], Blue);
//----
}
}
//----
return(0);
}
int DrawPeriod4()
{
int i, ii, counted_bars = IndicatorCounted();
double c1, c2, dc;
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(i = limit - 1; i >= 0; i--)
{
ii = iBarShift(Symbol(), levelPeriod4, Time[i],true);
if(ii != -1)
{
c1 = iClose(Symbol(), levelPeriod4, ii + 1);
c2 = iClose(Symbol(), levelPeriod4, ii + 2);
//----
dc = c1 - c2;
//----
if(dc == 0)
{
c2 = iClose(Symbol(), levelPeriod4, ii + 3);
}
//----
dc = c1 - c2;
//----
if(dc == 0)
{
dc = c1;
}
//----
P7Buffer[i] = c1-dc;
P8Buffer[i] = c1+dc;
if (P7Buffer[i]<P8Buffer[i])
{
TrendType="Month Up ";
}
else
{
TrendType="Month Down ";
}
SetPrice("level7", Time[i],P7Buffer[i], Orange);
SetText("txtlevel7", TrendType, Time[i], P7Buffer[i], Orange);
SetPrice("level8", Time[i],P8Buffer[i], Orange);
SetText("txtlevel8", TrendType, Time[i], P8Buffer[i], Orange);
//----
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
// هذه الوظيفة لوضع كائن سعري
// نعطيها اسم الكائن والزمن والسعر واللون
void SetPrice(string name, datetime Tm, double Prc, color clr)
{
// في حال عدم وجود الكائن فيجب إنشائه للمرة الأولى
if(ObjectFind(name) == -1)
{
ObjectCreate(name, OBJ_ARROW, 0, Tm, Prc);
ObjectSet(name, OBJPROP_COLOR, clr);
ObjectSet(name, OBJPROP_WIDTH, 1);
ObjectSet(name, OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE);
}
else
{
// أما في حال وجوده سابقا فيجب تعديل مواصفاته فقط
ObjectSet(name, OBJPROP_TIME1, Tm);
ObjectSet(name, OBJPROP_PRICE1, Prc);
ObjectSet(name, OBJPROP_COLOR, clr);
ObjectSet(name, OBJPROP_WIDTH, 1);
ObjectSet(name, OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE);
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
// هذه الوظيفة تنشيء كائن نصي باسم محدد ونص محدد وموقع هذا الكائن ولونه
void SetText(string name,string txt,datetime Tm,double Prc,color clr)
{
// في حال عدم وجوده قم بإنشائه بالمواصفات المحدد
if(ObjectFind(name) == -1)
{
ObjectCreate(name, OBJ_TEXT, 0, Tm, Prc);
ObjectSetText(name, txt, 10, "Times New Roman", clr);
ObjectSet(name, OBJPROP_CORNER, 2);
}
else
{
// في حال وجوده غير خصائصه فقط
ObjectSet(name, OBJPROP_TIME1, Tm);
ObjectSet(name, OBJPROP_PRICE1, Prc);
ObjectSetText(name, txt, 10, "Times New Roman", clr);
ObjectSet(name, OBJPROP_CORNER, 2);
}
}
//+------------------------------------------------------------------+
آخر تعديل بواسطة وضاح عطار ، 22-01-2008 الساعة 02:59 AM
- 22-01-2008, 10:29 PM #110
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
اخي وضاح
مجهود رائع وجبار تُشكر عليه
ولكن هناك خطأ بسيط جدا في الملاحظات (خطأ غير مقصود بالتأكيد)
والصحيح هو
كود PHP:OBJPROP_PRICE1 1
لتغيير موقع الكائن السعري الأول.
OBJPROP_TIME2 2
لتغيير موقع الكائن الزمني الثاني.
OBJPROP_PRICE2 3
لتغيير موقع الكائن السعري الثاني.
OBJPROP_TIME3 4
لتغيير موقع الكائن الزمني الثالث.
OBJPROP_PRICE3 5
لتغيير موقع الكائن السعري الثالث.
وأريد ان اسألك عن تغيير موقع الكائن الزمني الاول (ما هو رقمه) لأنه ليس موجود بالاعلى
تقبل تحياتي
وشكراً جزيلاً لك لما قدمته وتقدمه لاخوانك
وجزاك الله عنا كل خيرآخر تعديل بواسطة wajdyss ، 22-01-2008 الساعة 10:35 PM
- 24-01-2008, 04:08 PM #111
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
أهلا بك أخي وجدي
نعم ملاحظتك صحيحة والخطأ غير مقصود طبعا .
الثوابت هي :
كود PHP:OBJPROP_TIME1 0
OBJPROP_PRICE1 1
OBJPROP_TIME2 2
OBJPROP_PRICE2 3
OBJPROP_TIME3 4
OBJPROP_PRICE3 5
- 02-02-2008, 07:56 AM #112
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
جزاك الله الخير
اخي هل من الممكن اتباع نفس الخطوات باتباع من اجل صنع الاكسبيرت ؟لضيق الوقت اذا امكن ارشادي لاقصر الطرق ؟اقصد مواقع انجليزيه او .شاكرين تعاومكم .
- 02-02-2008, 11:56 PM #113
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
جزاك الله عنا خير الثواب
- 05-02-2008, 06:54 PM #114
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
لااله الا الله محمد رسول الله صلى الله و عليه و سلم و على آله و صحبه اجمعين
- 06-02-2008, 11:37 AM #115
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
إلى الآن أعتبر أن الدورة السابقة قد غطت معظم اللغة MQL4 وهي كافية جدا لتعلم صناعة المؤشرات بفعالية كبيرة .
استعدوا الآن لدورة شاملة عن صناعة الاكسبيرتات وتقنياتها المختلفة .
بالتوفيق إن شاء الله
- 06-02-2008, 12:17 PM #116
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
- 07-02-2008, 04:01 AM #117
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
السلام عليكم
جزاك الله خير استاذي على الموسوعه الرائعة
ولكن قبل ان نبدأ بالاكسبيرتات
لدي بعض الأسئلة في المؤشرات
1. بالنسبه للرسومات.. فهل استطيع انا اخبر المؤشر بأن يرسم Trend Line لكل i ويعطي كل ترند اسم جديد خاص به ؟؟
2. كيف استطيع تحديد أعلى سعر وأدنى سعر خلال اليوم عند تحقق شرط معين وتكون الاشاره حينها ثابته ؟
مثال للسؤال الثاني :
عندما يتحرك السعر بعد الافتتاح 100 نقطة ينتظر إغلاق شمعة الساعه بعد تحقق الشرط ثم يقوم برسم خط من النوع DRAW_LINE فوق أعلى سعر ورسم خط آخر عند أدنى سعر بحيث تكون الخطوط على الهاي واللو بغض النظر عن الشرط الأساسي
يعني لما يتحقق الشرط 100 نقطة يبدأ برسم الخطوط على الهاي واللو ويتابعها لحين اغلاق الشمعه الحالية..
فقد يتحرك السعر بعد تحقق الشرط 20 نقطه للأعلى وعندها يصبح الفرق بين الهاي واللو 120 نقطه
اسف استاذي على الإطاله
وقد وضعت هذا السؤال هنا لأنني اريد ان اتعلم سرها البرمجي قبل الحصول على الكود
فأتمنى منك استاذي ان تفصل الشرح حول هذه النقطه
تحياتي لك
أخوك عادل الماجد
- 08-02-2008, 07:40 AM #118
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
- 08-02-2008, 07:46 AM #119
- 09-02-2008, 07:41 PM #120
رد: تعال وتعلم معنا لغة MQL4 حتى الاحتراف
الله يعطيك العافيه استاذي
ولكن في الحقيقه لم تفهم ما اقصده في السؤال الثاني
سأوضح أكثر :
أريد من المؤشر ان يرسم لي خط على الهاي وخط على اللو
وبعد تحقق شرط معين يقوم بتثبيت الخطوط عند الهاي ساعة تحقق الشرط وعند اللو ساعة تحقق الشرط
مثال :
شرطنا أن يكون الفرق بين الهاي واللو ( الرينج ) لليوم الحالي أكبر من أو يساوي 100
فإذا تحقق الشرط يتم وضع الخطوط عند الهاي واللو لليوم الحالي وفي الساعه الحالية
افتتح اليوم عند 1.9500
إرتفع السعر إلى 1.9550
ثم هبط إلى 1.9440
High - Low = 1.9550 - 1.9440 = 110
^^^ << لاحظ هنا تحقق الشرط وهو أن يكون الرينج أكبر من 100
بعد إغلاق شمعة الساعه يقوم برسم خط على الهاي 1.9550
ويقوم برسم خط آخر على اللو عند 1.9440
وتستمر هذه الإشارة مرسومه عند هذين المستويين حتى ولو هبط الزوج أكثر من 1.9440
وبالطبع مع بدية اليوم الجديد نأخذ الهاي واللو للشمعه الحالية لحين تحقق الشرط ثم ثبات الإشارة
أتمنى أن يكون المقصود من السؤال واضح
وآسف جداً جداً على الإطاله استاذي
وفي انتظار ردك
تحياتي لك
أخوك عادل الماجد
المواضيع المتشابهه
-
للمبتدأين (حلل وتعلم) ضع تحليلاتك وتعلم من اخطائك
By BahraiN in forum استفسارات وأسئلة المبتدئينمشاركات: 248آخر مشاركة: 14-05-2012, 10:27 PM -
اريد كتاب به مفاتيح طرق الاحتراف
By عزيز in forum استفسارات وأسئلة المبتدئينمشاركات: 13آخر مشاركة: 29-08-2006, 03:48 AM