المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : الموضوع المخصص للأسئلة البرمجية mql4



الصفحات : [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15

kira-h
19-04-2017, 12:14 AM
السلام عليكم ورحمة الله وبركاته
هذا الموضوع نخصصه فقط للأسئلة البرمجية،
ويجب أن لا تكون طلبات لصنع مؤشرات أو اكسبيرتات
كما نرجو من العضو الذي يسأل بشكل احترافي أن يساعد في الإجابة عن سؤال آخر لتعم الفائدة على الجميع
أما من جهتي سأحاول قدر الإمكان متابعة الموضوع والإجابة عن معظم الأسئلة
بالتوفيق إن شاء الله

DrIMO
19-04-2017, 06:21 AM
السلام عليكم
اولا عودا حميدا لمنتدنا الغالي وان شاء الله يصير افضل واحسن مما كان عليه سابقا
ثانيا نرجو من اساتذتنا البرمجين فتح موضوع عن طريقه عمل باك تيست 99% علي الاصدرات الحديثه من الميتا تريدر
ثالثا لدي استفسار بخصوص داله تحديد وقت عمل الاكسبيرت
بمعي انا اريد من الاكسبيرت ان يبدا صفقاته بعد ساعه واحده من افتتاح السوق يوم الاثنين(بدايه الاسبوع) وينهي صفقاته قبل ساعتين من اغلاق السوق يوم الجمعه(نهايه الاسبوع)
فهل هناك داله لعمل ذلك
وجزاكم الله عنا كل خير

kira-h
19-04-2017, 04:42 PM
السلام عليكم
اولا عودا حميدا لمنتدنا الغالي وان شاء الله يصير افضل واحسن مما كان عليه سابقا
ثانيا نرجو من اساتذتنا البرمجين فتح موضوع عن طريقه عمل باك تيست 99% علي الاصدرات الحديثه من الميتا تريدر
ثالثا لدي استفسار بخصوص داله تحديد وقت عمل الاكسبيرت
بمعي انا اريد من الاكسبيرت ان يبدا صفقاته بعد ساعه واحده من افتتاح السوق يوم الاثنين(بدايه الاسبوع) وينهي صفقاته قبل ساعتين من اغلاق السوق يوم الجمعه(نهايه الاسبوع)
فهل هناك داله لعمل ذلك
وجزاكم الله عنا كل خير

وعليكم السلام
أهلا بك اخي الكريم
إن شاء الله سيتم فتح موضوع مخصص لطريقة عمل الباكتيست
بالنسبة لسؤالك البرمجي ستقوم بما يلي :


input string Start_Monday="00:00";
input string End_Friday="20:00";

void OnTick()
{
datetime Start=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + Start_Monday);
datetime End=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + End_Friday);

if((TimeCurrent()>=Start&&DayOfWeek()==1)||(TimeCurrent()<=End&&DayOfWeek()==5)||(DayOfWeek()>1&&DayOfWeek()<5))
{
//بقية الشروط
}
}

أبو عمر
19-04-2017, 05:41 PM
مرحباً بكم أستاذ حسن افتقدناك يا رجل والحمد لله على عودتكم ... وأسألك عن أرشيف الأسئلة البرمجية هل ما زال موجوداً ... أيضاً المادة التعليمية التي وضعتها حضرتك

kira-h
19-04-2017, 07:16 PM
مرحباً بكم أستاذ حسن افتقدناك يا رجل والحمد لله على عودتكم ... وأسألك عن أرشيف الأسئلة البرمجية هل ما زال موجوداً ... أيضاً المادة التعليمية التي وضعتها حضرتك

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

أبو عمر
20-04-2017, 09:07 AM
أخي حسن التعامل مع الموقع قبل الصيانة أحسن ؟؟؟

على العموم عندي سؤال بخصوص قيمة Slippage

بخصوص منصة أربعة أرقام نضعها مثلاً 3
وما يقابلها في منصة الخمس أرقام 30
في الإعدادات أقصد

صحيح ؟

kira-h
20-04-2017, 03:45 PM
أخي حسن التعامل مع الموقع قبل الصيانة أحسن ؟؟؟

على العموم عندي سؤال بخصوص قيمة Slippage

بخصوص منصة أربعة أرقام نضعها مثلاً 3
وما يقابلها في منصة الخمس أرقام 30
في الإعدادات أقصد

صحيح ؟

المنتدى أصبح أفضل وأجمل من ناحية الشكل، لكن يحتاج فقط إلى اصلاحات بسيطة مثل تكبير الخط الافتراضي ودعم صيغ بالمرفقات مثل rar, ex4 , ex5, mql4, mql5 ,,, مع زيادة حجمها الافتراضي بالرفع
وإضافة أدوات تنسيق المشاركة سواء بالوضع العادي أو الوضع المتطور
بالنسبة لسؤالك عن السليباج نعم صحيح

ابو عمر
21-04-2017, 11:35 PM
أخي حسن التعامل مع الموقع قبل الصيانة أحسن ؟؟؟

على العموم عندي سؤال بخصوص قيمة Slippage

بخصوص منصة أربعة أرقام نضعها مثلاً 3
وما يقابلها في منصة الخمس أرقام 30
في الإعدادات أقصد

صحيح ؟

سيتم اصلاح جميع المشاكل بإذن الله
انتهت بعض المشاكل مثل الخطوط وارفاق الصور وجاري اصلاح الباقي

kira-h
22-04-2017, 12:34 AM
سيتم اصلاح جميع المشاكل بإذن الله
انتهت بعض المشاكل مثل الخطوط وارفاق الصور وجاري اصلاح الباقي

بالتوفيق إن شاء الله

sal_moh85
23-04-2017, 11:19 AM
سلام عليكم المبرمج الغالي kira-h
عندي استفسار بطريقة كتابة كود ما قدرة اني اكتيه برجوه المساعد بي طريقة كتابته هي عمليه شوي معقده لانو يوجد16 سناريوه انا بس بدي دلني على اول طريق لي كتابة السناريوهات بي ترتيب طبعا 8 سناريوهات لي شراء 8 لي بيع حسب اتجاه
فكرة الكود ترتيب سناريو لي حركة الشارت مثال على ذالك
if(A>0&&B>0&&C>0&&D>0)bool buy=true هاد شرط اول بي تسلسل حاليا تحقق هاد شرط بتم عم يفتح نفس الشرط حتى يخسر
السناريو التاني: تحقق الشرط الاول وكانت النتيجه خاسره ينتقل الى الشرط الثاني
if(A<0&&B>0&&C<0&&D>0)bool sell=true هاد الشرط الثاني اذا كانت االصفقه رابح يرجع الى الشرط الاول واذا خاسره ينتقل الى السناريو الثالث
السناريو الثالث: هاد السنايو يتم العمل به عند خسارة سناريو الثاني
وعلى هذا المنوال تتم السناريهوت ارجو منك طريقه كتابة اول لكود لكي اكمله وشكرا جزيلا لك

kira-h
23-04-2017, 04:52 PM
سلام عليكم المبرمج الغالي kira-h
عندي استفسار بطريقة كتابة كود ما قدرة اني اكتيه برجوه المساعد بي طريقة كتابته هي عمليه شوي معقده لانو يوجد16 سناريوه انا بس بدي دلني على اول طريق لي كتابة السناريوهات بي ترتيب طبعا 8 سناريوهات لي شراء 8 لي بيع حسب اتجاه
فكرة الكود ترتيب سناريو لي حركة الشارت مثال على ذالك
if(A>0&&B>0&&C>0&&D>0)bool buy=true هاد شرط اول بي تسلسل حاليا تحقق هاد شرط بتم عم يفتح نفس الشرط حتى يخسر
السناريو التاني: تحقق الشرط الاول وكانت النتيجه خاسره ينتقل الى الشرط الثاني
if(A<0&&B>0&&C<0&&D>0)bool sell=true هاد الشرط الثاني اذا كانت االصفقه رابح يرجع الى الشرط الاول واذا خاسره ينتقل الى السناريو الثالث
السناريو الثالث: هاد السنايو يتم العمل به عند خسارة سناريو الثاني
وعلى هذا المنوال تتم السناريهوت ارجو منك طريقه كتابة اول لكود لكي اكمله وشكرا جزيلا لك

وعليكم السلام
لم أفهم السؤال؟ المرجو شرح تفصيلي وترفق الاكسبيرت الذي قمت بعمله حتى أستطيع التصحيح من خلاله

sal_moh85
24-04-2017, 11:52 AM
وعليكم السلام
لم أفهم السؤال؟ المرجو شرح تفصيلي وترفق الاكسبيرت الذي قمت بعمله حتى أستطيع التصحيح من خلاله
الاخ العزيز kira-h
سوف ارسل جدوال رقمي لتتضح الفكره اكثر

sal_moh85
24-04-2017, 12:09 PM
للتضح الفكره كاملا هذه اول 4 احتمالات او سناريهات لي الاتجاه الصاعد
اول يقوم اكسبريت بي شراء عندما يكون اشارات الرقميه
0000
السناريو الثاني عند خسارة العقد الاول 0000
يفتح بيع كود البيع في الرقمي
1100
السناريو الثالث عند خسارة العقد الثاني
يفتح شراء كود الشراء في الرقمي
0010
السناريو الرابع عند خسارة العقد الثالث
يفتح بيع كود البيع في الرقمي
1110
هذه اول اربع احتمالات او سناريهات سوف يمر بها الزوج عندما يكون الاتجاه صاعد
طبعا في لسه 4 احتمالات لي اتجاه الهابط
ويوجد اربع احتمالات عند اوقات التذبذب بعد الاتجاه الصاعد
وايضا يوجد اربع احتمالات عند اوقات التذبذب بعد الاتجاه الهابط
وشكرا جزيلا
ان شاء لله تكون الفكره وصلت صحيحه
مختصر الفكره تحويل الاشاراة التماثليه الى رقميه عند كل تحرك adc وعند كل نقطه

kira-h
24-04-2017, 04:59 PM
للتضح الفكره كاملا هذه اول 4 احتمالات او سناريهات لي الاتجاه الصاعد
اول يقوم اكسبريت بي شراء عندما يكون اشارات الرقميه
0000
السناريو الثاني عند خسارة العقد الاول 0000
يفتح بيع كود البيع في الرقمي
1100
السناريو الثالث عند خسارة العقد الثاني
يفتح شراء كود الشراء في الرقمي
0010
السناريو الرابع عند خسارة العقد الثالث
يفتح بيع كود البيع في الرقمي
1110
هذه اول اربع احتمالات او سناريهات سوف يمر بها الزوج عندما يكون الاتجاه صاعد
طبعا في لسه 4 احتمالات لي اتجاه الهابط
ويوجد اربع احتمالات عند اوقات التذبذب بعد الاتجاه الصاعد
وايضا يوجد اربع احتمالات عند اوقات التذبذب بعد الاتجاه الهابط
وشكرا جزيلا
ان شاء لله تكون الفكره وصلت صحيحه
مختصر الفكره تحويل الاشاراة التماثليه الى رقميه عند كل تحرك adc وعند كل نقطه

ارفق الاكسبيرت الذي قمت انت بعمله لأرى ما يمكن تصحيحه

sal_moh85
24-04-2017, 05:18 PM
ارفق الاكسبيرت الذي قمت انت بعمله لأرى ما يمكن تصحيحه

مشكور اخ kira-h
انحلت المشكله بوضع ماجيك نمبر لي كل صفقه وان شاء لله بس لما يخلص الاكسبريت بارفق اكسبريت

kira-h
24-04-2017, 05:49 PM
مشكور اخ kira-h
انحلت المشكله بوضع ماجيك نمبر لي كل صفقه وان شاء لله بس لما يخلص الاكسبريت بارفق اكسبريت

العفو أخي والله الموفق

silver
26-04-2017, 05:24 PM
السلام عليكم
مشرفنا العزيز حسن
حاب أسألك عن النقطة التالية
عندي ثلاث متغيرات، وكل متغير منهم هو عبارة عن سعر معين خاص به
سؤالي هو
أريد أن أعرف المتغير الأعلى سعرا الآن
ما هي طريقة كتابة الكود الخاص بهذه الفكرة
شكرا لك

kira-h
26-04-2017, 07:32 PM
السلام عليكم
مشرفنا العزيز حسن
حاب أسألك عن النقطة التالية
عندي ثلاث متغيرات، وكل متغير منهم هو عبارة عن سعر معين خاص به
سؤالي هو
أريد أن أعرف المتغير الأعلى سعرا الآن
ما هي طريقة كتابة الكود الخاص بهذه الفكرة
شكرا لك

وعليكم السلام
ستستخدم الوظيفة MathMax لمعرفة أعلى قيمة
مثال :


double x=2,y=5,z=1;
double MaxValue=MathMax(MathMax(x,y),MathMax(y,z));

silver
26-04-2017, 10:58 PM
وعليكم السلام
ستستخدم الوظيفة MathMax لمعرفة أعلى قيمة
مثال :


double x=2,y=5,z=1;
double MaxValue=MathMax(MathMax(x,y),MathMax(y,z));



كعادتك مبدع دائما سلمت يداك
ألف شكر لك أخي العزيز حسن

kira-h
27-04-2017, 04:26 PM
كعادتك مبدع دائما سلمت يداك
ألف شكر لك أخي العزيز حسن

العفو أخي، والله الموفق

medo92015
29-04-2017, 03:00 AM
الاخ الكريم استاذ حسن
بحاول اعمل مؤشر للخطوط مثل المؤشر اللي حضرتك عملته للاخ الحسن
و بين كل خط 30 نقطة
انا عملته بس للاسف مش عارف اعمل الخطوط اكثر من لون مثل المؤشر اللي انت صنعته
اريد ان اجعل الخطوط اربع الوان متتاليين
هل اعمل اكثر من دالة بالاضافة للدالة الرئيسية
مرفق الدالة الرئيسية التي استخدمتها
برجاء المساعدة ومشكور مقدما
تحياتي

for(i=1;i<=Lines;i++){
HighLine=Start+(Pips*point*i);
DrawLine("High"+i+Center,"",Time[0] + 60 * (Period() * 5 ) ,HighLine,High_Color ) ;
DrawLine2("High2"+i+Center,"",Time[0] + 60 * (Period() * 5 ) ,HighLine,Low_Color ) ;
DrawLine3("High3"+i+Center,"",Time[0] + 60 * (Period() * 5 ) ,HighLine,Start_Color ) ;
DrawLine3("High4"+i+Center,"",Time[0] + 60 * (Period() * 5 ) ,HighLine,Start_Color ) ;
}

kira-h
29-04-2017, 08:37 PM
الاخ الكريم استاذ حسن
بحاول اعمل مؤشر للخطوط مثل المؤشر اللي حضرتك عملته للاخ الحسن
و بين كل خط 30 نقطة
انا عملته بس للاسف مش عارف اعمل الخطوط اكثر من لون مثل المؤشر اللي انت صنعته
اريد ان اجعل الخطوط اربع الوان متتاليين
هل اعمل اكثر من دالة بالاضافة للدالة الرئيسية
مرفق الدالة الرئيسية التي استخدمتها
برجاء المساعدة ومشكور مقدما
تحياتي

for(i=1;i<=Lines;i++){
HighLine=Start+(Pips*point*i);
DrawLine("High"+i+Center,"",Time[0] + 60 * (Period() * 5 ) ,HighLine,High_Color ) ;
DrawLine2("High2"+i+Center,"",Time[0] + 60 * (Period() * 5 ) ,HighLine,Low_Color ) ;
DrawLine3("High3"+i+Center,"",Time[0] + 60 * (Period() * 5 ) ,HighLine,Start_Color ) ;
DrawLine3("High4"+i+Center,"",Time[0] + 60 * (Period() * 5 ) ,HighLine,Start_Color ) ;
}


نعم استخدم دالة لكل خط
مثال :


for (int i=1;i<=Lines;i++)
{
ObjectCreate("High"+i,OBJ_TREND,0,0,0);
ObjectSet("High"+i,OBJPROP_COLOR ,High_Color1);
ObjectSet("High"+i,OBJPROP_TIME1 ,Time[iBarBegin]);
ObjectSet("High"+i,OBJPROP_PRICE1,StartPrice-Pips*2*point+(i*Pips*3*point));
ObjectSet("High"+i,OBJPROP_TIME2 ,Time[0]);
ObjectSet("High"+i,OBJPROP_PRICE2,StartPrice-Pips*2*point+(i*Pips*3*point));
ObjectSet("High"+i,OBJPROP_STYLE,0);
ObjectSet("High"+i,OBJPROP_WIDTH,0);
}
for (int i=1;i<=Lines;i++)
{
ObjectCreate("High2"+i,OBJ_TREND,0,0,0);
ObjectSet("High2"+i,OBJPROP_COLOR ,High_Color2);
ObjectSet("High2"+i,OBJPROP_TIME1 ,Time[iBarBegin]);
ObjectSet("High2"+i,OBJPROP_PRICE1,StartPrice-Pips*point+(i*Pips*3*point));
ObjectSet("High2"+i,OBJPROP_TIME2 ,Time[0]);
ObjectSet("High2"+i,OBJPROP_PRICE2,StartPrice-Pips*point+(i*Pips*3*point));
ObjectSet("High2"+i,OBJPROP_STYLE,0);
ObjectSet("High2"+i,OBJPROP_WIDTH,0);
}

medo92015
30-04-2017, 02:13 AM
نعم استخدم دالة لكل خط
مثال :


for (int i=1;i<=Lines;i++)
{
ObjectCreate("High"+i,OBJ_TREND,0,0,0);
ObjectSet("High"+i,OBJPROP_COLOR ,High_Color1);
ObjectSet("High"+i,OBJPROP_TIME1 ,Time[iBarBegin]);
ObjectSet("High"+i,OBJPROP_PRICE1,StartPrice-Pips*2*point+(i*Pips*3*point));
ObjectSet("High"+i,OBJPROP_TIME2 ,Time[0]);
ObjectSet("High"+i,OBJPROP_PRICE2,StartPrice-Pips*2*point+(i*Pips*3*point));
ObjectSet("High"+i,OBJPROP_STYLE,0);
ObjectSet("High"+i,OBJPROP_WIDTH,0);
}
for (int i=1;i<=Lines;i++)
{
ObjectCreate("High2"+i,OBJ_TREND,0,0,0);
ObjectSet("High2"+i,OBJPROP_COLOR ,High_Color2);
ObjectSet("High2"+i,OBJPROP_TIME1 ,Time[iBarBegin]);
ObjectSet("High2"+i,OBJPROP_PRICE1,StartPrice-Pips*point+(i*Pips*3*point));
ObjectSet("High2"+i,OBJPROP_TIME2 ,Time[0]);
ObjectSet("High2"+i,OBJPROP_PRICE2,StartPrice-Pips*point+(i*Pips*3*point));
ObjectSet("High2"+i,OBJPROP_STYLE,0);
ObjectSet("High2"+i,OBJPROP_WIDTH,0);
}


تمام استاذنا الغالي
و الف شكر علي تعبك
جزاك الله خيرا
تحياتي وتقديري
بالتوفيق دائما ان شاء الله

kira-h
30-04-2017, 04:08 PM
تمام استاذنا الغالي
و الف شكر علي تعبك
جزاك الله خيرا
تحياتي وتقديري
بالتوفيق دائما ان شاء الله

العفو أخي، والله الموفق

fxover
01-05-2017, 03:26 PM
اخي العزيز حسن هذا الكود يقوم بعمل رسالة تنبيه عند ملامسة السعر لخط على التشارت
وهو يعمل بشكل ممتاز ولكن التنبيه يتكرر مادام السعر يلامس الخط فهو مزعج اريد اضافه ليتم التبيه مره واحده فقط


if (Ld_20 <= 15.0 && Ld_20 >= 0.0 && Alert == TRUE) ");

Alert ("level-reached: ",Symbol()+" "+Period()+": "+DoubleToStr(Ask,Digits));

kira-h
01-05-2017, 08:22 PM
اخي العزيز حسن هذا الكود يقوم بعمل رسالة تنبيه عند ملامسة السعر لخط على التشارت
وهو يعمل بشكل ممتاز ولكن التنبيه يتكرر مادام السعر يلامس الخط فهو مزعج اريد اضافه ليتم التبيه مره واحده فقط


if (Ld_20 <= 15.0 && Ld_20 >= 0.0 && Alert == TRUE) ");

Alert ("level-reached: ",Symbol()+" "+Period()+": "+DoubleToStr(Ask,Digits));

جرب الكود التالي :


static bool alert=true;
datetime time;

int init()
{
alert=true;
return(0);
}

int start()
{
if(Ld_20 <= 15.0 && Ld_20 >= 0.0 && Alert == TRUE && time!=Time[0] && alert)
{
Alert ("level-reached: ",Symbol()+" "+Period()+": "+DoubleToStr(Ask,Digits));
time=Time[0]:
alert=false;
}

return(0);
}

fxover
01-05-2017, 10:07 PM
جرب الكود التالي :


static bool alert=true;
datetime time;

int init()
{
alert=true;
return(0);
}

int start()
{
if(Ld_20 <= 15.0 && Ld_20 >= 0.0 && Alert == TRUE && time!=Time[0] && alert)
{
Alert ("level-reached: ",Symbol()+" "+Period()+": "+DoubleToStr(Ask,Digits));
time=Time[0]:
alert=false;
}

return(0);
}


الف شكر يا فخر العرب

kira-h
02-05-2017, 04:09 PM
الف شكر يا فخر العرب

العفو أخي والله الموفق

DrIMO
05-05-2017, 04:57 PM
الف شكر لمنتدنا الغالي علي فتحه موضوع مخصص لاشهر الدوال المستعمله في صنع الاكسبيرتات وبخاصه مهندس كيرا لفتحه الموضوع
فقد افادنا كثيرا بعد الله سبحانه وتعالي وجزا الله الكاتب عنا الف خير ان شاء الله
وايضا لي سؤالي الي الاخوه المبرمجين
اذا كان الاكسبيرت الخاص بي يقوم بفتح اكثر من صفقه علي نفس الشمعه وعلي اسعار مختلفه بحيث يغلقهم جميعا علي ربح محدد
فهل هناك داله تمنع الاكسبيرت من فتح اي صفقات اخري علي نفس الشمعه بعد تحقق الربح المطلوب
قمت بمحاوله استعمال طريقه time[0]لتوقيت الشمعه ولكن للاسف لم تنفع ثم قمت بمحاوله عمل داله لتحديد الشمعه التي حققت الربح ولكن للاسف لم تنفع ايضا

int CheckBarProfit()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
int Profit_bar=iBarShift(Symbol(),0,OrderUsdProfit(),f alse);
if(Profit_bar>=OrderUsdProfit())
{
return(1));
}
}
}
}
كما اود تذكيركم بطلبي بشان فتح موضوع عن طريقه عمل باك تست لفترات زمنيه طويلا
وشكرا لمجهودكم الرائع وجزاكم الله عنا الف خير

Waddah
05-05-2017, 08:56 PM
أستاذ حسن ممكن شرح أداة OBJ_FIBO - كيف أضيف مستويات غير الإفتراضية في فيبو ناتشي مثلا 1.236 و كيف أحذف مستويات ؟
وهل استطيع التحكم بلون ونوع كل مستوى ؟

إذا اردت ان ارسمها على شمعة اليوم السابق استخدم iHigh و iLow لتحديد مستويات ال صفر و المئة ؟

كيف أحدد قيمة المستوى ؟ مثلا إذا أغلقت الشمعة فوق مستوى 50 يدخل شراء

هل حسابها المستويات رياضيا أفضل ؟

مع الشكر الجزيل

الصاعقة
05-05-2017, 10:15 PM
الاستاذ حسن جزاك الله خير وبارك بك

ارغب في كود اخر قمة وقاع

بحثت في المنتدي السابق وعدد من المواقع وللاسف لم اجد الكود المناسب ارجو منك مساعدتي

وشكراً لك

Waddah
05-05-2017, 10:42 PM
الاستاذ حسن جزاك الله خير وبارك بك

ارغب في كود اخر قمة وقاع

بحثت في المنتدي السابق وعدد من المواقع وللاسف لم اجد الكود المناسب ارجو منك مساعدتي

وشكراً لك

آخر قمة أو قاع مرتبط بتحديد عدد الشموع التي سيرجع بها المؤشر للخلف لتحديد الفمة أو القاع مثلا سيحدد أعلى نقطة في خمسين شمعة سابقة أو أكثر أو أقل
أظن أن التعليمة المناسبة هي iHighest للقمم وiLowest للقيعان ....لهما شرح واضح في الريفرنس

الصاعقة
06-05-2017, 12:26 AM
آخر قمة أو قاع مرتبط بتحديد عدد الشموع التي سيرجع بها المؤشر للخلف لتحديد الفمة أو القاع مثلا سيحدد أعلى نقطة في خمسين شمعة سابقة أو أكثر أو أقل
أظن أن التعليمة المناسبة هي iHighest للقمم وiLowest للقيعان ....لهما شرح واضح في الريفرنس

الله جابك ايا استاذ وضاح والله يجزاك كل خير ويوفقك على كل ما سويته

عموماً الي احاول عليه موشر من برمجتك الي هو
Waddah Attar Weekly Pivot Fibo Indicator (https://www.mql5.com/en/code/7096?utm_campaign=MetaTrader+4+Terminal&utm_medium=special&utm_source=mt4terminal+codebase)

حاولت اني اعدل القمه والقاع باضفة الزيج زاج او بال iHighest و iLowest لكن ما جات صح معي

وشكراً لكم على ما تقدمونه

DrIMO
06-05-2017, 01:33 PM
الف شكر لمنتدنا الغالي علي فتحه موضوع مخصص لاشهر الدوال المستعمله في صنع الاكسبيرتات وبخاصه مهندس كيرا لفتحه الموضوع
فقد افادنا كثيرا بعد الله سبحانه وتعالي وجزا الله الكاتب عنا الف خير ان شاء الله
وايضا لي سؤالي الي الاخوه المبرمجين
اذا كان الاكسبيرت الخاص بي يقوم بفتح اكثر من صفقه علي نفس الشمعه وعلي اسعار مختلفه بحيث يغلقهم جميعا علي ربح محدد
فهل هناك داله تمنع الاكسبيرت من فتح اي صفقات اخري علي نفس الشمعه بعد تحقق الربح المطلوب
قمت بمحاوله استعمال طريقه time[0]لتوقيت الشمعه ولكن للاسف لم تنفع ثم قمت بمحاوله عمل داله لتحديد الشمعه التي حققت الربح ولكن للاسف لم تنفع ايضا

int CheckBarProfit()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
int Profit_bar=iBarShift(Symbol(),0,OrderUsdProfit(),f alse);
if(Profit_bar>=OrderUsdProfit())
{
return(1));
}
}
}
}
كما اود تذكيركم بطلبي بشان فتح موضوع عن طريقه عمل باك تست لفترات زمنيه طويلا
وشكرا لمجهودكم الرائع وجزاكم الله عنا الف خير

للتذكير شباب جزاكم الله خيرا

kira-h
06-05-2017, 04:47 PM
الف شكر لمنتدنا الغالي علي فتحه موضوع مخصص لاشهر الدوال المستعمله في صنع الاكسبيرتات وبخاصه مهندس كيرا لفتحه الموضوع
فقد افادنا كثيرا بعد الله سبحانه وتعالي وجزا الله الكاتب عنا الف خير ان شاء الله
وايضا لي سؤالي الي الاخوه المبرمجين
اذا كان الاكسبيرت الخاص بي يقوم بفتح اكثر من صفقه علي نفس الشمعه وعلي اسعار مختلفه بحيث يغلقهم جميعا علي ربح محدد
فهل هناك داله تمنع الاكسبيرت من فتح اي صفقات اخري علي نفس الشمعه بعد تحقق الربح المطلوب
قمت بمحاوله استعمال طريقه time[0]لتوقيت الشمعه ولكن للاسف لم تنفع ثم قمت بمحاوله عمل داله لتحديد الشمعه التي حققت الربح ولكن للاسف لم تنفع ايضا

int CheckBarProfit()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
int Profit_bar=iBarShift(Symbol(),0,OrderUsdProfit(),f alse);
if(Profit_bar>=OrderUsdProfit())
{
return(1));
}
}
}
}
كما اود تذكيركم بطلبي بشان فتح موضوع عن طريقه عمل باك تست لفترات زمنيه طويلا
وشكرا لمجهودكم الرائع وجزاكم الله عنا الف خير

العفو أخي هذا واجب
بالنسبة لسؤالك البرمجي يمكنك عمل دالة تقوم بحساب إجمالي الربح المحقق بآخر شمعة كالتالي :


double ProfitOnLastBar()
{
double pts;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
datetime ot=OrderOpenTime();
if(sy==Symbol()&&mn==MagicNumber)
{
if(ot>=Time[0])
{
pts+=pt+sw+cm;
}
}
}
return(pts);
}

ودالة تحسب عدد الصفقات التي فتحت بآخر شمعة كالتالي :


int CountOrdersTime()
{
int cnt=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderOpenTime()>=Time[0])cnt++;
}
}
return(cnt);
}


ثم الشروط قبل دالة فتح الصفقة كالتالي :

if((CountOrdersTime()>0&&ProfitOnLastBar()<0)||CountOrdersTime()==0)//Open Order

- بالنسبة لطريقة عمل الباكتيست راجع الموضوع التالي :
طريقة عمل الباكتيست بدقة %99,90 (http://www.fxprg.com/vb/showthread.php?t=31563)

kira-h
06-05-2017, 05:35 PM
أستاذ حسن ممكن شرح أداة OBJ_FIBO - كيف أضيف مستويات غير الإفتراضية في فيبو ناتشي مثلا 1.236 و كيف أحذف مستويات ؟
وهل استطيع التحكم بلون ونوع كل مستوى ؟

إذا اردت ان ارسمها على شمعة اليوم السابق استخدم iHigh و iLow لتحديد مستويات ال صفر و المئة ؟

كيف أحدد قيمة المستوى ؟ مثلا إذا أغلقت الشمعة فوق مستوى 50 يدخل شراء

هل حسابها المستويات رياضيا أفضل ؟

مع الشكر الجزيل

- دالة رسم الفيبو كالتالي :


void draw_fibo(string name,datetime time1,double price1,datetime time2,double price2)
{
if(ObjectFind(name)==-1)
{
ObjectCreate(name,OBJ_FIBO,0,time1,price1,time2,pr ice2);

ObjectSet(name,OBJPROP_FIBOLEVELS,6);//تحدد عدد المستويات بهذا السطر

ObjectSet(name,OBJPROP_FIRSTLEVEL,0);
ObjectSetFiboDescription(name,0,"0.0 %$");

ObjectSet(name,OBJPROP_FIRSTLEVEL+1,0.236);
ObjectSetFiboDescription(name,1,"23.6 %$");

ObjectSet(name,OBJPROP_FIRSTLEVEL+2,0.382);
ObjectSetFiboDescription(name,2,"38.2 %$");

ObjectSet(name,OBJPROP_FIRSTLEVEL+3,0.50);
ObjectSetFiboDescription(name,3,"50.0 %$");

ObjectSet(name,OBJPROP_FIRSTLEVEL+4,0.618);
ObjectSetFiboDescription(name,4,"61.8 %$");

ObjectSet(name,OBJPROP_FIRSTLEVEL+5,1.00);
ObjectSetFiboDescription(name,5,"100.0 %$");

//يمكن إضافة مستويات أخرى

ObjectSet(name,OBJPROP_LEVELCOLOR,Yellow) ;//لون خطوط الفيبو
}
else if(ObjectGet(name,OBJPROP_PRICE1)!=price1||ObjectG et(name,OBJPROP_PRICE2)!=price2)
{
ObjectDelete(name);
draw_fibo(name,time1,price1,time2,price2);
}
}


مثال لعمل الفيبو على الهاي واللوو لليوم السابق :


double H=iHigh(Symbol(),PERIOD_D1,1),
L=iLow(Symbol(),PERIOD_D1,1);
datetime T=iTime(Symbol(),PERIOD_D1,1);

draw_fibo("FiboDaily",T,H,Time[0],L);


- أما قيم الخطوط يمكن استخراج فقط خط الـ 0 و الـ 100 وبناءا عايه تحسب بقية المستويات رياضيا
لمعرفة قيم المستويين 0 و 100 :


double Fi0=ObjectGet("FiboDaily",OBJPROP_PRICE2),
Fi100=ObjectGet("FiboDaily",OBJPROP_PRICE1);

Comment(Fi0," ",Fi100);

kira-h
06-05-2017, 05:41 PM
الاستاذ حسن جزاك الله خير وبارك بك

ارغب في كود اخر قمة وقاع

بحثت في المنتدي السابق وعدد من المواقع وللاسف لم اجد الكود المناسب ارجو منك مساعدتي

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


double MaxZigZagTop()
{
double LastRecordedTop=-1;
for(int i=0;i<100;i++)
{
double zz=iCustom(Symbol(),0,"ZigZag",0,i);
if(zz==High[i])
{
if(zz>LastRecordedTop)LastRecordedTop=zz;
}
}
return(LastRecordedTop);
}


بنفس الفكره سوف تستخرج أقل قاع

DrIMO
06-05-2017, 07:08 PM
العفو أخي هذا واجب
بالنسبة لسؤالك البرمجي يمكنك عمل دالة تقوم بحساب إجمالي الربح المحقق بآخر شمعة كالتالي :


double ProfitOnLastBar()
{
double pts;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
datetime ot=OrderOpenTime();
if(sy==Symbol()&&mn==MagicNumber)
{
if(ot>=Time[0])
{
pts+=pt+sw+cm;
}
}
}
return(pts);
}

ودالة تحسب عدد الصفقات التي فتحت بآخر شمعة كالتالي :


int CountOrdersTime()
{
int cnt=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderOpenTime()>=Time[0])cnt++;
}
}
return(cnt);
}


ثم الشروط قبل دالة فتح الصفقة كالتالي :

if((CountOrdersTime()>0&&ProfitOnLastBar()<0)||CountOrdersTime()==0)//Open Order

- بالنسبة لطريقة عمل الباكتيست راجع الموضوع التالي :
طريقة عمل الباكتيست بدقة %99,90 (http://www.fxprg.com/vb/showthread.php?t=31563)
شكرا اخي فخر العرب
جاري التجربه وساوافيك بالنتائج ان شاء الله

Waddah
06-05-2017, 07:45 PM
السلام عليكم أستاذ حسن :
عندي مؤشر يرسم مستطيل حسب شروط معينة على اليوم الحالي و اليوم السابق و اليوم الذي بعده
السؤال عند قدوم اليوم التالي أريد حذف المستطيل الأول (الذي أصبح قبل 3 أيام ) - بوضع شارت جديد وتركيب المؤشر تحل المشكلة ... لكن كيف يتم ذلك بدون إغلاق الشارت ؟؟


مع الشكر الجزيل

kira-h
07-05-2017, 03:24 PM
السلام عليكم أستاذ حسن :
عندي مؤشر يرسم مستطيل حسب شروط معينة على اليوم الحالي و اليوم السابق و اليوم الذي بعده
السؤال عند قدوم اليوم التالي أريد حذف المستطيل الأول (الذي أصبح قبل 3 أيام ) - بوضع شارت جديد وتركيب المؤشر تحل المشكلة ... لكن كيف يتم ذلك بدون إغلاق الشارت ؟؟


مع الشكر الجزيل
وعليكم السلام
إذا كان الرسم عن طريق الـ Objects اجعل رسم المستطيلات حسب الشروط الجديدة كل تكة للسعر وبالتالي سيتجدد الرسم ولن تحتاج لحذف القديم
أما إذا كان الرسم عن طريق الاندكس Index استخدم شرط عدد الشموع السابقة التي ستظهر عليها المستطيلات

Waddah
08-05-2017, 10:57 AM
السلام عليكم ..
عملت مؤشر يرسم مستويات فيبو لليوم السابق ....ماهي صيغة الحلقة لأجعله يرسم المستويات لعدد من الأيام السابقة 5 أيام مثلا


مع جزيل الشكر

kira-h
08-05-2017, 09:54 PM
السلام عليكم ..
عملت مؤشر يرسم مستويات فيبو لليوم السابق ....ماهي صيغة الحلقة لأجعله يرسم المستويات لعدد من الأيام السابقة 5 أيام مثلا


مع جزيل الشكر

وعليكم السلام
راجع كود المؤشر المرفق واستخدم نفس الكيفية بتعديل المعادلات

Ahmed
09-05-2017, 09:25 AM
السلام عليكم استاذ حسن
الرجاء شرح معنى هذا الكود

if(MarketInfo(Symbol(),MODE_MINLOT)<0.1)Lot_Decimal=2;else Lot_Decimal=1;

kira-h
09-05-2017, 05:32 PM
السلام عليكم استاذ حسن
الرجاء شرح معنى هذا الكود

if(MarketInfo(Symbol(),MODE_MINLOT)<0.1)Lot_Decimal=2;else Lot_Decimal=1;
وعليكم السلام
هذا الشرط لمعرفة عدد الأعشار بعد الفاصلة لأقل لوت متاح بالمنصة، فإذا كان أصغر من لوت 0.1 سيكون Lot_Decimal=2
وإذا العكس يكون Lot_Decimal=1

وعند حساب إدارة المال التناسبية أو المضاعفات وغيرها (لوت الصفقة القادمة) نضع الوظيفة التالية :

NormalizeDouble(NewLots,Lot_Decimal)
بحيث NewLots ناتج اللوت الجديد

وبالتالي من خلال الوظيفة السابقة لن يحدث خطأ بحجم العقود بحيث إذا كان البروكر لا يقبل لوت أقل من 0.1 فسيضع الناتج من نوع x,y وليس x,yz
مثال نتيجة حجم العقد الجديد هو NewLots=1.368
إذا كان البروكر لا يقبل أقل من لوت 0.1 فحجم عقد الصفقة هو NormalizeDouble(NewLots,Lot_Decimal)=1.4، وإذا كان يقبل لوت أقل 0.1 فحجم الصفقة هو NormalizeDouble(NewLots,Lot_Decimal)=1.37

Ahmed
09-05-2017, 08:52 PM
وعليكم السلام
هذا الشرط لمعرفة عدد الأعشار بعد الفاصلة لأقل لوت متاح بالمنصة، فإذا كان أصغر من لوت 0.1 سيكون Lot_Decimal=2
وإذا العكس يكون Lot_Decimal=1

وعند حساب إدارة المال التناسبية أو المضاعفات وغيرها (لوت الصفقة القادمة) نضع الوظيفة التالية :

NormalizeDouble(NewLots,Lot_Decimal)
بحيث NewLots ناتج اللوت الجديد

وبالتالي من خلال الوظيفة السابقة لن يحدث خطأ بحجم العقود بحيث إذا كان البروكر لا يقبل لوت أقل من 0.1 فسيضع الناتج من نوع x,y وليس x,yz
مثال نتيجة حجم العقد الجديد هو NewLots=1.368
إذا كان البروكر لا يقبل أقل من لوت 0.1 فحجم عقد الصفقة هو NormalizeDouble(NewLots,Lot_Decimal)=1.4، وإذا كان يقبل لوت أقل 0.1 فحجم الصفقة هو NormalizeDouble(NewLots,Lot_Decimal)=1.37
بارك الله فيك استاذ حسن

kira-h
10-05-2017, 04:37 PM
بارك الله فيك استاذ حسن

ويبارك فيك أخي

Anis40
10-05-2017, 06:32 PM
السلام عليكم و تحية طيبة
كيف اعمل optimization للاكسيبرت لاستخراج افضل اعدادات

Ahmed
11-05-2017, 06:18 AM
السلام عليكم استاذ حسن
هل يوجد وظيفة تعود بعدد الصفقات الخاسرة المتتالية المغلقة

محترف
11-05-2017, 04:14 PM
مرحبا اخوانى
ان كنت اريد فتح صفقة شراء مثلا عند تحقق شرط ان يكون الشمعة السابقة خضراء والتوقيت اكبر من الساغة الخامسة واقل من السادسة بتوقيت المنصة
ازى اكتب الكود فى برمجة الاكسبيرت

kira-h
11-05-2017, 11:59 PM
السلام عليكم استاذ حسن
هل يوجد وظيفة تعود بعدد الصفقات الخاسرة المتتالية المغلقة

وعليكم السلام
يمكنك عمل دالة فرعية لمعرفة عدد الصفقات المغلقة الخاسرة على التوالي كالتالي :


int ConsecutiveLoss()
{
int cnt=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderOpenTime()>LastProfitTime())
{
cnt++;
}
}
return(cnt);
}


بحيث LastProfitTime دالة لمعرفة توقيت آخر صفقة مغلقة على ربح كالتالي :


datetime LastProfitTime()
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderProfit()>=0)
{
return(OrderOpenTime());
}
}
return(0);
}

kira-h
12-05-2017, 12:04 AM
مرحبا اخوانى
ان كنت اريد فتح صفقة شراء مثلا عند تحقق شرط ان يكون الشمعة السابقة خضراء والتوقيت اكبر من الساغة الخامسة واقل من السادسة بتوقيت المنصة
ازى اكتب الكود فى برمجة الاكسبيرت
السلام عليكم
الشروط كالتالي :


void OnTick()
{
datetime Start=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + "05:00");
datetime End=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + " " + "06:00");

if(Close[1]>Open[1]&&TimeCurrent()>=Start&&TimeCurrent()<=End)//...
}

kira-h
12-05-2017, 01:10 AM
السلام عليكم و تحية طيبة
كيف اعمل optimization للاكسيبرت لاستخراج افضل اعدادات
وعليكم السلام
راجع المشاركة التالية :
خاصية الـ Optimization (http://www.fxprg.com/vb/showthread.php?t=31563&p=845841&viewfull=1#post845841)

Ahmed
12-05-2017, 06:17 AM
بارك الله فيك
كيف يمكن معرفة الهاي واللو لثاني شمعة اربع ساعات والتي تتكون عى فريم الاربع ساعات
663

kira-h
13-05-2017, 01:11 AM
بارك الله فيك
كيف يمكن معرفة الهاي واللو لثاني شمعة اربع ساعات والتي تتكون عى فريم الاربع ساعات

السلام عليكم
ستستخدم الوظيفة iBarShift لفريم الأسبوعي PERIOD_W1
راجع كود المؤشر المرفق

Ahmed
13-05-2017, 08:36 PM
السلام عليكم
ستستخدم الوظيفة iBarShift لفريم الأسبوعي PERIOD_W1
راجع كود المؤشر المرفق

بارك الله فيك استاذ حسن

kira-h
14-05-2017, 05:10 PM
بارك الله فيك استاذ حسن

بالتوفيق إن شاء الله

shivaa
15-05-2017, 12:47 AM
السلام عليكم
استاذى
هل ممكن الكومنت الموجود فى OrderSend تعديل عليه بعد تفعيل
بداله
OrderModif
او باى طريقه اخر ممكن مثال
ممكن الداله اكون شاكر

kira-h
15-05-2017, 01:46 AM
السلام عليكم
استاذى
هل ممكن الكومنت الموجود فى OrderSend تعديل عليه بعد تفعيل
بداله
OrderModif
او باى طريقه اخر ممكن مثال
ممكن الداله اكون شاكر

وعليكم السلام
لا يمكن تعديل الكومنت بعد تفعيل الصفقة

Ahmed
15-05-2017, 10:31 AM
السلام عليكم استاذ حسن
بعد تجربة المؤشر لاحظة انه يرسم الحطوط للاسبوع الماضي
اما الاسبوع الحالي فلا يرسم الخطوط عند الهاي واللو
731

shivaa
15-05-2017, 12:34 PM
السلام عليكم
ممكن داله TrailingStop ولكن تعمل على الربح الاجمالى وليسى لكل صفقه على حدا
اكون شاكر

kira-h
15-05-2017, 09:39 PM
السلام عليكم استاذ حسن
بعد تجربة المؤشر لاحظة انه يرسم الحطوط للاسبوع الماضي
اما الاسبوع الحالي فلا يرسم الخطوط عند الهاي واللو

وعليكم السلام
تم التعديل بالنسخة المرفقة

sabil
16-05-2017, 01:17 AM
كيف اضع شرط شراء لما الاستوكاستك يتشبع عند المستوى 20 يعني يحصل تقاطع ال main لل signal من تحت لفوق
وشرط بيع لما الاستوكاستك يتشبع عند المستوى 80 يعني تقاطع ال main لل signal من فوق لتحت

انا بعرف اعمل التقاطعات عادي لكن عند المستويات لاء

Ahmed
16-05-2017, 07:13 AM
وعليكم السلام
تم التعديل بالنسخة المرفقة

الان ممتاز اخي حسن بارك الله فيك

Ahmed
16-05-2017, 07:20 AM
كيف اضع شرط شراء لما الاستوكاستك يتشبع عند المستوى 20 يعني يحصل تقاطع ال main لل signal من تحت لفوق
وشرط بيع لما الاستوكاستك يتشبع عند المستوى 80 يعني تقاطع ال main لل signal من فوق لتحت

انا بعرف اعمل التقاطعات عادي لكن عند المستويات لاء

شوف الكود

void CheckForStochasticTrade()
{
double K_Line=iStochastic(NULL,0,PercentK,PercentD,Slowin g,0,0,MODE_MAIN,1);
double D_Line=iStochastic(NULL,0,PercentK,PercentD,Slowin g,0,0,MODE_SIGNAL,1);
double Previous_K_Line=iStochastic(NULL,0,PercentK,Percen tD,Slowing,0,0,MODE_MAIN,2);
double Previous_D_Line=iStochastic(NULL,0,PercentK,Percen tD,Slowing,0,0,MODE_SIGNAL,2);

if(Previous_K_Line > 80)
if(Previous_K_Line > Previous_D_Line && K_Line < D_Line)
OrderEntry(1);

if(Previous_K_Line < 20)
if(Previous_K_Line < Previous_D_Line && K_Line > D_Line)
OrderEntry(0);
}

Ahmed
16-05-2017, 07:32 AM
السلام عليكم
ممكن داله TrailingStop ولكن تعمل على الربح الاجمالى وليسى لكل صفقه على حدا
اكون شاكر
تتبع الربح بالدولار

//+------------------------------------------------------------------+
//| Trailing Profit USD.mq4 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict

extern double Start_Trailing_USD = 1;
extern int Magic_Number = 0;
int A;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
د
if(_Digits==3||_Digits==5)A=10;else A=1;

return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
Trailing_Profit_USD();
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| وظيفة تتبع الربح بالدولار |
//+------------------------------------------------------------------+
void Trailing_Profit_USD()
{
double Trade_Profit = Profit();

if(Trade_Profit >= Start_Trailing_USD &&(GlobalVariableGet("TS Percent") < Trade_Profit-Start_Trailing_USD || GlobalVariableGet("TS Percent")==0))
{
GlobalVariableSet("TS Percent",Trade_Profit-Start_Trailing_USD);
}

if(Trade_Profit <= GlobalVariableGet("TS Percent") && GlobalVariableGet("TS Percent")!=0)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&& OrderMagicNumber() == Magic_Number)
{
if(OrderType()==OP_BUY)
{
bool closeB=OrderClose(OrderTicket(),OrderLots(),Bid,3* A);
}
if(OrderType()==OP_SELL)
{
bool closeS=OrderClose(OrderTicket(),OrderLots(),Ask,3* A);
}
}
}
GlobalVariableDel("TS Percent");
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| وظيفة تحسب ربح كل الصفقات بالدولار |
//+------------------------------------------------------------------+
double Profit()
{
double profit=0;
for(int i=0;i<=OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol()&& OrderMagicNumber() == Magic_Number)
{
profit+=OrderProfit();
}
}
return(profit);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+


تتبع الربح بنسبة مئوية من الحساب

//+------------------------------------------------------------------+
//| تتبع الربح بنسبة مئوية من الحساب.mq4 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict


double Start_Trailing_Percent = 0.01;
extern int Magic_Number = 6666;
int A;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---


//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---

//----// تتبع الربح بالنسبة المئوية
Trailing_Balance_Percent();
}
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| وظيفة تريلينج بروفت بناء على النسبة المئوية للحساب |
//+------------------------------------------------------------------+
void Trailing_Balance_Percent()
{
double ProfitPercent = AccountProfit()/AccountBalance()*100;

if(ProfitPercent >= Start_Trailing_Percent && (GlobalVariableGet("TS Percent") < ProfitPercent - Start_Trailing_Percent || GlobalVariableGet("TS Percent")==0))
{
GlobalVariableSet("TS Percent",ProfitPercent-Start_Trailing_Percent);
}

if(ProfitPercent <= GlobalVariableGet("TS Percent") && GlobalVariableGet("TS Percent")!=0)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol())
if(OrderMagicNumber()==Magic_Number)
{
if(OrderType()==OP_BUY)
{
bool closeB=OrderClose(OrderTicket(),OrderLots(),Bid,3* A);
}
if(OrderType()==OP_SELL)
{
bool closeS=OrderClose(OrderTicket(),OrderLots(),Ask,3* A);
}
}
}
GlobalVariableDel("TS Percent");
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

sabil
16-05-2017, 03:46 PM
شوف الكود

void CheckForStochasticTrade()
{
double K_Line=iStochastic(NULL,0,PercentK,PercentD,Slowin g,0,0,MODE_MAIN,1);
double D_Line=iStochastic(NULL,0,PercentK,PercentD,Slowin g,0,0,MODE_SIGNAL,1);
double Previous_K_Line=iStochastic(NULL,0,PercentK,Percen tD,Slowing,0,0,MODE_MAIN,2);
double Previous_D_Line=iStochastic(NULL,0,PercentK,Percen tD,Slowing,0,0,MODE_SIGNAL,2);

if(Previous_K_Line > 80)
if(Previous_K_Line > Previous_D_Line && K_Line < D_Line)
OrderEntry(1);

if(Previous_K_Line < 20)
if(Previous_K_Line < Previous_D_Line && K_Line > D_Line)
OrderEntry(0);
}


لم يعمل معي الكود اخي
وايضا احتاجه داخل الدالة لاني ساضع معه شروط اخرى

Ahmed
16-05-2017, 04:52 PM
لم يعمل معي الكود اخي
وايضا احتاجه داخل الدالة لاني ساضع معه شروط اخرى

يمكنك استخدام هذا الكود

double K_Line=iStochastic(NULL,0,PercentK,PercentD,Slowin g,0,0,MODE_MAIN,1);
double D_Line=iStochastic(NULL,0,PercentK,PercentD,Slowin g,0,0,MODE_SIGNAL,1);
double Previous_K_Line=iStochastic(NULL,0,PercentK,Percen tD,Slowing,0,0,MODE_MAIN,2);
double Previous_D_Line=iStochastic(NULL,0,PercentK,Percen tD,Slowing,0,0,MODE_SIGNAL,2);


if(Previous_K_Line > 80 && Previous_K_Line > Previous_D_Line && K_Line < D_Line)
{
bool Sell_Ticket = OrderSend(Symbol(),OP_SELL,lot,NormalizeDouble(Bid ,Digits),30,0,0,NULL,Magic_Number,0,clrRed);
}

if(Previous_K_Line < 20 && Previous_K_Line < Previous_D_Line && K_Line > D_Line)
{
bool buy_Ticket = OrderSend(Symbol(),OP_BUY,lot,NormalizeDouble(Ask, Digits),30,0,0,NULL,Magic_Number,0,clrAqua);
}

kira-h
16-05-2017, 04:52 PM
شوف الكود

void CheckForStochasticTrade()
{
double K_Line=iStochastic(NULL,0,PercentK,PercentD,Slowin g,0,0,MODE_MAIN,1);
double D_Line=iStochastic(NULL,0,PercentK,PercentD,Slowin g,0,0,MODE_SIGNAL,1);
double Previous_K_Line=iStochastic(NULL,0,PercentK,Percen tD,Slowing,0,0,MODE_MAIN,2);
double Previous_D_Line=iStochastic(NULL,0,PercentK,Percen tD,Slowing,0,0,MODE_SIGNAL,2);

if(Previous_K_Line > 80)
if(Previous_K_Line > Previous_D_Line && K_Line < D_Line)
OrderEntry(1);

if(Previous_K_Line < 20)
if(Previous_K_Line < Previous_D_Line && K_Line > D_Line)
OrderEntry(0);
}


شكرا جزيلا أخي الكريم

kira-h
16-05-2017, 04:53 PM
لم يعمل معي الكود اخي
وايضا احتاجه داخل الدالة لاني ساضع معه شروط اخرى


الكود سليم أخي
يمكنك أيضا كتابة الكود بهذا الشكل :


double M1=iStochastic(Symbol(),0,5,3,3,0,0,MODE_MAIN,1);
double S1=iStochastic(Symbol(),0,5,3,3,0,0,MODE_SIGNAL,1) ;
double M2=iStochastic(Symbol(),0,5,3,3,0,0,MODE_MAIN,2);
double S2=iStochastic(Symbol(),0,5,3,3,0,0,MODE_SIGNAL,2) ;

if(M1<20 && M1>S1 && M2<=S2)//OpenBuy
if(M1>80 && M1<S1 && M2>=S2)//OpenSell

Ahmed
16-05-2017, 05:04 PM
الشكر ليك اخي حسن فنحن من تلاميذك

Ahmed
16-05-2017, 05:05 PM
شكرا جزيلا أخي الكريم

الشكر ليك اخي حسن فنحن من تلاميذك

shivaa
18-05-2017, 10:09 AM
السلام عليكم
عندى فكره عاوز تعاونى عليها
عاوز اميز الصفقات المعدله كسبت ورجعت للخصاره تانى بحيث لورجعت على نقطه التعادل تقفل حولت اقفل الا تيجى على الصفر قفل الكل الا يجى على الصفر حتى الا لسه مدخلتش على المكسب
الفكره هى
اميزه كل صفقه بكومنت مختلف متسلسل بحيث اذا اتعدل على الصفقه احفظ الكونت فى منتغير يكون الشرط الغلاق ان يكون موجود الكومنت
مشعارف اكتب الفكره ممكن تسعدنى عليها

sal_moh85
18-05-2017, 05:18 PM
سلام عليك استاذ kira-h سوال بخصوص
Bitwise Operations
ما هي فائدتها ومثال عليها ان عشان شو بستخدمها وشكرا لك جزيلا

kira-h
18-05-2017, 07:04 PM
السلام عليكم
عندى فكره عاوز تعاونى عليها
عاوز اميز الصفقات المعدله كسبت ورجعت للخصاره تانى بحيث لورجعت على نقطه التعادل تقفل حولت اقفل الا تيجى على الصفر قفل الكل الا يجى على الصفر حتى الا لسه مدخلتش على المكسب
الفكره هى
اميزه كل صفقه بكومنت مختلف متسلسل بحيث اذا اتعدل على الصفقه احفظ الكونت فى منتغير يكون الشرط الغلاق ان يكون موجود الكومنت
مشعارف اكتب الفكره ممكن تسعدنى عليها

وعليكم السلام
الشرح غير واضح أخي
عموما لا يمكن تعديل الكومنت بعد فتح الصفقة

sal_moh85
18-05-2017, 07:27 PM
سلام عليك استاذ kira-h سوال بخصوص
Bitwise Operations
ما هي فائدتها ومثال عليها ان عشان شو بستخدمها وشكرا لك جزيلا

kira-h
18-05-2017, 09:17 PM
سلام عليك استاذ kira-h سوال بخصوص
Bitwise Operations
ما هي فائدتها ومثال عليها ان عشان شو بستخدمها وشكرا لك جزيلا

وعليكم السلام
راجع الصفحة التالي :
Bitwise Operations (https://docs.mql4.com/basis/operations/bit)

sal_moh85
18-05-2017, 10:42 PM
وعليكم السلام
راجع الصفحة التالي :
Bitwise Operations (https://docs.mql4.com/basis/operations/bit)

قريتها هي صفحه كلها بس استخدامها بشان شو ليش بستخدمها يعني شو الفايده منها

shivaa
18-05-2017, 11:57 PM
وعليكم السلام
الشرح غير واضح أخي
عموما لا يمكن تعديل الكومنت بعد فتح الصفقة
انا اقصد ان وانا بفتح صفقه اضع كومنت مختلف لكل صفقه
واحتفظ بيه لما يزيد الربح عن مقدار محدد قبل الترنج استب
حتى اذا رجع اقفل الصفقه قبل الرجوع للصفر وتتحول لخصاره
اذا تخطى الترنج هيقوم بالا انا عوزه
الشركه الا انا شغال عمله شرط لزم اتعدا 40 نقطه عشان اعدل على الصفقه

kira-h
19-05-2017, 01:40 AM
انا اقصد ان وانا بفتح صفقه اضع كومنت مختلف لكل صفقه
واحتفظ بيه لما يزيد الربح عن مقدار محدد قبل الترنج استب
حتى اذا رجع اقفل الصفقه قبل الرجوع للصفر وتتحول لخصاره
اذا تخطى الترنج هيقوم بالا انا عوزه
الشركه الا انا شغال عمله شرط لزم اتعدا 40 نقطه عشان اعدل على الصفقه

في هذه الحالة ستستخدم البريك ايفن المخفي وذلك باستخدام متغيرات الجلوبال لحفط قيمة سعر "البريك ايفن بيب" عند تحقق شرط "البريك ايفن"
مثال:


//-----------Hiden Break Even fonction
void HidenMoveBreakEven()
{
bool s;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();

if(sy==Symbol()&&mn==MagicNo&&ot<=OP_SELL)
{
if(ot==OP_BUY)
{
if(NormalizeDouble((Bid-op),Digits)>HidenBreakEven*point)
{
if((NormalizeDouble((sl-op),Digits)<0)||(sl==0))
{
GlobalVariableSet("BE"+OrderTicket()+MagicNo,Bid-HidenBreakEvenPips*point);
}
}
}
}
else
{
if(NormalizeDouble((op-Ask),Digits)>HidenBreakEven*point)
{
if((NormalizeDouble((op-sl),Digits)<0)||(sl==0))
{
GlobalVariableSet("BE"+OrderTicket()+MagicNo,Ask+HidenBreakEvenPips*poin t);
}
}
}
}
}



ثم سنقوم بعمل دالة تبحث في الصفقات المفتوحة وتقارن بينها وبين سعر البريك ايفن بيب، ثم تغلق الصفقة عندما يتحقق الشرط
مثال:


void CloseHidenBreakEven()
{
bool close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==OP_BUY&&GlobalVariableGet("BE"+OrderTicket()+MagicNo)!=0)
{
if(Bid<=GlobalVariableGet("BE"+OrderTicket()+MagicNo))
{
close=OrderClose(OrderTicket(),OrderLots(),Bid,3*Q );
GlobalVariableDel("BE"+OrderTicket()+MagicNo);
}
}
if(OrderType()==OP_SELL&&GlobalVariableGet("BE"+OrderTicket()+MagicNo)!=0)
{
if(Ask>=GlobalVariableGet("BE"+OrderTicket()+MagicNo))
{
close=OrderClose(OrderTicket(),OrderLots(),Ask,3*Q );
GlobalVariableDel("BE"+OrderTicket()+MagicNo);
}
}
}
}
}


وتكون الشروط بالدالة الرئيسية كالتالي :


void OnTick()
{
if(HidenBreakEven>0){HidenMoveBreakEven();CloseHidenBreakEven();}
}


والمتغيرات الخارجية كالتالي :


input double HidenBreakEven=40,
HidenBreakEvenPips=0;

shivaa
19-05-2017, 10:56 AM
لسلام عليكم
ممكن شرح داله
GlobalVariableGet
GlobalVariableCheck
GlobalVariableSet
اسف على الازعاج
ممكن اكون شاكر

kira-h
19-05-2017, 04:14 PM
لسلام عليكم
ممكن شرح داله
GlobalVariableGet
GlobalVariableCheck
GlobalVariableSet
اسف على الازعاج
ممكن اكون شاكر
وعليكم السلام
Global Variables تعني المتغيرات العامة، يعني متغيرات يمكن تغيير قيمها او قراءتها من قبل الدوال على نطاق أوسع، حيث تخزن القيم في الجهاز لمدة 4 أسابيع منذ لحظة استدعائها،
ويتم استدعاؤها بشكل عادي حتى لو انقطع السيرفر أو الكهرباء أو تغيير الحساب...،
ويمكن رؤية الـ global variables من المنصة بالدخول الى Tools أو بالضغط على F3 ستجد قيمها وتاريخ تسجيلها بالجهاز.

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

وللعمل بمتغيرات الجلوبال نستخدم الوظائف التالية :

GlobalVariableSet( string name, double value)
يتم من خلاله إنشاء متغير جلوبال نحدد له اسم معين name ونعطيه قيمة معينة value


GlobalVariableGet( string name)
يتم من خلاله استدعاء المتغير ذو الاسم name الذي قمنا بانشائه بالـ GlobalVariableSet


GlobalVariableDel( string name)
هذه الوظيفة تقوم بحذف متغير الجلوبال ذو الاسم name


GlobalVariableCheck(string name)
هذه الوظيفة منطقية تقوم بالبحث عن متغير الجلوبال المحدد بالاسم name، تعود بـ true أو false

للمزيد من المعلومات راجع الصفحة التالية :
GlobalVariables (https://book.mql4.com/variables/globals)

shivaa
20-05-2017, 01:07 AM
وعليكم السلام
Global Variables تعني المتغيرات العامة، يعني متغيرات يمكن تغيير قيمها او قراءتها من قبل الدوال على نطاق أوسع، حيث تخزن القيم في الجهاز ويتم استدعائها بشكل عادي حتى لو انقطع السيرفر أو الكهرباء...، ويمكن رؤية الـ global variables من المنصة بالدخول الى Tools ستجد قيمها وتاريخ تسجيلها بالجهاز.

أيضا الـ Global Variables هي حلقة الوصل والاتصال بين مجموعة اكسبيرتات تتبادل المعلومات بينهما كيف؟
لنفترض انك تشغل اكسبيرت على شارت يورودولار واكسبيرت اخر يعمل على شارت آخر وتريد ان يرقب احدهما الاخر هل دخل بيع ام شراء حتى يفعل نفسه لمهمة محددة . هنا يأتي دور الـ global variables فان تعرف متغير على انه global variable في اكسبيرت ثم الاكسبيرت الاخر يقرأ هذا المتغير وعليه يحدد مهمته.

وللعمل بمتغيرات الجلوبال نستخدم الوظائف التالية :

GlobalVariableSet( string name, double value)
يتم من خلاله إنشاء متغير جلوبال نحدد له اسم معين name ونعطيه قيمة معينة value


GlobalVariableGet( string name)
يتم من خلاله استدعاء المتغير ذو الاسم name الذي قمنا بانشائه بالـ GlobalVariableSet


GlobalVariableDel( string name)
هذه الوظيفة تقوم بحذف متغير الجلوبال ذو الاسم name


GlobalVariableCheck(string name)
هذه الوظيفة منطقية تقوم بالبحث عن متغير الجلوبال المحدد بالاسم name، تعود بـ true أو false

للمزيد من المعلومات راجع الصفحة التالية :
GlobalVariables (https://book.mql4.com/variables/globals)


السلام عليكم
جزاك الله خيراااااااااااااااااااااااااااااااااا
شكر ا

Waddah
20-05-2017, 12:24 PM
عند إنشاء إكسبرت جديد ظهرت دالة جديدة
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
ممكن شرحها وماذا نستفيد منها ....
مع مثال صغير إن أمكن

مع جزيل الشكر
const string &sparam)

Ahmed
20-05-2017, 12:39 PM
عند إنشاء إكسبرت جديد ظهرت دالة جديدة
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
ممكن شرحها وماذا نستفيد منها ....
مع مثال صغير إن أمكن

مع جزيل الشكر
const string &sparam)

اخي هي تظهر عند انشاء مؤشر جديد ولا تظهر عند انشاء اكسبيرت جديد

kira-h
20-05-2017, 06:22 PM
عند إنشاء إكسبرت جديد ظهرت دالة جديدة
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
ممكن شرحها وماذا نستفيد منها ....
مع مثال صغير إن أمكن

مع جزيل الشكر
const string &sparam)

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


void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{

}


بحيث :
id تحفظ نوع الحدث الذي تم ( تحرك الماوس - ضغط على الشارت - تحريك كائن - ضغط على زر في الكيبورد ... )
وأنواعها :

CHARTEVENT_KEYDOWN
للضغط على زر على الكيبورد


CHARTEVENT_MOUSE_MOVE
تحرك الماوس على الشارت


CHARTEVENT_OBJECT_CREATE
رسم كائن جديد على الشارت


CHARTEVENT_OBJECT_CHANGE
تغيير قيم كائن


CHARTEVENT_OBJECT_DELETE
حذف كائن


CHARTEVENT_CLICK
كليك على الشارت


CHARTEVENT_OBJECT_CLICK
إضافة كائن على الشارت


CHARTEVENT_OBJECT_ENDEDIT
الإنتهاء من تعديل نص في الكائن


CHARTEVENT_CHART_CHANGE
تعديل قيم الشارت


CHARTEVENT_CUSTOM+N
عمل كائن فرعي محدد


المتغيرات الثلاث الأخرى تحفظ قيمة معينه حسب نوع الحدث
فمثلا بالنسبه للحدث CHARTEVENT_OBJECT_CREATE
sparam تحفظ إسم الكائن الذي تم رسمه

مثلا CHARTEVENT_OBJECT_CLICK

lparam تحفظ قيمة الإحداثي الأفقي
dparam تحفظ قيمة الإحداثي الراسي
sparam تحفظ إسم الكائن الذي تم الضغط عليه

مثال لعمل اكسبيرت يقوم برسم أزرار على الشارت البيع، الشراء والاغلاق...

دالة لرسم الأزرار على الشارت كالتالي:


void CreatePanel(string name,ENUM_OBJECT Type,string text,int XDistance,int YDistance,int Width,int Hight,
color Color_,color TextColor,color boarderColor,int fontsize)
{
ObjectCreate(0,name,Type,0,0,0);
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,XDistanc e);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,YDistanc e);
ObjectSetInteger(0,name,OBJPROP_XSIZE,Width);
ObjectSetInteger(0,name,OBJPROP_YSIZE,Hight);
ObjectSetString(0,name,OBJPROP_TEXT,text);
ObjectSetString(0,name,OBJPROP_FONT,"Arial Bold");
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,fontsize) ;
ObjectSetInteger(0,name,OBJPROP_CORNER,Panel_Corne r);
ObjectSetInteger(0,name,OBJPROP_COLOR,TextColor);
ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,board erColor);
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,Color_);
if(Type==OBJ_EDIT)ObjectSetInteger(0,name,OBJPROP_ ALIGN,ALIGN_CENTER);
}


ثم بداخل الدالة OnInit نكتب الدوال التالية:


CreatePanel("Panel_Buy",OBJ_BUTTON,"BUY", 10, 45,60,30,DodgerBlue,White,Blue,12);
CreatePanel("Panel_Lot",OBJ_EDIT,"0.1", 70, 50,30,20,White,Black,Black,9);
CreatePanel("Panel_+",OBJ_BUTTON,"+", 75, 38,20,10,Lime,Black,Lime,9);
CreatePanel("Panel_-",OBJ_BUTTON,"-", 75, 72,20,10,Red,Black,Red,9);
CreatePanel("Panel_Sell",OBJ_BUTTON,"SELL",100,45,60,30,OrangeRed,White,Red,12);
CreatePanel("Panel_TP",OBJ_BUTTON,"TP", 10, 80,20,20,Blue,White,Blue,10);
CreatePanel("Panel_SL",OBJ_BUTTON,"SL", 140,80,20,20,Blue,White,Blue,10);
CreatePanel("Panel_TP_text",OBJ_EDIT,"0",30, 80,40,20,White,Black,Red,9);
CreatePanel("Panel_SL_text",OBJ_EDIT,"0",100,80,40,20,White,Black,Red,9);
if(Enable_CloseAll)CreatePanel("Panel_CloseAll",OBJ_BUTTON,
"CLOSE ALL",10, 105,70,20,Red,White,Red,8);
if(Enable_DeleteAll)CreatePanel("Panel_DeleteAll",OBJ_BUTTON,
"DELETE ALL",90, 105,70,20,Red,White,Red,8);


الآن نعود مرة أخرى للداله OnChartEvent
في البداية نقوم بإضافة شرط لمعرفة إذا ما تم الضغط على أي زر على الشارت بإستدعاء إسمه


if(id==CHARTEVENT_OBJECT_CLICK)
{

string Object_Name=ObjectGetString(0,sparam,OBJPROP_NAME) ;

if(Object_Name=="Panel_Buy")
{
// open buy
}
if(Object_Name=="Panel_Sell")
{
// open sell
}
if(Object_Name=="Panel_CloseAll")
{
// close all
}
if(Object_Name=="Panel_DeleteAll")
{
// delete all
}

}

بقي فقط أن نضيف الأوامر كما هي محدده في الكومنتات لكن قبل ذلك يجب أن نقوم بمعرفة قيم حجم اللوت و الهدف و الاستوب :



double Lots=StringToDouble(ObjectDescription("Panel_Lot")); StopLoss=StringToDouble(ObjectDescription("Panel_SL_text")); TakeProfit=StringToDouble(ObjectDescription("Panel_TP_text"));


أيضا سنضيف كود آخر بحيث بعد الضغط على الأزار تعود إلى طبيعتها مره أخرى

ObjectSetInteger(0,Object_Name,OBJPROP_SELECTED,fa lse); ObjectSetInteger(0,Object_Name,OBJPROP_STATE,false );

وسيكون الكود في النهاية بشكل كامل :


if(id==CHARTEVENT_OBJECT_CLICK)
{

double StopLoss,TakeProfit;
double Lots=StringToDouble(ObjectDescription("Panel_Lot"));
StopLoss=StringToDouble(ObjectDescription("Panel_SL_text"));
TakeProfit=StringToDouble(ObjectDescription("Panel_TP_text"));
double SL,TP;
int ticket;
string Object_Name=ObjectGetString(0,sparam,OBJPROP_NAME) ;

if(Object_Name=="Panel_Buy")
{
if(StopLoss==0)SL=0;else SL=Ask-StopLoss*point;
if(TakeProfit==0)TP=0;else TP=Ask+TakeProfit*point;

ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDou ble(Ask,Digits),3*P,SL,TP,"Panel EA",0,0,Blue);
ObjectSetInteger(0,Object_Name,OBJPROP_SELECTED,fa lse);
ObjectSetInteger(0,Object_Name,OBJPROP_STATE,false );
}
if(Object_Name=="Panel_Sell")
{
if(StopLoss==0)SL=0;else SL=Bid+StopLoss*point;
if(TakeProfit==0)TP=0;else TP=Bid-TakeProfit*point;
ticket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDo uble(Bid,Digits),3*P,SL,TP,"Panel EA",0,0,Blue);
ObjectSetInteger(0,Object_Name,OBJPROP_SELECTED,fa lse);
ObjectSetInteger(0,Object_Name,OBJPROP_STATE,false );
}
if(Object_Name=="Panel_CloseAll")
{
CloseOrders(OP_BUY);
CloseOrders(OP_SELL);
ObjectSetInteger(0,Object_Name,OBJPROP_SELECTED,fa lse);
ObjectSetInteger(0,Object_Name,OBJPROP_STATE,false );
}
if(Object_Name=="Panel_DeleteAll")
{
CloseOrders(OP_BUYLIMIT);
CloseOrders(OP_SELLLIMIT);
CloseOrders(OP_BUYSTOP);
CloseOrders(OP_SELLSTOP);
ObjectSetInteger(0,Object_Name,OBJPROP_SELECTED,fa lse);
ObjectSetInteger(0,Object_Name,OBJPROP_STATE,false );
}
}


بقي الآن أن نضيف كود لزيادة أو تقليل حجم اللوت عندما يتم الضغط على زر + أو -


if(Object_Name=="Panel_+")
{
ObjectSetString(0,"Panel_Lot",OBJPROP_TEXT,DoubleToStr(Lots+MarketInfo(Symbol() ,MODE_MINLOT),2));
}
if(Object_Name=="Panel_-")
{
Lots=MathMax(Lots-MarketInfo(Symbol(),MODE_MINLOT),MarketInfo(Symbol (),MODE_MINLOT));
ObjectSetString(0,"Panel_Lot",OBJPROP_TEXT,DoubleToStr(Lots,2));
}


ولا ننسى الجزء البسيط وهو دالة إغلاق الصفقات


void CloseOrders(int type)
{
for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
{
bool select=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
int ticket=OrderTicket();
double lots=OrderLots();
int Otype=OrderType();

if(OrderSymbol()==Symbol()&&Otype==type)
{
if(Otype==OP_BUY)
{
bool close= OrderClose(ticket,lots,NormalizeDouble(Bid,Digits) ,3*P);

}
if(Otype==OP_SELL)
{
close= OrderClose(ticket,lots,NormalizeDouble(Ask,Digits) ,3*P);
}
if(Otype>OP_SELL)
{
OrderDelete(ticket);
}
}
}
}


وبذلك يكون الإكسبرت جاهز للتجربه و العمل
839
مرفق الإكسبرت
(منقول)
//----
وللمزيد من الملعومات راجع الصفحة التالي:
OnChartEvent (https://docs.mql4.com/basis/function/events)

sabil
23-05-2017, 05:29 PM
الكود سليم أخي
يمكنك أيضا كتابة الكود بهذا الشكل :


double M1=iStochastic(Symbol(),0,5,3,3,0,0,MODE_MAIN,1);
double S1=iStochastic(Symbol(),0,5,3,3,0,0,MODE_SIGNAL,1) ;
double M2=iStochastic(Symbol(),0,5,3,3,0,0,MODE_MAIN,2);
double S2=iStochastic(Symbol(),0,5,3,3,0,0,MODE_SIGNAL,2) ;

if(M1<20 && M1>S1 && M2<=S2)//OpenBuy
if(M1>80 && M1<S1 && M2>=S2)//OpenSell


شكراً يا غالي

Waddah
24-05-2017, 01:14 PM
السلام عليكم ... ممكن شرح كيف أعمل مصفوفة أزواج كي يعمل عليها الإكسبرت بوقت واحد

kira-h
24-05-2017, 06:15 PM
السلام عليكم ... ممكن شرح كيف أعمل مصفوفة أزواج كي يعمل عليها الإكسبرت بوقت واحد
وعليكم السلام
مثال لمصفوفه تضع فيها اسماء العملات التي تريد إستخدامها ثم تقوم بإستدعائها داخل الحلقه


string Symbols_Array[]={"EURUSD","GBPUSD","USDJPY","AUDUSD","NZDUSD"};

int size=ArraySize(Symbols_Array);
for(int i=0;i<size;i++)
{
bool s=OrderSend(Symbols_Array[i],OP_BUY,Lots,MarketInfo(Symbols_Array[i],MODE_ASK),30,0,0,"Kira-h",MagicNumber,0,Blue);
}

kira-h
24-05-2017, 06:19 PM
شكراً يا غالي

العفو أخي الكريم

fxover
24-05-2017, 10:33 PM
اخي العزيز حسن
من المعروف ان المؤشرات تحسب قيم السعر كالاتي
1.1111
فكيف نجعلها تحسب السعر للارقام الصحيحه مثلا
11111

kira-h
25-05-2017, 12:15 AM
اخي العزيز حسن
من المعروف ان المؤشرات تحسب قيم السعر كالاتي
1.1111
فكيف نجعلها تحسب السعر للارقام الصحيحه مثلا
11111

السلام عليكم
ستستخدم الوظيفة NormalizeDouble لتحديد عدد الأرقام بعد الفاصلة
مثال :

NormalizeDouble(Ask,5)*1000

fxover
25-05-2017, 12:59 AM
السلام عليكم
ستستخدم الوظيفة NormalizeDouble لتحديد عدد الأرقام بعد الفاصلة
مثال :

NormalizeDouble(Ask,5)*1000

اخي حسن شكرا لردك الجميل انا اقصد عندما لا يوجد فاصله كلها ارقام صحيحه وليس بعد الفاصله

kira-h
25-05-2017, 03:51 AM
اخي حسن شكرا لردك الجميل انا اقصد عندما لا يوجد فاصله كلها ارقام صحيحه وليس بعد الفاصله

لم أفهم سؤالك أخي، وضح بأمثلة

fxover
25-05-2017, 09:27 AM
لم أفهم سؤالك أخي، وضح بأمثلة
هذا مثال لبعض السلع حيث ان السعر كله ارقام صحيحه معلمه بالاصفر لا يوجد فاصله مما يؤدي الى اختلاف الحساب والنتيجه
داخل المؤشرات ..

Waddah
25-05-2017, 03:02 PM
السلام عليكم
عندي صفقة أو أكثر تفعلت خلال اليوم ...في حال أغلقت في نفس اليوم أو اليوم التالي لا يتم فتح صفقات جديدة في نفس اليوم , يعني اليوم الذي تغلق فيه الصفقات لا يتم فيه فتح صفقات جديدة ...

مع الشكر الجزيل

kira-h
25-05-2017, 09:15 PM
هذا مثال لبعض السلع حيث ان السعر كله ارقام صحيحه معلمه بالاصفر لا يوجد فاصله مما يؤدي الى اختلاف الحساب والنتيجه
داخل المؤشرات ..

نعم وما هو المطلوب ؟ تحويل تلك الاسعار الى ماذا ؟

kira-h
25-05-2017, 09:18 PM
السلام عليكم
عندي صفقة أو أكثر تفعلت خلال اليوم ...في حال أغلقت في نفس اليوم أو اليوم التالي لا يتم فتح صفقات جديدة في نفس اليوم , يعني اليوم الذي تغلق فيه الصفقات لا يتم فيه فتح صفقات جديدة ...

مع الشكر الجزيل
وعليكم السلام
ستقوم بعمل دالة فرعية تقوم بحساب عدد الصفقات المغلقة في اليوم كالتالي :


int DailyTrades()
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&MagicNo==OrderMagicNumber())
{
if(OrderCloseTime()>=iTime(Symbol(),1440,0)){cnt++;}
}
}
}
return(cnt);
}


ثم تكون الشروط قبل شروط فتح الصفقات كالتالي :

if(DailyTrades()==0)//...Open buy & Sell

walid roub
25-05-2017, 10:11 PM
السلام عليكم
سأحاول المساعدة في برمجة هذا الإكسبرت
http://www.fxprg.com/vb/showthread.php?t=31737
لي عودة

kira-h
26-05-2017, 02:42 AM
السلام عليكم
سأحاول المساعدة في برمجة هذا الإكسبرت
http://www.fxprg.com/vb/showthread.php?t=31737
لي عودة

وعليكم السلام
شكرا أخي الكريم،
تم تنفيذ الطلب قبل أن أرى مشاركتك
بالتوفيق إن شاء اله

sal_moh85
26-05-2017, 11:24 AM
سلام عليكم استاذ kira-h
بس بغد اذنك مساعده بي كتابة كود
اريد كود لغلق صفقات بعد عدد معين من الدقائق ساوية اول خطوه ضفتها عند كود فتح الصفقات TimeCur = TimeCurrent();
بشان اعرف توقت فتح الصفقه بس هلق شلون بدي اغلقها بعدد عدد معين من الدقائق وشكرا

kira-h
26-05-2017, 06:28 PM
سلام عليكم استاذ kira-h
بس بغد اذنك مساعده بي كتابة كود
اريد كود لغلق صفقات بعد عدد معين من الدقائق ساوية اول خطوه ضفتها عند كود فتح الصفقات TimeCur = TimeCurrent();
بشان اعرف توقت فتح الصفقه بس هلق شلون بدي اغلقها بعدد عدد معين من الدقائق وشكرا

وعليكم السلام
ستقوم بعمل دالة لمعرفة توقيت آخر صفقة مفعلة كالتالي :


datetime LastOpenTime()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
datetime ot=OrderOpenTime();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
return(ot);
}
}
return(0);
}


ثم الشروط بالدالة الرئيسية كالتالي :


if(TimeCurrent()-LastOpenTime())>=minutes*60000)CloseOrders();


بحيث minutes متغير خارجي لعدد الدقائق

input int minutes=5;

و دالة الاغلاق :


void CloseOrders(int type=-1)
{
bool select,close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==type||type==-1)
{
while(!IsTradeAllowed())Sleep(100);
while(IsTradeContextBusy())Sleep(100);
RefreshRates();
if(OrderType()==OP_BUY){close=OrderClose(OrderTick et(),OrderLots(),NormalizeDouble(Bid,Digits),5*Q); }
if(OrderType()==OP_SELL){close=OrderClose(OrderTic ket(),OrderLots(),NormalizeDouble(Ask,Digits),5*Q) ;}
if(OrderType()>OP_SELL){close=OrderDelete(OrderTicket());}
}
}
}
}

sal_moh85
26-05-2017, 06:41 PM
وعليكم السلام
ستقوم بعمل دالة لمعرفة توقيت آخر صفقة مفعلة كالتالي :


datetime LastOpenTime()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
datetime ot=OrderOpenTime();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
return(ot);
}
}
return(0);
}


ثم الشروط بالدالة الرئيسية كالتالي :


if(TimeCurrent()-LastOpenTime())>=minutes*60000)CloseOrders();


بحيث minutes متغير خارجي لعدد الدقائق

input int minutes=5;

و دالة الاغلاق :


void CloseOrders(int type=-1)
{
bool select,close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==type||type==-1)
{
while(!IsTradeAllowed())Sleep(100);
while(IsTradeContextBusy())Sleep(100);
RefreshRates();
if(OrderType()==OP_BUY){close=OrderClose(OrderTick et(),OrderLots(),NormalizeDouble(Bid,Digits),5*Q); }
if(OrderType()==OP_SELL){close=OrderClose(OrderTic ket(),OrderLots(),NormalizeDouble(Ask,Digits),5*Q) ;}
if(OrderType()>OP_SELL){close=OrderDelete(OrderTicket());}
}
}
}
}


مشكور اخ حسن
بس سوال =minutes*60000
ليش ضرب 60000 مو ضرب 60

sal_moh85
26-05-2017, 06:48 PM
وفي هاد الكود طلعلي خطاء بي اقواس
if(TimeCurrent()-LastOpenTime())>=minutes*60000)CloseOrders();
انا عدلة عليه بس ضفة
قوس واحد اول شي بعد if

walid roub
26-05-2017, 07:56 PM
السلام عليكم

لقد قمت ببرمجة الإكسبرت المطلوب من طرف anis




datetime t0;
// تعريف المتغير الذي يخزن قيمة الشمعة 0

bool x=0;
// تعريف المتغير الذي من خلاله نفرق بين الصفقة السابقة و الصفقة الحالية

extern double Lote = 0.01;
// إدخال اللوت الإبتدائي

double LastLot = Lote-0.01;
// تعريف اللوت القديم

double NewLot;
// تعريف اللوت الجديد

extern int Magicnumber = 123;
// ماجيك نمبر

extern int OrderTotal = 10;
// عدد الصفقات المسموح فتحها







void OnTick()
{
//---

if(t0!=Time[0])
// هذا الأمر يعني أنه فيه حالة كانت قيمة تي0 لا تساوي زمن الشمعة الحالية

{

//-------------------------------------------------------------------------------

if(x==0 && OrdersTotal()<=OrderTotal)
// هذا الشرط يعني إذا كانت قيمة المتغير أكس 0 قم بالتالي

{
NewLot = LastLot+0.01;
// هذا السطر يعني أن قيمة الوت الجديد الذي سيتم إستخدامه في الصفقة هو قيمة اللوت القديم + 0.01

OrderSend(Symbol(),OP_BUY,NewLot,Ask,0,0,0,"",Magicnumber,0,clrBlue);
// هذا أمر فتح صفقة الشراء

LastLot = NewLot;
// هذا السطر يخزن قيمة اللوت الجديد في قيمة متغير اللوت القديم لكي يصبح الجديد قديم

x=1;
// هذا سطر يعطي للمتغير أكس رقم 1 لكي يفتح صفقة بيع في الصفقة القادمة

}

//-------------------------------------------------------------------------------

else if(x==1 && OrdersTotal()<=OrderTotal)
// هذا السطر يعني إذا وجدت قيمة أكس تساوي 1 قم بالتالي

{
NewLot = LastLot+0.01;
// هذاالسطر لزيادة قيمة الوت القديم و وضعه في الجديد

OrderSend(Symbol(),OP_SELL,NewLot,Bid,0,0,0,"",Magicnumber,0,clrRed);
// هذا الكود لفتح صفقة بيع

LastLot = NewLot;
// هذا الكود لجعل اللوت الجديد قديم

x=0;
// هذا الكود لإعطاءقيمة أكس قيمة -1 لكي يفتح صفقة شراء في الأمر القادم

}

//-------------------------------------------------------------------------------

t0=Time[0];
// إعطاء زمن الشمعة 0 الحالية للمتغير تي0

//-------------------------------------------------------------------------------

}


}





أرجو أن تراجعة كيفية كتابة الكود و كل شيئ مشروح بالعربية
و هل من نصائح أو أخطاء ؟ أو طرق أخرى أسهل أو أسرع لبرمجة نفس الأكسبرت

الأكسبرت في المرفقات

walid roub
26-05-2017, 08:38 PM
سأحاول المساعدة في برمجة الإكسبرت المطلوب من طرف العضو mohamad ali
موضوعه في هذا الرابط
http://www.fxprg.com/vb/showthread.php?t=31743

kira-h
27-05-2017, 03:08 AM
وفي هاد الكود طلعلي خطاء بي اقواس
if(TimeCurrent()-LastOpenTime())>=minutes*60000)CloseOrders();
انا عدلة عليه بس ضفة
قوس واحد اول شي بعد if

نعم صحيح اخي

kira-h
27-05-2017, 03:13 AM
السلام عليكم

لقد قمت ببرمجة الإكسبرت المطلوب من طرف anis




datetime t0;
// تعريف المتغير الذي يخزن قيمة الشمعة 0

bool x=0;
// تعريف المتغير الذي من خلاله نفرق بين الصفقة السابقة و الصفقة الحالية

extern double Lote = 0.01;
// إدخال اللوت الإبتدائي

double LastLot = Lote-0.01;
// تعريف اللوت القديم

double NewLot;
// تعريف اللوت الجديد

extern int Magicnumber = 123;
// ماجيك نمبر

extern int OrderTotal = 10;
// عدد الصفقات المسموح فتحها







void OnTick()
{
//---

if(t0!=Time[0])
// هذا الأمر يعني أنه فيه حالة كانت قيمة تي0 لا تساوي زمن الشمعة الحالية

{

//-------------------------------------------------------------------------------

if(x==0 && OrdersTotal()<=OrderTotal)
// هذا الشرط يعني إذا كانت قيمة المتغير أكس 0 قم بالتالي

{
NewLot = LastLot+0.01;
// هذا السطر يعني أن قيمة الوت الجديد الذي سيتم إستخدامه في الصفقة هو قيمة اللوت القديم + 0.01

OrderSend(Symbol(),OP_BUY,NewLot,Ask,0,0,0,"",Magicnumber,0,clrBlue);
// هذا أمر فتح صفقة الشراء

LastLot = NewLot;
// هذا السطر يخزن قيمة اللوت الجديد في قيمة متغير اللوت القديم لكي يصبح الجديد قديم

x=1;
// هذا سطر يعطي للمتغير أكس رقم 1 لكي يفتح صفقة بيع في الصفقة القادمة

}

//-------------------------------------------------------------------------------

else if(x==1 && OrdersTotal()<=OrderTotal)
// هذا السطر يعني إذا وجدت قيمة أكس تساوي 1 قم بالتالي

{
NewLot = LastLot+0.01;
// هذاالسطر لزيادة قيمة الوت القديم و وضعه في الجديد

OrderSend(Symbol(),OP_SELL,NewLot,Bid,0,0,0,"",Magicnumber,0,clrRed);
// هذا الكود لفتح صفقة بيع

LastLot = NewLot;
// هذا الكود لجعل اللوت الجديد قديم

x=0;
// هذا الكود لإعطاءقيمة أكس قيمة -1 لكي يفتح صفقة شراء في الأمر القادم

}

//-------------------------------------------------------------------------------

t0=Time[0];
// إعطاء زمن الشمعة 0 الحالية للمتغير تي0

//-------------------------------------------------------------------------------

}


}





أرجو أن تراجعة كيفية كتابة الكود و كل شيئ مشروح بالعربية
و هل من نصائح أو أخطاء ؟ أو طرق أخرى أسهل أو أسرع لبرمجة نفس الأكسبرت

الأكسبرت في المرفقات
وعليكم السلام
الاكسبيرت سليم لكن لازم تضيف شرط فتح الصفقة عند اول افتتاح للشمعة وكذلك شرط عدد الصفقات يكون بالشارت اللي عليه الاكسبيرت فقط، وليس كل الشارتات
راجع الكود المرفق

Waddah
27-05-2017, 12:46 PM
السلام عليكم
استخدمت دالة iHigh و iLow لتحديد مستويات الهاي واللو لليوم السابق والتي يتم على أساسها فتح صفقات ... المشكلة عند عدم إغلاق الصفقات في نفس اليوم (اليوم الحالي ) تتغير هذه القيم - كيف استطيع تثبيت هذه القيم طالما هناك صفقات مفعلة قد تستمر يوم او أكثر ؟؟؟

kira-h
27-05-2017, 10:16 PM
السلام عليكم
استخدمت دالة iHigh و iLow لتحديد مستويات الهاي واللو لليوم السابق والتي يتم على أساسها فتح صفقات ... المشكلة عند عدم إغلاق الصفقات في نفس اليوم (اليوم الحالي ) تتغير هذه القيم - كيف استطيع تثبيت هذه القيم طالما هناك صفقات مفعلة قد تستمر يوم او أكثر ؟؟؟

وعليكم السلام
ستعتمد على المستويات في بداية فتح الصفقات فقط، وبعدها استخدم دالة تستخرج سعر آخر صفقة حسب النوع وعلى اساسها تفتح الصفقات الموالية

Waddah
28-05-2017, 12:32 PM
وعليكم السلام
ستقوم بعمل دالة فرعية تقوم بحساب عدد الصفقات المغلقة في اليوم كالتالي :


int DailyTrades()
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&MagicNo==OrderMagicNumber())
{
if(OrderCloseTime()>=iTime(Symbol(),1440,0)){cnt++;}
}
}
}
return(cnt);
}


ثم تكون الشروط قبل شروط فتح الصفقات كالتالي :

if(DailyTrades()==0)//...Open buy & Sell



السلام عليكم استاذ ....بالنسبة لعدد الصفقات اليومية - يجب أن أبحث في الهيستوري وليس التريد . صحيح ؟ النقطة الثانية لم تنجح الدالة (في الكومنت لم تعطي أي قييمة ) مع ملاحظة انه يوجد أوامر معلقة يتم حذفها هل ثؤثر على عمل الدالة ؟ مع جزيل الشكر

kira-h
28-05-2017, 06:50 PM
السلام عليكم استاذ ....بالنسبة لعدد الصفقات اليومية - يجب أن أبحث في الهيستوري وليس التريد . صحيح ؟ النقطة الثانية لم تنجح الدالة (في الكومنت لم تعطي أي قييمة ) مع ملاحظة انه يوجد أوامر معلقة يتم حذفها هل ثؤثر على عمل الدالة ؟ مع جزيل الشكر
وعليكم السلام
نعم صحيح يجب البحث في الهيستوري
بالنسبة للنقطة الثانية غير واضحة

sama97
29-05-2017, 12:45 AM
يعطيك العافية اخي
لو سمحت انني اعمل على جمع اربع اكسبيرتات باكسبيرت واحد، احتاج دالة لتنظيم عملهم بشكل دوري بمعنى
ان كان اتجاه السعر صاعد يعمل الاكسبيرت الاول
ان كان قد تم كسر اتجاه هابط و اصبح صاعدا يتوقف الاكسبيرت الاول و يعمل الثاني
ان كان اتجاه هابط يعمل الاكسبيرت الثالث
و ان كان قد تم كسر اتجاه صاعد و تحول للهبوط يتوقف الثالث ليعمل الرابع
اتمنى ان يكون الشرح واضحاً و شكراً جزيلاً مسبقاً

kira-h
29-05-2017, 05:47 PM
يعطيك العافية اخي
لو سمحت انني اعمل على جمع اربع اكسبيرتات باكسبيرت واحد، احتاج دالة لتنظيم عملهم بشكل دوري بمعنى
ان كان اتجاه السعر صاعد يعمل الاكسبيرت الاول
ان كان قد تم كسر اتجاه هابط و اصبح صاعدا يتوقف الاكسبيرت الاول و يعمل الثاني
ان كان اتجاه هابط يعمل الاكسبيرت الثالث
و ان كان قد تم كسر اتجاه صاعد و تحول للهبوط يتوقف الثالث ليعمل الرابع
اتمنى ان يكون الشرح واضحاً و شكراً جزيلاً مسبقاً
ستجعل لكل اكسبيرت دالة فرعية، ثم تضع شرط قبل كل دالة بالدالة الرئيسية
مثال لمقارنة الشمعة مع اتجاه الموفينج :


void OnTick()
{
double ma=iMA(Symbol(),0,20,0,0,0,1);

if(Close[1]>ma&&Open[1]>ma)//Run_EA_1();إذا كان الاتجاه صاعد
if(Close[1]>ma&&Open[1]<ma)//Run_EA_2();إذا كسر الاتجاه الهابط
if(Close[1]<ma&&Open[1]<ma)//Run_EA_3();إذا كان الاتجاه هابط
if(Close[1]<ma&&Open[1]>ma)//Run_EA_4();إذا كسر الاتجاه الصاعد

}

sal_moh85
29-05-2017, 10:11 PM
سلام عليكم اخ kira-h
في مجال تعطني فكره عن برمجة شبكه العصبيه ولا صعبه كتير بس الخطوات الاوله لانشاء شبكه عصبيه وطرق التعامل معها والكودات المستخدمه وشكرا جزيلا

kira-h
30-05-2017, 03:10 AM
سلام عليكم اخ kira-h
في مجال تعطني فكره عن برمجة شبكه العصبيه ولا صعبه كتير بس الخطوات الاوله لانشاء شبكه عصبيه وطرق التعامل معها والكودات المستخدمه وشكرا جزيلا

وعليكم السلام
هذا موضوع كبير،،،
باختصار لكي تتمكن من استخدام الشبكات العصبية مع الإكسبرتات فلا بد من الخطوات التالية :
1- فهم عمل الشبكات العصبية بالتفصيل وأنواعها وكيف تتعامل مع المشاكل.
2- يكون لديك خبرة بالتحليل وتكتشف طرق ممكن تؤدي لنجاح مع معلوماتك المسبقة عن قدرة الشبكات على الفهم.
3- فهم كيف يمكنك نقل بيانات من التشارت وتخزينه بملف ثم تقرأه ببرنامج آخر.
قد تستعمل اسكريبت يخزن البيانات المطلوبة، وبعد ذلك يدرب البرنامج الشبكة وتنقل المعادلة الخاصه مع الأوزان المدربه للأكسبرت.
4- تحتاج لشبكة متعددة الطبقات أو شبكات أفضل منها كي تتمكن من عمل أكسبرت ناجح.

يمكنك البحث بالـ google ستجد الكثير من الشروحات وطرق عمل الشبكات العصبية

sal_moh85
30-05-2017, 11:39 AM
وعليكم السلام
هذا موضوع كبير،،،
باختصار لكي تتمكن من استخدام الشبكات العصبية مع الإكسبرتات فلا بد من الخطوات التالية :
1- فهم عمل الشبكات العصبية بالتفصيل وأنواعها وكيف تتعامل مع المشاكل.
2- يكون لديك خبرة بالتحليل وتكتشف طرق ممكن تؤدي لنجاح مع معلوماتك المسبقة عن قدرة الشبكات على الفهم.
3- فهم كيف يمكنك نقل بيانات من التشارت وتخزينه بملف ثم تقرأه ببرنامج آخر.
قد تستعمل اسكريبت يخزن البيانات المطلوبة، وبعد ذلك يدرب البرنامج الشبكة وتنقل المعادلة الخاصه مع الأوزان المدربه للأكسبرت.
4- تحتاج لشبكة متعددة الطبقات أو شبكات أفضل منها كي تتمكن من عمل أكسبرت ناجح.

يمكنك البحث بالـ google ستجد الكثير من الشروحات وطرق عمل الشبكات العصبية

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

kira-h
30-05-2017, 06:40 PM
مشكور استاذ حسن هل قرائة عنها وفهمتها بس ما عم احسن نزل ولا شبكه عصبيه احسن استخدمها في فوركس او شلون بدي اتعامل معها ساويت شبكه عصبيه على اكسل بس كتير بدائيه مالح تفيدني بشي يلي بدي ياه اذا في عنك شبكه عصبيه استخدمتها انت قبل في انشاء اكسبريت برجو منك ترفقها

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

sal_moh85
30-05-2017, 08:35 PM
العفو اخي
بالنسبة لي لم يسبق لي التعامل مع الشبكات العصبية
افتح موضوع نقاش ربما تجد من يفيدك بهذا الأمر

مشكور اخ حسن

walid roub
31-05-2017, 12:27 AM
لقد قمت ببرمجت أكسبرت المطلوب من طرف العضو
Mouhamed Ali
الخاص بإغلاق الصفقات عند حدوث تقاطع
لكنك سبقتني في ذالك

كل شيئ مشروح بالعربية داخل الكود لكيفية البرمجة
أرجو الإطلاع على الكود و مراجعت صحته و إعطاء بعض النصائح
لأنني مبتدأ في البرمجة

إذا كانت البرمجة صحيحة أخبرني بذالك لكي أرفقه للعضو الذي طلبه لأنني لاحظت أن نسختك التي أرفقتها له لم تعمل معه

الأكسبرت في المرفقات




// تعريف بمتغيرات و مدخلات الموفنج السريع
extern string s1 = "faste MA setting " ; // faste MA setting
extern int FastMAperiod = 10 ; // Fast Period
extern int FastMAshift = 0 ; // Fast Shift
extern ENUM_MA_METHOD FastMAmethod = 0; // Fast Methode
extern ENUM_APPLIED_PRICE FastMAapllyto = 0; // Fast Applied to

// تعريف بمتغيرات و مدخلات الموفنج البطيئ
extern string s2 = "SLow MA setting " ; // SLow MA setting
extern int SLowMAperiod = 20 ; // SLow Period
extern int SLowMAshift = 0 ; // SLow Shift
extern ENUM_MA_METHOD SLowMAmethod = 0; // SLow Methode
extern ENUM_APPLIED_PRICE SLowMAapllyto = 0; // SLow Applied to

//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---


double FastMALast = iMA(NULL,0,FastMAperiod,FastMAshift,FastMAmethod,F astMAapllyto,2);
// هذا السطر لجب قيمة الموفنج السريع للشمعة 2 و تخزينها
double FastMANow = iMA(NULL,0,FastMAperiod,FastMAshift,FastMAmethod,F astMAapllyto,1);
// هذا السطر لجلب قيمة الموفنج السريع للشمعة 1 و تخزينها

double slowMALast = iMA(NULL,0,FastMAperiod,FastMAshift,FastMAmethod,F astMAapllyto,2);
// هذا السطر لجب قيمة الموفنج البطيئ للشمعة 2 و تخزينها
double slowMANow = iMA(NULL,0,FastMAperiod,FastMAshift,FastMAmethod,F astMAapllyto,1);
// هذا السطر لجلب قيمة الموفنج البطيئ للشمعة 1 و تخزينها



for(int i=OrdersTotal()-1 ; i >=0; i-- )
// هذا سطر هو حلقة التكرارية
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES) ;
// هذا السطر لإختيار و تحديد صفقة معينة

int ticket=OrderTicket();
// هذا السطر من أجل إمكانية تحديد قيمة الدالة أو الصفقة بدلالة تيكت

double lots=OrderLots();
// هذا السطر من أجل إمكانية تحديد قيمة الدالة أو الصفقة بدلالة اللوت

int type=OrderType();
// هذا السطر من أجل إمكانية تحديد قيمة الدالة أو الصفقة بدلالة نوع الصفقة , شراء أو بيع


if(OrderSymbol()==Symbol())
// هذا السطر لإختيار الصفقات التي مفتوحة على الشارت الموضوع عليه الأكسبرت
{
if(FastMALast<slowMALast && FastMANow>slowMANow)
// هذا شرط التقاطع للأسفل
// هذا الشرط يعني أن السعر في صعود
// هذا يعني أنه يجب غلق صفقات البيع
{


// هذا المكان لوضع أمر الإغلاق الصفقات

if(type==OP_SELL)
// هذا السطر هو أمر لإغلاق صفقة البيع
{
OrderClose(ticket,lots,Ask,3);
}


else if(type==OP_BUY && FastMALast>slowMALast && FastMANow<slowMANow)
// هذا السطر هو أمر لإغلاق صفقة الشراء في حالة لم يحدث الشرط الذي في الأعلى و حدث العكس
{
OrderClose(ticket,lots,Bid,3);
}


}
}
}


}





الأكسبرت في المرفقات

m_nasseem
31-05-2017, 12:58 AM
السلام عليكم كل عام انتم بخير بمناسبة حلول الشهر الكريم
تحية خاصة للاخ العزيز حسن كيرا ومطلوب منه مساعدة عاجلة
كيفية تصدير قيمة لمتغير داخل مؤشر من خلال اكسبيرت
بالعربي عايز اغير قيم موجودة في مؤشر من خلال الاكسبيرت الذي يعمل مع هذا المؤشر اثناء تشغيل الاكسبيرت

Ahmed
31-05-2017, 11:50 AM
السلام عليكم استاذ حسن
وكل عام وانتم بخير وتفبل الله منا ومنكم صالح الاعمال
كيف يمكن برمجة اكسبيرت لهذا المؤشر
بيع عند ظهور السهم الاصفر
شراء عند ظهور السهم الازرق
بارك الله فيك وجزاك خيرا
1046

kira-h
31-05-2017, 07:11 PM
السلام عليكم استاذ حسن
وكل عام وانتم بخير وتفبل الله منا ومنكم صالح الاعمال
كيف يمكن برمجة اكسبيرت لهذا المؤشر
بيع عند ظهور السهم الاصفر
شراء عند ظهور السهم الازرق
بارك الله فيك وجزاك خيرا
...
وعليكم السلام
استخدم Print أو Comment لمعرفة تغير قيم المؤشر
راجع الاكسبيرت المرفق

kira-h
31-05-2017, 07:15 PM
السلام عليكم كل عام انتم بخير بمناسبة حلول الشهر الكريم
تحية خاصة للاخ العزيز حسن كيرا ومطلوب منه مساعدة عاجلة
كيفية تصدير قيمة لمتغير داخل مؤشر من خلال اكسبيرت
بالعربي عايز اغير قيم موجودة في مؤشر من خلال الاكسبيرت الذي يعمل مع هذا المؤشر اثناء تشغيل الاكسبيرت

وعليكم السلام
مثال لمؤشر به 3 إعدادات سنقوم بإضافتها إلى الإعدادات الخارجية للاكسبيرت وإضافتها أيضا بدالة المؤشر كالتالي :


input int BarsBack=100,
period=20,
shift=2;

void OnTick()
{
double c0=iCustom(Symbol(),0,"اسم المؤشر",BarsBack,period,shift,0,1);
//----
}

kira-h
31-05-2017, 07:27 PM
لقد قمت ببرمجت أكسبرت المطلوب من طرف العضو
Mouhamed Ali
الخاص بإغلاق الصفقات عند حدوث تقاطع
لكنك سبقتني في ذالك

كل شيئ مشروح بالعربية داخل الكود لكيفية البرمجة
أرجو الإطلاع على الكود و مراجعت صحته و إعطاء بعض النصائح
لأنني مبتدأ في البرمجة

إذا كانت البرمجة صحيحة أخبرني بذالك لكي أرفقه للعضو الذي طلبه لأنني لاحظت أن نسختك التي أرفقتها له لم تعمل معه

الأكسبرت في المرفقات


الأكسبرت في المرفقات
وعليكم السلام
الكود سليم لكن فقط يحتاج إلى تنظيم منطقي (الاكسبيرت بالمرفق)
كما يمكنك التجربة بالباكتيست للتأكد من عمله كما المطلوب
وكل عام وأنتم بخير

walid roub
31-05-2017, 11:45 PM
وعليكم السلام
الكود سليم لكن فقط يحتاج إلى تنظيم منطقي (الاكسبيرت بالمرفق)
كما يمكنك التجربة بالباكتيست للتأكد من عمله كما المطلوب
وكل عام وأنتم بخير

مشكورجدا النصائح و الإهتمام أخي حسن

Ahmed
01-06-2017, 12:45 AM
وعليكم السلام
استخدم Print أو Comment لمعرفة تغير قيم المؤشر
راجع الاكسبيرت المرفق

تسلم ايديك اخي حسن
وجزاك الله خيرا

lara981
01-06-2017, 01:52 AM
شكرا جزيلا اخي يعطيك الف عافية، من بعد امرك عندي سؤالين لسا:
الاول كيف استطيع ايقاف تكرار فتح صفقات من نفس النقطة، ما هو الكود الذي يمنع فتح اكتر من صفقة من نفس السعر.
الثاني في اكسبيرت اوامر معلقة اريد كود يجعله يعلق اوامر بيع كلما صعد السعر، و اوامر شراء عندما يهبط السعر.
مع الاعتذار عن اتعابك معي و الشكر الجزيل لمساعدتك اخي

taboutetarik
01-06-2017, 01:06 PM
السلام عليكم ورحمة الله وبركاته عندي إكسبريت مبرمج على أن يفتح الصفقة الأولى بلو ت 0.10 وإذا إنعكس السعر ب 15 نقطة يفتح لي صفقة أخرى معاكسة بلوت مضاعف ولاكن المشكلة عندما أشغل الإكسبريت يفتح لي الصفقة الأولى وعندما ينعكس السعر ب 15 نقطة لا يفتح الصفقة التانية ويعطيني هذه الرسالة التنبيهية باستمرار. Not enouth money to open order 0.233 lots!
Pas assez d'argent pour ouvrir l'ordre 0,233 lots!

وللعلم عندما يعطيني هذه الرسالة أروح وأفتح الصفقة الثانية المضاعفة يدويا يدويا وصفقة أخرى ثالثة أضعف و أضعف تفتح الصفقات يدويا فالمفروض يجب أن لا تفتح الصفقات . لم أفهم أي شيئ . أفيدونا جزاكم الله خيرا.
معلومات عن الحساب xm .DEMO 223 usd وهو استاندار بالنسبة للرافعة المالية لم أتذكر.

Ahmed
01-06-2017, 03:05 PM
السلام عليكم ورحمة الله وبركاته عندي إكسبريت مبرمج على أن يفتح الصفقة الأولى بلو ت 0.10 وإذا إنعكس السعر ب 15 نقطة يفتح لي صفقة أخرى معاكسة بلوت مضاعف ولاكن المشكلة عندما أشغل الإكسبريت يفتح لي الصفقة الأولى وعندما ينعكس السعر ب 15 نقطة لا يفتح الصفقة التانية ويعطيني هذه الرسالة التنبيهية باستمرار. Not enouth money to open order 0.233 lots!
Pas assez d'argent pour ouvrir l'ordre 0,233 lots!

وللعلم عندما يعطيني هذه الرسالة أروح وأفتح الصفقة الثانية المضاعفة يدويا يدويا وصفقة أخرى ثالثة أضعف و أضعف تفتح الصفقات يدويا فالمفروض يجب أن لا تفتح الصفقات . لم أفهم أي شيئ . أفيدونا جزاكم الله خيرا.
معلومات عن الحساب xm .DEMO 223 usd وهو استاندار بالنسبة للرافعة المالية لم أتذكر.

ارفق الاكسبيرت مفتوح الكود حتي يمكننا الاطلاع على سبب الخطاء
وان شاء الله اساعدك في حل المشكلة

taboutetarik
01-06-2017, 07:26 PM
ارفق الاكسبيرت مفتوح الكود حتي يمكننا الاطلاع على سبب الخطاء
وان شاء الله اساعدك في حل المشكلة
للأسف أنا عندي الإكسبريت غير مفتوح الكود لأنني عندما أضغط على خاصية modify لا يفتح وأنا فقط وجدته في بعض المنتديات ولاكن أنا عندي سؤال من فظل سيادتكم الكريمة هل الإكسبرتات التي يطلبها مشاركينا في منتدانا العزيز forexprog هل هذه الإكسبرتات مفتوحة أم مغلوقة.وشكرا لكم.

kira-h
01-06-2017, 07:31 PM
مشكورجدا النصائح و الإهتمام أخي حسن

بالتوفيق إن شاء الله

kira-h
01-06-2017, 07:33 PM
السلام عليكم ورحمة الله وبركاته عندي إكسبريت مبرمج على أن يفتح الصفقة الأولى بلو ت 0.10 وإذا إنعكس السعر ب 15 نقطة يفتح لي صفقة أخرى معاكسة بلوت مضاعف ولاكن المشكلة عندما أشغل الإكسبريت يفتح لي الصفقة الأولى وعندما ينعكس السعر ب 15 نقطة لا يفتح الصفقة التانية ويعطيني هذه الرسالة التنبيهية باستمرار. Not enouth money to open order 0.233 lots!
Pas assez d'argent pour ouvrir l'ordre 0,233 lots!

وللعلم عندما يعطيني هذه الرسالة أروح وأفتح الصفقة الثانية المضاعفة يدويا يدويا وصفقة أخرى ثالثة أضعف و أضعف تفتح الصفقات يدويا فالمفروض يجب أن لا تفتح الصفقات . لم أفهم أي شيئ . أفيدونا جزاكم الله خيرا.
معلومات عن الحساب xm .DEMO 223 usd وهو استاندار بالنسبة للرافعة المالية لم أتذكر.

وعليكم السلام
اللوت 0.233 (3 أرقام بعد الفاصلة) غير مقبول بمنصة الميتارتيدر، ولذلك يلزم تعديل لاكسبيرت

taboutetarik
01-06-2017, 08:07 PM
كيفية حذف مشاركة في المنتدى

taboutetarik
01-06-2017, 08:30 PM
للأسف أنا عندي الإكسبريت غير مفتوح الكود لأنني عندما أضغط على خاصية modify لا يفتح وأنا فقط وجدته في بعض المنتديات ولاكن أنا عندي سؤال من فظل سيادتكم الكريمة هل الإكسبرتات التي يطلبها مشاركينا في منتدانا العزيز forexprog هل هذه الإكسبرتات مفتوحة أم مغلوقة.وشكرا لكم.

بمعنى هل هذه الإكسبرتات لا تنتهي مدة صلاحيتها أم تشتغل لفترة

Ahmed
02-06-2017, 01:59 AM
للأسف أنا عندي الإكسبريت غير مفتوح الكود لأنني عندما أضغط على خاصية modify لا يفتح وأنا فقط وجدته في بعض المنتديات ولاكن أنا عندي سؤال من فظل سيادتكم الكريمة هل الإكسبرتات التي يطلبها مشاركينا في منتدانا العزيز forexprog هل هذه الإكسبرتات مفتوحة أم مغلوقة.وشكرا لكم.

الاكسبيرتات التي تتم برمجتها هنا مجانية وليس لها مدة انتهاء
تعمل معك دائما ان شاء الله
اما المقصود بالاكسبيرت مفتوح الكود يكون بصيغة Mq4 وهي الصيغة التي نستطيع قرائتها والتعديل عليها والتعلم منها

kira-h
02-06-2017, 02:39 AM
بمعنى هل هذه الإكسبرتات لا تنتهي مدة صلاحيتها أم تشتغل لفترة

أخي الكريم كل اكسبيرتاتي ومؤشراتي ليس بها مدة صلاحية

sal_moh85
02-06-2017, 03:29 AM
سلام عليكم اخ حسن ارجو المساعده في كتابة داله لاخذ الربح تكون داله ماتتاخر بي الاغلاق ربح او الخساره
محتويات الكود الذي اريده حساب قيمة السبريد +3 نقاط ربح فقط
لانو في شركات ما بتخليك تحط تيك بروفت اقل شي 10 نقاط انا بس بدي 3 نقاط مجموع معها السبريد
ودالة اغلاق كمان نفس شي بنقاط صغير يعني 3 نقط او اربعه نقط ومشكور جدا

lara981
02-06-2017, 10:55 AM
شكرا جزيلا اخي يعطيك الف عافية، من بعد امرك عندي سؤالين لسا:
الاول كيف استطيع ايقاف تكرار فتح صفقات من نفس النقطة، ما هو الكود الذي يمنع فتح اكتر من صفقة من نفس السعر.
الثاني في اكسبيرت اوامر معلقة اريد كود يجعله يعلق اوامر بيع كلما صعد السعر، و اوامر شراء عندما يهبط السعر.
مع الاعتذار عن اتعابك معي و الشكر الجزيل لمساعدتك اخي

هل من جواب لوسمحت

sal_moh85
02-06-2017, 01:52 PM
هل من جواب لوسمحت

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

http://www.fxprg.com/vb/showthread.php?t=31456

kira-h
02-06-2017, 06:08 PM
سلام عليكم اخ حسن ارجو المساعده في كتابة داله لاخذ الربح تكون داله ماتتاخر بي الاغلاق ربح او الخساره
محتويات الكود الذي اريده حساب قيمة السبريد +3 نقاط ربح فقط
لانو في شركات ما بتخليك تحط تيك بروفت اقل شي 10 نقاط انا بس بدي 3 نقاط مجموع معها السبريد
ودالة اغلاق كمان نفس شي بنقاط صغير يعني 3 نقط او اربعه نقط ومشكور جدا

وعليكم السلام
في هذه الحالة ستستخدم الهدف المخفي
دالة الهدف المخفي كالتالي :


void CloseOrdersHiddenTP()
{
bool close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
lo=OrderLots();

if(sy==Symbol()&&mn==MagicNo)
{
if(ot==OP_BUY)
{
if(Bid>=op+HideTakeprofit*point)
{
close=OrderClose(tk,lo,NormalizeDouble(Bid,Digits) ,5*Q);
}
}
if(ot==OP_SELL)
{
if(Ask<=op-HideTakeprofit*point)
{
close=OrderClose(tk,lo,NormalizeDouble(Ask,Digits) ,5*Q);
}
}
}
}
}


ثم نقوم باستدعائها بالدالة الرئيسية OnTick كالتالي :


void OnTick()
{
if(HideTakeprofit>0)CloseOrdersHiddenTP();
//-----
}


بحيث المتغير الخارجي للهدف المخفي كالتالي :

input double HideTakeprofit=0;

kira-h
02-06-2017, 06:16 PM
شكرا جزيلا اخي يعطيك الف عافية، من بعد امرك عندي سؤالين لسا:
الاول كيف استطيع ايقاف تكرار فتح صفقات من نفس النقطة، ما هو الكود الذي يمنع فتح اكتر من صفقة من نفس السعر.
الثاني في اكسبيرت اوامر معلقة اريد كود يجعله يعلق اوامر بيع كلما صعد السعر، و اوامر شراء عندما يهبط السعر.
مع الاعتذار عن اتعابك معي و الشكر الجزيل لمساعدتك اخي

ستقوم بعمل دالة تعود بسعر آخر صفقة مفتوحة بدلالة نوعها كالتالي :


double LastPrice(int type)
{
int cnt;
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()==type)
{
cnt++;
if(cnt>=2)
return(OrderOpenPrice());
}
}
return(0);
}


ودالة حساب عدد الصفقات المفتوحة بدلالة نوعها كالتالي :


int Orderscnt(int type)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&MagicNo==OrderMagicNumber()&&OrderType()==type)
{
cnt++;
}
}
}
return(cnt);
}


ثم تكون الشروط بالدالة الرئيسية كالتالي :


if(Orderscnt(OP_BUY)>0&&Ask<=LastPrice(OP_BUY)-Step*point)//open buy

if(Orderscnt(OP_SELL)>0&&Bid>=LastPrice(OP_SELL)+Step*point)//open sell


بحيث Step متغير خارجي للمسافة بين الصفقات التي من نفس النوع

بهذه الطريقة لن يتكرر فتح صفقة حتى يتحقق شرط المسافة Step

sal_moh85
02-06-2017, 10:12 PM
وعليكم السلام
في هذه الحالة ستستخدم الهدف المخفي
دالة الهدف المخفي كالتالي :


void CloseOrdersHiddenTP()
{
bool close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
lo=OrderLots();

if(sy==Symbol()&&mn==MagicNo)
{
if(ot==OP_BUY)
{
if(Bid>=op+HideTakeprofit*point)
{
close=OrderClose(tk,lo,NormalizeDouble(Bid,Digits) ,5*Q);
}
}
if(ot==OP_SELL)
{
if(Ask<=op-HideTakeprofit*point)
{
close=OrderClose(tk,lo,NormalizeDouble(Ask,Digits) ,5*Q);
}
}
}
}
}


ثم نقوم باستدعائها بالدالة الرئيسية OnTick كالتالي :


void OnTick()
{
if(HideTakeprofit>0)CloseOrdersHiddenTP();
//-----
}


بحيث المتغير الخارجي للهدف المخفي كالتالي :

input double HideTakeprofit=0;

مشكوراخ حسن

lara981
02-06-2017, 10:51 PM
شكرا جزيلا اخي غمرتني بفضلك
لدي طلب اخير لو تفضلت في اكسبيرت اوامر معلقة اريد كود يجعله يعلق اوامر بيع كلما صعد السعر، و اوامر شراء عندما يهبط السعر.

lara981
02-06-2017, 10:53 PM
شكرا جزيلا لاهتمامك اخي

lara981
02-06-2017, 10:57 PM
سلام عليكم اخي الكريم
فتاح هاد رابط وشوف دالة عدد الصفقات المفتوحه

http://www.fxprg.com/vb/showthread.php?t=31456

شكرا جزيلا لاهتمامك ومساعدتك اخي و عذرا لاتعابكم معي لكنني اجد صعوبة شديدة في تعلم اللغة و تجربة الكتابة فيها ووجدت في حضراتكم نعم المعين هل هناك طريقة لاتعلمها بسهولة ؟؟؟

sal_moh85
03-06-2017, 02:33 AM
شكرا جزيلا لاهتمامك ومساعدتك اخي و عذرا لاتعابكم معي لكنني اجد صعوبة شديدة في تعلم اللغة و تجربة الكتابة فيها ووجدت في حضراتكم نعم المعين هل هناك طريقة لاتعلمها بسهولة ؟؟؟

عفوا اخي الكريم كنت انا اول فتره متلك افتح الكود موشر او اكسبريت ما افهم منوه شي بس كتير المتابعه وقرائتك لي اكواد الموشرات او اكسبرتات وطبعا في كتير مواضيع عن تعلم برمجه بدك تقراء وتتعلم وتجرب
بس انت بدك تشتغل على حالك شوي لانو اذا انت ما فهمتها ما حدا لح يحسن يفهمك ياها

sal_moh85
03-06-2017, 02:35 AM
سلام عليكم استاذ حسن
بدك تتحملني شوي من كتير الاسئله يلي عم اسالك عليها فينا نحول ملف mql4 الى صيغه تانيه XML
مشكور جدا جدا

kira-h
03-06-2017, 04:24 PM
مشكوراخ حسن

العفو أخي الكريم

kira-h
03-06-2017, 04:25 PM
شكرا جزيلا اخي غمرتني بفضلك
لدي طلب اخير لو تفضلت في اكسبيرت اوامر معلقة اريد كود يجعله يعلق اوامر بيع كلما صعد السعر، و اوامر شراء عندما يهبط السعر.

العفو أخي
بنفس الطريقة، فقط ستغير الأوامر الماركت إلى اوامر معلقة مع تحديد أسعارها

sal_moh85
03-06-2017, 07:37 PM
سلام عليكم استاذ حسن
بدك تتحملني شوي من كتير الاسئله يلي عم اسالك عليها فينا نحول ملف mql4 الى صيغه تانيه XML
مشكور جدا جدا

kira-h
03-06-2017, 09:57 PM
سلام عليكم استاذ حسن
بدك تتحملني شوي من كتير الاسئله يلي عم اسالك عليها فينا نحول ملف mql4 الى صيغه تانيه XML
مشكور جدا جدا

وعليكم السلام
لا أعلم أخي، لكن يمكن التعامل مع الملفات
راجع الصفحة التالية :
File Functions (https://docs.mql4.com/files)

sal_moh85
04-06-2017, 12:38 AM
وعليكم السلام
لا أعلم أخي، لكن يمكن التعامل مع الملفات
راجع الصفحة التالية :
File Functions (https://docs.mql4.com/files)

شكرا اخي حسن

kira-h
04-06-2017, 04:40 PM
شكرا اخي حسن

العفو أخي والله الموفق

Islam
05-06-2017, 05:05 AM
السلام عليكم
اخي كيرا ارغب في طريقه لمعرفه قيمه الاكونت بالانس عند شمعه محدده
فهل من داله لذلك اخي
اتمني اخي ان تفيديني في ذلك فانا احتاج الي تلك الداله بشده
وجزاك الله عنا كل خير

kira-h
05-06-2017, 07:22 AM
السلام عليكم
اخي كيرا ارغب في طريقه لمعرفه قيمه الاكونت بالانس عند شمعه محدده
فهل من داله لذلك اخي
اتمني اخي ان تفيديني في ذلك فانا احتاج الي تلك الداله بشده
وجزاك الله عنا كل خير

وعليكم السلام
يمكن حساب اجمالي نتائج الصفقات المغلقة بمجال زمني معين ثم تضيف قيمة راس المال لمعرفة البالنس

Islam
05-06-2017, 02:55 PM
وعليكم السلام
يمكن حساب اجمالي نتائج الصفقات المغلقة بمجال زمني معين ثم تضيف قيمة راس المال لمعرفة البالنس
اعطاك الله العافيه اخي كيرا
هلا تكرمت علي بكتابه تلك الداله اخي بارك الله في عمرك
فانا ما زلت مبتدئا في البرمجه وشكرا جزيلا اخي

kira-h
05-06-2017, 04:58 PM
اعطاك الله العافيه اخي كيرا
هلا تكرمت علي بكتابه تلك الداله اخي بارك الله في عمرك
فانا ما زلت مبتدئا في البرمجه وشكرا جزيلا اخي

دالة اجمالي الربح المحقق لفترة زمنية كالتالي :


double Profit_By_Time()
{
double pts;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
datetime oc=OrderCloseTime();
if(oc>=Start_Bar&&oc<=End_Bar)
{
pts+=pt+sw+cm;
}
}
return(pts);
}


بحيث المتغيرات الخارجية كالتالي :


input double Initial_Balance=1000;//رأس المال
input datetime Start_Bar=D'2017.01.01 00:00';//بداية الفترة
input datetime End_Bar=D'2017.06.01 00:00';//نهاية الفترة


ثم نستخدم الكومنت لتظهر النتيجة على الشارت :


void OnTick()
{
Comment("Balance : ",Profit_By_Time()+Initial_Balance);
}

Islam
06-06-2017, 09:07 AM
دالة اجمالي الربح المحقق لفترة زمنية كالتالي :


double Profit_By_Time()
{
double pts;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
datetime oc=OrderCloseTime();
if(oc>=Start_Bar&&oc<=End_Bar)
{
pts+=pt+sw+cm;
}
}
return(pts);
}


بحيث المتغيرات الخارجية كالتالي :


input double Initial_Balance=1000;//رأس المال
input datetime Start_Bar=D'2017.01.01 00:00';//بداية الفترة
input datetime End_Bar=D'2017.06.01 00:00';//نهاية الفترة


ثم نستخدم الكومنت لتظهر النتيجة على الشارت :


void OnTick()
{
Comment("Balance : ",Profit_By_Time()+Initial_Balance);
}

شكرا جزيلا اخي حسن انت حقا عبقري برمجه

Islam
06-06-2017, 09:12 AM
ارجو الا اثقل عليك اخي حسن
ولكن عندي سؤال اخر وارجو ان اجد الجواب عندك ان شاء الله
كيف اعمل حلقه(لووب) اخي لعد البارات التي حدث عندها اغلاق للصفقات
وشكرا اخي الكريم كيرا

kira-h
06-06-2017, 07:24 PM
شكرا جزيلا اخي حسن انت حقا عبقري برمجه
العفو أخي، والله الموفق


ارجو الا اثقل عليك اخي حسن
ولكن عندي سؤال اخر وارجو ان اجد الجواب عندك ان شاء الله
كيف اعمل حلقه(لووب) اخي لعد البارات التي حدث عندها اغلاق للصفقات
وشكرا اخي الكريم كيرا
المرجو التوضيح أكثر

Islam
07-06-2017, 12:41 AM
شكرا لردك الجميل اخي كيرا
ما اقصده اخي هو لنفترض انني فتحه صفقه عند بار محدد ثم اغلقت عند بار اخر
ثم فتحت صفقه اخري بعدها عند بار محدد واغلقت عند اخر وهكذا
فما هي الداله المناسبه لعد البارات التي جدث عندها اغلاق للصفقات
كتبت هذه الداله اخي
int barTotalMagicclose() {
int barCount = 0;
for (int i = BARS - 1; i >= 0; i--) {
if (Time[i]==OrderCloseTime()) barCount++;
}
return (barCount);
}

للكن للاسف اخي لم تعمل
فارجو ان تفيدني من علمك وجزاك الله خيرا اخي كيرا

lara981
07-06-2017, 10:25 AM
يعطيك العافية
لو سمحت جربت اعمل اكسبيرت للاوامر المعلقة و عملت له باك تست وجدت انه يربح لحد عام 2017 بعدها تتحول الصفقات الى خسارة، هل ممكن ان تخبرني سبب ذلك.

kira-h
07-06-2017, 04:57 PM
يعطيك العافية
لو سمحت جربت اعمل اكسبيرت للاوامر المعلقة و عملت له باك تست وجدت انه يربح لحد عام 2017 بعدها تتحول الصفقات الى خسارة، هل ممكن ان تخبرني سبب ذلك.

هذا ليس له علاقة بموضوعنا هذا والمخصص فقط للأسئلة البرمجية
يمكنك فتح موضوع نقاش بالقسم العام من هنا
المنتـدى العـام لتـداول العمـلات فـوركـس Forex (http://www.fxprg.com/vb/forumdisplay.php?f=214)

kira-h
07-06-2017, 05:00 PM
شكرا لردك الجميل اخي كيرا
ما اقصده اخي هو لنفترض انني فتحه صفقه عند بار محدد ثم اغلقت عند بار اخر
ثم فتحت صفقه اخري بعدها عند بار محدد واغلقت عند اخر وهكذا
فما هي الداله المناسبه لعد البارات التي جدث عندها اغلاق للصفقات
كتبت هذه الداله اخي
int barTotalMagicclose() {
int barCount = 0;
for (int i = BARS - 1; i >= 0; i--) {
if (Time[i]==OrderCloseTime()) barCount++;
}
return (barCount);
}

للكن للاسف اخي لم تعمل
فارجو ان تفيدني من علمك وجزاك الله خيرا اخي كيرا

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


int Barscnt()
{
int bars=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
bars++;
}
}
return(cnt);
}

silver
08-06-2017, 07:28 AM
السلام عليكم ورحمة الله وبركاته
صباح النور أخي حسن
حاولت كتابة هذه الفكرة لكنها للأسف لم تضبط معي
أريد من الاكسبيرت فتح صفقة شراء عند كسر هاي الشمعة السابفة (شمعة رقم 1)
وهذه من السهل جدا برمجتها
ولكن مشكلتي هي عندما يقوم بفتح الصفقة وبعد أن يتم إغلاقها سواء على ربح أو خسارة وإذا ما تم كسر الهاي مرة أخرى يقوم بإفتتاح صفقة مرة أخرى
وأنا لا أريد ذلك
حيث لا يهمنا تكرر الكسر للشمعة رقم 1 أكثر من مرة وما يهمنا هو فقط الكسر للمرة الأولى فقط
المطلوب هو أن ينتظر افتتاح شمعة أخرى جديدة ومن ثم يبدأ تفعيل الشرط البرمجي من جديد
ما هو الحل بارك الله فيك

Ahmed
08-06-2017, 11:16 AM
وعليكم السلام ورحمة الله وبركاتة
تضع من ضمن شروط فتح الصفقة ان لا يفتح مرة اخرى في نفس الشمعة وذلك كالاتي
تضع في المتغيرات

datetime BarTime;
تضع من ضمن شروط فتح الصفقة

if( BarTime!=Time[0] )
{
// امر الشراء او البيع

BarTime=Time[0];
}
وتلاحظ بعد فتح الامر وضعنا

BarTime=Time[0];

kira-h
08-06-2017, 05:02 PM
العفو أخي
حسب ما فهمت كل صفقة تغلق بشمعة وبالتالي فعدد الشموع التي أغلقت عليها الصفقات هي نفسها عدد الصفقات المغلقة
يعني الدالة ستكون كالتالي :


int Barscnt()
{
int bars=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
bars++;
}
}
return(cnt);
}


تصحيح خطأ بالـ return


int Barscnt()
{
int bars=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
bars++;
}
}
return(bars);
}

kira-h
08-06-2017, 05:03 PM
وعليكم السلام ورحمة الله وبركاتة
تضع من ضمن شروط فتح الصفقة ان لا يفتح مرة اخرى في نفس الشمعة وذلك كالاتي
تضع في المتغيرات

datetime BarTime;
تضع من ضمن شروط فتح الصفقة

if( BarTime!=Time[0] )
{
// امر الشراء او البيع

BarTime=Time[0];
}
وتلاحظ بعد فتح الامر وضعنا

BarTime=Time[0];

شكرا جزيلا أخي Ahmed

Ahmed
08-06-2017, 05:12 PM
العفو اخي حسن
احنا من تلامبذك

ابو عمر
08-06-2017, 07:43 PM
شكرا اخي احمد وشكرا لاخونا حسن على هذا الموضوع

silver
09-06-2017, 04:30 AM
وعليكم السلام ورحمة الله وبركاتة
تضع من ضمن شروط فتح الصفقة ان لا يفتح مرة اخرى في نفس الشمعة وذلك كالاتي
تضع في المتغيرات

datetime BarTime;
تضع من ضمن شروط فتح الصفقة

if( BarTime!=Time[0] )
{
// امر الشراء او البيع

BarTime=Time[0];
}
وتلاحظ بعد فتح الامر وضعنا

BarTime=Time[0];


شكرا لكم أخي أحمد

بالنسبة للكود المكتوب ينفع للفريم الحالي
وأتمنى أن يكون الكود يمكنني من معرفة الكسر على فريم آخر غير الفريم الذي أستخدمه الآن
مثال:
أنا فاتح الآن فريم النصف ساعة، والمطلوب أن يكون الكسر للشمعة رقم (1) للمرة الأولى فقط على فريم الدقيقة
شكرا لك على تعاونك أخي

kira-h
09-06-2017, 05:22 AM
شكرا لكم أخي أحمد

بالنسبة للكود المكتوب ينفع للفريم الحالي
وأتمنى أن يكون الكود يمكنني من معرفة الكسر على فريم آخر غير الفريم الذي أستخدمه الآن
مثال:
أنا فاتح الآن فريم النصف ساعة، والمطلوب أن يكون الكسر للشمعة رقم (1) للمرة الأولى فقط على فريم الدقيقة
شكرا لك على تعاونك أخي
حسب مثالك يمكنك أن تجعل الشرط خاص بشمعة النصف ساعة كالتالي :

if(BarTime!=iTime(Symbol(),PERIOD_M30,1))
{
// امر الشراء او البيع
BarTime=iTime(Symbol(),PERIOD_M30,1);
}

kira-h
09-06-2017, 05:23 AM
شكرا اخي احمد وشكرا لاخونا حسن على هذا الموضوع

حياك الله اخي ابو عمر

silver
09-06-2017, 05:55 AM
حسب مثالك يمكنك أن تجعل الشرط خاص بشمعة النصف ساعة كالتالي :

if(BarTime!=iTime(Symbol(),PERIOD_M30,1))
{
// امر الشراء او البيع
BarTime=iTime(Symbol(),PERIOD_M30,1);
}


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

Islam
09-06-2017, 08:26 AM
شكرا كثيرا اخي حسن علي المساعده التي تقدمها والتي قدمتها لي
عسي الله ان يجعلها في ميزان حسناتك في ايامنا الكريمه هذه ان شاء الله
وارجو اخي حسن ان تتحملني علي قدر استطاعتك فانت استاذنا ومنك نتعلم اخي
انا الان اخي لدي مشكلتين
الاولي انني استعملت الداله التي تقوم بحساب البروفت في فتره زمنيه معينه لحساب البالنس في بدايه اليوم وفي نهايته لكن للاسف اخي لم تظهر الا حساب البالنس في اول اليوم فقط
اي الساعه00 ولم تظهره في نهايته فارجو ان تدلني علي موضع المشكل اخي حسن جزاك الله خيرا
الثانيه انني افتح مجموعه من الصفقات في اوقات مختلف لكنها تغلق جميعا علي بار واحد ولذلك اخي للاسف لم تنفع فكره عد الصفقات المغلقه
لذلك اخي ارجو ان تدلني علي حل اخر من ابداعات استاذي كيرا لعد ومعرفه اوقات وبارات الاغلاقات
وشكرا لك استاذي حسن علي جميل صبرك ومساعدتك

kira-h
09-06-2017, 04:41 PM
شكرا كثيرا اخي حسن علي المساعده التي تقدمها والتي قدمتها لي
عسي الله ان يجعلها في ميزان حسناتك في ايامنا الكريمه هذه ان شاء الله
وارجو اخي حسن ان تتحملني علي قدر استطاعتك فانت استاذنا ومنك نتعلم اخي
انا الان اخي لدي مشكلتين
الاولي انني استعملت الداله التي تقوم بحساب البروفت في فتره زمنيه معينه لحساب البالنس في بدايه اليوم وفي نهايته لكن للاسف اخي لم تظهر الا حساب البالنس في اول اليوم فقط
اي الساعه00 ولم تظهره في نهايته فارجو ان تدلني علي موضع المشكل اخي حسن جزاك الله خيرا
الثانيه انني افتح مجموعه من الصفقات في اوقات مختلف لكنها تغلق جميعا علي بار واحد ولذلك اخي للاسف لم تنفع فكره عد الصفقات المغلقه
لذلك اخي ارجو ان تدلني علي حل اخر من ابداعات استاذي كيرا لعد ومعرفه اوقات وبارات الاغلاقات
وشكرا لك استاذي حسن علي جميل صبرك ومساعدتك

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

kira-h
09-06-2017, 04:42 PM
شكرا لك أخي حسن سلمت يداك
سأقوم بكتابة الكود في حال واجهتني أي مشاكل راح أرجع أسألك
وفقك الله

بالتوفيق إن شاء الله

hasani1982
09-06-2017, 10:50 PM
بتوفيق هل يمكن تحويل الاكواد الى mq5?

kira-h
10-06-2017, 05:10 PM
بتوفيق هل يمكن تحويل الاكواد الى mq5?

حتى الآن لا توجد طريقة فعالة لتحويل الأكواد من mq4 إلى mq5

sama97
11-06-2017, 01:15 AM
if(MarketInfo(Symbol(),MODE_SPREAD)*P>MaxSpread&&MaxSpread!=0)return;
لو سمحت هل الكود صحيح لتحديد أقصى سبريد لفتح الصفقات، ان لم يكن صحيحاً ارجو ان تصحح لي مع جزيل الشكر

Ahmed
11-06-2017, 01:26 AM
ستضع هذا الكود في المتغيرات الخارجية

extern int Max_Spread = 2;
وتضع هذا الكود في دالة OnTick

double SPREAD = MarketInfo(Symbol(), MODE_SPREAD)/10;
وثضع من ضمن شروط فتح الصفقة

if(SPREAD <= Max_Spread )

Waddah
11-06-2017, 10:25 AM
وعليكم السلام
مثال لمصفوفه تضع فيها اسماء العملات التي تريد إستخدامها ثم تقوم بإستدعائها داخل الحلقه


string Symbols_Array[]={"EURUSD","GBPUSD","USDJPY","AUDUSD","NZDUSD"};

int size=ArraySize(Symbols_Array);
for(int i=0;i<size;i++)
{
bool s=OrderSend(Symbols_Array[i],OP_BUY,Lots,MarketInfo(Symbols_Array[i],MODE_ASK),30,0,0,"Kira-h",MagicNumber,0,Blue);
}


أستاذ حسن بالنسبة لموضوع مصفوفة الأزواج عند عمل تيست للإكسبرت تظهر رسائل خطاء unknown Symboly name , كيف يمكن عمل التيست لإكسبرت من هذا النوع ؟؟

Ahmed
11-06-2017, 05:12 PM
من رسالة الخطاء يتضح ان الاكسبيرت لم يتعرف على ازواج العملات
اعتقد ان السبب هو prefix to the symbol او suffix to the symbol
يعني اذا كانت ازواج العملات تحتوى على امتداد مثل "GBPUSDm"
جرب منصة ليس بها حروف زايدة للعملات

kira-h
12-06-2017, 01:26 AM
من رسالة الخطاء يتضح ان الاكسبيرت لم يتعرف على ازواج العملات
اعتقد ان السبب هو prefix to the symbol او suffix to the symbol
يعني اذا كانت ازواج العملات تحتوى على امتداد مثل "GBPUSDm"
جرب منصة ليس بها حروف زايدة للعملات
شكرا جزيلا اخي الكريم


أستاذ حسن بالنسبة لموضوع مصفوفة الأزواج عند عمل تيست للإكسبرت تظهر رسائل خطاء unknown Symboly name , كيف يمكن عمل التيست لإكسبرت من هذا النوع ؟؟
الخطأ معناه أن الاكسبيرت لم يتعرف على الازواج ذات ملحقات من نوع perfix او suffix مثل EURUSDpro ... أو mEURUSD
سنقوم بالتعديل على الدالة بإضافة الملحق على اسم الزوج
مثلا منصتي بها ملحق pro بعد الاسم بجميع الأزواج مثلا EURUSDpro و NZDUSDpro....
سنقوم بالتعديل على الدالة كالتالي:


string Symbols_Array[]={"EURUSDpro","GBPUSDpro","USDJPYpro","AUDUSDpro","NZDUSDpro"};

int size=ArraySize(Symbols_Array);
for(int i=0;i<size;i++)
{
bool s=OrderSend(Symbols_Array[i],OP_BUY,Lots,MarketInfo(Symbols_Array[i],MODE_ASK),30,0,0,"Kira-h",MagicNumber,0,Blue);
}

//--------
أو تجعل الملحقات كمتغيرات خارجية كالتالي :

input string perfix="pro",
suffix="";

void OnTick()
{
string Symbols_Array[]={suffix+"EURUSD"+perfix,suffix+"GBPUSD"+perfix,suffix+"USDJPY"+perfix,suffix+"AUDUSD"+perfix,suffix+"NZDUSD"+perfix};

int size=ArraySize(Symbols_Array);
for(int i=0;i<size;i++)
{
bool s=OrderSend(Symbols_Array[i],OP_BUY,Lots,MarketInfo(Symbols_Array[i],MODE_ASK),30,0,0,"Kira-h",MagicNumber,0,Blue);
}
}

Ahmed
12-06-2017, 01:50 AM
شكرا جزيلا اخي الكريم


الخطأ معناه أن الاكسبيرت لم يتعرف على الازواج ذات ملحقات من نوع perfix او suffix مثل EURUSDpro ... أو mEURUSD
سنقوم بالتعديل على الدالة بإضافة الملحق على اسم الزوج
مثلا منصتي بها ملحق pro بعد الاسم بجميع الأزواج مثلا EURUSDpro و NZDUSDpro....
سنقوم بالتعديل على الدالة كالتالي:


string Symbols_Array[]={"EURUSDpro","GBPUSDpro","USDJPYpro","AUDUSDpro","NZDUSDpro"};

int size=ArraySize(Symbols_Array);
for(int i=0;i<size;i++)
{
bool s=OrderSend(Symbols_Array[i],OP_BUY,Lots,MarketInfo(Symbols_Array[i],MODE_ASK),30,0,0,"Kira-h",MagicNumber,0,Blue);
}

//--------
أو تجعل الملحقات كمتغيرات خارجية كالتالي :

input string perfix="pro",
suffix="";

void OnTick()
{
string Symbols_Array[]={suffix+"EURUSD"+perfix,suffix+"GBPUSD"+perfix,suffix+"USDJPY"+perfix,suffix+"AUDUSD"+perfix,suffix+"NZDUSD"+perfix};

int size=ArraySize(Symbols_Array);
for(int i=0;i<size;i++)
{
bool s=OrderSend(Symbols_Array[i],OP_BUY,Lots,MarketInfo(Symbols_Array[i],MODE_ASK),30,0,0,"Kira-h",MagicNumber,0,Blue);
}
}

احسنت اخي حسن بارك الله في علمك

Ahmed
12-06-2017, 03:07 PM
شكرا جزيلا اخي الكريم


الخطأ معناه أن الاكسبيرت لم يتعرف على الازواج ذات ملحقات من نوع perfix او suffix مثل EURUSDpro ... أو mEURUSD
سنقوم بالتعديل على الدالة بإضافة الملحق على اسم الزوج
مثلا منصتي بها ملحق pro بعد الاسم بجميع الأزواج مثلا EURUSDpro و NZDUSDpro....
سنقوم بالتعديل على الدالة كالتالي:


string Symbols_Array[]={"EURUSDpro","GBPUSDpro","USDJPYpro","AUDUSDpro","NZDUSDpro"};

int size=ArraySize(Symbols_Array);
for(int i=0;i<size;i++)
{
bool s=OrderSend(Symbols_Array[i],OP_BUY,Lots,MarketInfo(Symbols_Array[i],MODE_ASK),30,0,0,"Kira-h",MagicNumber,0,Blue);
}

//--------
أو تجعل الملحقات كمتغيرات خارجية كالتالي :

input string perfix="pro",
suffix="";

void OnTick()
{
string Symbols_Array[]={suffix+"EURUSD"+perfix,suffix+"GBPUSD"+perfix,suffix+"USDJPY"+perfix,suffix+"AUDUSD"+perfix,suffix+"NZDUSD"+perfix};

int size=ArraySize(Symbols_Array);
for(int i=0;i<size;i++)
{
bool s=OrderSend(Symbols_Array[i],OP_BUY,Lots,MarketInfo(Symbols_Array[i],MODE_ASK),30,0,0,"Kira-h",MagicNumber,0,Blue);
}
}

بارك الله فيك استاذ حسن وزادك الله علم على علمك
انا جربة هذا الكود فلم يظهر لى اخطاء

//+------------------------------------------------------------------+
//| تجعل الملحقات كمتغيرات خارجية.mq4 |
//| http://www.fxprg.com/vb/. |
//| http://www.fxprg.com/vb/ |
//+------------------------------------------------------------------+
#property copyright "http://www.fxprg.com/vb/"
#property link "http://www.fxprg.com/vb/"
#property version "1.00"
#property strict

input string perfix = "pro";
input string suffix = "";
input double Lots = 0.01;
input int MagicNumber = 1111;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{


return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{


}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
string Symbols_Array[]={"perfix+EURUSD+suffix","perfix+GBPUSD+suffix","perfix+USDJPY+suffix","perfix+AUDUSD+suffix","perfix+NZDUSD+suffix"};

int size=ArraySize(Symbols_Array);
for(int i=0;i<size;i++)
{
bool s=OrderSend(Symbols_Array[i],OP_BUY,Lots,MarketInfo(Symbols_Array[i],MODE_ASK),30,0,0,"Kira-h",MagicNumber,0,Blue);
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

Ahmed
12-06-2017, 04:00 PM
تعديل بسيط

//+------------------------------------------------------------------+
//| تجعل الملحقات كمتغيرات خارجية.mq4 |
//| http://www.fxprg.com/vb/. |
//| http://www.fxprg.com/vb/ |
//+------------------------------------------------------------------+
#property copyright "http://www.fxprg.com/vb/"
#property link "http://www.fxprg.com/vb/"
#property version "1.00"
#property strict

input string perfix = "";
input string suffix = "pro";
input double Lots = 0.01;
input int MagicNumber = 1111;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{


return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{


}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
string Symbols_Array[]={"perfix+EURUSD+suffix","perfix+GBPUSD+suffix","perfix+USDJPY+suffix","perfix+AUDUSD+suffix","perfix+NZDUSD+suffix"};

int size=ArraySize(Symbols_Array);
for(int i=0;i<size;i++)
{
bool s=OrderSend(Symbols_Array[i],OP_BUY,Lots,MarketInfo(Symbols_Array[i],MODE_ASK),30,0,0,"Kira-h",MagicNumber,0,Blue);
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

kira-h
12-06-2017, 06:34 PM
بارك الله فيك استاذ حسن وزادك الله علم على علمك
انا جربة هذا الكود فلم يظهر لى اخطاء



تعديل بسيط


ويبارك فيك اخي
كلا التعديلين خاطئين الصحيح ما جاء بمشاركتي السابقة بحيث يجب ان يكون الـ suffix و perfix عبارة عن متغيرين وليس ضمن اسم الزوج حتى تتم عملية الجمع

Ahmed
12-06-2017, 07:23 PM
بارك الله فيك اخي حسن
لكن يظهر خطئ عند عمل كوبيل
1297

kira-h
13-06-2017, 01:00 AM
بارك الله فيك اخي حسن
لكن يظهر خطئ عند عمل كوبيل


نعم صحيح في خطأ غير مقصود، بارك الله فيك
الصحيح كالتالي :


void OnTick()
{
string Symbols_Array[]={"EURUSD","GBPUSD","USDJPY","AUDUSD","NZDUSD"};

int size=ArraySize(Symbols_Array);
for(int i=0;i<size;i++)
{
bool s=OrderSend(suffix+Symbols_Array[i]+perfix,OP_BUY,Lots,MarketInfo(suffix+Symbols_Arra y[i]+perfix,MODE_ASK),30,0,0,"Kira-h",MagicNumber,0,Blue);
}
}

Ahmed
13-06-2017, 01:35 AM
بارك الله فيك اخي حسن
هل يوجد كود او وظيفة تعود ب perfix او suffix
ونستخدمها مباشرتا في الكود حتى لايحتاج المستخدم الى اضافتها

kira-h
13-06-2017, 02:49 AM
بارك الله فيك اخي حسن
هل يوجد كود او وظيفة تعود ب perfix او suffix
ونستخدمها مباشرتا في الكود حتى لايحتاج المستخدم الى اضافتها
ويبارك فيك أخي
حسب علمي لا يوجد

sal_moh85
13-06-2017, 01:37 PM
سلام عليكم استاذ حسن
اريد المساعده في كتابة كود
فكرة الكود عندما يكون موشر rsi محصور بين مستوى 20الى30 ان يفتح صفقه شراء من مستوى 20 ويغلق الشراء عند مستوى 30
هل انا استعملة هاد الكود
if((rsi>20&&rsi<30)bool buy=true; هاد الكود بشان احصير المسافه يلي بدي اداول فيها
هي اول خطوه الخطوه تانيه بدي انو بس لما يكون rsi على 20 يفتح الصفقه وبس لما يصل على 30 يغلقها
وشكرا جزيلا

kira-h
13-06-2017, 04:47 PM
سلام عليكم استاذ حسن
اريد المساعده في كتابة كود
فكرة الكود عندما يكون موشر rsi محصور بين مستوى 20الى30 ان يفتح صفقه شراء من مستوى 20 ويغلق الشراء عند مستوى 30
هل انا استعملة هاد الكود
if((rsi>20&&rsi<30)bool buy=true; هاد الكود بشان احصير المسافه يلي بدي اداول فيها
هي اول خطوه الخطوه تانيه بدي انو بس لما يكون rsi على 20 يفتح الصفقه وبس لما يصل على 30 يغلقها
وشكرا جزيلا

وعليكم السلام
الصحيح كالتالي :


double rsi0=iRSI(Symbol(),0,14,0,0),
rsi1=iRSI(Symbol(),0,14,0,1);

if(rsi0>=30)CloseOrder(OP_SELL);//شرط إغلاق البيع

if(rsi1<30&&rsi1>20&&rsi0<=20)bool buy=true;//شرط فتح الشراء


بحيث ()CloseOrder دالة الاغلاق بدلالة نوع الصفقة كالتالي :


void CloseOrders(int type=-1)
{
bool select,close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==type||type==-1)
{
if(OrderType()==OP_BUY){close=OrderClose(OrderTick et(),OrderLots(),NormalizeDouble(Bid,Digits),50);}
if(OrderType()==OP_SELL){close=OrderClose(OrderTic ket(),OrderLots(),NormalizeDouble(Ask,Digits),50); }
if(OrderType()>OP_SELL){close=OrderDelete(OrderTicket());}
}
}
}
}

sal_moh85
14-06-2017, 01:20 AM
وعليكم السلام
الصحيح كالتالي :


double rsi0=iRSI(Symbol(),0,14,0,0),
rsi1=iRSI(Symbol(),0,14,0,1);

if(rsi0>=30)CloseOrder(OP_SELL);//شرط إغلاق البيع

if(rsi1<30&&rsi1>20&&rsi0<=20)bool buy=true;//شرط فتح الشراء


بحيث ()CloseOrder دالة الاغلاق بدلالة نوع الصفقة كالتالي :


void CloseOrders(int type=-1)
{
bool select,close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==type||type==-1)
{
if(OrderType()==OP_BUY){close=OrderClose(OrderTick et(),OrderLots(),NormalizeDouble(Bid,Digits),50);}
if(OrderType()==OP_SELL){close=OrderClose(OrderTic ket(),OrderLots(),NormalizeDouble(Ask,Digits),50); }
if(OrderType()>OP_SELL){close=OrderDelete(OrderTicket());}
}
}
}
}


مشكور جدا جدا

Ahmed
14-06-2017, 02:14 AM
السلام عليكم ورحمة الله وبركاتة
استاذ حسن
كيف اجعل الاكسبيرت يغير زوج العملات الذي يعمل علية مع الاحتفاظ بالتمبلت
فمثلا انا اشغل الاكسيرت على اليورو دولاروفتح الاكسبيرت صفقة على الباوند دولار
اريد من الاكسبيرت ان يغيرالشارت الى البوند دولار مع الاحتفاظ بتمبلت اليورو دولار بحيث يكون شارت واحد فقط شغال على المنصة
بارك الله فيك

kira-h
14-06-2017, 06:22 PM
السلام عليكم ورحمة الله وبركاتة
استاذ حسن
كيف اجعل الاكسبيرت يغير زوج العملات الذي يعمل علية مع الاحتفاظ بالتمبلت
فمثلا انا اشغل الاكسيرت على اليورو دولاروفتح الاكسبيرت صفقة على الباوند دولار
اريد من الاكسبيرت ان يغيرالشارت الى البوند دولار مع الاحتفاظ بتمبلت اليورو دولار بحيث يكون شارت واحد فقط شغال على المنصة
بارك الله فيك
وعليكم السلام
بداية ستستخدم الوظيفة ChartSetSymbolPeriod مهمتها تعديل الزوج والفريم
تعريفها البرمجي كالتالي :
1345

ثم بعدها ستستخدم الوظيفة ChartApplyTemplate مهمتها تفعيل تمبلت باسم معين
تعريفها البرمجي كالتالي :
1344

مثال :


ChartSetSymbolPeriod(0,"GBPUSD",PERIOD_D1);
ChartApplyTemplate(0,"kira");

kira-h
14-06-2017, 06:23 PM
مشكور جدا جدا

العفو اخي والله الموفق

Ahmed
14-06-2017, 10:28 PM
وعليكم السلام
بداية ستستخدم الوظيفة ChartSetSymbolPeriod مهمتها تعديل الزوج والفريم
تعريفها البرمجي كالتالي :
1345

ثم بعدها ستستخدم الوظيفة ChartApplyTemplate مهمتها تفعيل تمبلت باسم معين
تعريفها البرمجي كالتالي :
1344

مثال :


if(Close[1]>Open[1]&&Volume<=2)
{
ChartSetSymbolPeriod(0,"GBPUSD",PERIOD_D1);
ChartApplyTemplate(0,"kira");
}


بارك الله فيك اخي حسن وجزاك عنا كل خي
وما المقصود ب

Volume<=2

kira-h
15-06-2017, 05:15 AM
بارك الله فيك اخي حسن وجزاك عنا كل خي
وما المقصود ب

Volume[0]<=2

ويبارك فيك اخي
معناه تفعيل جواب الشرط فقط عند بداية تكوين شمعة جديدة بحيث لا يتجاوز الفوليوم تكتين، يعني عدم تكرار تفعيل الشارت والتمبلت كل تكة للسعر

Ahmed
15-06-2017, 11:26 AM
ويبارك فيك اخي
معناه تفعيل جواب الشرط فقط عند بداية تكوين شمعة جديدة بحيث لا يتجاوز الفوليوم تكتين، يعني عدم تكرار تفعيل الشارت والتمبلت كل تكة للسعر

احسنت اخي حسن بارك الله فيك

Ahmed
15-06-2017, 06:13 PM
السلام عليكم استاذ حسن
مافائدة هذين الكودين في المنطقة العامة للاكسبيرت
وهل عدم وجودهم يؤثر على اداء الاكسبيرت

#include <stdlib.mqh>
#include <stderror.mqh>

kira-h
15-06-2017, 07:16 PM
السلام عليكم استاذ حسن
مافائدة هذين الكودين في المنطقة العامة للاكسبيرت
وهل عدم وجودهم يؤثر على اداء الاكسبيرت

#include <stdlib.mqh>
#include <stderror.mqh>


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

sal_moh85
15-06-2017, 09:49 PM
سلام عليكم اخ حسن
تتمة مساعده انا طلبة منك سابقا كود اني احصر قيم rsi
double rsi0=iRSI(Symbol(),0,14,0,0),
rsi1=iRSI(Symbol(),0,14,0,1);

if(rsi0>=30)CloseOrder(OP_SELL);//شرط إغلاق البيع

if(rsi1<30&&rsi1>20&&rsi0<=20)bool buy=true;//شرط فتح الشراء
طيب انا عاوز كود اني احصر كذى قيمه لي شراء وكذى قيمه للبيع
يعني
rsi1<30&&rsi1>20&&rsi0<=20)هي اول قيمه
rsi1<40&&rsi1>30&&rsi0<=30)هي ثاني قيمه
rsi1<50&&rsi1>40&&rsi0<=40)هي ثالث قيمه
طبعا اذا بدي استخدم بين كل قيمه وقيمه or يعني على هاد شكل
rsi1<40&&rsi1>30&&rsi0<=30)||rsi1<50&&rsi1>40&&rsi0<=40)||(rsi1<30&&rsi1>20&&rsi0<=20)
لح يكون الكود طويل جدا بدي كود اختصر في هل شي
لانو عندي تقريبا 100 قيمه في حل برمجي لهل الشي وشكرا

Ahmed
16-06-2017, 01:34 AM
وعليكم السلام
فائدتها انها تعطيك رسالة الخطأ شاملة السبب وتغنيك عن البحث عن المعنى
وعدم وجودهم لا يؤثر

بارك الله فيك استاذي

rambo
16-06-2017, 07:27 AM
صباح النور اعزائي
ممكن كود إغلاق صفقة معلقة معينة بدلالة كومنت معين
شكرا مقدما

Ahmed
16-06-2017, 02:06 PM
صباح الانوار
اتفضل الكود
يحذف الامر المعلق مع الماجيك نمبر والكومنت


//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int Delete_Pending_Orders()
{
int total = OrdersTotal();
for(int i=total-1;i>=0;i--)
{
if(OrderSelect(i, SELECT_BY_POS))
if(OrderSymbol()==Symbol() && OrderMagicNumber()== Magic_Number && OrderComment() == "first pending")
{
int type = OrderType();
bool result = false;
switch(type)
{
case OP_BUYSTOP :
case OP_SELLSTOP : result = OrderDelete( OrderTicket() );
}
if(result == false)
{
Sleep(0);
}
}
}
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

Ahmed
16-06-2017, 02:37 PM
السلام عليكم استاذ حسن
استخدمت الكود المرفق لكي ابحث في المنصة
اذا كان فية صفقة مفتوحة يفتح الاكسبيرت شارت العملة التي تم فتح الصفقة عليها
لكن الاكسبيرت يفتح شارت عملة اخرى ليس التي عليها الصفقة

string Last_Symbol;
for(int i =0;i<OrdersTotal();i++)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
Last_Symbol = OrderSymbol();
}

if(Close[1]>Open[1]&&Volume<=2)
{
ChartSetSymbolPeriod(0,"Last_Symbol",PERIOD_D1);
ChartApplyTemplate(0,"kira");
}

sal_moh85
16-06-2017, 06:15 PM
سلام عليكم اخ حسن
تتمة مساعده انا طلبة منك سابقا كود اني احصر قيم rsi
double rsi0=iRSI(Symbol(),0,14,0,0),
rsi1=iRSI(Symbol(),0,14,0,1);

if(rsi0>=30)CloseOrder(OP_SELL);//شرط إغلاق البيع

if(rsi1<30&&rsi1>20&&rsi0<=20)bool buy=true;//شرط فتح الشراء
طيب انا عاوز كود اني احصر كذى قيمه لي شراء وكذى قيمه للبيع
يعني
rsi1<30&&rsi1>20&&rsi0<=20)هي اول قيمه
rsi1<40&&rsi1>30&&rsi0<=30)هي ثاني قيمه
rsi1<50&&rsi1>40&&rsi0<=40)هي ثالث قيمه
طبعا اذا بدي استخدم بين كل قيمه وقيمه or يعني على هاد شكل
rsi1<40&&rsi1>30&&rsi0<=30)||rsi1<50&&rsi1>40&&rsi 0<=40)||(rsi1<30&&rsi1>20&&rsi0<=20)
لح يكون الكود طويل جدا بدي كود اختصر في هل شي
لانو عندي تقريبا 100 قيمه في حل برمجي لهل الشي وشكرا

kira-h
16-06-2017, 07:08 PM
صباح النور اعزائي
ممكن كود إغلاق صفقة معلقة معينة بدلالة كومنت معين
شكرا مقدما

السلام عليكم
كود حف الأوامر المعلقة بدلالة الكومنت كالتالي :


void DeleteOrders(string comment)
{
bool select,del;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderComment()==comment)
{
if(OrderType()>OP_SELL)
{
del=OrderDelete(OrderTicket());}
}
}
}
}

kira-h
16-06-2017, 07:22 PM
السلام عليكم استاذ حسن
استخدمت الكود المرفق لكي ابحث في المنصة
اذا كان فية صفقة مفتوحة يفتح الاكسبيرت شارت العملة التي تم فتح الصفقة عليها
لكن الاكسبيرت يفتح شارت عملة اخرى ليس التي عليها الصفقة

string Last_Symbol;
for(int i =0;i<OrdersTotal();i++)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
Last_Symbol = OrderSymbol();
}

if(Close[1]>Open[1]&&Volume<=2)
{
ChartSetSymbolPeriod(0,"Last_Symbol",PERIOD_D1);
ChartApplyTemplate(0,"kira");
}


وعليكم السلام
الصحيح كالتالي :

for(int i=OrdersTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
string Last_Symbol=OrderSymbol();

if(Close[1]>Open[1]&&Volume[0]<=2&&OrdersTotal()>0)
{
ChartSetSymbolPeriod(0,Last_Symbol,PERIOD_D1);
ChartApplyTemplate(0,"kira");
}
}

kira-h
16-06-2017, 07:26 PM
سلام عليكم اخ حسن
تتمة مساعده انا طلبة منك سابقا كود اني احصر قيم rsi
double rsi0=iRSI(Symbol(),0,14,0,0),
rsi1=iRSI(Symbol(),0,14,0,1);

if(rsi0>=30)CloseOrder(OP_SELL);//شرط إغلاق البيع

if(rsi1<30&&rsi1>20&&rsi0<=20)bool buy=true;//شرط فتح الشراء
طيب انا عاوز كود اني احصر كذى قيمه لي شراء وكذى قيمه للبيع
يعني
rsi1<30&&rsi1>20&&rsi0<=20)هي اول قيمه
rsi1<40&&rsi1>30&&rsi0<=30)هي ثاني قيمه
rsi1<50&&rsi1>40&&rsi0<=40)هي ثالث قيمه
طبعا اذا بدي استخدم بين كل قيمه وقيمه or يعني على هاد شكل
rsi1<40&&rsi1>30&&rsi0<=30)||rsi1<50&&rsi1>40&&rsi 0<=40)||(rsi1<30&&rsi1>20&&rsi0<=20)
لح يكون الكود طويل جدا بدي كود اختصر في هل شي
لانو عندي تقريبا 100 قيمه في حل برمجي لهل الشي وشكرا

وعليكم السلام
أعتقد يوجد حل باستخدام المصفوفات لكن لا أعلم كيف
عموما هذا موضوع به شرح جيد عن المصفوفات
Arrays (https://book.mql4.com/variables/arrays)

Ahmed
16-06-2017, 07:33 PM
وعليكم السلام
الصحيح كالتالي :

for(int i=OrdersTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
string Last_Symbol=OrderSymbol();

if(Close[1]>Open[1]&&Volume[0]<=2&&OrdersTotal()>0)
{
ChartSetSymbolPeriod(0,Last_Symbol,PERIOD_D1);
ChartApplyTemplate(0,"kira");
}
}

الان يعمل بشكل ممتاز اخي حسن بارك الله فيك.
لكن لماذا بعد فتح التميلت والزوج يحذف الاكسبيرت من الشارت

kira-h
16-06-2017, 08:15 PM
الان يعمل بشكل ممتاز اخي حسن بارك الله فيك.
لكن لماذا بعد فتح التميلت والزوج يحذف الاكسبيرت من الشارت
ويبارك فيك أخي
لأن التمبلت ليس به الاكسبيرت،
ضع عليه الاكسبيرت ثم احفظ التمبلت من جديد

Ahmed
16-06-2017, 08:44 PM
بارك الله فيك استاذي حسن وذادك الله من فضلة
اريد كود اضعة على شارت واحد فقط بحيث اذا فتحت صفقة على اي شارت اخر يفتح صفقة تبريد بعد عدد معين من النقاط

kira-h
17-06-2017, 01:29 AM
بارك الله فيك استاذي حسن وذادك الله من فضلة
اريد كود اضعة على شارت واحد فقط بحيث اذا فتحت صفقة على اي شارت اخر يفتح صفقة تبريد بعد عدد معين من النقاط
ويبارك فيك أخي
راجع الكود المرفق

Ahmed
17-06-2017, 02:32 AM
ويبارك فيك أخي
راجع الكود المرفق
جزاكم الله عنا كل خير

rambo
17-06-2017, 06:10 AM
السلام عليكم
كود حف الأوامر المعلقة بدلالة الكومنت كالتالي :


void DeleteOrders(string comment)
{
bool select,del;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderComment()==comment)
{
if(OrderType()>OP_SELL)
{
del=OrderDelete(OrderTicket());}
}
}
}
}


جزاك الله ألف خير على مساعدتك الدائمة للكل

kira-h
17-06-2017, 05:30 PM
جزاكم الله عنا كل خير

بالتوفيق ان شاء الله

kira-h
17-06-2017, 05:31 PM
جزاك الله ألف خير على مساعدتك الدائمة للكل

بالتوفيق ان شاء الله

السيد موسى
18-06-2017, 12:14 AM
سلام عليكم لو سمحت كنت بستعمل اكسبيرت وكان شغال وبعدين الاكسبيرت بطل يشتغل على اى منصة اية الحل

sal_moh85
18-06-2017, 12:56 AM
وعليكم السلام
أعتقد يوجد حل باستخدام المصفوفات لكن لا أعلم كيف
عموما هذا موضوع به شرح جيد عن المصفوفات
Arrays (https://book.mql4.com/variables/arrays)

مشكور اخ حسن قرية الموضوع بس ما حسنت افهم شلون بدي طبق الاكواد وشكرا على مجهودك

rambo
18-06-2017, 06:56 AM
السلام عليكم
كود حف الأوامر المعلقة بدلالة الكومنت كالتالي :


void deleteorders(string comment)
{
bool select,del;
for(int i=orderstotal()-1;i>=0;i--)
{
select=orderselect(i,select_by_pos,mode_trades);
if(orderstotal()>0&&ordersymbol()==symbol()&&ordermagicnumber()==magicno&&ordercomment()==comment)
{
if(OrderType()>OP_SELL)
{
del=orderdelete(orderticket());}
}
}
}
}


السلام عليكم اخ حسن
بالنسبة للكود المكتوب في الأعلى
ممكن تخبرني ليه كتبنا تحديدا op_sell ، وهل اذا أنا غيرتها راح يكون خطأ
لأني عايز أحذف الأوامر المعلقة من نوع باي ستوب وسيل ستوب وباي ليميت وسيل ليميت وكل واحد لحاله حسب الكومنت تبعه
شكرا مقدما لك

Ahmed
18-06-2017, 11:03 AM
السلام عليكم اخ حسن
بالنسبة للكود المكتوب في الأعلى
ممكن تخبرني ليه كتبنا تحديدا op_sell ، وهل اذا أنا غيرتها راح يكون خطأ
لأني عايز أحذف الأوامر المعلقة من نوع باي ستوب وسيل ستوب وباي ليميت وسيل ليميت وكل واحد لحاله حسب الكومنت تبعه
شكرا مقدما لك

معنى الكود

if(OrderType()>OP_SELL)
اذا كان نوع الصفقة باي ليميت او سيل ليمت او باي استوب او سيل استوب وذلك حسب ترتيب الصفقات في الصوره المرفقة يتم تنفيذ جواب الشرط عليها
راجع الصوره المرفقة وستسهل عليك الامر
1416
فلا تغير شي في الكود كل ماعليك ان تضع كومنت الصفقة المراد حذفها بين القوسين

DeleteOrders(string comment);

rambo
18-06-2017, 12:26 PM
معنى الكود

if(OrderType()>OP_SELL)
اذا كان نوع الصفقة باي ليميت او سيل ليمت او باي استوب او سيل استوب وذلك حسب ترتيب الصفقات في الصوره المرفقة يتم تنفيذ جواب الشرط عليها
راجع الصوره المرفقة وستسهل عليك الامر
1416
فلا تغير شي في الكود كل ماعليك ان تضع كومنت الصفقة المراد حذفها بين القوسين

DeleteOrders(string comment);

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

if(OrderType()==OP_SELL)

يعني لماذا وضعنا في الشرط علامة أكبر من

Ahmed
18-06-2017, 01:05 PM
شكرا لك
هل صحيح لو كتبنا الكود بالطريقة التالية

if(OrderType()==OP_SELL)

يعني لماذا وضعنا في الشرط علامة أكبر من

اذا كتبت الكود

if(OrderType()==OP_SELL)
فانت بذلك تحدد للوظيقة ان تعمل مع صفقات البيع فقط
والوظيفة تقوم بحذف الامر المعلق ولا تقوم باغلاق الصفقات فلن تعمل معك الوظيفة
لاننا مع صفقات البيع والشراء نستخدم اغلاق الصفقة
ومع الاوامر المعلقة بجميع انواعها نستخدم حذف الامر
واستخدمنا علامة أكبر من لان الترتيب البرمجي للصفقات كالتالي
صفقة الشراء تاخذ القيمة صفر
صفقة البيع تاخذ القيمة 1
صفقة الشراء ليميت تاخذ القيمة 2
صفقة البيع ليميت تاخذ القيمة 3
صفقة الباي استوب تاخذ القيمة 4
صفقة البيع استوب تاخذ القيمة 5
حسب الترتيب في الصورة
1417
1418
ولذلك استخدمنا الكود

if(OrderType()>OP_SELL)
بمعنى اذا كان نوع الصفقة اكبر من قيمة صفقة البيع يتحقق الشرط
لانك كما ترى ان قيمة صفقة البيع تاخذ القيمة 1
وباقي الصفقات المعلفة تاخذ قيمة اكبر من واحد وبذلك تكون قيمة الاوامر المعلقة اكبر من قيمة OP_Sell

kira-h
18-06-2017, 04:49 PM
السلام عليكم اخ حسن
بالنسبة للكود المكتوب في الأعلى
ممكن تخبرني ليه كتبنا تحديدا op_sell ، وهل اذا أنا غيرتها راح يكون خطأ
لأني عايز أحذف الأوامر المعلقة من نوع باي ستوب وسيل ستوب وباي ليميت وسيل ليميت وكل واحد لحاله حسب الكومنت تبعه
شكرا مقدما لك
وعليكم السلام
بالاضافة إلى الشرح الممتاز من اخي Ahmed جزاه الله خيرا، يمكنك جعل الدالة بدلالة النوع أيضا كالتالي :


void deleteorders(string comment,int type)
{
bool select,del;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderComment()==comment)
{
if(OrderType()>OP_SELL)
{
if(OrderType()==type)del=OrderDelete(OrderTicket() );
}
}
}
}


مثال لحذف أمر سيل ستوب بكومنت "kira" :

deleteorders("kira",OP_SELLSTOP);

ملحوظة : لا تعدل على طريقة كتابة الكلمات المحجوزة باللغة فبهذا الشكل لن تقوم بوظيفتها وحدوث أخطاء
فمثلا MODE_TRADES ليست كـ mode_trades لأن MODE_TRADES محجوزة باللغة وستقوم بوظيفتها، بينما mode_trades غير معرفة والنتيجة خطأ بالبرنامج
فأي نقص أو زيادة أو تصغير او تكبير لحرف واحد من الكلمة المحجوزة باللغة لن تقوم بوظيفتها

Ahmed
18-06-2017, 06:24 PM
وعليكم السلام
بالاضافة إلى الشرح الممتاز من اخي Ahmed جزاه الله خيرا، يمكنك جعل الدالة بدلالة النوع أيضا كالتالي :


void deleteorders(string comment,int type)
{
bool select,del;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderComment()==comment)
{
if(OrderType()>OP_SELL)
{
if(OrderType()==type)del=OrderDelete(OrderTicket() );
}
}
}
}


مثال لحذف أمر سيل ستوب بكومنت "kira" :

deleteorders("kira",OP_SELLSTOP);

ملحوظة : لا تعدل على طريقة كتابة الكلمات المحجوزة باللغة فبهذا الشكل لن تقوم بوظيفتها وحدوث أخطاء
فمثلا MODE_TRADES ليست كـ mode_trades لأن MODE_TRADES محجوزة باللغة وستقوم بوظيفتها، بينما mode_trades غير معرفة والنتيجة خطأ بالبرنامج
فأي نقص أو زيادة أو تصغير او تكبير لحرف واحد من الكلمة المحجوزة باللغة لن تقوم بوظيفتها

شكرا لك اخي حسن

kira-h
19-06-2017, 04:19 AM
شكرا لك اخي حسن

العفو، والله الموفق

rambo
19-06-2017, 04:29 AM
اذا كتبت الكود

if(OrderType()==OP_SELL)
فانت بذلك تحدد للوظيقة ان تعمل مع صفقات البيع فقط
والوظيفة تقوم بحذف الامر المعلق ولا تقوم باغلاق الصفقات فلن تعمل معك الوظيفة
لاننا مع صفقات البيع والشراء نستخدم اغلاق الصفقة
ومع الاوامر المعلقة بجميع انواعها نستخدم حذف الامر
واستخدمنا علامة أكبر من لان الترتيب البرمجي للصفقات كالتالي
صفقة الشراء تاخذ القيمة صفر
صفقة البيع تاخذ القيمة 1
صفقة الشراء ليميت تاخذ القيمة 2
صفقة البيع ليميت تاخذ القيمة 3
صفقة الباي استوب تاخذ القيمة 4
صفقة البيع استوب تاخذ القيمة 5
حسب الترتيب في الصورة
1417
1418
ولذلك استخدمنا الكود

if(OrderType()>OP_SELL)
بمعنى اذا كان نوع الصفقة اكبر من قيمة صفقة البيع يتحقق الشرط
لانك كما ترى ان قيمة صفقة البيع تاخذ القيمة 1
وباقي الصفقات المعلفة تاخذ قيمة اكبر من واحد وبذلك تكون قيمة الاوامر المعلقة اكبر من قيمة OP_Sell

شكرا لك أخي العزيز أحمد
ما قصرت ونورتني الله ينور عليك

rambo
19-06-2017, 04:32 AM
وعليكم السلام
بالاضافة إلى الشرح الممتاز من اخي Ahmed جزاه الله خيرا، يمكنك جعل الدالة بدلالة النوع أيضا كالتالي :


void deleteorders(string comment,int type)
{
bool select,del;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderComment()==comment)
{
if(OrderType()>OP_SELL)
{
if(OrderType()==type)del=OrderDelete(OrderTicket() );
}
}
}
}


مثال لحذف أمر سيل ستوب بكومنت "kira" :

deleteorders("kira",OP_SELLSTOP);

ملحوظة : لا تعدل على طريقة كتابة الكلمات المحجوزة باللغة فبهذا الشكل لن تقوم بوظيفتها وحدوث أخطاء
فمثلا MODE_TRADES ليست كـ mode_trades لأن MODE_TRADES محجوزة باللغة وستقوم بوظيفتها، بينما mode_trades غير معرفة والنتيجة خطأ بالبرنامج
فأي نقص أو زيادة أو تصغير او تكبير لحرف واحد من الكلمة المحجوزة باللغة لن تقوم بوظيفتها

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

kira-h
19-06-2017, 05:05 AM
الاستاذ القدير حسن
شكرا لك والله الواحد يفرح ويشعر بالفخر بوجودك معنا في المنتدى
دائما تقدم المشورة والمساعدة لكل من يحتاجها
تقبل امتناني واعتزازي

بارك الله فيك أخي الكريم
هذا واجب، والله الموفق

Waddah
19-06-2017, 12:02 PM
السلام عليكم أستاذ حسن
عندي إكسبرت ينفذ 3 عمليات (شراء مثلا ) على 3 ازواج الباوند ين والدولار ين و الباوند دولار المشكلة عند التسيت لا ينفذ العملية إلا على الشارت المفتوح - يعني وضعت الإكسبرت على شارت الباوند دولار ينفذ الصفقة الخاصة بالباوند دولار ولا ينفذ الباقي - وبالعكس لو وضعت الإكسبرت على شارت الأزواج الأخرى --- ما الحل لو سمحت ؟ (الأزواج ليس فيها لواحق لإسم الزوج )

Ahmed
19-06-2017, 02:56 PM
السلام عليكم استاذ حسن
كيف يمكن ازالة رسالة التحذير التي تظهر عند عمل كومبيل لهذا الكود

string LastSymbol()
{
bool select;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
{
return(OrderSymbol());
}
}
return(0);
}

kira-h
19-06-2017, 04:37 PM
السلام عليكم استاذ حسن
كيف يمكن ازالة رسالة التحذير التي تظهر عند عمل كومبيل لهذا الكود

string LastSymbol()
{
bool select;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
{
return(OrderSymbol());
}
}
return(0);
}

وعليكم السلام
يمكنك إزالة التحذير بطريقتين
- إما بحذف السطر التالي الخاص بالمراجعة الدقيقة للكود

#property strict

- أو تعدل الدالة بأن يعود بفراغ "" أو مثلا "0" لأن الدالة من نوع string وليس عدد صحيح int أو عدد عشري double أو منطقي true/false
يعني هكذا :


string LastSymbol()
{
bool select;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
{
return(OrderSymbol());
}
}
return("");
}

kira-h
19-06-2017, 04:45 PM
السلام عليكم أستاذ حسن
عندي إكسبرت ينفذ 3 عمليات (شراء مثلا ) على 3 ازواج الباوند ين والدولار ين و الباوند دولار المشكلة عند التسيت لا ينفذ العملية إلا على الشارت المفتوح - يعني وضعت الإكسبرت على شارت الباوند دولار ينفذ الصفقة الخاصة بالباوند دولار ولا ينفذ الباقي - وبالعكس لو وضعت الإكسبرت على شارت الأزواج الأخرى --- ما الحل لو سمحت ؟ (الأزواج ليس فيها لواحق لإسم الزوج )

وعليكم السلام
بدالة فتح الصفقة ستقوم بتعديل الوظيفة "Symbol()" إلى اسم الزوج
مثال :


int tk1,tk2,tk3;
//--- Buy Orders
tk1=OrderSend("GBPJPY",OP_BUY,Lots,MarketInfo("GBPJPY",MODE_ASK),30,0,0,"Kira-h",MagicNo,0,Blue);
tk2=OrderSend("GBPUSD",OP_BUY,Lots,MarketInfo("GBPUSD",MODE_ASK),30,0,0,"Kira-h",MagicNo,0,Blue);
tk3=OrderSend("USDJPY",OP_BUY,Lots,MarketInfo("USDJPY",MODE_ASK),30,0,0,"Kira-h",MagicNo,0,Blue);

//--- Sell Orders
tk1=OrderSend("GBPJPY",OP_SELL,Lots,MarketInfo("GBPJPY",MODE_BID),30,0,0,"Kira-h",MagicNo,0,Red);
tk2=OrderSend("GBPUSD",OP_SELL,Lots,MarketInfo("GBPUSD",MODE_BID),30,0,0,"Kira-h",MagicNo,0,Red);
tk3=OrderSend("USDJPY",OP_SELL,Lots,MarketInfo("USDJPY",MODE_BID),30,0,0,"Kira-h",MagicNo,0,Red);

Ahmed
19-06-2017, 07:20 PM
وعليكم السلام
يمكنك إزالة التحذير بطريقتين
- إما بحذف السطر التالي الخاص بالمراجعة الدقيقة للكود

#property strict

- أو تعدل الدالة بأن يعود بفراغ "" أو مثلا "0" لأن الدالة من نوع string وليس عدد صحيح int أو عدد عشري double أو منطقي true/false
يعني هكذا :


string LastSymbol()
{
bool select;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
{
return(OrderSymbol());
}
}
return("");
}


شكرا لك اخي حسن

kira-h
20-06-2017, 05:28 PM
شكرا لك اخي حسن

العفو أخي والله الموفق

rambo
21-06-2017, 11:18 AM
السلام عليكم اخي حسن
حاولت الرجوع الى موضوع أهم الدوال البرمجية لكن لم أستطع للأسف تحديد الدالة بكومنت معين
طلبي هو أنه لدي عدد كبير من الاوامر المعلقة بمختلف أنواعها وكل نوع بدلالات كومننات مختلفة
فضلا لو تكرمت الكود الخاص بإستخراج سعر افتتاح آخر صفقة معلقة موجودة حاليا، بنوعها المعين، بدلالة كومنتها المعين
وأكون متشكرك كثير أستاذي

kira-h
21-06-2017, 06:12 PM
السلام عليكم اخي حسن
حاولت الرجوع الى موضوع أهم الدوال البرمجية لكن لم أستطع للأسف تحديد الدالة بكومنت معين
طلبي هو أنه لدي عدد كبير من الاوامر المعلقة بمختلف أنواعها وكل نوع بدلالات كومننات مختلفة
فضلا لو تكرمت الكود الخاص بإستخراج سعر افتتاح آخر صفقة معلقة موجودة حاليا، بنوعها المعين، بدلالة كومنتها المعين
وأكون متشكرك كثير أستاذي

وعليكم السلام
الدالة كالتالي:


double LastOrderPrice(string comment,int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
double price=OrderOpenPrice();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderComment()==comment)
{
if(OrderType()==type)return(price);
}
}
return(0);
}

sama97
22-06-2017, 01:32 AM
مساء الخير
هل ممكن بدل مضاعفة الوت يتم مضاعفة الاهداف بمعني في صفقة مفتوحة ضربت الاستوب 10 نقطة الصفقة الي هتتفتح يكون الهدف 20 حقق ربح الصفقة الجديدة تاخد هدف 10 ضربت الاستوب الصفقة الجديدة تكون الاهداف 40 وهكذا لحد ما تحقق الهدف وترجع الي الاهداف الاصلية 10 نقطة
بانتظار ردودكم مع جزيل الشكر

sama97
22-06-2017, 01:33 AM
عفوا لدي سؤال اخر لو سمحتم هل ممكن عدم فتح صفقة فوق صفقة تم فتحها من قبل بمعني اذا كان السعر 1.100 تم فتح صفقة شراء اذا نزل الي 1.90 فتح صفقة بيع اذا نزل الي 1.80 تم فتح بيع اذا صعد الي 1.90 لا يفتح صفقات واذا صعد الي 1.100 لا يفتح صفقات اذا صعد الي 1.110 يفتح صفقة شراء

kira-h
22-06-2017, 02:07 AM
مساء الخير
هل ممكن بدل مضاعفة الوت يتم مضاعفة الاهداف بمعني في صفقة مفتوحة ضربت الاستوب 10 نقطة الصفقة الي هتتفتح يكون الهدف 20 حقق ربح الصفقة الجديدة تاخد هدف 10 ضربت الاستوب الصفقة الجديدة تكون الاهداف 40 وهكذا لحد ما تحقق الهدف وترجع الي الاهداف الاصلية 10 نقطة
بانتظار ردودكم مع جزيل الشكر


عفوا لدي سؤال اخر لو سمحتم هل ممكن عدم فتح صفقة فوق صفقة تم فتحها من قبل بمعني اذا كان السعر 1.100 تم فتح صفقة شراء اذا نزل الي 1.90 فتح صفقة بيع اذا نزل الي 1.80 تم فتح بيع اذا صعد الي 1.90 لا يفتح صفقات واذا صعد الي 1.100 لا يفتح صفقات اذا صعد الي 1.110 يفتح صفقة شراء

نعم كل هذا ممكن،

sama97
22-06-2017, 02:23 AM
نعم كل هذا ممكن،

هل يمكنك ان تشرح لي كيف لو سمحت

kira-h
22-06-2017, 05:32 AM
هل يمكنك ان تشرح لي كيف لو سمحت
هناك عدة طرق لكن أضمن طريقة هي باستخدام دوال الجلوبال للاحتفاظ بهدف آخر صفقة مفتوحة ثم نقوم باستدعائها عند فتح صفقة جديدة وهكذا...
الميزة بدوال الجلوبال أنها تحتفظ بقيمتها حتى لو انقطع التيار أو السيرفر أو اغلقت المنصة...، فبعد استئناف المنصة يكمل الاكسبيرت عمله باستدعاء الدالة المخزنة بالحاسوب...

راجع مثال بالاكسبيرت المرفق

sama97
22-06-2017, 09:50 AM
هناك عدة طرق لكن أضمن طريقة هي باستخدام دوال الجلوبال للاحتفاظ بهدف آخر صفقة مفتوحة ثم نقوم باستدعائها عند فتح صفقة جديدة وهكذا...
الميزة بدوال الجلوبال أنها تحتفظ بقيمتها حتى لو انقطع التيار أو السيرفر أو اغلقت المنصة...، فبعد استئناف المنصة يكمل الاكسبيرت عمله باستدعاء الدالة المخزنة بالحاسوب...

راجع مثال بالاكسبيرت المرفق
شكرا جزيلا يعطيك العافية و بالنسبة لفتح صفقة فوق صفقة بعد اذنك شو حلها

rambo
22-06-2017, 10:03 AM
وعليكم السلام
الدالة كالتالي:


double LastOrderPrice(string comment,int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
double price=OrderOpenPrice();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderComment()==comment)
{
if(OrderType()==type)return(price);
}
}
return(0);
}


سلمت أناملك أستاذي العزيز حسن
الله يخليك لنا دوم يارب ويرزقك من حيث لا تحتسب

kira-h
22-06-2017, 07:33 PM
شكرا جزيلا يعطيك العافية و بالنسبة لفتح صفقة فوق صفقة بعد اذنك شو حلها

ستقوم بعمل دالة تعود بسعر آخر صفقة بدلالة النوع كالتالي :


double LastOrderPrice(int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
double price=OrderOpenPrice();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==type)return(price);
}
}
return(0);
}


ثم تضع شروط فتح الصفقات كالتالي :


if(Ask >= LastOrderPrice(OP_BUY)+Step*Point)//Open Buy

if(Bid <= LastOrderPrice(OP_SELL)-Step*Point)//Open Sell


بحيث Step متغير خارجي للمسافة بين صفقة والصفقة الموالية من نفس النوع

kira-h
22-06-2017, 07:35 PM
سلمت أناملك أستاذي العزيز حسن
الله يخليك لنا دوم يارب ويرزقك من حيث لا تحتسب

وإياك أخي والله الموفق

sama97
22-06-2017, 08:51 PM
شكراً جزيلاً استاذي العزيز لمساعدتك و طول اناتك و اعتذر للاطالة، الكود خاص بنوع واحد فقط ام بيع او شراء لكن عندما يعمل بيع مع شراء بيصير يفتح بيع فوق شراء وشراء فوق شراء وبيع فوق بيع المطلوب لا يتنفذ اي صفقات فوق اي امر موجود علي الشارت و الصورة المرفقة توضح الفكرة التي احاول ايصالها 1546