تسجيل الدخول

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



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

mr.forex
12-08-2020, 05:47 PM
وعليكم السلام
مرفق الاكسبيرت


أخي حسن سؤال أخير من فضلك
الإكسبيرت الآن يقوم بتعديل الأمر المعلق بمقدار 1 نقطة واحدة لكل تعديل، وهذا شئ ممتاز كما في الصورة

22918

ولكن لو أردت أن يكون التعديل بمقدار 0.1 نقطة لذلك يجب أن أغير قيمة المتغير digits=4 إلى didgits=5 (لأزواج الخمس خانات بعد الفاصلة)
أنظر الكود التالي:




double point;
int Q,digits,Lot_Decimal;
int OnInit()
{
if(MarketInfo(Symbol(),MODE_MINLOT)<0.1)
Lot_Decimal=2;
else
Lot_Decimal=1;
if(_Digits==5||_Digits==3)
Q=10;
else
Q=1;
if(_Digits<4)
{
point=0.01;
digits=3;
}
else
{
point=0.0001;

digits=5;
}
return(INIT_SUCCEEDED);
}


ولاحظت أن التنفيذ صحيح كما في الصورة

22919

سؤالي هو هل تغيير القيمة من digits=4 إلى didgits=5 يعتبر تغيير سليم 100% أم أنه رغم التنفيذ الصحيح حاليا إلا أنه يوجد خطأ منطقي غير ظاهر
طبعا لا يوجد أي خطأ في خانة الجورنال

kira-h
12-08-2020, 08:59 PM
أخي حسن سؤال أخير من فضلك
الإكسبيرت الآن يقوم بتعديل الأمر المعلق بمقدار 1 نقطة واحدة لكل تعديل، وهذا شئ ممتاز كما في الصورة

22918

ولكن لو أردت أن يكون التعديل بمقدار 0.1 نقطة لذلك يجب أن أغير قيمة المتغير digits=4 إلى didgits=5 (لأزواج الخمس خانات بعد الفاصلة)
أنظر الكود التالي:




double point;
int Q,digits,Lot_Decimal;
int OnInit()
{
if(MarketInfo(Symbol(),MODE_MINLOT)<0.1)
Lot_Decimal=2;
else
Lot_Decimal=1;
if(_Digits==5||_Digits==3)
Q=10;
else
Q=1;
if(_Digits<4)
{
point=0.01;
digits=3;
}
else
{
point=0.0001;

digits=5;
}
return(INIT_SUCCEEDED);
}


ولاحظت أن التنفيذ صحيح كما في الصورة

22919

سؤالي هو هل تغيير القيمة من digits=4 إلى didgits=5 يعتبر تغيير سليم 100% أم أنه رغم التنفيذ الصحيح حاليا إلا أنه يوجد خطأ منطقي غير ظاهر
طبعا لا يوجد أي خطأ في خانة الجورنال
نعم سليم ويمكنك تغيير digits مباشرة الى الوظيفة التلقائية Digits
ولكن احذر فقد يسبب هذا ازعاج بسيرفر الشركة بسبب كثرة التعديل على الصفقة كل تكة سعرية! وبالتالي ايقاف مفاجئ للحساب

mr.forex
12-08-2020, 10:49 PM
نعم سليم ويمكنك تغيير digits مباشرة الى الوظيفة التلقائية Digits
ولكن احذر فقد يسبب هذا ازعاج بسيرفر الشركة بسبب كثرة التعديل على الصفقة كل تكة سعرية! وبالتالي ايقاف مفاجئ للحساب

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

kira-h
13-08-2020, 01:47 PM
شكرا لك أخي حسن
نعم كلامك صحيح،، التعديل لكل نقطة أفضل من التعديل لكل تكة سعرية للسب الذي ذكرته
وهو ليس بذلك الفارق الكبير عن التعديل لكل تكة سعرية لذلك سأستخدم هذه الطريقة إن شاء الله

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

ابراهيم
22-08-2020, 04:05 PM
ماهى الدالة التى تجعل الاكسبيرت يعمل على الديمو فقط

kira-h
22-08-2020, 06:17 PM
ماهى الدالة التى تجعل الاكسبيرت يعمل على الديمو فقط
تضع الشرط التالي ببدالة الدالة الرئيسية OnTick و OnTimer إذا موجودة


void OnTick()
{
if(!IsDemo())return;
//----- ثم يليه بقية شروط الاكسبيرت
}

ابراهيم
22-08-2020, 08:16 PM
تضع الشرط التالي ببدالة الدالة الرئيسية OnTick و OnTimer إذا موجودة


void OnTick()
{
if(!IsDemo())return;
//----- ثم يليه بقية شروط الاكسبيرت
}

شكرا جزيلا اخى حسن

kira-h
23-08-2020, 08:44 AM
شكرا جزيلا اخى حسن
العفو اخي

Chemadam
23-08-2020, 03:32 PM
السلام عليكم ورحمة الله وبركاته
في المرفقات اكسبرت اوامر معلقة وملف اكسل به منظومة اوامر معلقه
ممكن اخواني اذا سمحتم التعديل على الاكسبرت وجعله ينفذ الاوامر الموجوده في ملف الاكسيل

kira-h
23-08-2020, 05:02 PM
السلام عليكم ورحمة الله وبركاته
في المرفقات اكسبرت اوامر معلقة وملف اكسل به منظومة اوامر معلقه
ممكن اخواني اذا سمحتم التعديل على الاكسبرت وجعله ينفذ الاوامر الموجوده في ملف الاكسيل

وعليكم السلام
اخي الكريم هذا الموضوع مخصص فقط للاسئلة البرمجية وليس الطلبات

شهيد الاسلام
27-08-2020, 07:27 PM
يوجد بعض المصطلحات اراها فى اعدادات الاكسبيرت وارجو معرفتها ما معناها

ما هو ال

1- Magic No
2-Break Even
3-Break Even pips
4-Lots mp
5-Max Lots

kira-h
27-08-2020, 07:46 PM
يوجد بعض المصطلحات اراها فى اعدادات الاكسبيرت وارجو معرفتها ما معناها

ما هو ال

1- Magic No
2-Break Even
3-Break Even pips
4-Lots mp
5-Max Lots

1- Magic No عند استخدام الاكسبيرت على اكثر من شارت يجب استخدام رقم عشوائي بتلك الخاصية رقم خاص بكل اكسبيرت، والفكرة منها حتى لا يتدخل اكسبيرت في عمل اكسبيرت اخر، وايضا حتى لا يتدخل في صفقاتك اليدوية يجب ان يكون الرقم مخالف لـ 0، الرقم محصور بين 1 الى 10000 مثلا

2-Break Even
3-Break Even pips

مثلا إذا كنت تريد نقل الوقف إلى نقطة الدخول بعد ربح 10 نقاط سوف تجعل BreakEven=10 و BreakEvenPips=0

الان تريد بعد ربح 10 نقاط نقل الوقف ليس إلى نقطة الدخول لكن إلى ربح نقطتين مثلا في هذه الحاله سوف تجعل BreakEven=10 و BreakEvenPips=2
أي أن المتغير BreakEvenPips هو عدد نقاط الربح التي يتم نقل الوقف عندها


4-Lots mp معامل الضرب بالمضاعفات مثلا 2 يعني ضرب اللوت السابق في 2
5-Max Lots اقصى لوت مضاعف اذا وصله الاكسبيرت بالمضاعفات يبدأ من جديد باللوت الاساسي

شهيد الاسلام
27-08-2020, 08:06 PM
1- Magic No عند استخدام الاكسبيرت على اكثر من شارت يجب استخدام رقم عشوائي بتلك الخاصية رقم خاص بكل اكسبيرت، والفكرة منها حتى لا يتدخل اكسبيرت في عمل اكسبيرت اخر، وايضا حتى لا يتدخل في صفقاتك اليدوية يجب ان يكون الرقم مخالف لـ 0، الرقم محصور بين 1 الى 10000 مثلا

2-Break Even
3-Break Even pips

مثلا إذا كنت تريد نقل الوقف إلى نقطة الدخول بعد ربح 10 نقاط سوف تجعل BreakEven=10 و BreakEvenPips=0

الان تريد بعد ربح 10 نقاط نقل الوقف ليس إلى نقطة الدخول لكن إلى ربح نقطتين مثلا في هذه الحاله سوف تجعل BreakEven=10 و BreakEvenPips=2
أي أن المتغير BreakEvenPips هو عدد نقاط الربح التي يتم نقل الوقف عندها


4-Lots mp معامل الضرب بالمضاعفات مثلا 2 يعني ضرب اللوت السابق في 2
5-Max Lots اقصى لوت مضاعف اذا وصله الاكسبيرت بالمضاعفات يبدأ من جديد باللوت الاساسي

بجد مش عارف اشكرك ازاى

لا يسعنى الا ان اقول لك جزاك الله كل خير

ولدى اكسبريت من برمجة حضرتك من عام 2017 ولكن حبيت اجربه على حسابى الديمو لم يعمل ولا ادرى السبب

وسوف اكتب موضوع فى المكان المخصص لذالك حتى لا اخالف قوانين المنتدى

kira-h
27-08-2020, 11:20 PM
بجد مش عارف اشكرك ازاى

لا يسعنى الا ان اقول لك جزاك الله كل خير

ولدى اكسبريت من برمجة حضرتك من عام 2017 ولكن حبيت اجربه على حسابى الديمو لم يعمل ولا ادرى السبب

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

شهيد الاسلام
07-09-2020, 05:08 PM
السلام عليكم ورحمة الله

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

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

كيف لى ان اعمل باك تست من اول عام 2020 بارك الله فيك

kira-h
07-09-2020, 06:12 PM
السلام عليكم ورحمة الله

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

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

كيف لى ان اعمل باك تست من اول عام 2020 بارك الله فيك

وعليكم السلام
إذا تريد الدقة العادية يمكنك تحميل بيانات الزوج من خلال المنصة مباشرة من Tools ثم History Center وتحدد الزوج والفريم ثم التحميل وبعد انتهائه اعد تشغيل المنصة
لمزيد من التوضيح راجع الفيديو التالي بدءا من الدقيقة 2:30 https://www.youtube.com/watch?v=4cIlzbYiI-g

أما إذا تريد الدقة العالية فالامر صعب قليلا بالموضوع التالي : طريقة عمل الباكتيست %99 ورفعه بموقع تحليلي، وطريقة عمل الأوبتيميزايشن (https://www.fxprg.com/vb/showthread.php?t=31563)

شهيد الاسلام
07-09-2020, 07:38 PM
وعليكم السلام
إذا تريد الدقة العادية يمكنك تحميل بيانات الزوج من خلال المنصة مباشرة من Tools ثم History Center وتحدد الزوج والفريم ثم التحميل وبعد انتهائه اعد تشغيل المنصة
لمزيد من التوضيح راجع الفيديو التالي بدءا من الدقيقة 2:30 https://www.youtube.com/watch?v=4cIlzbYiI-g

أما إذا تريد الدقة العالية فالامر صعب قليلا بالموضوع التالي : طريقة عمل الباكتيست %99 ورفعه بموقع تحليلي، وطريقة عمل الأوبتيميزايشن (https://www.fxprg.com/vb/showthread.php?t=31563)



زادك الله علما اخى

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

هل منصة مثل اكسنس التى يبدا اليوم فيها الساعة 2 صباحا بتوقيت مصر يتغير الزمن فيها على المنصة

مثل المنصات التى يبدا اليوم فيها الساعة 11 مساء بتوقيت مصر ثم يتغير ليبدا معنا الساعة 12 ؟
ارجو سؤالى يكون واضح

شهيد الاسلام
07-09-2020, 07:54 PM
ده غير ان البيانات اللى حملتها من المنصة غير دقيقة بالمرة صفقات جايبة الاهداف بوضوح وكمان فى الباك تيست الاول على منصة قبل تحميل الملفات الجديدة كانت جايبة الاهداف دلوقتى وانا بعمل باك تيست لقيتها ضاربة استوبات

kira-h
07-09-2020, 11:41 PM
زادك الله علما اخى

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

هل منصة مثل اكسنس التى يبدا اليوم فيها الساعة 2 صباحا بتوقيت مصر يتغير الزمن فيها على المنصة

مثل المنصات التى يبدا اليوم فيها الساعة 11 مساء بتوقيت مصر ثم يتغير ليبدا معنا الساعة 12 ؟
ارجو سؤالى يكون واضح
كل شركة ومنصتها الخاصة ولا يمكن تعديل توقيت بداية اليوم!

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

shivaa
10-09-2020, 01:06 PM
السلام عليكم
ممكن مساعده فى تعديل لون خلفيه المؤشرcci كما فى الصوره

جربت اعمل مسطيل لونه ازرق اكبرمن الظاهر على الشاشه ولم انجح

ObjectCreate(ChartID(),"order ",OBJ_RECTANGLE,0
,iTime(Symbol(),PERIOD_CURRENT,1000)
,indicator_level1
,iTime(Symbol(),PERIOD_CURRENT,-20)
,indicator_level2);
اكون شاكر

23374


موشر 23375

kira-h
10-09-2020, 06:22 PM
السلام عليكم
ممكن مساعده فى تعديل لون خلفيه المؤشرcci كما فى الصوره

جربت اعمل مسطيل لونه ازرق اكبرمن الظاهر على الشاشه ولم انجح

ObjectCreate(ChartID(),"order ",OBJ_RECTANGLE,0
,iTime(Symbol(),PERIOD_CURRENT,1000)
,indicator_level1
,iTime(Symbol(),PERIOD_CURRENT,-20)
,indicator_level2);
اكون شاكر

23374


موشر 23375
وعليكم السلام
مرفق المؤشر
ولزيادة حجم المستطيل عدل قيمتي level 1 and 2

shivaa
10-09-2020, 07:57 PM
وعليكم السلام
مرفق المؤشر
ولزيادة حجم المستطيل عدل قيمتي level 1 and 2


الف شكروجزاك الله خيرااااااااا

kira-h
11-09-2020, 02:48 PM
الف شكروجزاك الله خيرااااااااا
العفو أخي الكريم

sabil
14-09-2020, 11:20 AM
لدي سؤال تقني غريب
ايه تفسيرك لاكسبرت اكواده 100% صحيحة واشتغل باكتيست مظبوط وبعد اعادة الباكتيست بقى بيفتح صفقات كتير غلط بعيد عن الشروط المكتوبة؟ علما بأن لم يتم تغيير شيء ف الاكسبرت بجانب مراجعته عدة مرات

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

kira-h
14-09-2020, 11:54 PM
لدي سؤال تقني غريب
ايه تفسيرك لاكسبرت اكواده 100% صحيحة واشتغل باكتيست مظبوط وبعد اعادة الباكتيست بقى بيفتح صفقات كتير غلط بعيد عن الشروط المكتوبة؟ علما بأن لم يتم تغيير شيء ف الاكسبرت بجانب مراجعته عدة مرات

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

sabil
15-09-2020, 06:45 AM
السلام عليكم
ارفق الاكسبيرت للمراجعة
تفضل
الاكسبرت بيشتري وبيبع من اماكن تانية بعيد خالص عن الاسهم
https://drive.google.com/file/d/1WhY0gJGxHqhBVnqxViustgBhIwr2cNs-/view?usp=sharing

kira-h
15-09-2020, 05:33 PM
تفضل
الاكسبرت بيشتري وبيبع من اماكن تانية بعيد خالص عن الاسهم
https://drive.google.com/file/d/1WhY0gJGxHqhBVnqxViustgBhIwr2cNs-/view?usp=sharing
منطقيا سليم
لكن لا تنسى انك تستخدم المؤشر High-Low_MA.ind باعداداته الافتراضية فقط لانها غير مدخلة بدالته الخاصة، فاذا كنت تستخدم المؤشر باعدادات مختلفة عن الافتراضية فاكيد المراجعة خاطئة بحيث سيكون اختلاف بين التنفيذ وما تراه على الشارت
غير ذلك ارفق المؤشر للمراجعة

sabil
15-09-2020, 08:40 PM
منطقيا سليم
لكن لا تنسى انك تستخدم المؤشر High-Low_MA.ind باعداداته الافتراضية فقط لانها غير مدخلة بدالته الخاصة، فاذا كنت تستخدم المؤشر باعدادات مختلفة عن الافتراضية فاكيد المراجعة خاطئة بحيث سيكون اختلاف بين التنفيذ وما تراه على الشارت
غير ذلك ارفق المؤشر للمراجعة
راجعتها ولقيت المؤشر بتاع موفنج مش ايشموكو
كنت اظنه ايشموكو
غريبة مع ان النتائج اختلفت كل مرة داا الل خلاني ااستبعد المؤشر ومراجعوش
عموما شكرا ياغالي وهرجعلك تاني عند اي مشكلة برمجية

kira-h
16-09-2020, 08:50 PM
راجعتها ولقيت المؤشر بتاع موفنج مش ايشموكو
كنت اظنه ايشموكو
غريبة مع ان النتائج اختلفت كل مرة داا الل خلاني ااستبعد المؤشر ومراجعوش
عموما شكرا ياغالي وهرجعلك تاني عند اي مشكلة برمجية
بالتوفيق ان شاء الله

shivaa
19-09-2020, 09:47 PM
السلام عليكم
يوجد عدد من القيم مثل :
0.00111
-0.00015
-0.00187
1.00444
0.00581
عدد من القيم كيف اعرف اكبر قيمه واصغر قيمه
ممكن الداله تعمل المطلوب
اكون شاكر
السلام عليكم

kira-h
20-09-2020, 12:31 AM
السلام عليكم
يوجد عدد من القيم مثل :
0.00111
-0.00015
-0.00187
1.00444
0.00581
عدد من القيم كيف اعرف اكبر قيمه واصغر قيمه
ممكن الداله تعمل المطلوب
اكون شاكر
السلام عليكم
وعليكم السلام
راجع المشاركة التالية:
https://www.fxprg.com/vb/showthread.php?t=31457&page=77&p=874710&viewfull=1#post874710

shivaa
20-09-2020, 03:33 AM
وعليكم السلام
راجع المشاركة التالية:
https://www.fxprg.com/vb/showthread.php?t=31457&page=77&p=874710&viewfull=1#post874710

جزاك الله كل خير استاذى

kira-h
20-09-2020, 03:59 AM
جزاك الله كل خير استاذى

واياك اخي الكريم

sabil
21-09-2020, 06:32 PM
السلام عليكم
بقالي فترة بحاول اضيف اكسبرتاتي على موقع MQL5 بس بيطلعلي 22 خطأ برمجي ودا في كل الاكسبرتات الل بضيفها وبقى همي مش اني اضيف الاكسبرتات هناك اكتر من اني اعرف سبب الخطأ وازاي اعالجه لان مش بيظهرلي اي خطأ عند عمل compile بالاضافة انه شغال باكتيست كويس

سكرين شوت
https://imgur.com/MDeBXPN
https://imgur.com/MDeBXPN
ودا لينك الصفحة الل بيدخلني عليها لما بدوس على error
https://www.mql5.com/en/articles/2555#invalid_lot

الاكسبرت المراد اضافته ف المرفقات

ارجو التعديل

rambo
21-09-2020, 10:02 PM
مساء النور أخي حسن
مطلوب كود يعمل حسب ما يلي:
منذ توقيت وضع آخر أمر معلق أو منذ توقيت آخر تعديل للأمر المعلق
إذا مرت فترة معينة بالثواني (فلنفترض أنها 50) ولم يتم فتح صفقة من خلال هذا الأمر فالمطلوب هو حذف هذا الأمر المعلق .. (لأن الفرصة تعتبر لاغية)
طبعا سيكون إختيار الفترة = 50 ثانية كمتغير خارجي
أشكرك مقدما

kira-h
21-09-2020, 11:08 PM
مساء النور أخي حسن
مطلوب كود يعمل حسب ما يلي:
منذ توقيت وضع آخر أمر معلق أو منذ توقيت آخر تعديل للأمر المعلق
إذا مرت فترة معينة بالثواني (فلنفترض أنها 50) ولم يتم فتح صفقة من خلال هذا الأمر فالمطلوب هو حذف هذا الأمر المعلق .. (لأن الفرصة تعتبر لاغية)
طبعا سيكون إختيار الفترة = 50 ثانية كمتغير خارجي
أشكرك مقدما

مساء الخير
الدالة كالتالي :


input int Second=50;


void DeleteByTime()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tt=OrdersTotal(),
tk=OrderTicket(),
ty=OrderType(),
mn=OrderMagicNumber();
datetime tm=OrderOpenTime();
if(tt>0&&sy==Symbol()&&mn==MagicNo&&ty>OP_SELL)
{
if(TimeCurrent()>=tm+Second)bool del=OrderDelete(tk);
}
}
}

shivaa
22-09-2020, 02:54 AM
السلام عليكم
ممكن شرح

return (price1 > 0 && price2 > 0) ? (price2 - price1)/price1 : 0;
مش فاهم عاوز اعرف
ده سطر من داله تحسب قوه العمله
الداله كامله

double calculateStrength(string symbol,int shift)
{
double price1=0,price2=0;
double sum1=0,sum2=0;
int i;
switch(type)
{
case 1:
price1=iOpen(symbol,0,shift);
price2=iClose(symbol,0,shift);
break;
case 2:
for(i=0; i<period; i++)
sum1+=iOpen(symbol,0,shift+i);
price1=sum1/period;
for(i=0; i<period; i++)
sum2+=iClose(symbol,0,shift+i);
price2=sum2/period;
break;
}
return (price1 > 0 && price2 > 0) ? (price2 - price1)/price1 : 0;
}

كيف تحسب shift
حولت افهم من مساعده من MQL4
لم استوعب ممكن تشرحها بطريقه بسيطه اكون شاكر

kira-h
22-09-2020, 04:47 AM
السلام عليكم
ممكن شرح

return (price1 > 0 && price2 > 0) ? (price2 - price1)/price1 : 0;
مش فاهم عاوز اعرف
ده سطر من داله تحسب قوه العمله
الداله كامله

double calculateStrength(string symbol,int shift)
{
double price1=0,price2=0;
double sum1=0,sum2=0;
int i;
switch(type)
{
case 1:
price1=iOpen(symbol,0,shift);
price2=iClose(symbol,0,shift);
break;
case 2:
for(i=0; i<period; i++)
sum1+=iOpen(symbol,0,shift+i);
price1=sum1/period;
for(i=0; i<period; i++)
sum2+=iClose(symbol,0,shift+i);
price2=sum2/period;
break;
}
return (price1 > 0 && price2 > 0) ? (price2 - price1)/price1 : 0;
}

كيف تحسب shift
حولت افهم من مساعده من MQL4
لم استوعب ممكن تشرحها بطريقه بسيطه اكون شاكر


وعليكم السلام
تلك العملية من نوع Ternary Operator ممكن نسميها عملية ثلاثية، تعمل بالرمز :? يعبر عنها بصفة عامة كالتالي

X1 ? X2 : X3
معناه أن نتيجة تنفيذ الشرط 1 هي نتيجة التعبير 2 أو التعبير 3 ، اعتمادًا على نتيجة التعبير 1 إذا كان غير محقق يعتمد النتيجة 2
يعني العملية السابقة هي نفس الصيغة التالية :

if(X1==true)return(X2);else return(X3);

حسب تلك الدالة لدينا :

return((price1>0&&price2>0)?(price2-price1)/price1:0);

هي نفسها الصيغة المفصلة التالية :


if(price1>0&&price2>0)return(price2-price1)/price1;else return(0);


بالنسبة لـ Shift هي تعبر عن رقم الشمعة يعني اغلاق أو افتتاح الشمعة 1 او 2 .... وهكذا

sabil
22-09-2020, 06:10 AM
السلام عليكم
بقالي فترة بحاول اضيف اكسبرتاتي على موقع MQL5 بس بيطلعلي 22 خطأ برمجي ودا في كل الاكسبرتات الل بضيفها وبقى همي مش اني اضيف الاكسبرتات هناك اكتر من اني اعرف سبب الخطأ وازاي اعالجه لان مش بيظهرلي اي خطأ عند عمل compile بالاضافة انه شغال باكتيست كويس

سكرين شوت
https://imgur.com/MDeBXPN
https://imgur.com/MDeBXPN
ودا لينك الصفحة الل بيدخلني عليها لما بدوس على error
https://www.mql5.com/en/articles/2555#invalid_lot

الاكسبرت المراد اضافته ف المرفقات

ارجو التعديل

للتذكير .....
عندك فكرة ولا صعبة؟

rambo
22-09-2020, 07:10 AM
مساء الخير
الدالة كالتالي :


input int Second=50;


void DeleteByTime()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tt=OrdersTotal(),
tk=OrderTicket(),
ty=OrderType(),
mn=OrderMagicNumber();
datetime tm=OrderOpenTime();
if(tt>0&&sy==Symbol()&&mn==MagicNo&&ty>OP_SELL)
{
if(TimeCurrent()>=tm+Second)bool del=OrderDelete(tk);
}
}
}


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

shivaa
22-09-2020, 12:35 PM
وعليكم السلام
تلك العملية من نوع Ternary Operator ممكن نسميها عملية ثلاثية، تعمل بالرمز :? يعبر عنها بصفة عامة كالتالي

X1 ? X2 : X3
معناه أن نتيجة تنفيذ الشرط 1 هي نتيجة التعبير 2 أو التعبير 3 ، اعتمادًا على نتيجة التعبير 1 إذا كان غير محقق يعتمد النتيجة 2
يعني العملية السابقة هي نفس الصيغة التالية :

if(X1==true)return(X2);else return(X3);

حسب تلك الدالة لدينا :

return((price1>0&&price2>0)?(price2-price1)/price1:0);

هي نفسها الصيغة المفصلة التالية :


if(price1>0&&price2>0)return(price2-price1)/price1;else return(0);


بالنسبة لـ Shift هي تعبر عن رقم الشمعة يعني اغلاق أو افتتاح الشمعة 1 او 2 .... وهكذا

جزاك الله خيرااااااااااااااااااااااااااااااااااااااااا

kira-h
22-09-2020, 08:37 PM
السلام عليكم
بقالي فترة بحاول اضيف اكسبرتاتي على موقع MQL5 بس بيطلعلي 22 خطأ برمجي ودا في كل الاكسبرتات الل بضيفها وبقى همي مش اني اضيف الاكسبرتات هناك اكتر من اني اعرف سبب الخطأ وازاي اعالجه لان مش بيظهرلي اي خطأ عند عمل compile بالاضافة انه شغال باكتيست كويس

سكرين شوت
https://imgur.com/MDeBXPN
https://imgur.com/MDeBXPN
ودا لينك الصفحة الل بيدخلني عليها لما بدوس على error
https://www.mql5.com/en/articles/2555#invalid_lot

الاكسبرت المراد اضافته ف المرفقات

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

kira-h
22-09-2020, 08:39 PM
تمام أخي حسن
الشكر الجزيل والتقدير لك
بارك الله فيك
العفو اخي الكريم


جزاك الله خيرااااااااااااااااااااااااااااااااااااااااا
واياك اخي الكريم

rambo
28-09-2020, 05:23 PM
مساء النور أخي حسن
فضلا منك كيفية عمل ما يلي:
على الفريم الحالي .. للشمعة السابقة (رقم 1 برمجيا) يتم تحديد توقيت الإفتتاح لها
كما تعلم أن توقيت الإفتتاح مكون من قسمين: قسم للتوقيت بالساعة وقسم للتوقيت بالدقائق
ما يهمنا هو فقط توقيت الدقائق لهذه الشمعة المحددة .. ويتم تجاهل التوقيت بالساعة وإعتباره كأنه غير موجود
بمعنى


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

أشكرك جزيل الشكر مقدما

kira-h
28-09-2020, 09:49 PM
مساء النور أخي حسن
فضلا منك كيفية عمل ما يلي:
على الفريم الحالي .. للشمعة السابقة (رقم 1 برمجيا) يتم تحديد توقيت الإفتتاح لها
كما تعلم أن توقيت الإفتتاح مكون من قسمين: قسم للتوقيت بالساعة وقسم للتوقيت بالدقائق
ما يهمنا هو فقط توقيت الدقائق لهذه الشمعة المحددة .. ويتم تجاهل التوقيت بالساعة وإعتباره كأنه غير موجود
بمعنى


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

أشكرك جزيل الشكر مقدما
مساء الخير
الشرط كالتالي:


input int Minutes=20;


void OnTick()
{
if(TimeMinute(Time[0])==Minutes)
{
//بقية الشروط
}
}

rambo
29-09-2020, 06:15 PM
مساء الخير
الشرط كالتالي:


input int Minutes=20;


void OnTick()
{
if(TimeMinute(Time[0])==Minutes)
{
//بقية الشروط
}
}


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

kira-h
29-09-2020, 06:45 PM
تمام أخي حسن
الشكر الجزيل والتقدير لك
بارك الله فيك
العفو وبالتوفيق إن شاء الله

medhat
30-09-2020, 03:03 PM
السلام عليكم ،، مهندس حسن (نرجوا التصحيح ان لم يكن اسم حضرتك كذلك)

انا دارس لغة برمجة بايثون واريد تعلم لغة mql ولدي بعض الاسئلة :
1- بخصوص mql 4&5 بماذا تنصحنى للتعلم ؟
2- رأيت موضوع لك بعنوان (المرجع الكامل لتعلم mql4) هل هذا كافى لاتقان واحتراف اللغة ؟
3- بالتأكيد سأحتاج الى ايضاح بعض الامور وانا اتعلم اللغة فأتمنى ان تكون متواجد دائما كما كنت لمساعدتنا ؟

شكرا لك

kira-h
30-09-2020, 04:41 PM
السلام عليكم ،، مهندس حسن (نرجوا التصحيح ان لم يكن اسم حضرتك كذلك)

انا دارس لغة برمجة بايثون واريد تعلم لغة mql ولدي بعض الاسئلة :
1- بخصوص mql 4&5 بماذا تنصحنى للتعلم ؟
2- رأيت موضوع لك بعنوان (المرجع الكامل لتعلم mql4) هل هذا كافى لاتقان واحتراف اللغة ؟
3- بالتأكيد سأحتاج الى ايضاح بعض الامور وانا اتعلم اللغة فأتمنى ان تكون متواجد دائما كما كنت لمساعدتنا ؟

شكرا لك
وعليكم السلام
1- تعلم أولا لغة mql4 الاكثر انتشارا والخاصة بمنصة MT4، أما الـ 5 أكثر صعوبة لكن يسهل تعليمها بعد تعلم الـ 4
2- الموضوع يشمل عدد مهم من الكتب التعليمية للمبتدئين والمحترفين وهي كافية لمعرفة اساسيات اللغة،
وإذا لغتك الانجليزية متوسطة المستوى على الافل، يمكنك التعلم مباشرة من المصدر الرسمي للغة https://book.mql4.com/
اما الاتقان يكون بالعمل التطبيقي ومراجعة اكواد المبرمجين، هذا موضوع لـ أهم الدوال البرمجية وتطبيقات لغة mql4 (https://www.fxprg.com/vb/showthread.php?t=31456)
مع مراجعة هذا الموضوع المخصص للاسئلة البرمجية...
3- في الخدمة قدر المستطاع ان شاء الله

medhat
30-09-2020, 06:35 PM
وعليكم السلام
1- تعلم أولا لغة mql4 الاكثر انتشارا والخاصة بمنصة MT4، أما الـ 5 أكثر صعوبة لكن يسهل تعليمها بعد تعلم الـ 4
2- الموضوع يشمل عدد مهم من الكتب التعليمية للمبتدئين والمحترفين وهي كافية لمعرفة اساسيات اللغة،
وإذا لغتك الانجليزية متوسطة المستوى على الافل، يمكنك التعلم مباشرة من المصدر الرسمي للغة https://book.mql4.com/
اما الاتقان يكون بالعمل التطبيقي ومراجعة اكواد المبرمجين، هذا موضوع لـ أهم الدوال البرمجية وتطبيقات لغة mql4 (https://www.fxprg.com/vb/showthread.php?t=31456)
مع مراجعة هذا الموضوع المخصص للاسئلة البرمجية...
3- في الخدمة قدر المستطاع ان شاء الله

تمام متشكر لك ،، وربنا يكتب لك التوفيق دائما

kira-h
30-09-2020, 06:52 PM
تمام متشكر لك ،، وربنا يكتب لك التوفيق دائما
واياك اخي الكريم

mr.forex
30-09-2020, 08:47 PM
السلام عليكم أستاذ حسن
عند إضافة دالة البريك إيفن ودالة التريلينج ستوب يحصل تعارض بينهم
ما أرغب به هو أن تعمل دالة البريك إيفن أولا، وبعد أن تنتهي من مهمتها بنجاح (تنقل الستوب إلى النقطة المحددة في الإعدادات) يتم إعطاء الإذن لدالة التريلينج ستوب بالبدء بالعمل
الكود المتعارض كالتالي



void OnTick()
{
if(BreakEven>0)MoveBreakEven();
if(TrailingStop>0)MoveTrailingStop();
}


فضلا منك الطريقة الصحيحة لعمل ذلك

kira-h
01-10-2020, 07:42 AM
السلام عليكم أستاذ حسن
عند إضافة دالة البريك إيفن ودالة التريلينج ستوب يحصل تعارض بينهم
ما أرغب به هو أن تعمل دالة البريك إيفن أولا، وبعد أن تنتهي من مهمتها بنجاح (تنقل الستوب إلى النقطة المحددة في الإعدادات) يتم إعطاء الإذن لدالة التريلينج ستوب بالبدء بالعمل
الكود المتعارض كالتالي



void OnTick()
{
if(BreakEven>0)MoveBreakEven();
if(TrailingStop>0)MoveTrailingStop();
}


فضلا منك الطريقة الصحيحة لعمل ذلك
وعليكم السلام
البريك ايفن يعني نقل الستوب من قيمة خاسرة الى قيمة رابحة او تعادل، ومنه يمكنك ان تشترط قبل عمل البريك ايفن بالشراء ان يكون سعر الستوب ()OrderStopLoss اصغر قطعا من سعر الفتح ()OrderOpenPrice
والعكس بالبيع

بينما التريلينغ بالشراء تشترط ان يعمل اذا كان سعر الستوب اكبر من او يساوي سعر الافتتاح + البريك ايفن
والعكس بالبيع

بالتالي لن يحدث تعارض

mr.forex
01-10-2020, 10:28 PM
وعليكم السلام
البريك ايفن يعني نقل الستوب من قيمة خاسرة الى قيمة رابحة او تعادل، ومنه يمكنك ان تشترط قبل عمل البريك ايفن بالشراء ان يكون سعر الستوب ()OrderStopLoss اصغر قطعا من سعر الفتح ()OrderOpenPrice
والعكس بالبيع

بينما التريلينغ بالشراء تشترط ان يعمل اذا كان سعر الستوب اكبر من او يساوي سعر الافتتاح + البريك ايفن
والعكس بالبيع

بالتالي لن يحدث تعارض

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

kira-h
02-10-2020, 07:18 PM
السلام عليكم
طبقت ملاحظتك والحمد لله نجح الأمر ولم يعد هناك أي تعارض
شكرا لك أستاذ حسن :boxing:
وعليكم السلام
العفو اخي الكريم والله الموفڨ

rambo
06-10-2020, 12:48 PM
السلام عليكم ورحمة الله وبركاته
مساء النور أخي حسن
أرغب بإستدعاء المؤشر الموجود في المرفقات بإستخدام الدالة iCustom
المطلوب هو كما في الصورة التالية

23844

كما تلاحظا في الصورة لا يهمنا لون العمود وما يهمنا فقط هو إرتفاع العمود عند مستوى معين
أطلعت على المشاركة التالية
https://www.fxprg.com/vb/showthread.php?t=31457&page=74&p=874388&viewfull=1#post874388
وحسب ما قرأت في هذه المشاركة يجب أن يكون الإستدعاء برقم الإندكس ولكن هذا غير مجدي بالنسبة لهذه الحالة لأنه من ضمن الشروط التي سأضيفها لاحقا هي المقارنة بين إرتفاع العمود مع إرتفاع الأعمدة الأخرى من دون أن يكون هناك أي إعتبار لأي لون
فضلا منك الكود الصحيح لعمل ذلك
جزاك الله كل خير وبارك لك لما يحب ويرضى

kira-h
06-10-2020, 08:35 PM
السلام عليكم ورحمة الله وبركاته
مساء النور أخي حسن
أرغب بإستدعاء المؤشر الموجود في المرفقات بإستخدام الدالة iCustom
المطلوب هو كما في الصورة التالية

23844

كما تلاحظا في الصورة لا يهمنا لون العمود وما يهمنا فقط هو إرتفاع العمود عند مستوى معين
أطلعت على المشاركة التالية
https://www.fxprg.com/vb/showthread.php?t=31457&page=74&p=874388&viewfull=1#post874388
وحسب ما قرأت في هذه المشاركة يجب أن يكون الإستدعاء برقم الإندكس ولكن هذا غير مجدي بالنسبة لهذه الحالة لأنه من ضمن الشروط التي سأضيفها لاحقا هي المقارنة بين إرتفاع العمود مع إرتفاع الأعمدة الأخرى من دون أن يكون هناك أي إعتبار لأي لون
فضلا منك الكود الصحيح لعمل ذلك
جزاك الله كل خير وبارك لك لما يحب ويرضى

وعليكم السلام
سنقوم بعمل دالة فرعية للمؤشر بلالة الاندكس (اللون) ورقم الشمعة كالتالي :


double wn(int index,int Shift)
{
return(iCustom(Symbol(),0,"WNRB v1",index,Shift));
}


وبما ان قيم المؤشر كثيرة 6 الوان تسبب احتمالات كثيرة بعمليات المقارنة، سنختصرها في عملية بحث بدالة فرعية تبحث عن القيمة التي تخالف الـ 0 وبدلالة رقم الشمعة (لأننا سنقارن شمعة مع شمعة اخرى) :


double Signal(int Shift)//قيمة الاشارة بدلالة رقم الشمعة
{
for(int i=0;i<=6;i++)//البحث ضمن مجال عدد الالوان من 0 الى 6 أما اللون 7 مجرد موفينج
{
if(wn(i,Shift)!=0)return(wn(i,Shift));//إذا احد القيم خالف الصفر يعود لنا بقيمته
}
return(0);
}



فيكون شرط مقارنة بار المؤشر بآخر شمعة مغلقة مع التي قبلها كالتالي:

if(Signal(1)>Signal(2))// يعني البار الاخير اكبر من البار السابق
والعكس

if(Signal(1)<Signal(2))//

rambo
07-10-2020, 02:30 AM
وعليكم السلام
سنقوم بعمل دالة فرعية للمؤشر بلالة الاندكس (اللون) ورقم الشمعة كالتالي :


double wn(int index,int Shift)
{
return(iCustom(Symbol(),0,"WNRB v1",index,Shift));
}


وبما ان قيم المؤشر كثيرة 6 الوان تسبب احتمالات كثيرة بعمليات المقارنة، سنختصرها في عملية بحث بدالة فرعية تبحث عن القيمة التي تخالف الـ 0 وبدلالة رقم الشمعة (لأننا سنقارن شمعة مع شمعة اخرى) :


double Signal(int Shift)//قيمة الاشارة بدلالة رقم الشمعة
{
for(int i=0;i<=6;i++)//البحث ضمن مجال عدد الالوان من 0 الى 6 أما اللون 7 مجرد موفينج
{
if(wn(i,Shift)!=0)return(wn(i,Shift));//إذا احد القيم خالف الصفر يعود لنا بقيمته
}
return(0);
}



فيكون شرط مقارنة بار المؤشر بآخر شمعة مغلقة مع التي قبلها كالتالي:

if(Signal(1)>Signal(2))// يعني البار الاخير اكبر من البار السابق
والعكس

if(Signal(1)<Signal(2))//

الشكر الجزيل لك أخي حسن
ما شاء الله تبارك الله عليك كود إحترافي كعادتك دائما
وأشكرك أيضا على الكومنت بجانب الأسطر وهذا يساعد كثيرا في عملية التعلم
جربت الكود والحمد لله يعمل كما هو مقصود وبدقة ..
وعند محاولتي إضافة شرط جديد وهو أن يكون عمود أحد الشموع التي سيتم إختيارها أعلى من 50 عمود سابق لهذه الشمعة المحددة .. كتبت الكود كما يلي:




if(Signal(5) > Signal(6) && Signal(5) > Signal(7) && Signal(5) > Signal(8) /* etc ........ to Signal(5) > Signal(55)*/)



فنجد بأن هذا الكود الذي أنا كتبته سيعمل ولكنه غير مثالي لأن الجملة الشرطية الواحدة تحتوي على 50 شرط وهذا سيبطئ عمل الإكسبيرت
وبما أني سأستخدم أكثر من جملة شرطية فهذا يزيد عدد الأكواد أكثر وأكثر وسوف يعقد عملية التعديل على الكود في المستقبل
أعتقد بأنه هناك كود مختصر أو دالة خاصة لعمل ذلك وأتعذر منك أخي حسن لم اتعمق في البرمجة ومستواي البرمجي الآن يصنف مبتدئ ولا أعرف طريقة إنشاء دوال خاصة وفق أفكار خاصة
فضلا منك الكود الصحيح لذلك جزاك الله كل خير
مع خالص الشكر والتقدير لك مقدما

kira-h
07-10-2020, 12:52 PM
الشكر الجزيل لك أخي حسن
ما شاء الله تبارك الله عليك كود إحترافي كعادتك دائما
وأشكرك أيضا على الكومنت بجانب الأسطر وهذا يساعد كثيرا في عملية التعلم
جربت الكود والحمد لله يعمل كما هو مقصود وبدقة ..
وعند محاولتي إضافة شرط جديد وهو أن يكون عمود أحد الشموع التي سيتم إختيارها أعلى من 50 عمود سابق لهذه الشمعة المحددة .. كتبت الكود كما يلي:




if(Signal(5) > Signal(6) && Signal(5) > Signal(7) && Signal(5) > Signal(8) /* etc ........ to Signal(5) > Signal(55)*/)



فنجد بأن هذا الكود الذي أنا كتبته سيعمل ولكنه غير مثالي لأن الجملة الشرطية الواحدة تحتوي على 50 شرط وهذا سيبطئ عمل الإكسبيرت
وبما أني سأستخدم أكثر من جملة شرطية فهذا يزيد عدد الأكواد أكثر وأكثر وسوف يعقد عملية التعديل على الكود في المستقبل
أعتقد بأنه هناك كود مختصر أو دالة خاصة لعمل ذلك وأتعذر منك أخي حسن لم اتعمق في البرمجة ومستواي البرمجي الآن يصنف مبتدئ ولا أعرف طريقة إنشاء دوال خاصة وفق أفكار خاصة
فضلا منك الكود الصحيح لذلك جزاك الله كل خير
مع خالص الشكر والتقدير لك مقدما

في هذه الحالة سنتقدم برمجيا باستخدام المصفوفات (راجع المشاركة التالية لتطبيق بسيط للمصفوفات #763 (https://www.fxprg.com/vb/showthread.php?t=31457&p=874710&viewfull=1#post874710))
مثال لدالة تستخرج اقصى قيمة بعناصر المصفوفة :


double MaxSignal()
{
double MaxValue=0,
MyArray[50];//مصفوفة تتكون من 50 عنصر
for(int i=0;i<50;i++)//عدد العناصر
{
MyArray[i]=Signal(i+2);//نعطي لكل عنصر قيمته المقابلة بالاشارة
MaxValue=MyArray[ArrayMaximum(MyArray)];//استخراج اقصى قيمة بالعناصر
}
return(MaxValue);
}


وتكون المقارنة بقيمة اشارة الشمعة 1 مع أقصى قيمة لـ 50 شمعة سابقة بدءأ من الشمعة 2 (لانه لا يمكن مقارنة الشمعة مع نفسها) كالتالي :

if(Signal(1)>MaxSignal())//

والعكس إذا تريد معرفة اقل قيمة للاشارات بـ 50 شمعة سابقة كالتالي:


double MinSignal()
{
double MinValue=0,
MyArray[50];
for(int i=0;i<50;i++)
{
MyArray[i]=Signal(i+2);
MinValue=MyArray[ArrayMinimum(MyArray)];//استخراج اقل قيمة بالعناصر
}
return(MinValue);
}


فيكون الشرط كالتالي :

if(Signal(1)<MinSignal())//

rambo
07-10-2020, 02:56 PM
في هذه الحالة سنتقدم برمجيا باستخدام المصفوفات (راجع المشاركة التالية لتطبيق بسيط للمصفوفات #763 (https://www.fxprg.com/vb/showthread.php?t=31457&p=874710&viewfull=1#post874710))
مثال لدالة تستخرج اقصى قيمة بعناصر المصفوفة :


double MaxSignal()
{
double MaxValue=0,
MyArray[50];//مصفوفة تتكون من 50 عنصر
for(int i=0;i<50;i++)//عدد العناصر
{
MyArray[i]=Signal(i+2);//نعطي لكل عنصر قيمته المقابلة بالاشارة
MaxValue=MyArray[ArrayMaximum(MyArray)];//استخراج اقصى قيمة بالعناصر
}
return(MaxValue);
}


وتكون المقارنة بقيمة اشارة الشمعة 1 مع أقصى قيمة لـ 50 شمعة سابقة بدءأ من الشمعة 2 (لانه لا يمكن مقارنة الشمعة مع نفسها) كالتالي :

if(Signal(1)>MaxSignal())//

والعكس إذا تريد معرفة اقل قيمة للاشارات بـ 50 شمعة سابقة كالتالي:


double MinSignal()
{
double MinValue=0,
MyArray[50];
for(int i=0;i<50;i++)
{
MyArray[i]=Signal(i+2);
MinValue=MyArray[ArrayMinimum(MyArray)];//استخراج اقل قيمة بالعناصر
}
return(MinValue);
}


فيكون الشرط كالتالي :

if(Signal(1)<MinSignal())//

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

kira-h
08-10-2020, 05:40 PM
الشكر الجزيل والعرفان لك أخي حسن
ما شاء الله تبارك الرحمن .. الله يزيدك من علمه
جربت الكود وهو يعمل وفق المقصود وبكل دقة
مهما كتبت يعجز اللسان عن شكرك
أسأل الله العلي القدير أن يبسط لك في جميع أمورك ويوسع لك في رزقك .. إنه مجيب الدعاء
تحياتي وتقديري لك
العفو اخي الكريم ولك بمثل الدعاء، آمين
والله الموفق

hamsat36
09-10-2020, 01:28 PM
السلام عليكم ورحمة الله وبركاته

عايز الكود اللى يضيف المستوين -100 و +100 للموفينج افريج 50 ولكم جزيل الشكر

kira-h
09-10-2020, 06:07 PM
السلام عليكم ورحمة الله وبركاته

عايز الكود اللى يضيف المستوين -100 و +100 للموفينج افريج 50 ولكم جزيل الشكر

وعليكم السلام
مستوبات الموفينج ما هي الا مسافات عن الموفينج فوق ايجابي واسفله سلبي
مثلا سعر المستوى 100 بالشمعة 1 هو: x=m1+1000*Point بحيث m1 قيمة الموفينج بالشمعة 1

sameer ali
15-10-2020, 04:01 PM
السلام عليكم استاذ كيرا،

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

سؤالي: هل يبداء الموشر يحسب من الشمعة الحالية وينتهي بالشمعة الاخيرة، ام يبداء من الاخيرة وينتهي بالشمعة الحالية، ام انه ممكن كلا الحالتين على حسب مايريده المبرمج؟!!

kira-h
16-10-2020, 11:46 AM
السلام عليكم استاذ كيرا،

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

سؤالي: هل يبداء الموشر يحسب من الشمعة الحالية وينتهي بالشمعة الاخيرة، ام يبداء من الاخيرة وينتهي بالشمعة الحالية، ام انه ممكن كلا الحالتين على حسب مايريده المبرمج؟!!
وعليكم السلام
نعم ممكن في كلا الحالتين

sameer ali
17-10-2020, 03:53 PM
وعليكم السلام
نعم ممكن في كلا الحالتين

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

kira-h
17-10-2020, 08:46 PM
اريد الكود البرمجي لرسم خط عمودي على الشمعة وتكون المدخلات محدده بالسنه والشهر واليوم والساعة والدقيقة الذي يرسم عليه الخط العمودي مع امكانية تغير لون العمود..
اخي الكريم الموضوع مخصص فقط للاسئلة البرمجية وليس برمجة المؤشرات

sameer ali
19-10-2020, 12:42 PM
هل ممكن تصدير نتائج موشر ماعلى ملف اكسل..


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

مثلا قمت بعملية حسابية لاخر عشر شمعات يومية ، ولنفترض ان العملية الحسابية كالتالي:

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

ياريت الكود البرمجي لذلك؟!

kira-h
19-10-2020, 10:59 PM
هل ممكن تصدير نتائج موشر ماعلى ملف اكسل..


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

مثلا قمت بعملية حسابية لاخر عشر شمعات يومية ، ولنفترض ان العملية الحسابية كالتالي:

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

ياريت الكود البرمجي لذلك؟!
راجع المشاركة التالية :
https://www.fxprg.com/vb/showthread.php?t=36930&p=917191&viewfull=1#post917191

medhat
20-10-2020, 04:49 AM
هل يمكن برمجة مؤشر على فريم زمني غير المعتمد فى ميتا تريدر 4
مثال : فريم 7 دقائق مثلا لزوج معين ،، هل يمكن؟

kira-h
20-10-2020, 10:35 PM
هل يمكن برمجة مؤشر على فريم زمني غير المعتمد فى ميتا تريدر 4
مثال : فريم 7 دقائق مثلا لزوج معين ،، هل يمكن؟

لا غير ممكن

Waddah
23-10-2020, 10:09 PM
السلام عليكم
على فريم اليومي ....ماهو الكود الذي بواسطته أفتح صفقة قبل إغلاق شمعة اليوم بزمن محدد مثلا 30 ثانية (قبل توسع السبريد )

diab fahed
24-10-2020, 12:47 AM
السلام عليكم استاذ حسن، في حال لدي مصفوفة عملات و اريد ان يفتح الاكسبيرت صفقة واحدة فقط على احداها عند تحقق الشرط ، كيف يمكنني ان اجعل الاكسبيرت يفهم ما اريده؟؟؟ ارجو مساعدتي لو سمحت

kira-h
24-10-2020, 10:29 PM
السلام عليكم
على فريم اليومي ....ماهو الكود الذي بواسطته أفتح صفقة قبل إغلاق شمعة اليوم بزمن محدد مثلا 30 ثانية (قبل توسع السبريد )

وعليكم السلام
استخدم فتح الصفقة بالتوقيت بآخر ساعة في اليوم 23 وآخر دقيقة 59 ثم الثانية 30
مثلا:
if(TimeHour(TimeCurrent())==23&&TimeMinute(TimeCurrent())==59&&TimeSeconds(TimeCurrent())>=30)

kira-h
24-10-2020, 10:34 PM
السلام عليكم استاذ حسن، في حال لدي مصفوفة عملات و اريد ان يفتح الاكسبيرت صفقة واحدة فقط على احداها عند تحقق الشرط ، كيف يمكنني ان اجعل الاكسبيرت يفهم ما اريده؟؟؟ ارجو مساعدتي لو سمحت

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


int OrderTotal()
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderMagicNumber()==MagicNumber)
{
cnt++;
}
}
}
return(cnt);
}

if(OrderTotal()==0)
{
int tk=0;
tk=OrderSend(Symbol(),OP_SELL,0.01,Bid,5*Q,0,0,"Kira-h",MagicNumber,0,Red);
if(tk>0)return;
}



وإذا الكود لا يعتمد على اي ماجك نمبر يمكنك مباشرة استخدام الوظيفة OrdersTotal()==0

صياد الجراح
11-11-2020, 02:57 AM
بسم الله الرحمن الرحيم
استاذ حسن .. عند تشغيل باك تست لاكسيبرت بيظهر لى الخطأ ده
24483
هل دى مشكلة فى الاكسيبرت ولا المؤشر ..
المؤشر فى المرفقات

لك ودى وتقديرى

kira-h
11-11-2020, 11:42 PM
بسم الله الرحمن الرحيم
استاذ حسن .. عند تشغيل باك تست لاكسيبرت بيظهر لى الخطأ ده
24483
هل دى مشكلة فى الاكسيبرت ولا المؤشر ..
المؤشر فى المرفقات

لك ودى وتقديرى

الخطأ واضح من اسمه فهو طبعا من المؤشر
لكن عند تجربته لم اجد اي اخطاء!

صياد الجراح
12-11-2020, 02:17 AM
الخطأ واضح من اسمه فهو طبعا من المؤشر
لكن عند تجربته لم اجد اي اخطاء!
بارك الله فيك اخى حسن

ماهو ده اللى خلينى اشك واسال حضرتك لانى لما جربت المؤشر اشتغل عادى ومش بيظهر اى أخطاء

لك ودى وتقديرى لشخصك الكريم

kira-h
12-11-2020, 04:05 AM
بارك الله فيك اخى حسن

ماهو ده اللى خلينى اشك واسال حضرتك لانى لما جربت المؤشر اشتغل عادى ومش بيظهر اى أخطاء

لك ودى وتقديرى لشخصك الكريم

واياك اخي الكريم

sabil
12-11-2020, 07:47 PM
واياك اخي الكريم
اخي حسن
اريد دالة بيانات اخر صفقة مغلقة على خسارة بالنقاط وليس الدولار
يعني مثلا اخر صفقة اغلقت على خسارة 100 نقطة بناءاً عليها سأجعل هدف الصفقة الجديدة 100 نقطة مضروبة ف 2 يعني 200 نقطة كأني شغال مضاعفات ولكن بدلا من حجم اللوت سيكون بالاهداف

kira-h
13-11-2020, 12:02 AM
اخي حسن
اريد دالة بيانات اخر صفقة مغلقة على خسارة بالنقاط وليس الدولار
يعني مثلا اخر صفقة اغلقت على خسارة 100 نقطة بناءاً عليها سأجعل هدف الصفقة الجديدة 100 نقطة مضروبة ف 2 يعني 200 نقطة كأني شغال مضاعفات ولكن بدلا من حجم اللوت سيكون بالاهداف
الدالة كالتالي :


double LastProfitPips()
{
int cnt=0;
double pips=0,Points=0;
if(_Digits<4)Points=0.01;else Points=0.0001;
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
bool c=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double op=OrderOpenPrice(),
cp=OrderClosePrice(),
pt=OrderProfit();
if(sy==Symbol()&&mn==MagicNo&&ty<=OP_SELL&&Points>0)
{
cnt++;
if(cnt==1)
{
pips=NormalizeDouble(MathAbs(op-cp)/Points,1);
if(pt<0)pips=NormalizeDouble(MathAbs(op-cp)/Points,1)*-1;
}
}
}
return(pips);
}

sabil
17-11-2020, 01:44 PM
الدالة كالتالي :


double LastProfitPips()
{
int cnt=0;
double pips=0,Points=0;
if(_Digits<4)Points=0.01;else Points=0.0001;
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
bool c=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double op=OrderOpenPrice(),
cp=OrderClosePrice(),
pt=OrderProfit();
if(sy==Symbol()&&mn==MagicNo&&ty<=OP_SELL&&Points>0)
{
cnt++;
if(cnt==1)
{
pips=NormalizeDouble(MathAbs(op-cp)/Points,1);
if(pt<0)pips=NormalizeDouble(MathAbs(op-cp)/Points,1)*-1;
}
}
}
return(pips);
}

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

sabil
17-11-2020, 01:48 PM
طالب منك شيء بسيط
عملت اكسبرت وكله تمام بس مضاعفات الجمع مش شغالة مظبوط
شغال 1 1 2 2 3 3
المطلوب يشتغل 1 2 3 4 5 ..... الخ

ياريت تحل المشكلة ان امكن
https://drive.google.com/file/d/1y3Rmew1b-KicQbw6ee15LyibafhutpJc/view?usp=sharing

وياريت كمان تحلوا مشكلة المرفقات

kira-h
17-11-2020, 06:01 PM
شكرا ياغالي جربتها منفعتش لكن عملت حيلة صغيرة ونفعت واعطت نفس النتيجة
الدالة سليمة وفق المطلوب


طالب منك شيء بسيط
عملت اكسبرت وكله تمام بس مضاعفات الجمع مش شغالة مظبوط
شغال 1 1 2 2 3 3
المطلوب يشتغل 1 2 3 4 5 ..... الخ

ياريت تحل المشكلة ان امكن
https://drive.google.com/file/d/1y3Rmew1b-KicQbw6ee15LyibafhutpJc/view?usp=sharing

وياريت كمان تحلوا مشكلة المرفقات

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

sabil
17-11-2020, 06:59 PM
الدالة سليمة وفق المطلوب



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

تسلم ياهندسة
حتى الان شغال مظبوط لكن ياريت تقولي فين حصل التغيير لاني مش ملاحظه

kira-h
17-11-2020, 08:11 PM
تسلم ياهندسة
حتى الان شغال مظبوط لكن ياريت تقولي فين حصل التغيير لاني مش ملاحظه

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

sabil
17-11-2020, 08:29 PM
معادلة المضاعفات كانت قبل شروط الاغلاق، يعني عند تحقق شرط الاغلاق ثم بعدها مباشرة تحقق شرط الفتح يكون لم يمر على شرط المضاعفات وبالتالي يرى اللوت السابق فقط
والتعديل تم بتقديم شرط المضاعفات بعد شرط الاغلاق، لأن الكود يتم قراءته من طرف الحاسوب بالترتيب من الاعلى الى الاسفل
ثم عدلت شروط تقنية لتقليل الضغط على الميموري ولتحصل على باكتيست اسرع...
مع اني عملت اصدارات كتير قبل كده من غير ترتيب واشتغل مظبوط !
عموما شكرا ع المعلومة انا ملاحظتش التغيير لاني نقلت تعديلك مع استبدال القديم وجابلي القديم بردو فنقلته لمكان تاني ولاحظت التغيير
شكرا ياغالي

kira-h
18-11-2020, 02:52 AM
مع اني عملت اصدارات كتير قبل كده من غير ترتيب واشتغل مظبوط !
عموما شكرا ع المعلومة انا ملاحظتش التغيير لاني نقلت تعديلك مع استبدال القديم وجابلي القديم بردو فنقلته لمكان تاني ولاحظت التغيير
شكرا ياغالي

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

shivaa
19-11-2020, 01:59 AM
السلام عليكم
ممكن داله لاخر قمه وقاع
اكون شاكر

kira-h
19-11-2020, 05:53 PM
السلام عليكم
ممكن داله لاخر قمه وقاع
اكون شاكر
وعليكم السلام
راجع المشاركة التالية :
https://www.fxprg.com/vb/showthread.php?t=31457&page=121&p=881383&viewfull=1#post881383

shivaa
19-11-2020, 06:00 PM
وعليكم السلام
راجع المشاركة التالية :
https://www.fxprg.com/vb/showthread.php?t=31457&page=121&p=881383&viewfull=1#post881383


الف شكرررررررررررررررررررررررر

shivaa
19-11-2020, 06:02 PM
السلام عليكم
هل ممكن اجعل اكسبيرت لا يعمل الا فى شركه واحد فقط محدد من قبل؟

kira-h
19-11-2020, 10:46 PM
السلام عليكم
هل ممكن اجعل اكسبيرت لا يعمل الا فى شركه واحد فقط محدد من قبل؟
وعليكم السلام
نعم ممكن من خلال الوظيفة AccountCompany أو AccountServer

shivaa
20-11-2020, 06:23 AM
وعليكم السلام
نعم ممكن من خلال الوظيفة AccountCompany أو
AccountServer
الف شكرررررررررررررررررررررررر

kira-h
20-11-2020, 05:06 PM
الف شكرررررررررررررررررررررررر
العفو أخي الكريم

ammar
20-11-2020, 10:07 PM
السلام عليكم
كيف يمكن اغلاق الاكسبيرت نهائيا برمجيا

kira-h
21-11-2020, 02:50 AM
السلام عليكم
كيف يمكن اغلاق الاكسبيرت نهائيا برمجيا
وعليكم السلام
النسخة ex4 غير قابلة للفتح او الكسر حاليا
اما اذا تقصد مدى الحياة فهذا غير ممكن

saad
27-11-2020, 10:00 AM
السلام عليكم

هل ممكن اطلع الفرق بين السعر لعملة خلال مدة زمنية 30 الي 45 ثانية مثلا
مثال الوقت الان 11:00:00 وسعر الباوند دولار هو 1.3360
وبعد مرور 30 ثانية السعر بقي 1.3390
يظهر لي ان الفرق سعر هو 30 نقطة وهكذا كل 30 ثانية
واذا بينفع ممكن مثال عليها
وشكرا

kira-h
28-11-2020, 05:55 PM
السلام عليكم

هل ممكن اطلع الفرق بين السعر لعملة خلال مدة زمنية 30 الي 45 ثانية مثلا
مثال الوقت الان 11:00:00 وسعر الباوند دولار هو 1.3360
وبعد مرور 30 ثانية السعر بقي 1.3390
يظهر لي ان الفرق سعر هو 30 نقطة وهكذا كل 30 ثانية
واذا بينفع ممكن مثال عليها
وشكرا
وعليكم السلام
نعم ممكن باستخدام حفظ القيم من نوع static
مثال :


double point;
static double BID=0,pips=0;
static datetime Timee=0;


int OnInit()
{
EventSetMillisecondTimer(1);//للمعالجة الزمنية كل ميليثانية
if(Digits<4)
point=0.01;
else
point=0.0001;
return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
Comment("");
EventKillTimer();
}

void OnTimer()//المعالجة الزمنية اكثر دقة من المعالجة التكية
{
if(BID==0)
{
pips=0;
BID=Bid;
Timee=TimeCurrent();
}
if(BID>0&&TimeCurrent()>=Timee+30)
{
if(point>0)pips=NormalizeDouble(MathAbs(Bid-BID)/point,Digits);
BID=Bid;
Timee=TimeCurrent();
}
Print(pips);
Comment(pips);
}


طبعا المعالجة الزمنية OnTimer لا تعمل بالباكتيست ويمكنك استبدالها بالمعالجة التكية OnTick ولكن النتيجة ستكون غير دقيقة، لأن الزمن حركته ثابثة بينما السعر حركته متغيرة مثلا قد يتوقف السعر لاكثر من 30 ثانية وبالتالي سيكون حفظ التوقيت غير صحيح لأنه لا يتم الحفظ إلا بعد تحرك السعر لهذا OnTimer افضل واكثر دقة لايف فقط.

saad
30-11-2020, 09:56 AM
وعليكم السلام
نعم ممكن باستخدام حفظ القيم من نوع static
مثال :


double point;
static double BID=0,pips=0;
static datetime Timee=0;


int OnInit()
{
EventSetMillisecondTimer(1);//للمعالجة الزمنية كل ميليثانية
if(Digits<4)
point=0.01;
else
point=0.0001;
return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
Comment("");
EventKillTimer();
}

void OnTimer()//المعالجة الزمنية اكثر دقة من المعالجة التكية
{
if(BID==0)
{
pips=0;
BID=Bid;
Timee=TimeCurrent();
}
if(BID>0&&TimeCurrent()>=Timee+30)
{
if(point>0)pips=NormalizeDouble(MathAbs(Bid-BID)/point,Digits);
BID=Bid;
Timee=TimeCurrent();
}
Print(pips);
Comment(pips);
}


طبعا المعالجة الزمنية OnTimer لا تعمل بالباكتيست ويمكنك استبدالها بالمعالجة التكية OnTick ولكن النتيجة ستكون غير دقيقة، لأن الزمن حركته ثابثة بينما السعر حركته متغيرة مثلا قد يتوقف السعر لاكثر من 30 ثانية وبالتالي سيكون حفظ التوقيت غير صحيح لأنه لا يتم الحفظ إلا بعد تحرك السعر لهذا OnTimer افضل واكثر دقة لايف فقط.



أشكرك شكرا جزيلا علي التوضيح والمثال المرفق .

kira-h
30-11-2020, 02:44 PM
أشكرك شكرا جزيلا علي التوضيح والمثال المرفق .
العفو اخي الكريم
والله الموفق

ammar
01-12-2020, 11:21 PM
السلام عليكم
كيف يمكن ان اغلق او اوقف الاكسبيرت بعد تحقق شرط معين

kira-h
02-12-2020, 10:48 PM
السلام عليكم
كيف يمكن ان اغلق او اوقف الاكسبيرت بعد تحقق شرط معين
وعليكم السلام
استخدم متغير منطقي من نوع static
مثلا

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


static bool StopEA=false;

void OnTick()
{
if(StopEA==true)return;
}

متى يتحول StopEA من false الى true هذا راجع اليك كيف تريد استغلاله

مثلا تريد عند فتح الصفقة يتفعل اغلاق الاكسبيرت ستضع StopEA=true بعد دالة فتح الصفقة مباشرة OrderSend

ammar
03-12-2020, 02:16 AM
وعليكم السلام
استخدم متغير منطقي من نوع static
مثلا

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


static bool StopEA=false;

void OnTick()
{
if(StopEA==true)return;
}

متى يتحول StopEA من false الى true هذا راجع اليك كيف تريد استغلاله

مثلا تريد عند فتح الصفقة يتفعل اغلاق الاكسبيرت ستضع StopEA=true بعد دالة فتح الصفقة مباشرة OrderSend
السلام عليكم
بصراحة لم افهم ماذا تقصد وماهي دالة اغلاق الاكسبيرت بعد ان غيرنا قيمة StopEA الى true تتغير وماذا بعد
ارجو المعذرة ان كنت اسئل كثيرا

kira-h
03-12-2020, 02:53 AM
السلام عليكم
بصراحة لم افهم ماذا تقصد وماهي دالة اغلاق الاكسبيرت بعد ان غيرنا قيمة StopEA الى true تتغير وماذا بعد
ارجو المعذرة ان كنت اسئل كثيرا
اقصد ايقاف عمل الاكسبيرت وليس اغلاق
وماذا بعد؟ بعد تحقق شرط الايقاف فعندما سيبدا الاكسبيرت بمعالجة الكود ببداية الدالة الرئيسية سيجد امامه شرط الايقاف مفعل ويعود من البداية return ويضل هكذا في حلقة مفرغة يجد الشرط مفعل ويعود لقراءة الكود من البداية... يعني لن يستطيع قراءة بقية الكود وبالتالي توقف عن العمل

ammar
04-12-2020, 06:00 AM
اقصد ايقاف عمل الاكسبيرت وليس اغلاق
وماذا بعد؟ بعد تحقق شرط الايقاف فعندما سيبدا الاكسبيرت بمعالجة الكود ببداية الدالة الرئيسية سيجد امامه شرط الايقاف مفعل ويعود من البداية return ويضل هكذا في حلقة مفرغة يجد الشرط مفعل ويعود لقراءة الكود من البداية... يعني لن يستطيع قراءة بقية الكود وبالتالي توقف عن العمل
السلام عليكم
الفكرة جميلة جدا لايقاف عمل الاكسبيرت في اي مرحلى نشاء ولكن سؤالى هل يوجد دالة او فكرة تقوم بغلق الاكسبيرت يعني بدل ما تغلق الاكسبيرت يدويا (كلك ايمن على الشارت واختيار اكسبيرت ومن ثم رموف )
مرة اخره شكرا جزيل على المعلومات القيمه الى تقدمه

kira-h
04-12-2020, 05:25 PM
السلام عليكم
الفكرة جميلة جدا لايقاف عمل الاكسبيرت في اي مرحلى نشاء ولكن سؤالى هل يوجد دالة او فكرة تقوم بغلق الاكسبيرت يعني بدل ما تغلق الاكسبيرت يدويا (كلك ايمن على الشارت واختيار اكسبيرت ومن ثم رموف )
مرة اخره شكرا جزيل على المعلومات القيمه الى تقدمه
وعليكم السلام
استخدم تمبلت لشارت فارغ من اي اكسبيرت ومؤشرات مثلا باسم remove ثم قم باستدعائه عن طريق الوظيفة ChartApplyTemplate
وبالتالي سيتم حذف الاكسبيرت

ChartApplyTemplate(0,"remove.tpl");

ammar
06-12-2020, 07:52 AM
السلام عليكم
هل هناك كتاب باللغة العربية لتعلم mql5 او مراجع مفيدة تفيد في تعلم mql5
مع الشكر لمجهودك الرائع

kira-h
06-12-2020, 10:26 PM
السلام عليكم
هل هناك كتاب باللغة العربية لتعلم mql5 او مراجع مفيدة تفيد في تعلم mql5
مع الشكر لمجهودك الرائع
وعليكم السلام
غالبا لا يوجد مراجع عربية للغة mql5 لكن يمكنك تعلم كل شيء عن اللغة من موقعه الرسمي باللغة الانجليزية البسيطة
من هنا https://www.mql5.com/en/docs

ammar
07-12-2020, 12:18 AM
وعليكم السلام
استخدم تمبلت لشارت فارغ من اي اكسبيرت ومؤشرات مثلا باسم remove ثم قم باستدعائه عن طريق الوظيفة ChartApplyTemplate
وبالتالي سيتم حذف الاكسبيرت

ChartApplyTemplate(0,"remove.tpl");
السلام عليكم
اولا شكرا على المجهود الرائع في الاجابات
اما بخصوص الاجابه اعلاه فهي فكرة راقيه وكذلك يمكن الاستفاده منها في اكثر من وظيفة
ولكن كنت ابحث عن شئ اكثر بساطة في اغلاق الاكسبيرت والحمد لله وجدت هذا الامر

if(AccountEquity()>= 100)ExpertRemove();

kira-h
07-12-2020, 04:59 AM
السلام عليكم
اولا شكرا على المجهود الرائع في الاجابات
اما بخصوص الاجابه اعلاه فهي فكرة راقيه وكذلك يمكن الاستفاده منها في اكثر من وظيفة
ولكن كنت ابحث عن شئ اكثر بساطة في اغلاق الاكسبيرت والحمد لله وجدت هذا الامر

if(AccountEquity()>= 100)ExpertRemove();


وعليكم السلام
نعم صحيح لكن الشرط قابل للتغير بحيث اذا لم يتحقق فيما بعد، سيعمل الاكسبيرت مجددا الا اذا كنت تريد ذلك.
اما غير ذلك فشرط التمبلت اضمن.

shivaa
07-12-2020, 10:52 PM
السلام عليكم

shivaa
07-12-2020, 10:54 PM
السلام عليكم
انا اعمل على اكسبيرت هيدج على الرينكو الدخول عن طريق مؤشرخارجى
انا عاوز داله تكشف على اخر صفقه مفعله اذا كانه رابحه بعد اغلاق الشمعه تغلق اخر صفقه فقط
وده اخر ما توصلت ليه ممكن التصحيح اكون شاكر


if(Total_Bars!=Bars)
{
if(LastOrderCurrent("Profit")>(OrderCommission()+Spread()))
{
if(OrderSelect(LastOrderCurrent("Ticket"),SELECT_BY_POS,MODE_TRADES))
{
if(LastOrderCurrent("Type")==OP_BUY)

OrderClose(LastOrderCurrent("Ticket"),OrderLots(),MarketInfo(Symbol(),MODE_BID),Digits );
if(LastOrderCurrent("Type")==OP_SELL)
OrderClose(LastOrderCurrent("Ticket"),OrderLots(),MarketInfo(Symbol(),MODE_ASK),Digits );
}
}
Total_Bars=Bars;
}

kira-h
08-12-2020, 12:02 AM
السلام عليكم
انا اعمل على اكسبيرت هيدج على الرينكو الدخول عن طريق مؤشرخارجى
انا عاوز داله تكشف على اخر صفقه مفعله اذا كانه رابحه بعد اغلاق الشمعه تغلق اخر صفقه فقط
وده اخر ما توصلت ليه ممكن التصحيح اكون شاكر


if(Total_Bars!=Bars)
{
if(LastOrderCurrent("Profit")>(OrderCommission()+Spread()))
{
if(OrderSelect(LastOrderCurrent("Ticket"),SELECT_BY_POS,MODE_TRADES))
{
if(LastOrderCurrent("Type")==OP_BUY)

OrderClose(LastOrderCurrent("Ticket"),OrderLots(),MarketInfo(Symbol(),MODE_BID),Digits );
if(LastOrderCurrent("Type")==OP_SELL)
OrderClose(LastOrderCurrent("Ticket"),OrderLots(),MarketInfo(Symbol(),MODE_ASK),Digits );
}
}
Total_Bars=Bars;
}
وعليكم السلام
ارفق الكود او ضع كل الدوال الموجودة بالشروط للمراجعة
لكن عموما حسب المسميات والمنطق الموجودة بالشروط يجب التصحيح بما يلي :


int OrdersClose()//عدد الصفقات المغلقة بعد توقيت افتتاح اخر شمعة
{
int cnt=0;
for(int i=0; i<OrdersHistoryTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderCloseTime()>=Time[0])cnt++;
}
}
}
}


if(Total_Bars!=Bars&&OrdersClose()==0)
{
bool close;
if(LastOrderCurrent("Profit")>(OrderCommission()+Spread()))
{
if(OrderSelect(LastOrderCurrent("Ticket"),SELECT_BY_POS,MODE_TRADES))
{
if(LastOrderCurrent("Type")==OP_BUY)
{
close=OrderClose(LastOrderCurrent("Ticket",OP_BUY),LastOrderCurrent("Lots",OP_BUY),MarketInfo(Symbol(),MODE_BID),Digits);
Total_Bars=Bars;
return;
}
if(LastOrderCurrent("Type")==OP_SELL)
{
close=OrderClose(LastOrderCurrent("Ticket",OP_SELL),LastOrderCurrent("Lots",OP_SELL),MarketInfo(Symbol(),MODE_ASK),Digits);
Total_Bars=Bars;
return;
}
}
}
}

احمد
11-12-2020, 05:19 AM
السلام عليكم وحمة الله وبركته

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

kira-h
11-12-2020, 05:19 PM
السلام عليكم وحمة الله وبركته

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

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


double FirstOrderInfo(string info,int type=-1)
{
for(int i=0; i<OrdersTotal(); i++)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
op=OrderOpenPrice(),
pt=OrderProfit(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();
if(sy==Symbol()&&mn==MagicNo)
{
if(ty==type||type==-1)
{
if(info=="Lots")
return(lo);
else
if(info=="Price")
return(op);
else
if(info=="Profit")
return(pt);
else
if(info=="Type")
return(ty);
else
if(info=="TP")
return(tp);
else
if(info=="SL")
return(sl);
}
}
}
return(0);
}

Ghassebd
13-12-2020, 08:21 PM
السلام عليكم وحمة الله
محتاج مساعدة في تكوين كود داخل metaeditor مع اضافة منغيرات داخل االكود والناتج الاختيارمن خلال الاعدادات للحصول على شرط معين ....مثلا اعلى سعر شمعة اربع ساعات السابقة ,,,,,وتغييرالشرط من خلال هذه الصيغة حسب الاعدادت الى ...مثلا ادنى سعر لشمعة اليومي رقم 2 وهكذا...
والصيغة المطلوبة

;Buy1=timeframe,NULL,ENUM_TIMEFRAMES,shift
;Buy2=timeframe,NULL,ENUM_TIMEFRAMES,shift


الناتج حسب الصيغة اعلاه يكون بالشكل التالي
;Buy2=iClose(Symbol(),PERIOD_H1,1

;Buy1=iHigh(Symbol(),PERIOD_H4,0

بحيث يكون هنالك كود منغيرات داخل ,ETAEDITOR يشبة التالي
//-------------------------
enum timeframe(
iClose,
iHigh,
iHighest,
iLow,
iLowest,
iOpen);
______________________//

enum ENUM_TIMEFRAMES(


PERIOD_M1,
PERIOD_M5,
PERIOD_M15,
PERIOD_M30,
PERIOD_H1,
PERIOD_H4,
PERIOD_D1,
PERIOD_W1,
PERIOD_MN1);
//------------------------------------------

0,1,2,3,4,5,6=shift


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

وهنا مثال كامل على الموفينج افرج




//////////////////////////////////////input string MA_1_Note="---------";input string MA_1_note="Moving Average 1";input int MA_1_Period=10;input int MA_1_Shift=0;input ENUM_MA_METHOD MA_1_Method=0;input ENUM_APPLIED_PRICE MA_1_Apply_to=0; input string MA_2_Note="---------";input string MA_2_note="Moving Average 2";input int MA_2_Period=20;input int MA_2_Shift=2;input ENUM_MA_METHOD MA_2_Method=0;input ENUM_APPLIED_PRICE MA_2_Apply_to=0;
input string MA_Required_Note="---------";input string MA_Required_note="عدد المتوسطات المطلوبة"; enum enum_MA_Required {MA__0=0,MA__1=1,MA__2=2};input enum_MA_Required MA_Required=2;


; MA_1_0=iMA(Symbol_Full,Time_Frame__[iii_1],MA_1_Period,MA_1_Shift,MA_1_Method,MA_1_Apply_to, 0 ; MA_2_0=iMA(Symbol_Full,Time_Frame__[iii_1],MA_2_Period,MA_2_Shift,MA_2_Method,MA_2_Apply_to, 0











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

Ghassebd
13-12-2020, 09:02 PM
enum enumTimeFrames{


m1 = PERIOD_M1, //M1
m5 = PERIOD_M5, //M5
m15 = PERIOD_M15, //M15
m30 = PERIOD_M30, //M30
h1 = PERIOD_H1, //H1
h4 = PERIOD_H4, //H4
d1 = PERIOD_D1, //D1
w1 = PERIOD_W1, //W1
mn1 = PERIOD_MN1 //MN1
};


//input ENUM_TIMEFRAMES MTF_Period = PERIOD_H1; //Timeframe
input enumTimeFrames MTF_Period = h1; //Timeframe






enum enumTimeseries{


high = iHigh, //iHigh
open = iOpen, //iOpen
low = iLow, //iLow
close = iClose, //iClose
volume = iVolume, //iVolume
time = iTime, //iTime


};


//input ENUM_TIMEFRAMES MTF_Period = PERIOD_H1; //Timeframe
input enumTimeseries MTF_series = iHigh; //Timeframe

0=input Shift




(Buy1=MTF_series(Null,MTF_Period,Shift


حاولت ان اعمل الكود بهذا الشكل

kira-h
13-12-2020, 11:06 PM
.....
حاولت ان اعمل الكود بهذا الشكل

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

iHigh(Symbol(),PERIOD_D1,1);
هنا حددنا هاي آخر شمعة يومية مغلفة للزوج الحالي
نفس الشيء يمكنك عمله لمعرفة الافتتاح، الاغلاق، اللو، الفوليوم والتوقيت (حسب الزوج، الفريم ورقم الشمعة)

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


enum enumTimeFrames
{
m1 = PERIOD_M1, //M1
m5 = PERIOD_M5, //M5
m15 = PERIOD_M15,//M15
m30 = PERIOD_M30,//M30
h1 = PERIOD_H1, //H1
h4 = PERIOD_H4, //H4
d1 = PERIOD_D1, //D1
w1 = PERIOD_W1, //W1
mn1 = PERIOD_MN1 //MN1
};


enum enumTimeseries
{
high=0, //iHigh
open=1, //iOpen
low=2, //iLow
close=3, //iClose
volume=4,//iVolume
time=5 //iTime
};


input enumTimeFrames MTF_Period = h1; //Timeframe
input enumTimeseries MTF_series = high; //Timeframe

Ghassebd
14-12-2020, 01:19 AM
enum enumTimeFrames
{
m1 = PERIOD_M1, //M1
m5 = PERIOD_M5, //M5
m15 = PERIOD_M15,//M15
m30 = PERIOD_M30,//M30
h1 = PERIOD_H1, //H1
h4 = PERIOD_H4, //H4
d1 = PERIOD_D1, //D1
w1 = PERIOD_W1, //W1
mn1 = PERIOD_MN1 //MN1
};


enum enumTimeseries
{
high=0, //iHigh
open=1, //iOpen
low=2, //iLow
close=3, //iClose
volume=4,//iVolume
time=5 //iTime
};


input enumTimeFrames MTF_Period = h1; //Timeframe
input enumTimeseries MTF_series = high; //Timefr







هذا ما اريده استخدام المنسدلات بالكود لكن اريد ربط المنسدلات مع المغادلة
Buy1 وBuy2



;(Buy1=enumTimeseries(NULL,enumTimeFrames,shift
;(Buy2=enumTimeseries(NULL,enumTimeFrames,shift

او هذه الصيغة


;(Buy1=enumTimeseries(Symbol_Full,enumTimeFrames,1
; (Buy2=enumTimeseries(Symbol_Full,enumTimeFrames,1

او هذه الصيغة


;(Buy1=+MTF_series+(Symbol_Full,+MTF_Period+,1
;(Buy2=+MTF_series+(Symbol_Full,+MTF_Period+,1





بحيث يتم تفيير
الاغلاق، اللو، الفوليوم والتوقيت (حسب الزوج، الفريم ورقم الشمعة) من الاعدادات (المنسدلات ) كما بالصورة

kira-h
14-12-2020, 06:21 AM
enum enumTimeFrames
{
m1 = PERIOD_M1, //M1
m5 = PERIOD_M5, //M5
m15 = PERIOD_M15,//M15
m30 = PERIOD_M30,//M30
h1 = PERIOD_H1, //H1
h4 = PERIOD_H4, //H4
d1 = PERIOD_D1, //D1
w1 = PERIOD_W1, //W1
mn1 = PERIOD_MN1 //MN1
};


enum enumTimeseries
{
high=0, //iHigh
open=1, //iOpen
low=2, //iLow
close=3, //iClose
volume=4,//iVolume
time=5 //iTime
};


input enumTimeFrames MTF_Period = h1; //Timeframe
input enumTimeseries MTF_series = high; //Timefr







هذا ما اريده استخدام المنسدلات بالكود لكن اريد ربط المنسدلات مع المغادلة
Buy1 وBuy2



;(Buy1=enumTimeseries(NULL,enumTimeFrames,shift
;(Buy2=enumTimeseries(NULL,enumTimeFrames,shift

او هذه الصيغة


;(Buy1=enumTimeseries(Symbol_Full,enumTimeFrames,1
; (Buy2=enumTimeseries(Symbol_Full,enumTimeFrames,1

او هذه الصيغة


;(Buy1=+MTF_series+(Symbol_Full,+MTF_Period+,1
;(Buy2=+MTF_series+(Symbol_Full,+MTF_Period+,1





بحيث يتم تفيير
الاغلاق، اللو، الفوليوم والتوقيت (حسب الزوج، الفريم ورقم الشمعة) من الاعدادات (المنسدلات ) كما بالصورة






المعادلات اصلا غير منطقية ولم افهم معناها!
ما الهدف من المعادلات ؟
اشرح تفصيلا حتى افهم

Ghassebd
14-12-2020, 05:38 PM
السلام عليكم ورحمة الله وبركاته.. اشكرك مقدما على جهودك....


المعادلات اصلا غير منطقية ولم افهم معناها!


كلامك صحيح ...
المنسدلات هي لمعادلة واحدة بحيث المنسدلة MTF_series او
enumTimeseries تمثل ilow ihigh iopen iclose
المنسدلة
MTF_Period او enumTimeFrames تمثل الفريم

shift تمثل اي شمعة

SymboL_Fulll او ()Symbol او NULL تمثل الزوج





Buy1=enumTimeseries(Symbol_Full,enumTimeFrames,1;)


Buy1=+MTF_series+(Symbol_Full,+MTF_Period+,1);
وسوف اضيف المنسدلات جيدة للمعادلة رقم 2



ما الهدف من المعادلات ؟

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




اشرح تفصيلا حتى افهم



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




//////////////////////////////////////
input string MA_1_Note="---------";
input string MA_1_note="Moving Average 1";
input int MA_1_Period=10;
input int MA_1_Shift=0;
input ENUM_MA_METHOD MA_1_Method=0;
input ENUM_APPLIED_PRICE MA_1_Apply_to=0;

input string MA_2_Note="---------";
input string MA_2_note="Moving Average 2";
input int MA_2_Period=20;
input int MA_2_Shift=2;
input ENUM_MA_METHOD MA_2_Method=0;
input ENUM_APPLIED_PRICE MA_2_Apply_to=0;


input string MA_Required_Note="---------";
input string MA_Required_note="عدد المتوسطات المطلوبة";


enum enum_MA_Required {MA__0=0,MA__1=1,MA__2=2};
input enum_MA_Required MA_Required=2;
.
.
.
.
.
.
MA_1=iMA(Symbol_Full,Time_Frame__[iii_1],MA_1_Period,MA_1_Shift,MA_1_Method,MA_1_Apply_to, 0);
MA_2=iMA(Symbol_Full,Time_Frame__[iii_1],MA_2_Period,MA_2_Shift,MA_2_Method,MA_2_Apply_to, 0);











من خلال هالمثال نقدر نختار اي موفينح والتعديل من خلال الاعدادات




;(Buy1=+MTF_series+(Symbol_Full,+MTF_Period+,1

احمد
14-12-2020, 09:20 PM
السلام عليكم
هل هناك دالة لإغلاق الصفقات على حسب ارباحها فمثلا :
اذا كان عندي عدة صفقات مفتوحة واريد اغلاق الصفقة التي ارباحها اصبحت صفر

Ghassebd
14-12-2020, 10:57 PM
..احاول توصيل الفكرة لكن للاسف لقلة معلوماتي بالبرمجة .. المختصر المفيد وبدون تعقيد الامور... اريد استخدام المنسدلة التالية في تكوين هذه المعادلة ادناه

المنسدلات هي



enum enumTimeFrames { m1 = PERIOD_M1, //M1 m5 = PERIOD_M5, //M5 m15 = PERIOD_M15,//M15 m30 = PERIOD_M30,//M30 h1 = PERIOD_H1, //H1 h4 = PERIOD_H4, //H4 d1 = PERIOD_D1, //D1 w1 = PERIOD_W1, //W1 mn1 = PERIOD_MN1 //MN1 };enum enumTimeseries { high=0, //iHigh open=1, //iOpen low=2, //iLow close=3, //iClose volume=4,//iVolume time=5 //iTime };input enumTimeFrames MTF_Period = h1; //Timeframeinput enumTimeseries MTF_series = high; //Timefr

enum enumTimeFrames { m1 = PERIOD_M1, //M1 m5 = PERIOD_M5, //M5 m15 = PERIOD_M15,//M15 m30 = PERIOD_M30,//M30 h1 = PERIOD_H1, //H1 h4 = PERIOD_H4, //H4 d1 = PERIOD_D1, //D1 w1 = PERIOD_W1, //W1 mn1 = PERIOD_MN1 //MN1 };enum enumTimeseries { high=0, //iHigh open=1, //iOpen low=2, //iLow close=3, //iClose volume=4,//iVolume time=5 //iTime };input enumTimeFrames MTF_Period = h1; //Timeframeinput enumTimeseries MTF_series = high; //Timefr




المعادلة هي



;(DH1=iHigh(Symbol_Full,PERIOD_H1,1


اختيار iHigh من المنسدلة enumTimeseries MTF_series كما بالصورة
اختيار PERIOD_H1 من المنسدلة enumTimeFrames MTF_Period كما بالصورة

kira-h
15-12-2020, 12:57 AM
السلام عليكم
هل هناك دالة لإغلاق الصفقات على حسب ارباحها فمثلا :
اذا كان عندي عدة صفقات مفتوحة واريد اغلاق الصفقة التي ارباحها اصبحت صفر
وعليكم السلام
استخدم دالة البريك ايفن بمعنى عندما تحقق الصفقة ربح محدد يتم نقل او وضع الستوب عند سعر الفتح أو عند ربح معين

kira-h
15-12-2020, 01:10 AM
..احاول توصيل الفكرة لكن للاسف لقلة معلوماتي بالبرمجة .. المختصر المفيد وبدون تعقيد الامور... اريد استخدام المنسدلة التالية في تكوين هذه المعادلة ادناه

المنسدلات هي



enum enumTimeFrames { m1 = PERIOD_M1, //M1 m5 = PERIOD_M5, //M5 m15 = PERIOD_M15,//M15 m30 = PERIOD_M30,//M30 h1 = PERIOD_H1, //H1 h4 = PERIOD_H4, //H4 d1 = PERIOD_D1, //D1 w1 = PERIOD_W1, //W1 mn1 = PERIOD_MN1 //MN1 };enum enumTimeseries { high=0, //iHigh open=1, //iOpen low=2, //iLow close=3, //iClose volume=4,//iVolume time=5 //iTime };input enumTimeFrames MTF_Period = h1; //Timeframeinput enumTimeseries MTF_series = high; //Timefr

enum enumTimeFrames { m1 = PERIOD_M1, //M1 m5 = PERIOD_M5, //M5 m15 = PERIOD_M15,//M15 m30 = PERIOD_M30,//M30 h1 = PERIOD_H1, //H1 h4 = PERIOD_H4, //H4 d1 = PERIOD_D1, //D1 w1 = PERIOD_W1, //W1 mn1 = PERIOD_MN1 //MN1 };enum enumTimeseries { high=0, //iHigh open=1, //iOpen low=2, //iLow close=3, //iClose volume=4,//iVolume time=5 //iTime };input enumTimeFrames MTF_Period = h1; //Timeframeinput enumTimeseries MTF_series = high; //Timefr




المعادلة هي



;(DH1=iHigh(Symbol_Full,PERIOD_H1,1


اختيار iHigh من المنسدلة enumTimeseries MTF_series كما بالصورة
اختيار PERIOD_H1 من المنسدلة enumTimeFrames MTF_Period كما بالصورة

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



enum enumTimeFrames // منسدلة الفريمات وفي الأصل موجودة باللغة
{
m1 = PERIOD_M1, //M1
m5 = PERIOD_M5, //M5
m15 = PERIOD_M15,//M15
m30 = PERIOD_M30,//M30
h1 = PERIOD_H1, //H1
h4 = PERIOD_H4, //H4
d1 = PERIOD_D1, //D1
w1 = PERIOD_W1, //W1
mn1 = PERIOD_MN1 //MN1
};

enum enumTimeseries//منسدلة مكونات الشمعة
{
high=0, //iHigh
open=1, //iOpen
low=2, //iLow
close=3, //iClose
volume=4,//iVolume
time=5 //iTime
};

input enumTimeFrames MTF_Period = h1; //Timeframe //اعداد خارجي للفريمات
input enumTimeseries MTF_series = high; //Timeframe // اعداد خارجي لمكونات الشمعة


في الاصل لن تحتاج لمنسدلة الفريمات لأنها موجودة سلفا باللغة من خلال الوظيفة ENUM_TIMEFRAMES، لكن لنفترض فقط من اجل تحسين شكل الاعدادات خصصنا منسدلة خاصة بنا!

عموما من خلال ما سبق نريد متغير مثلا باسم Price تعود بسعر الهاي بفريم الساعة سيكون كالتالي :


double Price=MTF_series(Symbol(),MTF_Period,1);


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

Ghassebd
15-12-2020, 02:05 AM
اشكرك واعذرني
جربت
توظيف
منسدلة الفريمات ومنسدلة مكونات الشمعة بالدالة

double Price=MTF_series(Symbol(),MTF_Period,1);


وتقبلت منسدلة الفريمات... لكن لم تقبل منسدلة مكونات الشمعة (MTF_series
)....

'MTF_series' - function not defined
هل من حل

احمد
15-12-2020, 03:10 AM
وعليكم السلام
استخدم دالة البريك ايفن بمعنى عندما تحقق الصفقة ربح محدد يتم نقل او وضع الستوب عند سعر الفتح أو عند ربح معين
بارك الله فيك أخوي حسن
هناك شروط اخرى تتعارض مع داله البريك ايفن وقد تكون الصفقة حققت خساره بدلان من الربح ثم عادت الى الصفر لذلك اريد دالة تغلق الصفقة التي اصبحت ارباحها تعادل صف مثل دالة اغلاق الصفقات حسب نوع الشراء
مع العلم بأن هناك شروط أخرى سوف أضيفها للدالة حتى لا تقفل الصفقه بمجرد ان ارباحها صفر
مع شكري الجزيل لك

kira-h
15-12-2020, 05:58 PM
اشكرك واعذرني
جربت
توظيف

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


double Price=MTF_series(Symbol(),MTF_Period,1);


وتقبلت منسدلة الفريمات... لكن لم تقبل منسدلة مكونات الشمعة (
MTF_series
)....


'MTF_series' - function not defined
هل من حل
نعم صحيح غير ممكنة فهي ليست جزء من الدالة
لكن كما قلت سابقا كل هذا متوفر باللغة اصلا مثل الوظائف الافتراضية iHigh او iLow او iClose ...
عموما يوجد حل آخر كالتالي :


if(MTF_series==high)Price=iHigh(Symbol(),MTF_Perio d,1);
else if(MTF_series==low)Price=iLow(Symbol(),MTF_Period, 1);
else if(MTF_series==close)Price=iClose(Symbol(),MTF_Per iod,1);
else if(MTF_series==open)Price=iOpen(Symbol(),MTF_Perio d,1);

kira-h
15-12-2020, 06:05 PM
بارك الله فيك أخوي حسن
هناك شروط اخرى تتعارض مع داله البريك ايفن وقد تكون الصفقة حققت خساره بدلان من الربح ثم عادت الى الصفر لذلك اريد دالة تغلق الصفقة التي اصبحت ارباحها تعادل صف مثل دالة اغلاق الصفقات حسب نوع الشراء
مع العلم بأن هناك شروط أخرى سوف أضيفها للدالة حتى لا تقفل الصفقه بمجرد ان ارباحها صفر
مع شكري الجزيل لك
يمكن عمل بريك ايفن خاسر يعني عند تحقق خسارة محددة يتم نقل الهدف الى الدخول
مثال :


void MoveBreakEvenLoss()
{
bool s,mod;
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(BreakEvenLoss>0&&sy==Symbol()&&mn==MagicNo&&ot<=OP_SELL)
{
if(ot==OP_BUY)
{
if(NormalizeDouble(Bid,Digits)<NormalizeDouble(op,Digits)-BreakEvenLoss*point)
{
if((NormalizeDouble(tp,Digits)>NormalizeDouble(op,Digits))||(tp==0))
{
mod=OrderModify(tk,op,sl,NormalizeDouble(op,Digits ),0,Blue);
}
}
}
else
{
if(NormalizeDouble((Ask),Digits)>NormalizeDouble(op,Digits)+BreakEvenLoss*point)
{
if((NormalizeDouble(tp,Digits)<NormalizeDouble(op,Digits))||(tp==0))
{
mod=OrderModify(tk,op,sl,NormalizeDouble(op,Digits ),0,Red);
}
}
}
}
}
}



بحيث :
BreakEvenLoss الخسارة المحددة لنقل الهدف الى الدخول، 0 إلغاء

Ghassebd
16-12-2020, 01:28 AM
اشكرك وبارك الله فيك تمت واكتملت الدالة

:teapot:

Ghassebd
16-12-2020, 01:30 AM
نعم صحيح غير ممكنة فهي ليست جزء من الدالة
لكن كما قلت سابقا كل هذا متوفر باللغة اصلا مثل الوظائف الافتراضية iHigh او iLow او iClose ...
عموما يوجد حل آخر كالتالي :


if(MTF_series==high)Price=iHigh(Symbol(),MTF_Perio d,1);
else if(MTF_series==low)Price=iLow(Symbol(),MTF_Period, 1);
else if(MTF_series==close)Price=iClose(Symbol(),MTF_Per iod,1);
else if(MTF_series==open)Price=iOpen(Symbol(),MTF_Perio d,1);




اشكرك وبارك الله فيك تمت واكتملت الدالة

:teapot:

احمد
16-12-2020, 02:01 AM
اخي حسن بارك الله فيك
حاولت كثيرا على البريك ايفن ولم ينفع ذلك
انا اريد ان اغلق صفقة واحدة من ضمن عدة صفقات كثيره قد يكون ترتيبها الاولى او الثانية او الثالثة الخ ..... بمعنى اي ترتيب
فتحت الصفقات عندما تقاطع الموفينق افرج السريع مع البطيء إلى الاعلى
شروط الاغلاق اثنان : 1- ان يصير العكس الموفينق افرج السريع يتقاطع مع البطيء إلى الاسفل
2- أن تكون ارباح هذه الصفقه صفر بمعنى لا ربح ولا خسارة في الصفقة نفسها
ولو انطبق هذان الشرطان على اي صفقة أخرى تقوم الداله بإغلاقها والصفقات اللتي لا ينطبق عليها الشروط تبقى مفتوحة
جزاك الله خيرا وبارك الله فيك

kira-h
16-12-2020, 05:48 AM
اخي حسن بارك الله فيك
حاولت كثيرا على البريك ايفن ولم ينفع ذلك
انا اريد ان اغلق صفقة واحدة من ضمن عدة صفقات كثيره قد يكون ترتيبها الاولى او الثانية او الثالثة الخ ..... بمعنى اي ترتيب
فتحت الصفقات عندما تقاطع الموفينق افرج السريع مع البطيء إلى الاعلى
شروط الاغلاق اثنان : 1- ان يصير العكس الموفينق افرج السريع يتقاطع مع البطيء إلى الاسفل
2- أن تكون ارباح هذه الصفقه صفر بمعنى لا ربح ولا خسارة في الصفقة نفسها
ولو انطبق هذان الشرطان على اي صفقة أخرى تقوم الداله بإغلاقها والصفقات اللتي لا ينطبق عليها الشروط تبقى مفتوحة
جزاك الله خيرا وبارك الله فيك
الشرط الأول واضح ويمكنك عمله بمقارنة الموفينجين
الشرط الثاني غير منطقي، فإما الصفقة محققة ربح او محققة خسارة، لكن إذا تقصد ارتداد السعر من قيمة رابحة إلى نقطة الدخول، او العكس من قيمة خاسرة الى نقطة الدخول، فهنا يجب استخدام البريك ايفن العادي (المعروف لديك) والبريك ايفن الخاسر (بمشاركتي السابقة) تضعهما ضمن الشرط الأول الخاص بالموفينجين.
أيضا البريك ايفن اصلا يعمل على كل صفقة على حدى فهو ليس إجمالي...
أما إذا تريد استخدام دالة الاغلاق فهذا غير ممكن حسب طلبك لأن ليس بها ترتيب محدد فهي تغلق كل الصفقات او مثلا اغلاق الصفقات الرابحة فقط او الخاسرة فقط ولكن لا يرى مسألة الارتداد كما تريد او مثل البريك ايفن، بل سيغلق مباشرة عند الربح الحالي او الخسارة الحالية.

kira-h
16-12-2020, 05:50 AM
اشكرك وبارك الله فيك تمت واكتملت الدالة

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

ammar
17-12-2020, 02:38 PM
السلام عليكم
هل يوجد دالة او كود يمكننا من خلاله عمل احصائيات مثلا عدد الوتات حتى المغلقة لفترة معينة او من فتح البرنامج ميترتريد الى الاغلاق
مع الشكر اجزيل دائما

Ghassebd
17-12-2020, 05:28 PM
{

( ++ for ( int i = 1; i < 12; i
;( double YL(i)=IiLow(Symbol(),PERIOD_MN1,i
{

if (Bid= YL(i) SendMail(" monthly test ",Symbol()+" ----"+Period()+" -----"" "" "-- "" "" "" "+DoubleToStr(Ask,Digits) +"--" " " + TimeToStr(TimeLocal(),TIME_SECONDS
;((





السلام عليكم

هل هذه الداله صحيحة

الهدف قراءة اقل سعر شهري لمده 12 شهر او اكثر بداله واحدة

وشكرا لكم

kira-h
17-12-2020, 08:23 PM
السلام عليكم
هل يوجد دالة او كود يمكننا من خلاله عمل احصائيات مثلا عدد الوتات حتى المغلقة لفترة معينة او من فتح البرنامج ميترتريد الى الاغلاق
مع الشكر اجزيل دائما
وعليكم السلام
إذا تقصد اجمالي احجام العقود بالهيستوري فهي كالتالي :



double total_Lots(int type=-1)
{
double lots=0;
for(int i=0; i<OrdersHistoryTotal(); i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots();
if(sy==Symbol())
{
if(ty==type||type==-1)
{
lots+=lo;
}
}
}
return(lots);
}

kira-h
17-12-2020, 08:36 PM
السلام عليكم

هل هذه الداله صحيحة

الهدف قراءة اقل سعر شهري لمده 12 شهر او اكثر بداله واحدة

وشكرا لكم




وعليكم السلام
أعلى هاي لـ 12 شهر سابق كالتالي :


double HighPos=iHigh(Symbol(),PERIOD_MN1,iHighest(Symbol( ),PERIOD_MN1,MODE_HIGH,12,1));

Ghassebd
17-12-2020, 11:40 PM
اشكرك
وليس المقصود اعلى سعر خلال 12 شهر لكن ممكن انا ما وضحت الفكرة
اريد قراءة اعلى سعر او اقل سعر لكل شهر لمدة 12 شهر ... يعني اذا لامس السعر الحالي اي اعلى سعر وصل له شهريا
مثل هذا الكود ادناه لكن اريد ان اختصر الداله ...ممكن يكون لحساب عدد اشهر كثيرة






double
,(YL1=iLow(Symbol(),PERIOD_MN1,1
,(YL2=iLow(Symbol(),PERIOD_MN1,2
,(YL3=iLow(Symbol(),PERIOD_MN1,3
,(YL4=iLow(Symbol(),PERIOD_MN1,4
,(YL5=iLow(Symbol(),PERIOD_MN1,5
.
.
.
.
.
,(YL12=iLow(Symbol(),PERIOD_MN1,12

kira-h
18-12-2020, 02:05 AM
اشكرك
وليس المقصود اعلى سعر خلال 12 شهر لكن ممكن انا ما وضحت الفكرة
اريد قراءة اعلى سعر او اقل سعر لكل شهر لمدة 12 شهر ... يعني اذا لامس السعر الحالي اي اعلى سعر وصل له شهريا
مثل هذا الكود ادناه لكن اريد ان اختصر الداله ...ممكن يكون لحساب عدد اشهر كثيرة






double
,(YL1=iLow(Symbol(),PERIOD_MN1,1
,(YL2=iLow(Symbol(),PERIOD_MN1,2
,(YL3=iLow(Symbol(),PERIOD_MN1,3
,(YL4=iLow(Symbol(),PERIOD_MN1,4
,(YL5=iLow(Symbol(),PERIOD_MN1,5
.
.
.
.
.
,(YL12=iLow(Symbol(),PERIOD_MN1,12


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


for(int i=1;i<=12;i++;)
{
double YL=iLow(Symbol(),PERIOD_MN1,i);
if(Bid<=YL)Print("Break Month Low "+i+" at price "+YL);
}

Ghassebd
19-12-2020, 12:45 AM
اخي الكريم الدالة تالفة، قم فقط بنسخها ضمن الكود دون اي تعديل وسيتم عرضها بشكل صحيح بعد اعتماد المشاركة
عموما اعتقد تقصد التالي


for(int i=1;i<=12;i++;)
{
double YL=iLow(Symbol(),PERIOD_MN1,i);
if(Bid<=YL)Print("Break Month Low "+i+" at price "+YL);
}




اشكرك و
بارك الله فيك
تمت واكتملت الداله

kira-h
19-12-2020, 02:11 AM
اشكرك و

بارك الله فيك

تمت واكتملت الداله

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

kira-h
27-12-2020, 03:48 AM
السلام عليكم
احتاج مساعدة مع تحقق اكثر من شرط للشراء والبيع باستخدام || و && بنفس المعادلة
....اذا كان السعراعلى من متوسط اليوم السابقاو || اعلى من قمة اليوم السابقو && اعلى من قمة شمعة 5 د السسابقة ...تحقق الشراء
والعكس صحيح

ولقد سغت المعادلة كما هي ادناه لكن يوجد خطا

check operator precedence for possible error; use parentheses to clarify precedence





فارجو المساعدة





{
P=((iHigh(Symbol_Full,PERIOD_D1,1)+iLow(Symbol_Ful l,PERIOD_D1,1))/2);
PH1=iHigh(Symbol_Full,PERIOD_D1,1);
PL2=iLow(Symbol_Full,PERIOD_D1,1);
PH2=iHigh(Symbol_Full,PERIOD_M5,1);
PL2=iLow(Symbol_Full,PERIOD_M5,1);


if(Bid>P && Bid> PL2 || Bid> PH2) Buy_P=true;


else

if(Bid<P && Bid<PH1 || Bid<PL2) Sell_P_TF=true
}



وعليكم السلام
الامر واضح فقط من الخطأ بمعناه الانجليزي، يجب فصل الشروط بالاقواس لأنه البرنامج لا يعلم اين الشرط الأول والشرط التاني، يجب ان تفرق بينهما بالاقواس
ايضا حتى بالشرح لم تفصل بين الشرطين حتى اقوم بالتصحيح!
عموما هذا مثال ويمكنك تعديل ما تشاء:


if(Bid>P && (Bid> PL2 || Bid> PH2)) Buy_P=true;

if(Bid<P && (Bid<PH1 || Bid<PL2)) Sell_P_TF=true;

Ghassebd
30-12-2020, 10:31 PM
اشكرك و

بارك الله فيك

kira-h
31-12-2020, 05:46 PM
اشكرك و


بارك الله فيك


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

sabil
01-01-2021, 06:09 AM
اخي حسن لو سمحت عايز دالة بمتغير خارجي ترو او فولس نظامها كالاتي :
لو اخر صفقة قفلت ع خسارة وكانت شراء ميفتحش شراء تاني مهما توافرت الشروط غير صفقات البيع والعكس بالعكس
انا كنت عاملها قبل كده بس اكوادها كتيرة ومكررة وكمان تايهة داخل الجهاز فلو عندك فكرة مختصرة قولي عليها او قولي المتاح عندك

kira-h
01-01-2021, 09:12 PM
اخي حسن لو سمحت عايز دالة بمتغير خارجي ترو او فولس نظامها كالاتي :
لو اخر صفقة قفلت ع خسارة وكانت شراء ميفتحش شراء تاني مهما توافرت الشروط غير صفقات البيع والعكس بالعكس
انا كنت عاملها قبل كده بس اكوادها كتيرة ومكررة وكمان تايهة داخل الجهاز فلو عندك فكرة مختصرة قولي عليها او قولي المتاح عندك

مثال :


input bool Consecutive=true;


double Closed(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();


if(sy==Symbol()&&mn==MagicNo)
{
if(ty==type||type==-1)
{
if(info=="Profit")
return(pt);
else
if(info=="Type")
return(ty);
}
}
}
return(0);
}


if(Consecutive&&Closed("Type")==OP_BUY&&Closed("Profit")<0)//Open Sell


if(Consecutive&&Closed("Type")==OP_SELL&&Closed("Profit")<0)//Open Buy

sabil
02-01-2021, 01:17 AM
مثال :


input bool Consecutive=true;


double Closed(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();


if(sy==Symbol()&&mn==MagicNo)
{
if(ty==type||type==-1)
{
if(info=="Profit")
return(pt);
else
if(info=="Type")
return(ty);
}
}
}
return(0);
}


if(Consecutive&&Closed("Type")==OP_BUY&&Closed("Profit")<0)//Open Sell


if(Consecutive&&Closed("Type")==OP_SELL&&Closed("Profit")<0)//Open Buy

شكراً ياغالي
Happy New Year

kira-h
02-01-2021, 06:23 PM
شكراً ياغالي
Happy New Year
العفو وبالتوفيق إن شاء الله

Ghassebd
21-01-2021, 07:53 PM
السلام عليكم احتاج مساعدة

في تعديل هذا الكود من thisyear to lastyear
احتاج ان يقرا الى السنة الماضية بدلا من الحالية فما هو التغير

اشكرك مقدما





int thisyear = TimeYear(TimeCurrent());

int lastyear = ?

elhelaly
22-01-2021, 04:31 AM
الاستاذ المحترم حسن كيرا تحيه طيبه وبعد

ارجو الافاده عن كيفيه اغلاق عدد معين من اللوتات لصفقات مختلفه

كمثال تم فتح 12 صفقه وليكن 7 منهم بيع و5 منهم شراء

اريع اغلاق عدد اللوتات عدد لوتات متساويه من البيع والشراء

مثلا لو اجمالى لوت الشراء 1 دولار واجمالى لوت البيع 1.2 دولار

اريد اغلاق مقدار نصف دولار من البيع ونصف دولار من الشراء

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

مع الشكر اخى الغالى

shivaa
22-01-2021, 06:34 AM
السلام عليكم
ممكن اعرف المؤشر الموجود فى المرفقات فكرته ايه
ممكن تشرح ليه كيف تكوين معلومات المؤشر
ممكن شرح الداله التاليه


input int period=22
//+------------------------------------------------------------------+
//| Calculate strength |
//+------------------------------------------------------------------+
double calculateStrength(string symbol,int shift)
{
double price1=0,price2=0;
double sum1=0,sum2=0;
int i;
switch(type)
{
case 1:
price1=iOpen(symbol,0,shift);
price2=iClose(symbol,0,shift);
break;
case 2:
for(i=0;i<period;i++) sum1+=iOpen(symbol,0,shift+i);
price1=sum1/period;
for(i=0;i<period;i++) sum2+=iClose(symbol,0,shift+i);
price2=sum2/period;
break;
}
return (price1 > 0 && price2 > 0) ? (price2 - price1)/price1 : 0;
}
اكون شاكر

elhelaly
22-01-2021, 04:59 PM
الاستاذ المحترم حسن كيرا تحيه طيبه وبعد

ارجو الافاده عن كيفيه اغلاق عدد معين من اللوتات لصفقات مختلفه

كمثال تم فتح 12 صفقه وليكن 7 منهم بيع و5 منهم شراء

اريع اغلاق عدد اللوتات عدد لوتات متساويه من البيع والشراء

مثلا لو اجمالى لوت الشراء 1 دولار واجمالى لوت البيع 1.2 دولار

اريد اغلاق مقدار نصف دولار من البيع ونصف دولار من الشراء

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

مع الشكر اخى الغالى

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

برجاء ارفاق الكود ولك جزيل الشكر

kira-h
22-01-2021, 07:48 PM
السلام عليكم احتاج مساعدة

في تعديل هذا الكود من thisyear to lastyear
احتاج ان يقرا الى السنة الماضية بدلا من الحالية فما هو التغير

اشكرك مقدما





int thisyear = TimeYear(TimeCurrent());

int lastyear = ?




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

datetime lastyear=StrToTime("2020.01.01");

kira-h
22-01-2021, 08:06 PM
السلام عليكم
ممكن اعرف المؤشر الموجود فى المرفقات فكرته ايه
ممكن تشرح ليه كيف تكوين معلومات المؤشر
ممكن شرح الداله التاليه


input int period=22
//+------------------------------------------------------------------+
//| Calculate strength |
//+------------------------------------------------------------------+
double calculateStrength(string symbol,int shift)
{
double price1=0,price2=0;
double sum1=0,sum2=0;
int i;
switch(type)
{
case 1:
price1=iOpen(symbol,0,shift);
price2=iClose(symbol,0,shift);
break;
case 2:
for(i=0;i<period;i++) sum1+=iOpen(symbol,0,shift+i);
price1=sum1/period;
for(i=0;i<period;i++) sum2+=iClose(symbol,0,shift+i);
price2=sum2/period;
break;
}
return (price1 > 0 && price2 > 0) ? (price2 - price1)/price1 : 0;
}
اكون شاكر
وعليكم السلام
هذا شرح مبسط لمكونات الدالة تلك :


double calculateStrength(string symbol,int shift)
{
double price1=0,price2=0;
double sum1=0,sum2=0;
int i;
switch(type)//الاختيار حسب الحالة
{
case 1://الحالة الأولى
price1=iOpen(symbol,0,shift);//سعر افتتاح الشمعة رقم شيفت
price2=iClose(symbol,0,shift);//سعر اغلاق الشمعة رقم شيفت
break;
case 2://الحالة الثانية
for(i=0; i<period; i++)
sum1+=iOpen(symbol,0,shift+i);//اجمالي اسعار الافتتاحات لعدد من الشموع بيريود
price1=sum1/period;//ناتج قيمة الاجمالي على عدد الشموع بيريود
for(i=0; i<period; i++)
sum2+=iClose(symbol,0,shift+i);//اجمالي اسعار الاغلاقات لعدد من الشموع بيريود
price2=sum2/period;////ناتج قيمة الاجمالي على عدد الشموع بيريود
break;
}
return (price1 > 0 && price2 > 0) ? (price2 - price1)/price1 : 0;//إذا ناتجي السعرين أكبر من الصفر يعود بناتج المعادلة تلك وإذا العكس يعود بالصفر
}


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

وطبعا المؤشر متعدد الأزواج بخانة منفصلة عن الشارت separate يضع بها ناتج كل زوج

shivaa
22-01-2021, 08:34 PM
وعليكم السلام
هذا شرح مبسط لمكونات الدالة تلك :


double calculateStrength(string symbol,int shift)
{
double price1=0,price2=0;
double sum1=0,sum2=0;
int i;
switch(type)//الاختيار حسب الحالة
{
case 1://الحالة الأولى
price1=iOpen(symbol,0,shift);//سعر افتتاح الشمعة رقم شيفت
price2=iClose(symbol,0,shift);//سعر اغلاق الشمعة رقم شيفت
break;
case 2://الحالة الثانية
for(i=0; i<period; i++)
sum1+=iOpen(symbol,0,shift+i);//اجمالي اسعار الافتتاحات لعدد من الشموع بيريود
price1=sum1/period;//ناتج قيمة الاجمالي على عدد الشموع بيريود
for(i=0; i<period; i++)
sum2+=iClose(symbol,0,shift+i);//اجمالي اسعار الاغلاقات لعدد من الشموع بيريود
price2=sum2/period;////ناتج قيمة الاجمالي على عدد الشموع بيريود
break;
}
return (price1 > 0 && price2 > 0) ? (price2 - price1)/price1 : 0;//إذا ناتجي السعرين أكبر من الصفر يعود بناتج المعادلة تلك وإذا العكس يعود بالصفر
}


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

وطبعا المؤشر متعدد الأزواج بخانة منفصلة عن الشارت separate يضع بها ناتج كل زوج

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

kira-h
22-01-2021, 09:00 PM
السلام عليكم


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

ارجو الافاده عن كيفيه اغلاق عدد معين من اللوتات لصفقات مختلفه

كمثال تم فتح 12 صفقه وليكن 7 منهم بيع و5 منهم شراء

اريع اغلاق عدد اللوتات عدد لوتات متساويه من البيع والشراء

مثلا لو اجمالى لوت الشراء 1 دولار واجمالى لوت البيع 1.2 دولار

اريد اغلاق مقدار نصف دولار من البيع ونصف دولار من الشراء

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

مع الشكر اخى الغالى
لا اعلم إن هذا ممكن برمجيا فلم اجد حل مناسب، لكن يمكنك استخدام دالة الكلوزباي CloseBy (إذا تدعمها الشركة) على ربح او تعادل او اي قيمة تريد، وفي نفس الوقت تربح نصف خسائر السبريد وممكن يتبقى صفقات مفتوحة بمثابة صافي اللوتات


void CloseByInProfit()
{
int t1=0,t2=0;
double p1=0,p2=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==OP_BUY&&t1==0)
{
t1=OrderTicket();
p1=OrderProfit();
}
if(OrderType()==OP_SELL&&t2==0)
{
t2=OrderTicket();
p2=OrderProfit();
}
}
}
if(t1>0&&t2>0&&(p1+p2)>=0)
{
bool r=OrderCloseBy(t1,t2);
}
}
}

kira-h
22-01-2021, 09:18 PM
السلام عليكم
شاكر لك
ولكن ممكن الشرح الا حضرتك عملته على الداله تعمله على النقط المهمه فى المؤشر
حتى يمكنى افهم التكوين كامل لانى حولت افهم المؤشر ولم يمكنى
المؤشر ثقيل جداااا على المنصه عاوز اعمل منه النقط الاساسيه فقط حتى يمكن تشغيله
هل المعادله السابق هل هى اساس المؤشر؟
لانى استخدمتها فى مؤشر من صنعى والنتائج لم تكن متساويه مع المؤشر بشكله كامل
مع العلم انى لم اضف اى شى فقط كمينت حتى اعرف النتائج متساويه ام لا ما هو السبب؟
اسف على كميه الكبيره من الاسئله
وعليكم السلام
الدالة الاساسية أو المعادلة هي تلك الدالة calculateStrength
أما بقية ما تراه من دوال بالمؤشر هي دوال رسومية ومصفوفات للأزواج وشروط تنظيمية لاسماء الأزواج... لا علاقة لها بمبدأ عمل المؤشر

kira-h
22-01-2021, 10:00 PM
ايضا استاذ حسن هل يمكن اغلاق الصفقات ذات الربح والخساره المتساويه بغض النظر عن حجم اللوت
كمثال صفقه بيع ربحت دولارين وصفقه شراء خساره دولارين اريد اغلاقهم هم فقط من بين كل الصفقات هل يمكن تنفيذ ذلك

برجاء ارفاق الكود ولك جزيل الشكر
كالتالي :



void CloseEqualHedges()
{
int buy=0,sell=0,ticket1=0,ticket2=0;
double profit1=0,lots1=0,profit2=0,lots2=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
bool select1=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderType()==OP_BUY)
{
profit1=OrderProfit()+OrderCommission()+OrderSwap( );
lots1=OrderLots();
ticket1=OrderTicket();
buy++;
}
}
for(int j=OrdersTotal()-1; j>=0; j--)
{
bool select2=OrderSelect(j,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderType()==OP_SELL)
{
profit2=OrderProfit()+OrderCommission()+OrderSwap( );
lots2=OrderLots();
ticket2=OrderTicket();
sell++;
}
}
if(buy>0&&sell>0&&((profit1>=0&&profit2<=0)||(profit1<=0&&profit2>=0))&&(profit1+profit2)>=0)
{
bool close1=OrderClose(ticket1,lots1,Ask,30);
bool close2=OrderClose(ticket2,lots2,Bid,30);
buy=0;
sell=0;
}
}

Ghassebd
22-01-2021, 11:11 PM
int firstyear = TimeYear(Time[pos]); int thisyear = TimeYear(TimeCurrent());
int year = thisyear - firstyear;
int yeardummy = year;

int theyear;

int yeartemp;

خطا بعد ان اضفت التعديل 2020.01.01
implicit conversion from 'string' to 'number'

الكود الاصلي كما في الاعلى
ققط اريد اضاقة

lastyear

مثل thisyear

kira-h
23-01-2021, 01:35 AM
int firstyear = TimeYear(Time[pos]); int thisyear = TimeYear(TimeCurrent());
int year = thisyear - firstyear;
int yeardummy = year;

int theyear;

int yeartemp;

خطا بعد ان اضفت التعديل 2020.01.01
implicit conversion from 'string' to 'number'

الكود الاصلي كما في الاعلى
ققط اريد اضاقة

lastyear

مثل thisyear
الكود سليم لكن انا فهمت شيء اخر من استفسارك
طيب بسيطة اخي


int lastyear = TimeYear(TimeCurrent()) - 1;

Hosny Sadek
23-01-2021, 03:37 PM
محتاج حد يتابع معايا عاوز اعمل اكسبيرت بمواصفات بسيطة. .
بس البداية ازاى .
انا ماعندىش اى خبرة عن عمل الاكسبيرتات اطلاقا

kira-h
23-01-2021, 08:10 PM
محتاج حد يتابع معايا عاوز اعمل اكسبيرت بمواصفات بسيطة. .
بس البداية ازاى .
انا ماعندىش اى خبرة عن عمل الاكسبيرتات اطلاقا
تم الرد بموضوعك اخي

Ghassebd
25-01-2021, 08:33 PM
الكود سليم لكن انا فهمت شيء اخر من استفسارك
طيب بسيطة اخي


int lastyear = TimeYear(TimeCurrent()) - 1;





اشكرك و

بارك الله فيك

تم واكتملت الداله

kira-h
25-01-2021, 11:26 PM
اشكرك و


بارك الله فيك


تم واكتملت الداله


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

Ghassebd
02-02-2021, 01:20 AM
int start()
{
if(data != 1) return(0);
double haOpen, haHigh, haLow, haClose;
if(Bars<=10) return(0);
ExtCountedBars=IndicatorCounted();
//---- check for possible errors
if (ExtCountedBars<0) return(-1);
//---- last counted bar will be recounted
if (ExtCountedBars>0) ExtCountedBars--;
int pos=Bars-ExtCountedBars-1;
int i;

datetime startmonth = Time[pos];
datetime endmonth;
datetime timewick;


int firstyear = TimeYear(Time[pos]);
int thisyear = TimeYear(TimeCurrent()) ;
int year = thisyear - firstyear;
int yeardummy = year;

int theyear;
int yeartemp;



for(i=thisyear; i>= firstyear; i--)
{
ObjectCreate("Yearly Body"+i, OBJ_HLINE, 0, 0,0, 0,0);
ObjectCreate("Yearly Up"+i, OBJ_HLINE, 0, 0,0, 0,0);
ObjectCreate("Yearly Down"+i, OBJ_HLINE, 0, 0,0, 0,0);
}


while(pos>=1)
{
theyear = TimeYear(Time[pos]);
haOpen = Open[pos];
haClose = haOpen;
haHigh = haOpen;
haLow = haOpen;
startmonth = Time[pos];
timewick = Time[pos] + 7 * 60 * 43200;


while(theyear == TimeYear(Time[pos]))
{
haHigh = MathMax(haHigh, High[pos]);
haLow = MathMin(haLow, Low[pos]) ;
haClose = Close[pos];
yeartemp = theyear;
endmonth = Time[pos];
pos--;
}

ObjectSet("Yearly Body"+yeartemp, OBJPROP_TIME1, startmonth);
ObjectSet("Yearly Body"+yeartemp, OBJPROP_PRICE1, haOpen);
ObjectSet("Yearly Body"+yeartemp, OBJPROP_TIME2, endmonth);
ObjectSet("Yearly Body"+yeartemp, OBJPROP_PRICE2, haClose);
ObjectSet("Yearly Body"+yeartemp, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet("Yearly Body"+yeartemp, OBJPROP_WIDTH, 1);

ObjectSet("Yearly Up"+yeartemp, OBJPROP_TIME1, timewick);
ObjectSet("Yearly Up"+yeartemp, OBJPROP_PRICE1, haHigh);
ObjectSet("Yearly Up"+yeartemp, OBJPROP_TIME2, timewick);
ObjectSet("Yearly Up"+yeartemp, OBJPROP_PRICE2, MathMax(haOpen,haClose));
ObjectSet("Yearly Up"+yeartemp, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet("Yearly Up"+yeartemp, OBJPROP_WIDTH, 1);
ObjectSet("Yearly Up"+yeartemp, OBJPROP_RAY, False);

ObjectSet("Yearly Down"+yeartemp, OBJPROP_TIME1, timewick);
ObjectSet("Yearly Down"+yeartemp, OBJPROP_PRICE1, MathMin(haOpen,haClose));
ObjectSet("Yearly Down"+yeartemp, OBJPROP_TIME2, timewick);
ObjectSet("Yearly Down"+yeartemp, OBJPROP_PRICE2, haLow);
ObjectSet("Yearly Down"+yeartemp, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet("Yearly Down"+yeartemp, OBJPROP_WIDTH, 1);
ObjectSet("Yearly Down"+yeartemp, OBJPROP_RAY, False);




if(haOpen < haClose)//UP BAR
{
ObjectSet("Yearly Body" +yeartemp, OBJPROP_COLOR, colorUpo);
ObjectSet("Yearly Up"+yeartemp, OBJPROP_COLOR, colorUp);
ObjectSet("Yearly Down"+yeartemp, OBJPROP_COLOR, colorDown);
}
else
{
ObjectSet("Yearly Body" +yeartemp, OBJPROP_COLOR, colorDownc);
ObjectSet("Yearly Up"+yeartemp, OBJPROP_COLOR, colorUp);
ObjectSet("Yearly Down"+yeartemp, OBJPROP_COLOR, colorDown);
}


yeardummy--;
}
//----
data = 2;
return(0);
}
//+------------------------------------------------------------------+


عدلت على الكود لبعكي خطوط بدلا من جسم شمعة......هل التعدبل صحبح?



// -------------------ALERT--------
datetime haHigh_Time, haLow_Time ,haClose_Time ,time,alert_Time ;
alert=true;







if((Bid) ==haHigh) if(alert == true && haHigh_Time<Time[0]) {haHigh_Time=Time[0]; Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," haHigh "+yeartemp+" ---- ",Symbol(),"", Bid); };
if((Bid) == haLow)if(alert == true && haLow_Time<Time[0]) {haLow_Time=Time[0]; Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," haLow "+yeartemp+" ---- ",Symbol()," ", Bid);};
if((Bid) ==haClose) if(alert == true && haClose_Time<Time[0]) {haClose_Time=Time[0]; Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," haClose "+yeartemp+" ---- ",Symbol(),"", Bid); };





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


25740

Ghassebd
11-02-2021, 09:27 PM
السلام عليكم احتاج مساعدة في تعديل هذا كود التنبية اعلاه

kira-h
16-02-2021, 06:14 PM
السلام عليكم عزيزنا الكريم الاخ كيرا
تحيه طيبه

رجاء محتاج مساعدتك في كود Min Distance لاضافته لاكسبرت
لفتح صفقه بعد مسافه معينه من النقاط بعد الصفقه الاولي
ولكم جزيل الشكر

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


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


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


double LastPrice(int type=-1)
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double op=OrderOpenPrice();
if(sy==Symbol()&&mn==MagicNo&&(ty==type||type==-1))
{
return(op);
}
}
return(0);
}


والشروط كالتالي :


if(MinDistance>0&&Orderscnt(OP_BUY)>0&&MathAbs(Ask-LastPrice(OP_BUY))>=MinDistance*point)//BUY
if(MinDistance>0&&Orderscnt(OP_SELL)>0&&MathAbs(Bid-LastPrice(OP_SELL))>=MinDistance*point)//SELL

أبو عمر جلال
17-02-2021, 12:01 AM
وعليكم السلام :
سنحتاج إلى دالتين :
دالة عدد الصفقات المفتوحة حسب النوع كالتالي :


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


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


double LastPrice(int type=-1)
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double op=OrderOpenPrice();
if(sy==Symbol()&&mn==MagicNo&&(ty==type||type==-1))
{
return(op);
}
}
return(0);
}


والشروط كالتالي :


if(MinDistance>0&&Orderscnt(OP_BUY)>0&&MathAbs(Ask-LastPrice(OP_BUY))>=MinDistance*point)//BUY
if(MinDistance>0&&Orderscnt(OP_SELL)>0&&MathAbs(Bid-LastPrice(OP_SELL))>=MinDistance*point)//SELL


اشكرك يا سيد يا محترم
تحياتي

أبو عمر جلال
17-02-2021, 04:58 AM
السيد الكريم الاخ كيرا
لك كل الشكر والتقدير

kira-h
17-02-2021, 04:30 PM
اشكرك يا سيد يا محترم
تحياتي


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

Ghassebd
19-02-2021, 12:14 AM
السلام عليكم
احتاج مساعدة في تعديل هذا كود للمشاركة

https://www.fxprg.com/vb/showthread.php?t=31457&p=924351&viewfull=1#post924351


وارجو المعذرة بتكرار طلبي لكن للضرورة

kira-h
19-02-2021, 05:37 PM
السلام عليكم
احتاج مساعدة في تعديل هذا كود للمشاركة

https://www.fxprg.com/vb/showthread.php?t=31457&p=924351&viewfull=1#post924351


وارجو المعذرة بتكرار طلبي لكن للضرورة


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



if((Close[0]>=haHigh&&Close[1]<haHigh)||(Close[0]<=haHigh&&Close[1]>haHigh))
{
if(alert == true && haHigh_Time!=Time[0])
{
haHigh_Time=Time[0];
Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," haHigh "+yeartemp+" ---- ",Symbol(),"", Bid);
}
}


if((Close[0]>=haLow&&Close[1]<haLow)||(Close[0]<=haLow&&Close[1]>haLow))
{
if(alert == true && haLow_Time!=Time[0])
{
haLow_Time=Time[0];
Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," haLow "+yeartemp+" ---- ",Symbol()," ", Bid);
}
}


لأن مقارنة سعرين بالتكة (وحتى نقطيا) غالبا لن يتحقق أو نادر ، يعني شرط التساوي غير منطقي في المقارنة بين الأسعار بالواقع

Waddah
20-02-2021, 02:06 PM
السلام عليكم أستاذ
أقوم بعمل إكسبرت لإدارة رأس المال يعتمد في تحديد اللوت على أرباح الصفقة السابقة ( سميت متغير كعداد للصفقات الرابحة - والصفقة الخاسرة تنقص قيمة هذا العداد 1 ) ظهرت عندي الحالات التالية
الحالة الأولى قيمة العداد = 0 (لا يوجد فيها مشكلة عندي في الكود )
الحالة الثانية قيمة العداد أكبر من الصفر والصفقة المغلقة الأخيرة رابحة ( أيضا لا يوجد مشكلة عندي في الكود )

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

العداد كان برقم 3 .... آخر صفقة مغلقة كانت خاسرة : يصبح
العداد يصبح 2 .... في حال كانت الصفقة السابقة رابحة يعيد قيمة الربح .... في حال كانت خاسرة يكمل
العداد يصبح 1 ...في حال كانت الصفقة السابقة رابحة يعيد قيمة الربح .... في حال كانت خاسرة يكمل
العداد يصبح 0 ..... يأخذ اللوت الذي تشمله الحالة 1


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

kira-h
21-02-2021, 10:21 PM
السلام عليكم أستاذ
أقوم بعمل إكسبرت لإدارة رأس المال يعتمد في تحديد اللوت على أرباح الصفقة السابقة ( سميت متغير كعداد للصفقات الرابحة - والصفقة الخاسرة تنقص قيمة هذا العداد 1 ) ظهرت عندي الحالات التالية
الحالة الأولى قيمة العداد = 0 (لا يوجد فيها مشكلة عندي في الكود )
الحالة الثانية قيمة العداد أكبر من الصفر والصفقة المغلقة الأخيرة رابحة ( أيضا لا يوجد مشكلة عندي في الكود )

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

العداد كان برقم 3 .... آخر صفقة مغلقة كانت خاسرة : يصبح
العداد يصبح 2 .... في حال كانت الصفقة السابقة رابحة يعيد قيمة الربح .... في حال كانت خاسرة يكمل
العداد يصبح 1 ...في حال كانت الصفقة السابقة رابحة يعيد قيمة الربح .... في حال كانت خاسرة يكمل
العداد يصبح 0 ..... يأخذ اللوت الذي تشمله الحالة 1


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

Ghassebd
22-02-2021, 12:04 AM
[QUOTE=kira-h;924803]وعليكم السلام
الصحيح كالتالي :



if((Close[0]>=haHigh&&Close[1]<haHigh)||(Close[0]<=haHigh&&Close[1]>haHigh))
{
if(alert == true && haHigh_Time!=Time[0])
{
haHigh_Time=Time[0];
Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," haHigh "+yeartemp+" ---- ",Symbol(),"", Bid);
}
}


if((Close[0]>=haLow&&Close[1]<haLow)||(Close[0]<=haLow&&Close[1]>haLow))
{
if(alert == true && haLow_Time!=Time[0])
{
haLow_Time=Time[0];
Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," haLow "+yeartemp+" ---- ",Symbol()," ", Bid);
}
}


اشكرك و بارك الله فيك

Waddah
22-02-2021, 09:03 AM
[QUOTE=kira-h;924880]وعليكم السلام
لم افهم الشرح تماما لكن ارفق الكود للمراجعة[/QUOTE

تحياتي أستاذ الكود كما كتبته سينفذ الخطوات التالية :
1- تقسيم رأس المال إلى 60 قسم ووضع عداد للصفقات يبدأ من الصفر كالتالي :


static double Balance;static int step=0;double Parts = 60;Balance = AccountBalance(); Part_Amount = MathFloor(Balance /Parts);;

2-
أصبح رأس المال مقسم ل 60 جزء قيمة كل جزء هي (بفرض رأس المال 1000$ ستكون قيمة الجزء الواحد 16$)

3- عند بداية عمل الإكسبرت تكون قيمة العداد step هي صفر

4- في أول صفقة تكون قيمة اللوت هي قيمة الجزء الواحد مقسومة على عدد نقاط الستوب - وبعد كود فتح الصفقة نزيد العداد 1




bool B1 = OrderSend(Symbol(),OP_BUY,NormalizeDouble((Part_Am ount/SLP)/10,2),Ask,20,SL,TP,"",MagicNo,0,Blue);step = step +1;




5- المشكلة في الصفقات التالية لأن قيمة اللوت تحدد من ربح آخر صفقة مقسومة على نقاط الستوب - عملت الدالة التالية لتحديد حجم اللوت وفيها الحالات التالية :
الأولى : step يساوي الصفر ( يكون اللوت قيمة الجزء على نقط الستوب )
الثانية step لا يساوي الصفر و آخر صفقة مغلقة رابحة ( يكون اللوت هو ربح آخر صفقة مقسوم على نقط الستوب )
الثالثة step لا يساوي الصفر و آخر صفقة مغلقة كانت خاسرة (هنا المشكلة ) يجب أن ينفذ الإكسبرت مايلي :
أولا - إنقاص step واحد
ثانيا : فحص ال step إن أصبح صفر تكون قيمة اللوت : جزء رأس المال مقسوم على نقط الستوب مثل الحالة الأولى
ثالثا : إن كان ال step لم يصبح صفر ... ينظر للصفقة المغلقة الثانية إن كانت رابحة : يكون اللوت هو قيمة ربح الصفقة على نقاط الستوب - إن كانت خاسرة يعيد وينقص ال step ويفحص ربح الصفقة السابقة .... حتى يصل لصفقة رابحة أو يصل ال step للصفر (الكود الذي كتبته كالتالي :





double GetLotSize(){double Lotsize;
if (step == 0){Lotsize = NormalizeDouble((Part_Amount/SLP)/10,2);}
if (step != 0 && LastOrder("Profit")>0) {Lotsize = NormalizeDouble((LastOrder("Profit")/SLP)/10,2);}
if (step !=0 && LastOrder(("Profit")<0) {//??????}


return(Lotsize);}






مع جزيل الشكر

kira-h
22-02-2021, 10:28 PM
تحياتي أستاذ الكود كما كتبته سينفذ الخطوات التالية :
1- تقسيم رأس المال إلى 60 قسم ووضع عداد للصفقات يبدأ من الصفر كالتالي :


static double Balance;static int step=0;double Parts = 60;Balance = AccountBalance(); Part_Amount = MathFloor(Balance /Parts);;

2-
أصبح رأس المال مقسم ل 60 جزء قيمة كل جزء هي (بفرض رأس المال 1000$ ستكون قيمة الجزء الواحد 16$)

3- عند بداية عمل الإكسبرت تكون قيمة العداد step هي صفر

4- في أول صفقة تكون قيمة اللوت هي قيمة الجزء الواحد مقسومة على عدد نقاط الستوب - وبعد كود فتح الصفقة نزيد العداد 1




bool B1 = OrderSend(Symbol(),OP_BUY,NormalizeDouble((Part_Am ount/SLP)/10,2),Ask,20,SL,TP,"",MagicNo,0,Blue);step = step +1;




5- المشكلة في الصفقات التالية لأن قيمة اللوت تحدد من ربح آخر صفقة مقسومة على نقاط الستوب - عملت الدالة التالية لتحديد حجم اللوت وفيها الحالات التالية :
الأولى : step يساوي الصفر ( يكون اللوت قيمة الجزء على نقط الستوب )
الثانية step لا يساوي الصفر و آخر صفقة مغلقة رابحة ( يكون اللوت هو ربح آخر صفقة مقسوم على نقط الستوب )
الثالثة step لا يساوي الصفر و آخر صفقة مغلقة كانت خاسرة (هنا المشكلة ) يجب أن ينفذ الإكسبرت مايلي :
أولا - إنقاص step واحد
ثانيا : فحص ال step إن أصبح صفر تكون قيمة اللوت : جزء رأس المال مقسوم على نقط الستوب مثل الحالة الأولى
ثالثا : إن كان ال step لم يصبح صفر ... ينظر للصفقة المغلقة الثانية إن كانت رابحة : يكون اللوت هو قيمة ربح الصفقة على نقاط الستوب - إن كانت خاسرة يعيد وينقص ال step ويفحص ربح الصفقة السابقة .... حتى يصل لصفقة رابحة أو يصل ال step للصفر (الكود الذي كتبته كالتالي :





double GetLotSize(){double Lotsize;
if (step == 0){Lotsize = NormalizeDouble((Part_Amount/SLP)/10,2);}
if (step != 0 && LastOrder("Profit")>0) {Lotsize = NormalizeDouble((LastOrder("Profit")/SLP)/10,2);}
if (step !=0 && LastOrder(("Profit")<0) {//??????}


return(Lotsize);}






مع جزيل الشكر

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


int B1 = OrderSend(Symbol(),OP_BUY,NormalizeDouble((Part_Am ount/SLP)/10,2),Ask,20,SL,TP,"",MagicNo,0,Blue);
if(B1>0)
step = step +1;


double GetLotSize()
{
double Lotsize=0;


if(step > 0)
{
if(LastOrder("Profit")>0)
Lotsize = (LastOrder("Profit")/SLP)/10;

if(LastOrder("Profit")<0)
{
step=step-1;
if(step>0)
Lotsize = (LastOrder("Profit")/SLP)/10;
}
}
else
Lotsize = (Part_Amount/SLP)/10;
return(NormalizeDouble(Lotsize,2));
}

Waddah
23-02-2021, 08:03 AM
جرب الكود التالي :


int B1 = OrderSend(Symbol(),OP_BUY,NormalizeDouble((Part_Am ount/SLP)/10,2),Ask,20,SL,TP,"",MagicNo,0,Blue);
if(B1>0)
step = step +1;


double GetLotSize()
{
double Lotsize=0;


if(step > 0)
{
if(LastOrder("Profit")>0)
Lotsize = (LastOrder("Profit")/SLP)/10;

if(LastOrder("Profit")<0)
{
step=step-1;
if(step>0)
Lotsize = (LastOrder("Profit")/SLP)/10;
}
}
else
Lotsize = (Part_Amount/SLP)/10;
return(NormalizeDouble(Lotsize,2));
}


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

kira-h
23-02-2021, 08:40 PM
تحياتي استاذ .......نفس المشكلة وهي احتمال وجود صفقتين خاسرتين متتاليتين أو أكثر .......فكرت بحل آخر
ممكن المساعدة بالكود الذي يعطي ربح آخر صفقة مغلقة رابحة ؟
الكود السابق بناء على طلبك الأخير الذي لا يوضح كل الاحتمالات! ولم افهم المغزى من الكود
الكود مرة اخرى كالتالي بناء على الشرح خطوة خطوة وأراه غير منطقي :


double SecondProfit()
{
int cnt=0;
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
cnt++;
if(cnt>=2)
return(OrderProfit());
}
}
return(0);
}


double GetLotSize()
{
double Lotsize=0;


if(step > 0)
{
if(LastOrder("Profit")>=0)
Lotsize = (LastOrder("Profit")/SLP)/10;


if(LastOrder("Profit")<0)
{
step=step-1;
if(step>0)
{
if(SecondProfit()>=0)
Lotsize = (LastOrder("Profit")/SLP)/10;
else
return(GetLotSize());
}
}
else
Lotsize = (Part_Amount/SLP)/10;
}
return(NormalizeDouble(Lotsize,2));
}


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


double LastProfit(int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();

if(sy==Symbol()&&mn==MagicNo&&pt>0&&(ty==type||type==-1))
{
return(pt);
}
}
return(0);
}

Waddah
24-02-2021, 08:30 AM
الكود السابق بناء على طلبك الأخير الذي لا يوضح كل الاحتمالات! ولم افهم المغزى من الكود
الكود مرة اخرى كالتالي بناء على الشرح خطوة خطوة وأراه غير منطقي :


double SecondProfit()
{
int cnt=0;
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
cnt++;
if(cnt>=2)
return(OrderProfit());
}
}
return(0);
}


double GetLotSize()
{
double Lotsize=0;


if(step > 0)
{
if(LastOrder("Profit")>=0)
Lotsize = (LastOrder("Profit")/SLP)/10;


if(LastOrder("Profit")<0)
{
step=step-1;
if(step>0)
{
if(SecondProfit()>=0)
Lotsize = (LastOrder("Profit")/SLP)/10;
else
return(GetLotSize());
}
}
else
Lotsize = (Part_Amount/SLP)/10;
}
return(NormalizeDouble(Lotsize,2));
}


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


double LastProfit(int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();

if(sy==Symbol()&&mn==MagicNo&&pt>0&&(ty==type||type==-1))
{
return(pt);
}
}
return(0);
}





تحياتي أستاذ .... تداخلت معي الكودات ...أرجو منك سعة الصدر وقراءة الملف المرفق (صفحة واحدة ) ليتوضح لك المطلوب مع جزيل الشكر والإمتنان

أبو عمر جلال
24-02-2021, 04:39 PM
السلام عليكم ورحمة الله وبركاته
تحيه ياغالي

الرجاء المساعده بكود حمايه للاكسبرت بالعمل علي سيرفر شركه بعينها

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

وشكرا جزيلا

kira-h
24-02-2021, 11:05 PM
السلام عليكم ورحمة الله وبركاته
تحيه ياغالي

الرجاء المساعده بكود حمايه للاكسبرت بالعمل علي سيرفر شركه بعينها

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

وشكرا جزيلا

وعليكم السلام
استخدم الوظيفة AccountServer ببدلة الدالة الرئيسية بشرط اذا كان يخالف اسم السيرفر لا يكمل قراءة بقية الكود.
مثال :


void OnTick()
{
if(AccountServer()!="BDSwissGlobal-Demo01")return;

//بقية الكود
}


لا يوجد كود يمنع الكوبي!

kira-h
24-02-2021, 11:17 PM
تحياتي أستاذ .... تداخلت معي الكودات ...أرجو منك سعة الصدر وقراءة الملف المرفق (صفحة واحدة ) ليتوضح لك المطلوب مع جزيل الشكر والإمتنان

للاسف لم اجد حل مناسب

أبو عمر جلال
25-02-2021, 12:04 AM
وعليكم السلام
استخدم الوظيفة AccountServer ببدلة الدالة الرئيسية بشرط اذا كان يخالف اسم السيرفر لا يكمل قراءة بقية الكود.
مثال :


void OnTick()
{
if(AccountServer()!="BDSwissGlobal-Demo01")return;

//بقية الكود
}


لا يوجد كود يمنع الكوبي!

اشكرك
تحياتي وتقديري

أبو عمر جلال
25-02-2021, 12:20 AM
وعليكم السلام :
سنحتاج إلى دالتين :
دالة عدد الصفقات المفتوحة حسب النوع كالتالي :


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


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


double LastPrice(int type=-1)
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double op=OrderOpenPrice();
if(sy==Symbol()&&mn==MagicNo&&(ty==type||type==-1))
{
return(op);
}
}
return(0);
}


والشروط كالتالي :


if(MinDistance>0&&Orderscnt(OP_BUY)>0&&MathAbs(Ask-LastPrice(OP_BUY))>=MinDistance*point)//BUY
if(MinDistance>0&&Orderscnt(OP_SELL)>0&&MathAbs(Bid-LastPrice(OP_SELL))>=MinDistance*point)//SELL


جربت كتير ولكن للاسف في شئ خطا مع انه لا يظهر في الجورنال اي خطا ولكن لا تغيير ملحوظ يحدث عن تغيير قيمه المسافه

kira-h
25-02-2021, 12:23 AM
اشكرك
تحياتي وتقديري
العفو أخي


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

أبو عمر جلال
25-02-2021, 12:41 AM
العفو أخي


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

هجرب محاوله اخير واذا تعثرت هبعته عزيزي واشكرك

kira-h
25-02-2021, 01:54 AM
هجرب محاوله اخير واذا تعثرت هبعته عزيزي واشكرك
بالتوفيق إن شاء الله

أبو عمر جلال
25-02-2021, 02:04 AM
بالتوفيق إن شاء الله

جميعا يارب

Waddah
25-02-2021, 07:52 AM
للاسف لم اجد حل مناسب


هل يوجد كود يعطي ربح آخر صفقة مغلقة رابحة ( وليس ربح آخر صفقة مغلقة ) ..... قد تكون آخر صفقة مغلقة خاسرة ....لكن التي قبلها رابحة (هل يمكن إعادة ربحها )؟

kira-h
25-02-2021, 05:52 PM
هل يوجد كود يعطي ربح آخر صفقة مغلقة رابحة ( وليس ربح آخر صفقة مغلقة ) ..... قد تكون آخر صفقة مغلقة خاسرة ....لكن التي قبلها رابحة (هل يمكن إعادة ربحها )؟
لمعرفة ربح آخر صفقة رابحة مغلقة فالدالة كالتالي:


double LastProfit(int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();

if(sy==Symbol()&&mn==MagicNo&&pt>0&&(ty==type||type==-1))
{
return(pt);
}
}
return(0);
}

Waddah
25-02-2021, 07:18 PM
لمعرفة ربح آخر صفقة رابحة مغلقة فالدالة كالتالي:


double LastProfit(int type=-1)
{



for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();

if(sy==Symbol()&&mn==MagicNo&&pt>0&&(ty==type||type==-1))
{
return(pt);
}
}
return(0);
}



مشكور جدا جدا

kira-h
25-02-2021, 09:19 PM
مشكور جدا جدا
العفو أخي الكريم

ابو سمر
03-03-2021, 09:56 PM
السلام عليكم ورحمة الله وبركاته
عملت مصفوفه لحساب الفرق بين افتتاح واغلاق شمعه تحدد بخط على الشارت
كما بالصوره المرفقه
الخط الاصفر يحدد رقم الشمعه المطلوب حساب الفرق بين الافتتاح والاغلاق لجميع الازواج
اللمطلوب طريقة تلوين المربع الذى به ارقام متشابهه كما موضح بالصوره
وان امكن تغيير الاوان حسب كل مجموعه بنفس القيمه
مرفق صوره والمؤشر المطلوب التعديل عليه

Ghassebd
05-03-2021, 02:41 PM
السلام عليكم ورحمة الله وبركاته
عندي نافذتين لنفس زوج العملات ...
محتاج مساعدة... طريقة لتمييز اوامر البيع والشراء لكل نافذة في مستطيل ال terminal اسفل الشارت ويا ليت باللوان

MT4 terminal color change ..actual terminal not on chart

واشكرك مقدما

kira-h
05-03-2021, 06:08 PM
السلام عليكم ورحمة الله وبركاته
عندي نافذتين لنفس زوج العملات ...
محتاج مساعدة... طريقة لتمييز اوامر البيع والشراء لكل نافذة في مستطيل ال terminal اسفل الشارت ويا ليت باللوان

MT4 terminal color change ..actual terminal not on chart

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

Ghassebd
05-03-2021, 07:30 PM
اشكرك لكن ما type ما تحل المشكلة لانها ترتب sell --buy
اشكرك مره اخرى

kira-h
06-03-2021, 03:22 PM
اشكرك لكن ما type ما تحل المشكلة لانها ترتب sell --buy
اشكرك مره اخرى
العفو
هذا المتاح بمنصة المتاتريدر

Amr
06-03-2021, 10:22 PM
السلام عليكم ورحمة الله وبركاته

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

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

واذا حدث تغيير ببيانات المصدر الخارجي ، متى يستقبلها الاكسبيرت ليتعامل على أساسها

وجزاكم الله كل خير

kira-h
07-03-2021, 05:27 PM
السلام عليكم ورحمة الله وبركاته

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

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

واذا حدث تغيير ببيانات المصدر الخارجي ، متى يستقبلها الاكسبيرت ليتعامل على أساسها

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

Amr
07-03-2021, 10:15 PM
وعليكم السلام
نعم ممكن بلغة أخرى مثل السي
بقية الاسئلة ليست من اختصاصي فتعاملي مع المنصة فقط بدون تدخل خارجي

شكرا لك أخي وجزاك الله كل خير

kira-h
07-03-2021, 11:50 PM
شكرا لك أخي وجزاك الله كل خير
العفو أخي الكريم

Amr
15-03-2021, 09:36 PM
السلام عليكم ورحمة الله وبركاته

اذا فعلت اكسبيرت على زوجين ، زوج بماجيك نمبر 0 وزوج بماجيك نمبر 1

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

المشكلة بالزوج ذات الماجيك نمبر 1 لانه لا يتفاعل مع صفقاتي اليدوية على الزوج

فهل هناك حل برمجي لتلك النقطة

شكرا جزيلا

kira-h
16-03-2021, 12:36 AM
السلام عليكم ورحمة الله وبركاته

اذا فعلت اكسبيرت على زوجين ، زوج بماجيك نمبر 0 وزوج بماجيك نمبر 1

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

المشكلة بالزوج ذات الماجيك نمبر 1 لانه لا يتفاعل مع صفقاتي اليدوية على الزوج

فهل هناك حل برمجي لتلك النقطة

شكرا جزيلا
وعليكم السلام
لا يوجد حل آخر إلا بجعل الماجك نمبر 0 وإلا فيجب اضافة شروط أخرى خاصة بالماجك نمبر (0) ضمن عمل الاكسبيرت، لكن هنا قد يتعارض مع اي شارت آخر لنفس الزوج!
باختصار إذا لا يوجد تكرار للازواج بالشارتات فقم بحذف الماجك نمبر نهائيا من الاكسبيرت
حتى يستطيع التعامل مع اي صفقة دون شرط الماجك نمبر مهما كان سابقا

Waddah
17-03-2021, 11:40 PM
السلام عليكم أستاذ ..... لو سمحت ماهو الكود الذي يعيد رقم الشمعة التي إغلاقها يساوي إغلاق الشمعة 1 ..... يعني يبحث في الشموع السابقة للشمعة 1 على الشارت ويعيد رقم الشمعة التي إغلاقها يساوي إغلاق الشمعة 1 ................مع جزيل الشكر

kira-h
18-03-2021, 12:05 AM
السلام عليكم أستاذ ..... لو سمحت ماهو الكود الذي يعيد رقم الشمعة التي إغلاقها يساوي إغلاق الشمعة 1 ..... يعني يبحث في الشموع السابقة للشمعة 1 على الشارت ويعيد رقم الشمعة التي إغلاقها يساوي إغلاق الشمعة 1 ................مع جزيل الشكر

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


int BarEq()
{
for(int i=2; i<Bars-1; i++)
{
if(Close[i]==Close[1])
return(i);
}
return(0);
}

Amr
19-03-2021, 01:02 AM
وعليكم السلام
لا يوجد حل آخر إلا بجعل الماجك نمبر 0 وإلا فيجب اضافة شروط أخرى خاصة بالماجك نمبر (0) ضمن عمل الاكسبيرت، لكن هنا قد يتعارض مع اي شارت آخر لنفس الزوج!
باختصار إذا لا يوجد تكرار للازواج بالشارتات فقم بحذف الماجك نمبر نهائيا من الاكسبيرت
حتى يستطيع التعامل مع اي صفقة دون شرط الماجك نمبر مهما كان سابقا

شكرا جزيلا على الرد والاهتمام

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

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

kira-h
19-03-2021, 02:05 AM
شكرا جزيلا على الرد والاهتمام

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

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

نعم سيغلق صفقات كل زوج حقق الربح الاجمالي حتى لو يوجد شارتات مكررة لنفس الزوج،
الاكسبيرت بدون ماجك نمبر لا يزال يستطيع التمييز بين الازواج من خلال اسمائها eurusd gbpusd... وهكذا... ولكن لن يميز الشارتات المكررة لنفس الزوج فهذا دور الماجك نمبر
طبعا كل هذا اذا كان شرط اسم الزوج مستخدم بالدوال والشروط بالوظيفة OrderSymbol

shivaa
20-03-2021, 04:55 AM
السلام عليكم
ممكن مساعده فى كتابه داله
عندى عدد من الصفقات مثال 10 صفقات شراء
عاوزاذا فتح صفقه بيع يغلق اكبر رابح فى صفقات شراء
اكون شاكر

sabil
20-03-2021, 08:42 AM
اخي حسن
عملت اكسبرت يتاجر ع خطوط ترند برسمها يدوي
لكنه لا يعمل اطلاقاً حيث يمر السعر اعلى واسفل الخط ويتجاهله تماما دون ان يفتح صفقات
علماً بأني سميت الخطوط كما ف دالة الاكسبرت كالتالي :

double Upline_Trend=ObjectGet("Upline_Trend",OBJPROP_PRICE1);
double Downline_Trend=ObjectGet("Downline_Trend",OBJPROP_PRICE1);

سميت الخط العلوي Downline_Trend والسفلي Upline_Trend


L1=iLow(Symbol(),0,1);
H1=iHigh(Symbol(),0,1);
C1=iClose(Symbol(),0,1);



وشروط الدخول كالتالي :
الشراء

Downline_Trend>0&&L1<=Downline_Trend&&C1>Downline_Trend

البيع

Upline_Trend>0&&H1>=Upline_Trend&&C1<Upline_Trend


ما الخطأ هنا؟
لا يوجد اخطاء ف الجورنال
ارجو التعديل

kira-h
21-03-2021, 12:14 AM
السلام عليكم
ممكن مساعده فى كتابه داله
عندى عدد من الصفقات مثال 10 صفقات شراء
عاوزاذا فتح صفقه بيع يغلق اكبر رابح فى صفقات شراء
اكون شاكر

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


int HighestTK(int type)
{
double pt=0;
int tk=0;
for(int cnt=0; cnt<OrdersTotal(); cnt++)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==type)
{
if(OrderProfit()>pt)
{
pt=OrderProfit();
tk=OrderTicket();
}
}
}
}
return(tk);
}




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


void CloseOrder(int ticket,int type)
{
bool select,close;
for(int i=OrdersTotal()-1; i>=0; i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tt=OrdersTotal(),
tk=OrderTicket(),
ty=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots();


if(tt>0&&sy==Symbol()&&mn==MagicNo&&tk==ticket&&ty==type)
{
if(ty==OP_BUY)
{
close=OrderClose(ticket,lo,Bid,30);
break;
return;
}
if(ty==OP_SELL)
{
close=OrderClose(ticket,lo,Ask,30);
break;
return;
}
}
}
}


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


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


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


int tk=OrderSend(Symbol(),OP_BUY,Lots,Ask,5*Q,0,0,"Kira-h",MagicNo,0,Green);
if(tk>0)
{
if(Orderscnt(OP_SELL)>=10)CloseOrder(HighestTK(OP_SELL),OP_SELL);
return;
}

kira-h
21-03-2021, 12:25 AM
اخي حسن
عملت اكسبرت يتاجر ع خطوط ترند برسمها يدوي
لكنه لا يعمل اطلاقاً حيث يمر السعر اعلى واسفل الخط ويتجاهله تماما دون ان يفتح صفقات
علماً بأني سميت الخطوط كما ف دالة الاكسبرت كالتالي :

double Upline_Trend=ObjectGet("Upline_Trend",OBJPROP_PRICE1);
double Downline_Trend=ObjectGet("Downline_Trend",OBJPROP_PRICE1);

سميت الخط العلوي Downline_Trend والسفلي Upline_Trend


L1=iLow(Symbol(),0,1);
H1=iHigh(Symbol(),0,1);
C1=iClose(Symbol(),0,1);



وشروط الدخول كالتالي :
الشراء

Downline_Trend>0&&L1<=Downline_Trend&&C1>Downline_Trend

البيع

Upline_Trend>0&&H1>=Upline_Trend&&C1<Upline_Trend


ما الخطأ هنا؟
لا يوجد اخطاء ف الجورنال
ارجو التعديل
السلام عليكم
الترند عبارة عن نقطتين والوظيفة ObjectGet ستتعرف فقط عليهما وليس على كل نقطة منه
لمعرفة اي نقطة من الترند استخدم الوظيفة ObjectGetValueByShift
مثال لمعرفة قيمة الترند عند الشمعة 1:


double Upline_Trend1=ObjectGetValueByShift("Upline_Trend",1);
double Downline_Trend1=ObjectGetValueByShift("Downline_Trend",1);


وقيمة الترند عند الشمعة 2 :


double Upline_Trend2=ObjectGetValueByShift("Upline_Trend",2);
double Downline_Trend2=ObjectGetValueByShift("Downline_Trend",2);


قيمة الشمعة واضحة بالمثال السابق ويمكنك تغييرها من الشمعة الحالية 0 إلى اي عدد من الشموع

الشروط ستصبح كالتالي :


الشراء
if(Downline_Trend1>0&&L1<=Downline_Trend1&&C1>Downline_Trend1)


البيع
if(Upline_Trend1>0&&H1>=Upline_Trend1&&C1<Upline_Trend1)

shivaa
21-03-2021, 02:08 AM
وعليكم السلام
سنحتاج إلى دالة معرفة رقم تيكت الصفقة ذات الاعلى ربح حسب النوع كالتالي :


int HighestTK(int type)
{
double pt=0;
int tk=0;
for(int cnt=0; cnt<OrdersTotal(); cnt++)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==type)
{
if(OrderProfit()>pt)
{
pt=OrderProfit();
tk=OrderTicket();
}
}
}
}
return(tk);
}




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


void CloseOrder(int ticket,int type)
{
bool select,close;
for(int i=OrdersTotal()-1; i>=0; i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tt=OrdersTotal(),
tk=OrderTicket(),
ty=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots();


if(tt>0&&sy==Symbol()&&mn==MagicNo&&tk==ticket&&ty==type)
{
if(ty==OP_BUY)
{
close=OrderClose(ticket,lo,Bid,30);
break;
return;
}
if(ty==OP_SELL)
{
close=OrderClose(ticket,lo,Ask,30);
break;
return;
}
}
}
}


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


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


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


int tk=OrderSend(Symbol(),OP_BUY,Lots,Ask,5*Q,0,0,"Kira-h",MagicNo,0,Green);
if(tk>0)
{
if(Orderscnt(OP_SELL)>=10)CloseOrder(HighestTK(OP_SELL),OP_SELL);
return;
}


شاكر لك جاى التجربه

elhelaly
21-03-2021, 11:42 AM
,السلام عليكم استاذ حسن
لو سمحت انا كنت عايز داله تعامل مع أسعار افتتاح الصفقات بحيث لا يتم فتح صفقه في حال وجود صفقه مفتوحه علي مسافه معينه
كمثال أول صفقه شراء ولو السعر ارتفع 20 نقطه يفتح بيع ولو ارتفع 20 نقطه اخرى مثلا يفتح بيع او شراء ...طيب لو رجع وهبط 20 نقطه هيكون فيه في نفس المكان صفقه مفعله انا عايزه ما يفتحش لأن فيه صفقه موجوده ومفعله بنفس المسافه
...يعني لو عندى 100 صفقه مفعله لازم يكون بينهم مسافه محدده ولا يتم فتح صفقتين من نفس المكان ابدا

فضلا ارجو المساعده في الكود

sabil
21-03-2021, 09:35 PM
السلام عليكم
الترند عبارة عن نقطتين والوظيفة ObjectGet ستتعرف فقط عليهما وليس على كل نقطة منه
لمعرفة اي نقطة من الترند استخدم الوظيفة ObjectGetValueByShift
مثال لمعرفة قيمة الترند عند الشمعة 1:


double Upline_Trend1=ObjectGetValueByShift("Upline_Trend",1);
double Downline_Trend1=ObjectGetValueByShift("Downline_Trend",1);


وقيمة الترند عند الشمعة 2 :


double Upline_Trend2=ObjectGetValueByShift("Upline_Trend",2);
double Downline_Trend2=ObjectGetValueByShift("Downline_Trend",2);


قيمة الشمعة واضحة بالمثال السابق ويمكنك تغييرها من الشمعة الحالية 0 إلى اي عدد من الشموع

الشروط ستصبح كالتالي :


الشراء
if(Downline_Trend1>0&&L1<=Downline_Trend1&&C1>Downline_Trend1)


البيع
if(Upline_Trend1>0&&H1>=Upline_Trend1&&C1<Upline_Trend1)

شكراً ياغالي
جاري التجربة

elhelaly
22-03-2021, 02:06 PM
,السلام عليكم استاذ حسن
لو سمحت انا كنت عايز داله تعامل مع أسعار افتتاح الصفقات بحيث لا يتم فتح صفقه في حال وجود صفقه مفتوحه علي مسافه معينه
كمثال أول صفقه شراء ولو السعر ارتفع 20 نقطه يفتح بيع ولو ارتفع 20 نقطه اخرى مثلا يفتح بيع او شراء ...طيب لو رجع وهبط 20 نقطه هيكون فيه في نفس المكان صفقه مفعله انا عايزه ما يفتحش لأن فيه صفقه موجوده ومفعله بنفس المسافه
...يعني لو عندى 100 صفقه مفعله لازم يكون بينهم مسافه محدده ولا يتم فتح صفقتين من نفس المكان ابدا

فضلا ارجو المساعده في الكود

فضلا استاذ حسن المساعده في هذا الكود

kira-h
23-03-2021, 12:27 AM
,السلام عليكم استاذ حسن
لو سمحت انا كنت عايز داله تعامل مع أسعار افتتاح الصفقات بحيث لا يتم فتح صفقه في حال وجود صفقه مفتوحه علي مسافه معينه
كمثال أول صفقه شراء ولو السعر ارتفع 20 نقطه يفتح بيع ولو ارتفع 20 نقطه اخرى مثلا يفتح بيع او شراء ...طيب لو رجع وهبط 20 نقطه هيكون فيه في نفس المكان صفقه مفعله انا عايزه ما يفتحش لأن فيه صفقه موجوده ومفعله بنفس المسافه
...يعني لو عندى 100 صفقه مفعله لازم يكون بينهم مسافه محدده ولا يتم فتح صفقتين من نفس المكان ابدا

فضلا ارجو المساعده في الكود
وعليكم السلام
يمكن البحث في الصفقات واستخراج اعلى سعر واقل سعر حسب النوع (أو بدون النوع يعني لكل الصفقات) ثم تقارنه مع السعر الحالي فوق بالاعلى أو اسفل بالاقل
اقل سعر بالصفقات المفتوحة حسب النوع او بدونه كالتالي:


double LowestPrice(int type=-1)
{
double c=EMPTY_VALUE;
for(int cnt=0; cnt<OrdersTotal(); cnt++)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==type||type==-1)
{
if(OrderOpenPrice()<c)
c=OrderOpenPrice();
}
}
}
return(c);
}



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


double HighestPrice(int type=-1)
{
double c=0;
for(int cnt=0; cnt<OrdersTotal(); cnt++)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==type||type==-1)
{
if(OrderOpenPrice()>c)
c=OrderOpenPrice();
}
}
}
return(c);
}

kira-h
23-03-2021, 12:29 AM
شكراً ياغالي
جاري التجربة
بالتوفيق إن شاء الله

elhelaly
25-03-2021, 11:51 PM
وعليكم السلام
يمكن البحث في الصفقات واستخراج اعلى سعر واقل سعر حسب النوع (أو بدون النوع يعني لكل الصفقات) ثم تقارنه مع السعر الحالي فوق بالاعلى أو اسفل بالاقل
اقل سعر بالصفقات المفتوحة حسب النوع او بدونه كالتالي:


double LowestPrice(int type=-1)
{
double c=EMPTY_VALUE;
for(int cnt=0; cnt<OrdersTotal(); cnt++)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==type||type==-1)
{
if(OrderOpenPrice()<c)
c=OrderOpenPrice();
}
}
}
return(c);
}



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


double HighestPrice(int type=-1)
{
double c=0;
for(int cnt=0; cnt<OrdersTotal(); cnt++)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderType()==type||type==-1)
{
if(OrderOpenPrice()>c)
c=OrderOpenPrice();
}
}
}
return(c);
}

شكرا استاذ حسن

elhelaly
25-03-2021, 11:56 PM
سؤال استاذ حسن هل يمكن وضع الهدف او الوقف على نقطه الدخول بعد تحرك السعر بعدد معين من النقاط
بشرط تكون الصفقه خاسره وليست رابحه
مثال : تم فتح صفقه شراء ثم هبط السعر (الصفقه خاسره ) ب 15 نقطه هل يمكن وضع الهدف او الاستوب على نقطه الدخول ؟ بحيث عند رجوع السعر لنقطه الدخول يغلق الصفقه

ان كان ممكن فضلا الكود لو تكرمت مع العلم انه قد يكون هناك اكثر من صفقه مفتوحه

kira-h
26-03-2021, 01:14 AM
سؤال استاذ حسن هل يمكن وضع الهدف او الوقف على نقطه الدخول بعد تحرك السعر بعدد معين من النقاط
بشرط تكون الصفقه خاسره وليست رابحه
مثال : تم فتح صفقه شراء ثم هبط السعر (الصفقه خاسره ) ب 15 نقطه هل يمكن وضع الهدف او الاستوب على نقطه الدخول ؟ بحيث عند رجوع السعر لنقطه الدخول يغلق الصفقه

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


void MoveBreakEvenLoss()
{
bool s,mod;
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(BreakEvenLoss>0&&sy==Symbol()&&mn==MagicNo&&ot<=OP_SELL)
{
if(ot==OP_BUY)
{
if(NormalizeDouble(Bid,Digits)<NormalizeDouble(op,Digits)-BreakEvenLoss*point)
{
if((NormalizeDouble(tp,Digits)>NormalizeDouble(op,Digits))||(tp==0))
{
mod=OrderModify(tk,op,sl,NormalizeDouble(op,Digits ),0,Blue);
}
}
}
else
{
if(NormalizeDouble((Ask),Digits)>NormalizeDouble(op,Digits)+BreakEvenLoss*point)
{
if((NormalizeDouble(tp,Digits)<NormalizeDouble(op,Digits))||(tp==0))
{
mod=OrderModify(tk,op,sl,NormalizeDouble(op,Digits ),0,Red);
}
}
}
}
}
}

kira-h
26-03-2021, 01:14 AM
شكرا استاذ حسن
العفو أخي الكريم

khalaf
26-03-2021, 07:49 PM
السلام عليكم ورحمة الله..
شكرا لك اخي الكريم..
من فضلك انا لست محترف..وفقط ابرمج على بعض القوالب الجاهزة من بعض المواقع مثل فوركس ادفيسور...الامور جيده والحمدلله جدااا..
لى طلب من حضرتك...مثلا الان وضعت موفينج افرج معينة....اريد بعد ان يصعد السعر فوف هذه الموفينج بمسافة معينة اقوم بوضع امر..
بدون الحاجه لاستخدام اطراف البولينجر ..كيف اكتب واحدد المسافة من فضلك..
وتحياتى لكم جميعا

kira-h
26-03-2021, 11:51 PM
السلام عليكم ورحمة الله..
شكرا لك اخي الكريم..
من فضلك انا لست محترف..وفقط ابرمج على بعض القوالب الجاهزة من بعض المواقع مثل فوركس ادفيسور...الامور جيده والحمدلله جدااا..
لى طلب من حضرتك...مثلا الان وضعت موفينج افرج معينة....اريد بعد ان يصعد السعر فوف هذه الموفينج بمسافة معينة اقوم بوضع امر..
بدون الحاجه لاستخدام اطراف البولينجر ..كيف اكتب واحدد المسافة من فضلك..
وتحياتى لكم جميعا


وعليكم السلام
مثال بسيط وواضح


double ma=iMA(Symbol(),0,20,0,0,0,1);//دالة الموفينج عند الشمعة 1


if(Close[0] >= ma + 500 * Point)// open order


اي تنفيذ الشرط بعد صعود السعر الحالي (0) عن سعر موفينج آخر شمعة مغلقة (1) بمسافة 50 نقطة (500 تكة بالمنصة الخماسية)

Amr
28-03-2021, 09:48 PM
السلام عليكم ورحمة الله وبركاته

لدي مؤشر بمنصة tradingview هل يمكن برمجته ليعمل على منصة MT4

kira-h
28-03-2021, 10:44 PM
السلام عليكم ورحمة الله وبركاته

لدي مؤشر بمنصة tradingview هل يمكن برمجته ليعمل على منصة MT4
وعليكم السلام
لا اعلم ما هي لغة البرنامج وعموما لا اقوم بهذا
ربما يمكن تلبية طلبك بالقسم المدفوع مع مبرمج آخر، تواصل مع اخونا ابو عمر...

sabil
29-03-2021, 08:57 AM
السلام عليكم
الترند عبارة عن نقطتين والوظيفة ObjectGet ستتعرف فقط عليهما وليس على كل نقطة منه
لمعرفة اي نقطة من الترند استخدم الوظيفة ObjectGetValueByShift
مثال لمعرفة قيمة الترند عند الشمعة 1:


double Upline_Trend1=ObjectGetValueByShift("Upline_Trend",1);
double Downline_Trend1=ObjectGetValueByShift("Downline_Trend",1);


وقيمة الترند عند الشمعة 2 :


double Upline_Trend2=ObjectGetValueByShift("Upline_Trend",2);
double Downline_Trend2=ObjectGetValueByShift("Downline_Trend",2);


قيمة الشمعة واضحة بالمثال السابق ويمكنك تغييرها من الشمعة الحالية 0 إلى اي عدد من الشموع

الشروط ستصبح كالتالي :


الشراء
if(Downline_Trend1>0&&L1<=Downline_Trend1&&C1>Downline_Trend1)


البيع
if(Upline_Trend1>0&&H1>=Upline_Trend1&&C1<Upline_Trend1)



شكراً ياغالي
جاري التجربة


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

kira-h
29-03-2021, 06:27 PM
جربت الدوال وشغالة تمام
تسلم ايدك
لكن جربتها مع الخطوط الافقية مش خطوط الترند وجدتها لا تعمل
مش المفروض الاتنين واحد ولا الخطوط الافقية لها تعريف مختلف؟
خطوط الترند او المائلة نستخدم objectgetvaluebyshift
لمعرفة قيمة اي نقطة من الترند حسب رقم الشمعة
ويمكن ايضا استخدام objectget لمعرفة قيمة بداية او نهاية الترند
اما الخطوط الافقية او العمودية line يجب استخدام objectget فقط

Amr
29-03-2021, 08:05 PM
وعليكم السلام
لا اعلم ما هي لغة البرنامج وعموما لا اقوم بهذا
ربما يمكن تلبية طلبك بالقسم المدفوع مع مبرمج آخر، تواصل مع اخونا ابو عمر...


شكرا اخي حسن

kira-h
29-03-2021, 09:53 PM
شكرا اخي حسن
العفو وبالتوفيق إن شاء الله

elhelaly
30-03-2021, 12:56 AM
السلام عليكم اخى حسن

ممكن كود لرسم الترند لكن بشرط ان يكون على 3 ارتكازات
ويا ريت لو الكود ينفع استخدامه داخل اكسبيرت

مع الشكر

metmet
30-03-2021, 03:30 PM
أخي
أحتاج كود يفتح بمجرد اختراق (هاى) أو (لو) لشمعة
جسمها (بدون ذيولها) 20% من حجمها كاملا بحيث يكون جسمها يقع في المنتصف تقريبا
شمعة الدوجي أيعنى
بحيث يمكنني تغيير هذه النسبة من متغير خارجي .


وجزاك الله الجنة

kira-h
30-03-2021, 07:18 PM
السلام عليكم اخى حسن

ممكن كود لرسم الترند لكن بشرط ان يكون على 3 ارتكازات
ويا ريت لو الكود ينفع استخدامه داخل اكسبيرت

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

kira-h
30-03-2021, 07:19 PM
أخي
أحتاج كود يفتح بمجرد اختراق (هاى) أو (لو) لشمعة
جسمها (بدون ذيولها) 20% من حجمها كاملا بحيث يكون جسمها يقع في المنتصف تقريبا
شمعة الدوجي أيعنى
بحيث يمكنني تغيير هذه النسبة من متغير خارجي .


وجزاك الله الجنة
السلام عليكم
هذا الموضوع مخصص للأسئلة البرمجية وليس الطلبات
عموما وضح اكثر المطلوب بصورة

elhelaly
30-03-2021, 08:11 PM
طيب كود لرسم ترند هابط وترند صاعد على قمم وقيعان الزجزاج لو سمحت
ولكن يكون الكود لاكسبيرت (3 ارتكازات او اتنين مش مشكله ) الشروط مثلا على اخر قمتين و اخر قاعين
واحد هابط وواحد صاعد
مع الشكر

مشاركه رقم #3235

metmet
30-03-2021, 10:41 PM
أخي
أحتاج كود يفتح بمجرد اختراق (هاى) أو (لو) لشمعة
جسمها (بدون ذيولها) 20% من حجمها كاملا بحيث يكون جسمها يقع في المنتصف تقريبا
شمعة الدوجي أيعنى
بحيث يمكنني تغيير هذه النسبة من متغير خارجي .


وجزاك الله الجنة



عموما وضح اكثر المطلوب بصورة

مشكور وجزاك الله خيرا


هذه صورة توضح الأمر26462

اى :

- الفرق بين الافتتاح والإغلاق 10% -20 % من الفرق بين الهاي واللو.
- أن يكون الافتتاح والاغلاق في الثلث المتوسط من الشمعة (في المجال 35% - 65%).

kira-h
30-03-2021, 11:30 PM
مشكور وجزاك الله خيرا


هذه صورة توضح الأمر26462

اى :

- الفرق بين الافتتاح والإغلاق 10% -20 % من الفرق بين الهاي واللو.
- أن يكون الافتتاح والاغلاق في الثلث المتوسط من الشمعة (في المجال 35% - 65%).
الشروط كالتالي :


if(MathAbs(Open[1]-Close[1])<=((High[1]-Low[1])*20/100)
&&MathMax(Open[1],Close[1])<=High[1]-(High[1]-Low[1])/3
&&MathMin(Open[1],Close[1])>=Low[1]+(High[1]-Low[1])/3)
{
if(Close[0]<=Low[1])//Open Buy
if(Close[0]>=High[1])//Open Sell
}

kira-h
31-03-2021, 12:17 AM
طيب كود لرسم ترند هابط وترند صاعد على قمم وقيعان الزجزاج لو سمحت
ولكن يكون الكود لاكسبيرت (3 ارتكازات او اتنين مش مشكله ) الشروط مثلا على اخر قمتين و اخر قاعين
واحد هابط وواحد صاعد
مع الشكر

مشاركه رقم #3235

أخي الكريم الامر ليس بهذه البساطة ويحتاج لكثير من الشروط والأكواد خصوصا مع الزيجزاج المتغير!
لكن عموما لرسم ترند نستخدم الدالة التالية :


void Draw_Trend(string name,double Price1,datetime Time1,double Price2,datetime Time2,color _Color)
{
if(ObjectFind(name)==-1)
{
ObjectCreate(name,OBJ_TREND,0,Time1,Price1,Time2,P rice2);
ObjectSet(name,OBJPROP_WIDTH,2);
ObjectSet(name,OBJPROP_COLOR, _Color);
ObjectSet(name,OBJPROP_RAY,TRUE);
}
else
if(ObjectGet(name,OBJPROP_PRICE1)!=Price1||ObjectG et(name,OBJPROP_PRICE2)!=Price2)
{
ObjectDelete(name);
Draw_Trend(name,Price1,Time1,Price2,Time2,_Color);
}
}


ثم نستخرج سعر قمم وقيعان الزجزاج بدلالة ترتيبها 1 او 2 ... كالتالي:


double ZigZag_Price(int Number)
{
int N;
for(int i=0;i<Bars;i++)
{
double zag=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i);
if(zag!=0)N++;
if(Number==N)return(zag);
}
return(0);
}


ثم نفس الشيء بتوقيت قمم وقيعان الزيجزاج بدلالة الترتيب كالتالي :


datetime ZigZag_Time(int Number)
{
int N;
for(int i=0; i<Bars; i++)
{
double zag=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i);
if(zag!=0)
N++;
if(Number==N)
return(Time[i]);
}
return(0);
}



ومن خلالها تضع اعدادات الترند حسب سعر وتوقيت قمتين أو قاعين وهكذا...

ولا يمكن جعل الترند يعمل على اجباريا على 3 ارتكازات لأن الترند برمجيا عبارة عن نقطتين فقط

راجع المؤشر البسيط المرفق

metmet
31-03-2021, 12:59 AM
الشروط كالتالي :


if(MathAbs(Open[1]-Close[1])<=((High[1]-Low[1])*20/100)
&&MathMax(Open[1],Close[1])<=High[1]-(High[1]-Low[1])/3
&&MathMin(Open[1],Close[1])>=Low[1]+(High[1]-Low[1])/3)
{
if(Close[0]<=Low[1])//Open Buy
if(Close[0]>=High[1])//Open Sell
}


الله يجزيك الجنة أخي
أرجو تلقي نظرة على الكود كاملا
فهناك خطأ ... وقد أتعبني
ولك جزيل الشكر




//+------------------------------------------------------------------+
//| metmet_doji.mq4 |
//| Copyright 2021, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+

#property copyright "metmet"
#property link "metmet"
#property version "1.00"
#property strict


input int Max_Trades=1;
input int Max_SPREAD=10;
input bool EnableTimeFilter = false;
input string Start_Hour ="00:00";
input string End_Hour = "23:00";

input string M3="Money Management";
input double Lots = 0.1;
input bool MoneyManagement = false;
input double Risk=10;

input int TakeProfit=0;
input int StopLoss=0;
input int TrailingStop=3;
input int TrailingStep=1;


input int MagicNumber=5909057;


datetime Time0;
double point;
int P;
int Lot_Decimal;

int OnInit()
{
if(MarketInfo(Symbol(),MODE_MINLOT)<0.1)Lot_Decimal=2;
else Lot_Decimal=1;
if(_Digits==5||_Digits==3)P=10;
else P=1;
if(_Digits<4)
{
point=0.01;
}
else
{
point=0.0001;
}
return(0);
}

//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS deinitialization function |
//+------------------------------------------------------------------+

void OnDeinit(const int reason)
{

}

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


//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Start function |
//+------------------------------------------------------------------+
bool TimeFilter(string StartH,string EndH)
{
datetime Start= StrToTime(TimeToStr(TimeCurrent(), TIME_DATE) + " " + StartH);
datetime End= StrToTime(TimeToStr(TimeCurrent(), TIME_DATE) + " " + EndH);

if(!(Time[0]>=Start && Time[0]<=End))
{
return(false);
}
return(true);
}


void OnTick()
{
{
if(TimeCurrent()>=StrToTime("1977.07.10 00:00"))
{
Comment("-");
return;
}
}
Comment("--");
if(TrailingStop>0)MoveTrailingStop();

double SPREAD=MathAbs(Ask-Bid)/point;
int SPREAD1=(int)SPREAD;

if(SPREAD1<=Max_SPREAD)


if (EnableTimeFilter&&TimeFilter(Start_Hour,End_Hour)==false)return;

double NewLot=Lots;
if(MoneyManagement) NewLot = LotManage();



int ticket=0;





if(MathAbs(Open[1]-Close[1])<=((High[1]-Low[1])*20/100)
&&MathMax(Open[1],Close[1])<=High[1]-(High[1]-Low[1])/3
&&MathMin(Open[1],Close[1])>=Low[1]+(High[1]-Low[1])/3)
{
if(Close[0]<=Low[1])//Open Buy
if(Close[0]>=High[1])//Open Sell
}




//+------------------------------------------------------------------+

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 (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol()&&OrderType()==type)
{
if (Otype==OP_BUY)
{
bool close= OrderClose(ticket,lots,NormalizeDouble(Bid,Digits) ,3*P);

}
if (Otype==OP_SELL)
{
bool close=OrderClose(ticket,lots,NormalizeDouble(Ask,D igits),3*P);



}

}
}
}



//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS TrailingStop |
//+------------------------------------------------------------------+

void MoveTrailingStop()
{
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
bool select=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0&&NormalizeDouble(Ask-TrailingStep*point,Digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*poin t,Digits))
{
if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-TrailingStop*point,Digits))||(OrderStopLoss()==0))
{
bool modify=OrderModify(OrderTicket(),OrderOpenPrice(), NormalizeDouble(Bid-TrailingStop*point,Digits),OrderTakeProfit(),0,Blu e);
}
}
}
else
{
if(TrailingStop>0&&NormalizeDouble(Bid+TrailingStep*point,Digits)<NormalizeDouble(OrderOpenPrice()-TrailingStop*point,Digits))
{
if((NormalizeDouble(OrderStopLoss(),Digits)>(NormalizeDouble(Ask+TrailingStop*point,Digits)))| |(OrderStopLoss()==0))
{
bool modify=OrderModify(OrderTicket(),OrderOpenPrice(), NormalizeDouble(Ask+TrailingStop*point,Digits),Ord erTakeProfit(),0,Red);
}
}
}
}
}
}


double LotManage()
{
double lot = MathCeil(AccountFreeMargin() * Risk / 1000) / 100;

if(lot<MarketInfo(Symbol(),MODE_MINLOT))lot=MarketInfo(Sy mbol(),MODE_MINLOT);
if(lot>MarketInfo(Symbol(),MODE_MAXLOT))lot=MarketInfo(Sy mbol(),MODE_MAXLOT);


return (NormalizeDouble(lot,Lot_Decimal));
}



//+---------------------------------------------------------------------------------+



26467

kira-h
31-03-2021, 01:32 AM
الله يجزيك الجنة أخي
أرجو تلقي نظرة على الكود كاملا
فهناك خطأ ... وقد أتعبني
ولك جزيل الشكر




//+------------------------------------------------------------------+
//| metmet_doji.mq4 |
//| Copyright 2021, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+

#property copyright "metmet"
#property link "metmet"
#property version "1.00"
#property strict


input int Max_Trades=1;
input int Max_SPREAD=10;
input bool EnableTimeFilter = false;
input string Start_Hour ="00:00";
input string End_Hour = "23:00";

input string M3="Money Management";
input double Lots = 0.1;
input bool MoneyManagement = false;
input double Risk=10;

input int TakeProfit=0;
input int StopLoss=0;
input int TrailingStop=3;
input int TrailingStep=1;


input int MagicNumber=5909057;


datetime Time0;
double point;
int P;
int Lot_Decimal;

int OnInit()
{
if(MarketInfo(Symbol(),MODE_MINLOT)<0.1)Lot_Decimal=2;
else Lot_Decimal=1;
if(_Digits==5||_Digits==3)P=10;
else P=1;
if(_Digits<4)
{
point=0.01;
}
else
{
point=0.0001;
}
return(0);
}

//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS deinitialization function |
//+------------------------------------------------------------------+

void OnDeinit(const int reason)
{

}

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


//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Start function |
//+------------------------------------------------------------------+
bool TimeFilter(string StartH,string EndH)
{
datetime Start= StrToTime(TimeToStr(TimeCurrent(), TIME_DATE) + " " + StartH);
datetime End= StrToTime(TimeToStr(TimeCurrent(), TIME_DATE) + " " + EndH);

if(!(Time[0]>=Start && Time[0]<=End))
{
return(false);
}
return(true);
}


void OnTick()
{
{
if(TimeCurrent()>=StrToTime("1977.07.10 00:00"))
{
Comment("-");
return;
}
}
Comment("--");
if(TrailingStop>0)MoveTrailingStop();

double SPREAD=MathAbs(Ask-Bid)/point;
int SPREAD1=(int)SPREAD;

if(SPREAD1<=Max_SPREAD)


if (EnableTimeFilter&&TimeFilter(Start_Hour,End_Hour)==false)return;

double NewLot=Lots;
if(MoneyManagement) NewLot = LotManage();



int ticket=0;





if(MathAbs(Open[1]-Close[1])<=((High[1]-Low[1])*20/100)
&&MathMax(Open[1],Close[1])<=High[1]-(High[1]-Low[1])/3
&&MathMin(Open[1],Close[1])>=Low[1]+(High[1]-Low[1])/3)
{
if(Close[0]<=Low[1])//Open Buy
if(Close[0]>=High[1])//Open Sell
}




//+------------------------------------------------------------------+

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 (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol()&&OrderType()==type)
{
if (Otype==OP_BUY)
{
bool close= OrderClose(ticket,lots,NormalizeDouble(Bid,Digits) ,3*P);

}
if (Otype==OP_SELL)
{
bool close=OrderClose(ticket,lots,NormalizeDouble(Ask,D igits),3*P);



}

}
}
}



//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS TrailingStop |
//+------------------------------------------------------------------+

void MoveTrailingStop()
{
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
bool select=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0&&NormalizeDouble(Ask-TrailingStep*point,Digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*poin t,Digits))
{
if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-TrailingStop*point,Digits))||(OrderStopLoss()==0))
{
bool modify=OrderModify(OrderTicket(),OrderOpenPrice(), NormalizeDouble(Bid-TrailingStop*point,Digits),OrderTakeProfit(),0,Blu e);
}
}
}
else
{
if(TrailingStop>0&&NormalizeDouble(Bid+TrailingStep*point,Digits)<NormalizeDouble(OrderOpenPrice()-TrailingStop*point,Digits))
{
if((NormalizeDouble(OrderStopLoss(),Digits)>(NormalizeDouble(Ask+TrailingStop*point,Digits)))| |(OrderStopLoss()==0))
{
bool modify=OrderModify(OrderTicket(),OrderOpenPrice(), NormalizeDouble(Ask+TrailingStop*point,Digits),Ord erTakeProfit(),0,Red);
}
}
}
}
}
}


double LotManage()
{
double lot = MathCeil(AccountFreeMargin() * Risk / 1000) / 100;

if(lot<MarketInfo(Symbol(),MODE_MINLOT))lot=MarketInfo(Sy mbol(),MODE_MINLOT);
if(lot>MarketInfo(Symbol(),MODE_MAXLOT))lot=MarketInfo(Sy mbol(),MODE_MAXLOT);


return (NormalizeDouble(lot,Lot_Decimal));
}



//+---------------------------------------------------------------------------------+



26467

أخي الكريم طلبك كان حول كيفية بناء شروط النموذج وهذا ما تم عمله
ما عليك الان الا ان تضع ما يجب عمله بعد تنفيذ الشرط تشتري تبيع تنبيه ....


if(Close[0]<=Low[1])//جواب الشرط
if(Close[0]>=High[1])//جواب الشرط


وانتبه للاقواس

metmet
31-03-2021, 01:47 AM
أخي الكريم طلبك كان حول كيفية بناء شروط النموذج وهذا ما تم عمله
ما عليك الان الا ان تضع ما يجب عمله بعد تنفيذ الشرط تشتري تبيع تنبيه ....


if(Close[0]<=Low[1])//جواب الشرط
if(Close[0]>=High[1])//جواب الشرط


وانتبه للاقواس

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

وفى كل الأحوال
جزاك الله عنا كل خير

وآسف مرة أخرى إذا أزعجتك

في أمان الله

kira-h
31-03-2021, 02:09 AM
أخي الفاضل
جزاك الله عنا كل خير
أعلم أنني أتعبتك معي
ولكن
أنا أود
أن أفتح صفقة باي بعد اختراق الشمعة لأعلى
أو صفقة سيل بعد اختراق هذه الشمعة لـأسفل
أعلم أن هذة المشاركة هى تعلم الأكواد والأسئلة البرمجية
أنا منذ زمن وأنا بحاول أتعلم هذه اللغة ...وأحاول عمل هذا الاكسيبرت
نعم أقوم بعلم لصق لكثير من الأكواد ... ولكني أحاول التعلم منها ..
والأن هذا الاكسيبرت قد أتعبني كثيرا ..
وقد أرفقت لك الكود كاملا لعلك تصلح لى الخطأ به ... فضلا عن التصويب فأنا أتعلم من الخطأ .. واعذرني لجهلى

وفى كل الأحوال
جزاك الله عنا كل خير

وآسف مرة أخرى إذا أزعجتك

في أمان الله

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

metmet
31-03-2021, 02:26 AM
مرفق الاكسبيرت بحيث تم اضافة دالتي البيع والشراء ضمن الشروط


أخي كيرا
والله أنا أستحي منك

ولكنه لا يقوم بقتح صفقات في الباك تيست

elhelaly
31-03-2021, 02:39 AM
أخي الكريم الامر ليس بهذه البساطة ويحتاج لكثير من الشروط والأكواد خصوصا مع الزيجزاج المتغير!
لكن عموما لرسم ترند نستخدم الدالة التالية :


void Draw_Trend(string name,double Price1,datetime Time1,double Price2,datetime Time2,color _Color)
{
if(ObjectFind(name)==-1)
{
ObjectCreate(name,OBJ_TREND,0,Time1,Price1,Time2,P rice2);
ObjectSet(name,OBJPROP_WIDTH,2);
ObjectSet(name,OBJPROP_COLOR, _Color);
ObjectSet(name,OBJPROP_RAY,TRUE);
}
else
if(ObjectGet(name,OBJPROP_PRICE1)!=Price1||ObjectG et(name,OBJPROP_PRICE2)!=Price2)
{
ObjectDelete(name);
Draw_Trend(name,Price1,Time1,Price2,Time2,_Color);
}
}


ثم نستخرج سعر قمم وقيعان الزجزاج بدلالة ترتيبها 1 او 2 ... كالتالي:


double ZigZag_Price(int Number)
{
int N;
for(int i=0;i<Bars;i++)
{
double zag=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i);
if(zag!=0)N++;
if(Number==N)return(zag);
}
return(0);
}


ثم نفس الشيء بتوقيت قمم وقيعان الزيجزاج بدلالة الترتيب كالتالي :


datetime ZigZag_Time(int Number)
{
int N;
for(int i=0; i<Bars; i++)
{
double zag=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i);
if(zag!=0)
N++;
if(Number==N)
return(Time[i]);
}
return(0);
}



ومن خلالها تضع اعدادات الترند حسب سعر وتوقيت قمتين أو قاعين وهكذا...

ولا يمكن جعل الترند يعمل على اجباريا على 3 ارتكازات لأن الترند برمجيا عبارة عن نقطتين فقط

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

metmet
31-03-2021, 02:45 AM
مرفق الاكسبيرت بحيث تم اضافة دالتي البيع والشراء ضمن الشروط

جزاك الله خيرا أخي
تم التيست وأصبح يفتح صفقات ...
جاري تنقيح الفكرة

الله يجزيك الجنة عنا جميعا

kira-h
31-03-2021, 06:42 PM
الف شكر استاذ حسن جزاك الله كل خير
العفو وبالتوفيق إن شاء الله


جزاك الله خيرا أخي
تم التيست وأصبح يفتح صفقات ...
جاري تنقيح الفكرة

الله يجزيك الجنة عنا جميعا
واياك أخي الكريم وبالتوفيق إن شاء الله

Ghassebd
02-04-2021, 02:36 AM
السلام عليكم ورحمة الله وبركاته

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

يعطي خطا التالي

'while' - expressions are not allowed on a global scope

هل ممكن المساعدة بالتعديل على الكود ليعمل مع منصة mt4








int Counted_bars,i;
Counted_bars=IndicatorCounted();
i=Bars-Counted_bars-1;
while(i>=0)
{
shift=iBarShift(Symbol(),PERIOD_MN1,Time[i],0)+1;
if(TimeMonth(Time[i])==1)
{
yearClose=iClose(Symbol(),PERIOD_MN1,shift);
yearHigh=iHigh(Symbol(),PERIOD_MN1,iHighest(Symbol (),PERIOD_MN1,MODE_HIGH,12,shift));
yearLow=iLow(Symbol(),PERIOD_MN1,iLowest(Symbol(), PERIOD_MN1,MODE_LOW,12,shift));
}
h[i]=yearHigh;
c[i]=yearClose;
l[i]=yearLow;
i--;
}

kira-h
02-04-2021, 06:05 AM
السلام عليكم ورحمة الله وبركاته


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

يعطي خطا التالي

'while' - expressions are not allowed on a global scope

هل ممكن المساعدة بالتعديل على الكود ليعمل مع منصة mt4








int Counted_bars,i;
Counted_bars=IndicatorCounted();
i=Bars-Counted_bars-1;
while(i>=0)
{
shift=iBarShift(Symbol(),PERIOD_MN1,Time[i],0)+1;
if(TimeMonth(Time[i])==1)
{
yearClose=iClose(Symbol(),PERIOD_MN1,shift);
yearHigh=iHigh(Symbol(),PERIOD_MN1,iHighest(Symbol (),PERIOD_MN1,MODE_HIGH,12,shift));
yearLow=iLow(Symbol(),PERIOD_MN1,iLowest(Symbol(), PERIOD_MN1,MODE_LOW,12,shift));
}
h[i]=yearHigh;
c[i]=yearClose;
l[i]=yearLow;
i--;
}








وعليكم السلام
الكود سليم، تأكد من الاقواس (...) والمعقوفات {...} بكامل كود المؤشر