مشاهدة النسخة كاملة : الموضوع المخصص للأسئلة البرمجية mql4
الصفحات :
1
2
3
4
5
6
7
8
9
10
[
11]
12
13
14
15
metmet
10-09-2019, 03:18 PM
ممكن كود يفتح صفقة buy بمجرد تخطى السعر لرأس شمعة محددة طبقا لمؤشر خارجي
أو أن يفتح سيل بمجرد تخطي السعر لذيل نفس الشمعة
علما بأن الشمعة المراد فتح الباي على رأسها أو السيل على ذيلها غير معروف مكانها بالنسبة للسعر الحالى
ربما يتخطى السعر بعدها بشمعة أو اثنين أو أكثر
أرجو الافادة
kira-h
10-09-2019, 06:03 PM
ممكن كود يفتح صفقة buy بمجرد تخطى السعر لرأس شمعة محددة طبقا لمؤشر خارجي
أو أن يفتح سيل بمجرد تخطي السعر لذيل نفس الشمعة
علما بأن الشمعة المراد فتح الباي على رأسها أو السيل على ذيلها غير معروف مكانها بالنسبة للسعر الحالى
ربما يتخطى السعر بعدها بشمعة أو اثنين أو أكثر
أرجو الافادة
السلام عليكم
المرجو التوضيح أكثر بصور من الشارت
metmet
11-09-2019, 05:57 PM
السلام عليكم
المرجو التوضيح أكثر بصور من الشارت
الشمعة المشار إليها بالسهم الأزرق والتى لها بار أزرق غامق الموجود في المؤشر الخارجي هي التى أريد فتح الصفقة على رأسها أو على ذيلها
المطوب
كود يفتح صفقة buy بمجرد تخطى السعر لرأس الشمعة المحددة
أو أن يفتح sell بمجرد تخطي السعر لذيل نفس الشمعة
علما بأن السعر ربما يتخطى الرأس أو الذيل بعد شمعة أو اثنين أو أكثر
------
عذرا الصورة الثانية أرفقت بالخطأ وليس لها داعي
kira-h
11-09-2019, 07:23 PM
الشمعة المشار إليها بالسهم الأزرق والتى لها بار أزرق غامق الموجود في المؤشر الخارجي هي التى أريد فتح الصفقة على رأسها أو على ذيلها
المطوب
كود يفتح صفقة buy بمجرد تخطى السعر لرأس الشمعة المحددة
أو أن يفتح sell بمجرد تخطي السعر لذيل نفس الشمعة
علما بأن السعر ربما يتخطى الرأس أو الذيل بعد شمعة أو اثنين أو أكثر
------
عذرا الصورة الثانية أرفقت بالخطأ وليس لها داعي
ارفق المؤشر والكود الذي قمت بعمله لتصحيحه أو على الاقل المؤشر حتى اضع لك قيمة البار الأزرق
بالنسبة لفتح الصفقة عند سعر مختلف عن السعر الحالي (مثل حالتك عند الهاي او اللو) معناه ستكون الصفقة عبارة عن امر معلق من نوع ستوب (باي ستوب أو سيل ستوب)
metmet
11-09-2019, 07:53 PM
ارفق المؤشر والكود الذي قمت بعمله لتصحيحه أو على الاقل المؤشر حتى اضع لك قيمة البار الأزرق
بالنسبة لفتح الصفقة عند سعر مختلف عن السعر الحالي (مثل حالتك عند الهاي او اللو) معناه ستكون الصفقة عبارة عن امر معلق من نوع ستوب (باي ستوب أو سيل ستوب)
شكرا لردك أخي
بالفعل استطعت عمل أمرين معلقين على الهاي واللو كما بالملف 1 المرفق
ولكن وجدت عند التجربة على الحساب الديمو كثيرا لا يستطيع الاكسيبرت وضع الأمرين المعلقين وذلك لأن السعر أحيانا يكون قريب من الهاي أو من اللو ... وبالتالى لا يستطيع الاكسيبرت تعليق الأمرين أو يعلقهما ويحذفهما مباشرة
فكان لا بد من تغيير الاستراتيجية
بأن يفتح مباشرة buy أو sell بمجرد تخطي السعر للهاي أو اللو للشمعة المحددة
أرفقت لحضرتك
كود رقم 1
وهو الذي يعمل بالأمرين المعلقين
كود 2
وهو المؤشر
kira-h
11-09-2019, 09:36 PM
شكرا لردك أخي
بالفعل استطعت عمل أمرين معلقين على الهاي واللو كما بالملف 1 المرفق
ولكن وجدت عند التجربة على الحساب الديمو كثيرا لا يستطيع الاكسيبرت وضع الأمرين المعلقين وذلك لأن السعر أحيانا يكون قريب من الهاي أو من اللو ... وبالتالى لا يستطيع الاكسيبرت تعليق الأمرين أو يعلقهما ويحذفهما مباشرة
فكان لا بد من تغيير الاستراتيجية
بأن يفتح مباشرة buy أو sell بمجرد تخطي السعر للهاي أو اللو للشمعة المحددة
أرفقت لحضرتك
كود رقم 1
وهو الذي يعمل بالأمرين المعلقين
كود 2
وهو المؤشر
جرب النسخة المرفقة
metmet
12-09-2019, 09:02 PM
جرب النسخة المرفقة
جزاك الله خيرا اخي الكريم
بعد الفحص وجدت أنه يفتح الباي مثلا واذا انعكس فانه بفتح السيل على نفس الشمعة
وأنا أرجو
1- ألا يفتح على نفس الشمعة أمرين ....إذا فتح باي على شمعة فلا يفتح علي نفس الشمعة أى أمر آخر
2- إذا تحقق الشرط على شمعة أخرى يفتح صفقة جديدة حتى ولو لم تغلق الصفقة السابقة .. حتى أستطيع أن أغلق الجميع على WIN_USD
ــــــــــــــــــــــــــــــــــــــــــــــــــ ـ
واعذرنى أخي فأنا مازلت أتعلم البرمجة (مبتدأ)
ولهذا
أريد أن أخبرك أنني استطعت أن أضيف إلى الاكسيبرت والحمد لله ...
TrailingStop=6
TrailingStep=4
BreakEven=3
movestopto=1
ولكن لى سؤال عنه
كيف يمكنني أن أجعل البريك ايفن يحسب الاسبريد قبل أن يحرك السعر إلى الدخول لأنني وجدت مع التجربة أنه يغلق الصفقة على قيمة الاسبريد بالسالب
ــــــــــــــــــــــــــــــــــــــــــــــــــ ـ
ولك جزيل الشكر والامتنان
وجزاك الله الجنة عن كل من تعلم منك علما أستفاد منه أو أفاد منه غيره.
kira-h
13-09-2019, 02:00 AM
جزاك الله خيرا اخي الكريم
بعد الفحص وجدت أنه يفتح الباي مثلا واذا انعكس فانه بفتح السيل على نفس الشمعة
وأنا أرجو
1- ألا يفتح على نفس الشمعة أمرين ....إذا فتح باي على شمعة فلا يفتح علي نفس الشمعة أى أمر آخر
2- إذا تحقق الشرط على شمعة أخرى يفتح صفقة جديدة حتى ولو لم تغلق الصفقة السابقة .. حتى أستطيع أن أغلق الجميع على WIN_USD
ــــــــــــــــــــــــــــــــــــــــــــــــــ ـ
واعذرنى أخي فأنا مازلت أتعلم البرمجة (مبتدأ)
ولهذا
أريد أن أخبرك أنني استطعت أن أضيف إلى الاكسيبرت والحمد لله ...
TrailingStop=6
TrailingStep=4
BreakEven=3
movestopto=1
ولكن لى سؤال عنه
كيف يمكنني أن أجعل البريك ايفن يحسب الاسبريد قبل أن يحرك السعر إلى الدخول لأنني وجدت مع التجربة أنه يغلق الصفقة على قيمة الاسبريد بالسالب
ــــــــــــــــــــــــــــــــــــــــــــــــــ ـ
ولك جزيل الشكر والامتنان
وجزاك الله الجنة عن كل من تعلم منك علما أستفاد منه أو أفاد منه غيره.
وإياك اخي الكريم، بارك الله فيك
مرفق الاكسبيرت
اما السبريد المتغير لا يمكن التحكم به، مثلا بعد وضع الستوب ممكن ان يكبر السبريد وبالتالي يتم الاغلاق على خسارة... وهذا من طبيعة حركة السعر
Abdullah Mohammed
15-09-2019, 11:57 PM
السلام عليكم اخي حسن
اريد شرط لرسم خط عمودي على الشمعة بهذا الشكل...
اذا كانت الساعة الواحدة ارسم خط عمودي عليها ويكون هذا الخط العمودي منتهيا عند هاي الشمعة ويبداء من لو الشمعة من جديد بمعنى اخر لا يتواجد على جسم الشمعة وتكون الشمعة ظاهرة كما يمكن تغير لون وسمك الخط العمودي..
metmet
16-09-2019, 09:24 AM
وإياك اخي الكريم، بارك الله فيك
مرفق الاكسبيرت
اما السبريد المتغير لا يمكن التحكم به، مثلا بعد وضع الستوب ممكن ان يكبر السبريد وبالتالي يتم الاغلاق على خسارة... وهذا من طبيعة حركة السعر
مشكور أخي الكريم
لى سؤال آخر
if(IsTradeAllowed())
{
if(UP>MM&&time&&Close[0]>=High[1]&&T_1!=Time[0]){
int ticket = open(OP_BUY,Lots(MaxRisk),Ask,TakeProfit,StopLoss) ;
if(ticket <= 0) return;
T_1=Time[0];
}
}
if(IsTradeAllowed())
{
if(UP>MM&&time&&Close[0]<=Low[1]&&T_1!=Time[0]){
int ticket =open(OP_SELL,Lots(MaxRisk),Bid,TakeProfit,StopLos s) ;
if(ticket <=0) return;
T_1=Time[0];
}
}
الآن هذا الكود يفتح الصفقة بمجرد تخطي السعر للهاي أو اللو
هل نستطيع أن نجعله يفتح بعد تخطى السعر للهاي بنقطة أو أكثر (تحدد عدد النقاط بمتغير خارجي)
وكذلك في حالة البيع بعد تخطى السعر اللو بنقطة أو أكثر (تحدد عدد النقاط بمتغير خارجي)
وجزاك الله خيرا
kira-h
16-09-2019, 10:26 PM
مشكور أخي الكريم
لى سؤال آخر
if(IsTradeAllowed())
{
if(UP>MM&&time&&Close[0]>=High[1]&&T_1!=Time[0]){
int ticket = open(OP_BUY,Lots(MaxRisk),Ask,TakeProfit,StopLoss) ;
if(ticket <= 0) return;
T_1=Time[0];
}
}
if(IsTradeAllowed())
{
if(UP>MM&&time&&Close[0]<=Low[1]&&T_1!=Time[0]){
int ticket =open(OP_SELL,Lots(MaxRisk),Bid,TakeProfit,StopLos s) ;
if(ticket <=0) return;
T_1=Time[0];
}
}
الآن هذا الكود يفتح الصفقة بمجرد تخطي السعر للهاي أو اللو
هل نستطيع أن نجعله يفتح بعد تخطى السعر للهاي بنقطة أو أكثر (تحدد عدد النقاط بمتغير خارجي)
وكذلك في حالة البيع بعد تخطى السعر اللو بنقطة أو أكثر (تحدد عدد النقاط بمتغير خارجي)
وجزاك الله خيرا
مثال 5 نقاط :
if(IsTradeAllowed())
{
if(UP>MM&&time&&Close[0]>=High[1]+5*pt&&T_1!=Time[0]){
int ticket = open(OP_BUY,Lots(MaxRisk),Ask,TakeProfit,StopLoss) ;
if(ticket <= 0) return;
T_1=Time[0];
}
}
if(IsTradeAllowed())
{
if(UP>MM&&time&&Close[0]<=Low[1]-5*pt&&T_1!=Time[0]){
int ticket =open(OP_SELL,Lots(MaxRisk),Bid,TakeProfit,StopLos s) ;
if(ticket <=0) return;
T_1=Time[0];
}
}
metmet
19-09-2019, 11:24 PM
مثال 5 نقاط :
if(IsTradeAllowed())
{
if(UP>MM&&time&&Close[0]>=High[1]+5*pt&&T_1!=Time[0]){
int ticket = open(OP_BUY,Lots(MaxRisk),Ask,TakeProfit,StopLoss) ;
if(ticket <= 0) return;
T_1=Time[0];
}
}
if(IsTradeAllowed())
{
if(UP>MM&&time&&Close[0]<=Low[1]-5*pt&&T_1!=Time[0]){
int ticket =open(OP_SELL,Lots(MaxRisk),Bid,TakeProfit,StopLos s) ;
if(ticket <=0) return;
T_1=Time[0];
}
}
مشكور أخي الكريم
لكن +5 هذه نقاط .. فهل يمكن أن تكون 5 بيب مثلا ؟؟
عن طريق
بدلا من 5 ضرب pt
إلى 5 فقط وحذف pt*
------------------
أيضا لى سؤال آخر
نفس الكود السابق
هو يفتح الصفقة في الشمعة التالية لشمعة الفوليوم إذا تخطى السعر رأس الشمعة أو ذيلها .وهذا جيد
لكن إذا كانت الشمعة التالية لشمعة الفوليوم لم تتخطى الرأس أو الذيل فإن الصفقة لن تفتح نهائيا ... وسؤالى هو كيف نجعل الكود يفتح الصفقة إذا تخطى السعر لرأس شمعة الفوليوم أو ذيلها سواء في الشمعة التالية أو التى بعدها أوبعدها أوبعدها ....
وخاصة أن السعر من الممكن ألا يتخطى الرأس أو الذيل إلا بعد شمعتين أو أكثر ؟؟
-----------------------
سؤال أخير
حاولت أن أضع مصفوفة الأزواج على الأكسيبرت ولم يفلح .. رغم أنني حصلت عليها من مشاركة لحضرتك في الصفحات السابقة
فأرجو وضع الكود الصحيح لها ولك جزيل الشكر
kira-h
20-09-2019, 01:33 AM
مشكور أخي الكريم
لكن +5 هذه نقاط .. فهل يمكن أن تكون 5 بيب مثلا ؟؟
عن طريق
بدلا من 5 ضرب pt
إلى 5 فقط وحذف pt*
------------------
أيضا لى سؤال آخر
نفس الكود السابق
هو يفتح الصفقة في الشمعة التالية لشمعة الفوليوم إذا تخطى السعر رأس الشمعة أو ذيلها .وهذا جيد
لكن إذا كانت الشمعة التالية لشمعة الفوليوم لم تتخطى الرأس أو الذيل فإن الصفقة لن تفتح نهائيا ... وسؤالى هو كيف نجعل الكود يفتح الصفقة إذا تخطى السعر لرأس شمعة الفوليوم أو ذيلها سواء في الشمعة التالية أو التى بعدها أوبعدها أوبعدها ....
وخاصة أن السعر من الممكن ألا يتخطى الرأس أو الذيل إلا بعد شمعتين أو أكثر ؟؟
-----------------------
سؤال أخير
حاولت أن أضع مصفوفة الأزواج على الأكسيبرت ولم يفلح .. رغم أنني حصلت عليها من مشاركة لحضرتك في الصفحات السابقة
فأرجو وضع الكود الصحيح لها ولك جزيل الشكر
العفو أخي
pt هي قيمة النقطة يعني بدونها ستصبح 5 عبارة عن سعر وليس عدد النقاط، يعني مثلا على اليورو دولار لن تكون المسافة بـ 0.0005 بل ستصبح بمسافة سعرية 5 وليس نقطية
ستضع شروط اخرى لكل حالة وتفصل بين الحالات بعلامة || يعني "أو"
بالنسبة لمصفوفة الازواج واضح بالشرح، ارفق كود محاولتك للتصحيح
islam.fares
20-09-2019, 09:28 AM
لو سمحت استاذي العزيز سؤال من مبتدأ ما الفرق بين الكود المفتوح والكود المغلق وكيف استطيع احدد نوعه
وشكرا
kira-h
20-09-2019, 09:08 PM
لو سمحت استاذي العزيز سؤال من مبتدأ ما الفرق بين الكود المفتوح والكود المغلق وكيف استطيع احدد نوعه
وشكرا
السلام عليكم
الكود المفتوح الخاص بمنصة المتاتردر4 يكون بصيغة mq4، والمغلق يكون بصيغة ex4
الكود المفتوح الخاص بمنصة المتاتردر5 يكون بصيغة mq5، والمغلق يكون بصيغة ex5
elhelaly
21-09-2019, 03:42 PM
السلام عليكم
لو مثلا انا عندى قيمه ثابته وليكن اغلاق اخر شمعه على فريم الساعه
وعايز اضيف على الاغلاق 30 نقطه -- وانقص من الاغلاق 30 نقطه بخطوات
كأني بعمل مستويات مقاومه ودعم والمركز بالنسبالي النقطه الثابتة
مثلا يعنى الاغلاق 134.00
فى حاله الاضافه (مستويات المقاومه )هتكون النقاط .... 134.30 --- 134.60 --- 134.90 الخ
وفى حاله الانقاص (مستويات الدعم )هتكون النقاط كالتالى --- 133.70 --- 133.40 --- 133.10
يعنى هضيف او هخصم 30 نقطه ع الاغلاق الى ما لا نهايه (او نستخرج 10 نقاط اعلى و 10 نقاط اسفل )
وعايز اوصل لقيمه كل نقطه واخزنها فى متغير مثلا هيبقى h
وهل يمكن تخزين كل هذه المتغيرات في متغير واحد ام لا كاننا مثلا نعمل لوب ؟
وأريد كتابه شرط الشراء والبيع لو لمس من الاعلي شراء ولو لمس من اسفل بيع
فضلا احتاج الكود وشكرا
kira-h
22-09-2019, 03:40 AM
السلام عليكم
لو مثلا انا عندى قيمه ثابته وليكن اغلاق اخر شمعه على فريم الساعه
وعايز اضيف على الاغلاق 30 نقطه -- وانقص من الاغلاق 30 نقطه بخطوات
كأني بعمل مستويات مقاومه ودعم والمركز بالنسبالي النقطه الثابتة
مثلا يعنى الاغلاق 134.00
فى حاله الاضافه (مستويات المقاومه )هتكون النقاط .... 134.30 --- 134.60 --- 134.90 الخ
وفى حاله الانقاص (مستويات الدعم )هتكون النقاط كالتالى --- 133.70 --- 133.40 --- 133.10
يعنى هضيف او هخصم 30 نقطه ع الاغلاق الى ما لا نهايه (او نستخرج 10 نقاط اعلى و 10 نقاط اسفل )
وعايز اوصل لقيمه كل نقطه واخزنها فى متغير مثلا هيبقى h
وهل يمكن تخزين كل هذه المتغيرات في متغير واحد ام لا كاننا مثلا نعمل لوب ؟
وأريد كتابه شرط الشراء والبيع لو لمس من الاعلي شراء ولو لمس من اسفل بيع
فضلا احتاج الكود وشكرا
وعليكم السلام
لم افهم شيء! المرجو التوضيح أكثر بمثال على الشارت ورسم المستويات كخطوط مع فرصة بيع او شراء
ammar
24-09-2019, 11:36 PM
السلام عليكم
ارجو تصحيح الكود التالي ما خو الخطأ فيه طبعا المطلوب واضح جعل قيمة اللوت حسب الرصيد الكتوفر
if(AccountEquity()>=1000 && AccountEquity()<=2000)
lot = 0.1;
kira-h
25-09-2019, 02:26 AM
السلام عليكم
ارجو تصحيح الكود التالي ما خو الخطأ فيه طبعا المطلوب واضح جعل قيمة اللوت حسب الرصيد الكتوفر
if(AccountEquity()>=1000 && AccountEquity()<=2000)
lot = 0.1;
وعليكم السلام
الشرط سليم منطقيا
طيب التالي:
if(AccountEquity()>=1000 && AccountEquity()<2001)lot=0.1;
ammar
25-09-2019, 02:06 PM
وعليكم السلام
الشرط سليم منطقيا
طيب التالي:
if(AccountEquity()>=1000 && AccountEquity()<2001)lot=0.1;
صحيح الشرط شغال لكن المشكلة يعمل في منطقة فقط OnTick() ولا يعمل في منطقة OnInit() لكي يعطي قيمة عند تشغيل الاكسبيرت فقط
kira-h
26-09-2019, 02:01 AM
صحيح الشرط شغال لكن المشكلة يعمل في منطقة فقط OnTick() ولا يعمل في منطقة OnInit() لكي يعطي قيمة عند تشغيل الاكسبيرت فقط
نعم ممكن ولكن قد يحدث خطأ ما في البداية ويجب استخدام التحليل الدقيق للكود باستخدام property strict (https://docs.mql4.com/basis/mql4changes#compiler_difference)
لكن بما ان الشرط نتيجته قيمة محصورة بين قيمتين ثابثتين فالافضل ان تضعه ببداية الدالة OnTick
silver
26-09-2019, 03:17 AM
صباح الخير مشرفنا القدير حسن
فضلا منك ما هي الصيغة الصحيحة لعمل ما يلي
إذا كان التاريخ الحالي أكبر من تاريخ آخر صفقة مغلقة بعدد معين من الدقائق (يتم تحديده يدويا) يتم تنفيذ باقي الشروط البرمجية الأخرى
وبالطبع إذا كان التاريخ الحالي أكبر من تاريخ آخر صفقة مغلقة ولكنه ليس أكبر بعدد الدقائق المحددة فإنه لا يتم تنفيذ باقي الشروط البرمجية
مع جزيل الشكر لك مقدما
ammar
26-09-2019, 08:18 AM
نعم ممكن ولكن قد يحدث خطأ ما في البداية ويجب استخدام التحليل الدقيق للكود باستخدام property strict (https://docs.mql4.com/basis/mql4changes#compiler_difference)
لكن بما ان الشرط نتيجته قيمة محصورة بين قيمتين ثابثتين فالافضل ان تضعه ببداية الدالة OnTick
شكرا اخي اتمنى لك التوفيق والتسديد انشاء الله
kira-h
27-09-2019, 03:01 AM
شكرا اخي اتمنى لك التوفيق والتسديد انشاء الله
وإياك أخي الكريم
السلام عليكم
اريد من فضلكم معرفة كيفية وضع كود التريلنج ستوب بمعنى عندما يتحرك السعر فى اتجاه الهدف مثلاً 20 نقطة يتم تحريك الستوب بحسب النقاط الموضوعة فى التريلنج ستوب
انا لدى هذا الاكسبيرت وحاولت بشتى الطرق وضع كود لتفعيل التريلنج ستوب ولكن لم يفلح
هذا هو الاكسبيرت وشكراً جزيلاً
if (Close[1]>ma1&&orderstotal()<max){
SL=Ask-50*Point;;
TP=Ask+50*Point;;
OrderSend(Symbol(),OP_BUY,NormalizeDouble(Lot,2),A sk,3,SL,TP,"klk",MagicNumber,0,Blue);
PlaySound("Alert.wav");}
kira-h
30-09-2019, 02:34 AM
السلام عليكم
اريد من فضلكم معرفة كيفية وضع كود التريلنج ستوب بمعنى عندما يتحرك السعر فى اتجاه الهدف مثلاً 20 نقطة يتم تحريك الستوب بحسب النقاط الموضوعة فى التريلنج ستوب
انا لدى هذا الاكسبيرت وحاولت بشتى الطرق وضع كود لتفعيل التريلنج ستوب ولكن لم يفلح
هذا هو الاكسبيرت وشكراً جزيلاً
if (Close[1]>ma1&&orderstotal()<max){
SL=Ask-50*Point;;
TP=Ask+50*Point;;
OrderSend(Symbol(),OP_BUY,NormalizeDouble(Lot,2),A sk,3,SL,TP,"klk",MagicNumber,0,Blue);
PlaySound("Alert.wav");}
وعليكم السلام
راجع دالة التريلينغ بالموضوع التالي: أهم الدوال البرمجية وتطبيقات لغة mql4 (https://www.fxprg.com/vb/showthread.php?t=31456&page=3&p=844599&viewfull=1#post844599)
shivaa
30-09-2019, 06:34 AM
السلام عليكم
ممكن اعرف طريقة رسم القنوات السعرية برمجيا
مع تعريف الحد العلوى والسفلى والمتوسطة
silver
30-09-2019, 09:41 AM
صباح الخير مشرفنا القدير حسن
فضلا منك ما هي الصيغة الصحيحة لعمل ما يلي
إذا كان التاريخ الحالي أكبر من تاريخ آخر صفقة مغلقة بعدد معين من الدقائق (يتم تحديده يدويا) يتم تنفيذ باقي الشروط البرمجية الأخرى
وبالطبع إذا كان التاريخ الحالي أكبر من تاريخ آخر صفقة مغلقة ولكنه ليس أكبر بعدد الدقائق المحددة فإنه لا يتم تنفيذ باقي الشروط البرمجية
مع جزيل الشكر لك مقدما
السلام عليكم
للتذكير اخي حسن
شكرا لك
kira-h
01-10-2019, 02:24 AM
السلام عليكم
للتذكير اخي حسن
شكرا لك
وعليكم السلام
دالة توقيت آخر صفقة مغلقة من نوع ماركت (بيع أو شراء) كالتالي:
datetime ClosedTime(int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
datetime tm=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNo&&ty<=OP_SELL)
{
if(ty==type||type==-1)
{
return(tm);
}
}
}
return(0);
}
ثم من ضمن شروط فتح الصفقة كالتالي :
if(TimeCurrent()>=ClosedTime()+minutes*60)//do it
بحيث minutes عدد الدقائق
kira-h
01-10-2019, 02:49 AM
السلام عليكم
ممكن اعرف طريقة رسم القنوات السعرية برمجيا
مع تعريف الحد العلوى والسفلى والمتوسطة
وعليكم السلام
إذا تقصد قنوات من نوع regression يمكن رسمها عن طريق الوظيفة ObjectCreate باستدعاء القناة من نوع OBJ_REGRESSION
مثال لدالة استدعاء قناة regression كالتالي:
void draw_reg(string name,datetime time1,datetime time2,color Color)
{
ObjectCreate(name, OBJ_REGRESSION, 0,T1,0,T2,0);//نوع الأوبجكت
ObjectSet(name, OBJPROP_COLOR, Color);//لون الأوبجكت
ObjectSet(name, OBJPROP_BACK, true);//خلفية الأوبجكت
ObjectSet(name, OBJPROP_RAY, true);//شعاع الأوبجكت
ObjectSet(name,OBJPROP_TIMEFRAMES,OBJ_PERIOD_M15);//فريم ظهور الأوبجكت
}
ولا يمكن معرفة قيم حدود القناة مثله كمثل معظم ادوات المنصة
ولكن إذا عرفت معادلة رسم القناة يمكنك رسم شبيهها عن طريق رسم الترندات OBJ_TREND والتي يمكن الحصول على قيمتها في كل شمعة عن طريق الوظيفة ObjectValueByShift
أما معادلتها فهي معقدة نوعا ما وصعب شرحها
لكن إذا تريد قنوات د.جمال ممدوح يوجد مؤشر بالمرفق عبارة عن قنوات من ترندات يمكن التعرف على قيمها وبالتالي يمكن بناء اكسبيرت
shivaa
01-10-2019, 03:58 AM
وعليكم السلام
إذا تقصد قنوات من نوع regression يمكن رسمها عن طريق الوظيفة ObjectCreate باستدعاء القناة من نوع OBJ_REGRESSION
مثال لدالة استدعاء قناة regression كالتالي:
void draw_reg(string name,datetime time1,datetime time2,color Color)
{
ObjectCreate(name, OBJ_REGRESSION, 0,T1,0,T2,0);//نوع الأوبجكت
ObjectSet(name, OBJPROP_COLOR, Color);//لون الأوبجكت
ObjectSet(name, OBJPROP_BACK, true);//خلفية الأوبجكت
ObjectSet(name, OBJPROP_RAY, true);//شعاع الأوبجكت
ObjectSet(name,OBJPROP_TIMEFRAMES,OBJ_PERIOD_M15);//فريم ظهور الأوبجكت
}
ولا يمكن معرفة قيم حدود القناة مثله كمثل معظم ادوات المنصة
ولكن إذا عرفت معادلة رسم القناة يمكنك رسم شبيهها عن طريق رسم الترندات OBJ_TREND والتي يمكن الحصول على قيمتها في كل شمعة عن طريق الوظيفة ObjectValueByShift
أما معادلتها فهي معقدة نوعا ما وصعب شرحها
لكن إذا تريد قنوات د.جمال ممدوح يوجد مؤشر بالمرفق عبارة عن قنوات من ترندات يمكن التعرف على قيمها وبالتالي يمكن بناء اكسبيرت
السلام عليكم
كيف ايجاد قيم اخر قاعين وقمتين
مع الرسم ترند على اخر قاعين واخر قمتين
وكيف نسخ ترند
شاكر لك
kira-h
01-10-2019, 04:33 AM
السلام عليكم
كيف ايجاد قيم اخر قاعين وقمتين
مع الرسم ترند على اخر قاعين واخر قمتين
وكيف نسخ ترند
شاكر لك
وعليكم السلام
على اي اساس تبحث عن القمة والقاع ؟
أما الترند عبارة عن نقطتين سعريتين وزمنيتين ويمكنك رسمه من خلال الوظيفة ObjectCreate بالخاصية OBJ_TREND
مثال لدالة رسم الترند، فقط ضع القيم المناسبة لكل متغير :
void Draw_Trend(string name,datetime Time1,double Price1,datetime Time2,double Price2,int width,color Color)
{
if(ObjectFind(name)==-1)
{
ObjectCreate(name,OBJ_TREND,0,Time1,Price1,Time2,P rice2);
ObjectSet(name,OBJPROP_WIDTH,width);
ObjectSet(name,OBJPROP_COLOR,Color);
ObjectSet(name,OBJPROP_RAY,TRUE);
}
else if(ObjectGet(name,OBJPROP_PRICE1)!=Price1||ObjectG et(name,OBJPROP_PRICE1)!=Price2)
{
ObjectDelete(name);
Draw_Trend(name,Time1,Price1,Time2,Price2,width,Co lor);
}
}
ماذا تعني بنسخ الترند؟ إذا تقصد ترند آخر متوازي مع الترند المرسوم سلفا فتقوم بهذا بنفس طريقة رسم الترند الاساسي مع زيادة عدد نقاط محدد بالقيمتين السعريتين price1 و price2
وعليكم السلام
راجع دالة التريلينغ بالموضوع التالي: أهم الدوال البرمجية وتطبيقات لغة mql4 (https://www.fxprg.com/vb/showthread.php?t=31456&page=3&p=844599&viewfull=1#post844599)
شكراً جزيلاً أستاذى العزيز جزاك الله خيراً
silver
01-10-2019, 11:50 AM
وعليكم السلام
دالة توقيت آخر صفقة مغلقة من نوع ماركت (بيع أو شراء) كالتالي:
datetime ClosedTime(int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
datetime tm=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNo&&ty<=OP_SELL)
{
if(ty==type||type==-1)
{
return(tm);
}
}
}
return(0);
}
ثم من ضمن شروط فتح الصفقة كالتالي :
if(TimeCurrent()>=ClosedTime()+minutes*60)//do it
بحيث minutes عدد الدقائق
شكرا أستاذ حسن .. تسلم إيدك
kira-h
01-10-2019, 05:54 PM
شكرا أستاذ حسن .. تسلم إيدك
العفو أخي الكريم
kira-h
01-10-2019, 05:54 PM
شكراً جزيلاً أستاذى العزيز جزاك الله خيراً
العفو أخي الكريم
elhelaly
03-10-2019, 09:04 PM
استاذ حسن بارك الله فيك
طلب لو سمحت
......
تم فتح صفقه مثلا خلال اليوم عند مستوى معين مثلا 1.2375
عايز اقول للاكسبيرت انه ما يفتحش صفقه تانى عند نفس المستوى خلال نفس اليوم اليوم لا بيع ولا شراء اذا عاد السعر لنفس المستوى
وفى مجال معين من النقاط يعنى اكبر منه ب 5 نقاط او اصغر منه ب نقاط .... يعنى من 1.2370 الى 1.2380 اللى هما اقل منه ب 5 واعلى منه ب 5
من فضلك الكود
elhelaly
04-10-2019, 07:15 PM
استاذ حسن بارك الله فيك
طلب لو سمحت
......
تم فتح صفقه مثلا خلال اليوم عند مستوى معين مثلا 1.2375
عايز اقول للاكسبيرت انه ما يفتحش صفقه تانى عند نفس المستوى خلال نفس اليوم اليوم لا بيع ولا شراء اذا عاد السعر لنفس المستوى
وفى مجال معين من النقاط يعنى اكبر منه ب 5 نقاط او اصغر منه ب نقاط .... يعنى من 1.2370 الى 1.2380 اللى هما اقل منه ب 5 واعلى منه ب 5
من فضلك الكود
فضلا الكود استاذ حسن وللتوضيح اكتر كأنها نقطه دعم او مقاومه عاوز السعر يدخل من عندها مره واحده فى اليوم فقط بيع او شراء
ولو مر عليها مره تانيه خلال اليوم ما ياخدش صفقات من عندها
kira-h
04-10-2019, 07:31 PM
استاذ حسن بارك الله فيك
طلب لو سمحت
......
تم فتح صفقه مثلا خلال اليوم عند مستوى معين مثلا 1.2375
عايز اقول للاكسبيرت انه ما يفتحش صفقه تانى عند نفس المستوى خلال نفس اليوم اليوم لا بيع ولا شراء اذا عاد السعر لنفس المستوى
وفى مجال معين من النقاط يعنى اكبر منه ب 5 نقاط او اصغر منه ب نقاط .... يعنى من 1.2370 الى 1.2380 اللى هما اقل منه ب 5 واعلى منه ب 5
من فضلك الكود
فضلا الكود استاذ حسن وللتوضيح اكتر كأنها نقطه دعم او مقاومه عاوز السعر يدخل من عندها مره واحده فى اليوم فقط بيع او شراء
ولو مر عليها مره تانيه خلال اليوم ما ياخدش صفقات من عندها
السلام عليكم
ستقوم بعمل دالة عدد الصفقات المفتوحة خلال اليوم محصور بين سعر الماكس والمين ستيب بالنسبة للسعر الأساسي كالتالي :
int OrdersPrice(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))
{
if(OrderOpenPrice()>Price-MinStep*point&&OrderOpenPrice()<Price+MaxStep*point
&&OrderOpenTime()>iTime(Symbol(),1440,0))cnt++;
}
}
}
return(cnt);
}
فيكون شرط فتح الصفقة كالتالي :
if(OrdersPrice())==0)//...
elhelaly
04-10-2019, 09:44 PM
السلام عليكم
ستقوم بعمل دالة عدد الصفقات المفتوحة خلال اليوم محصور بين سعر الماكس والمين ستيب بالنسبة للسعر الأساسي كالتالي :
int OrdersPrice(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))
{
if(OrderOpenPrice()>Price-MinStep*point&&OrderOpenPrice()<Price+MaxStep*point
&&OrderOpenTime()>iTime(Symbol(),1440,0))cnt++;
}
}
}
return(cnt);
}
فيكون شرط فتح الصفقة كالتالي :
if(OrdersPrice())==0)//...
اشكرك اخى حسن ربنا يجعله فى ميزان حسناتك ان شاء الله
kira-h
05-10-2019, 04:26 PM
اشكرك اخى حسن ربنا يجعله فى ميزان حسناتك ان شاء الله
العفو وبالتوفيق إن شاء الله
elhelaly
08-10-2019, 09:27 PM
السلام عليكم اخى حسن
اتمنى ان تكون بخير
كيف يمكننى تحديد اخر 3 قمم و اخر 3 قيعان على مؤشر الزجزاج
احتاج الي الكود الذى يعود اليا بتلك القيم فضلا وليس امرا
ويجزاك الله خير على ما تقدمه من دعم لنا يا غالى
kira-h
09-10-2019, 01:12 PM
السلام عليكم اخى حسن
اتمنى ان تكون بخير
كيف يمكننى تحديد اخر 3 قمم و اخر 3 قيعان على مؤشر الزجزاج
احتاج الي الكود الذى يعود اليا بتلك القيم فضلا وليس امرا
ويجزاك الله خير على ما تقدمه من دعم لنا يا غالى
وعليكم السلام
دالة قيمة القاع السابق بدلالة الترتيب num:
double ZigZagBottom(int num)
{
int Num;
for(int i=0;i<Bars;i++)
{
double zig=iCustom(Symbol(),0,"ZigZag",12,5,3,0,i);
if(zig==Low[i])
{
Num++;
if(Num==num)return(zig);
}
}
return(zig);
}
وقيمة القمة السابقة بدلالة الترتيب :
double ZigZagTop(int num)
{
int Num;
for(int i=0;i<Bars;i++)
{
double zig=iCustom(Symbol(),0,"ZigZag",12,5,3,0,i);
if(zig==High[i])
{
Num++;
if(Num==num)return(zig);
}
}
return(zig);
}
elhelaly
09-10-2019, 06:51 PM
وعليكم السلام
دالة قيمة القاع السابق بدلالة الترتيب num:
double ZigZagBottom(int num)
{
int Num;
for(int i=0;i<Bars;i++)
{
double zig=iCustom(Symbol(),0,"ZigZag",12,5,3,0,i);
if(zig==Low[i])
{
Num++;
if(Num==num)return(zig);
}
}
return(zig);
}
وقيمة القمة السابقة بدلالة الترتيب :
double ZigZagTop(int num)
{
int Num;
for(int i=0;i<Bars;i++)
{
double zig=iCustom(Symbol(),0,"ZigZag",12,5,3,0,i);
if(zig==High[i])
{
Num++;
if(Num==num)return(zig);
}
}
return(zig);
}
الف شكر اخى حسن
Waddah
10-10-2019, 01:23 PM
السلام عليكم أستاذ
ممكن الكود الذي أستدعي به أسهم المؤشر المرفق ( الإندكس دائما يعطي empty value )....مع جزيل الشكر
kira-h
10-10-2019, 06:02 PM
الف شكر اخى حسن
العفو اخي الكريم
kira-h
10-10-2019, 06:04 PM
السلام عليكم أستاذ
ممكن الكود الذي أستدعي به أسهم المؤشر المرفق ( الإندكس دائما يعطي empty value )....مع جزيل الشكر
وعليكم السلام
دالة استدعاء المؤشر كالتالي:
double bs(int index)
{
return(iCustom(Symbol(),0,"Beast Super Signal",index,1));
}
ثم شرط السهم الأخضر كالتالي:
if(bs(0)!=EMPTY_VALUE)
والسهم الاحمر كالتالي:
if(bs(1)!=EMPTY_VALUE)
Waddah
12-10-2019, 11:14 AM
وعليكم السلام
دالة استدعاء المؤشر كالتالي:
double bs(int index)
{
return(iCustom(Symbol(),0,"Beast Super Signal",index,1));
}
ثم شرط السهم الأخضر كالتالي:
if(bs(0)!=EMPTY_VALUE)
والسهم الاحمر كالتالي:
if(bs(1)!=EMPTY_VALUE)
تحياتي أستاذ
عملت الكود كماذكرت في ردك لكن لم يفتح ولا صفقة رغم ظهور الأسهم والقيمة دائما للسهمين هي Empty value- وضعتها لتظهر في Comment - أظن أن هناك خدعة في برمجة هذا المؤشر وأن الأسهم هي من نوع Object وخاصة أنه لا يظهر رقم الإندكس عندما نضع الماوس على السهم ...كما في الصورة المرفقة ...مع جزيل الشكر
kira-h
13-10-2019, 12:43 AM
تحياتي أستاذ
عملت الكود كماذكرت في ردك لكن لم يفتح ولا صفقة رغم ظهور الأسهم والقيمة دائما للسهمين هي Empty value- وضعتها لتظهر في Comment - أظن أن هناك خدعة في برمجة هذا المؤشر وأن الأسهم هي من نوع Object وخاصة أنه لا يظهر رقم الإندكس عندما نضع الماوس على السهم ...كما في الصورة المرفقة ...مع جزيل الشكر
الكود سليم وسبق ان تم عمله باكسبيرت بالموضوع التالي: عمل اكسبيرت لمؤشر وحش لا يعيد رسم نفسه (https://www.fxprg.com/vb/showthread.php?t=35920)استخدم باكتيست من نوع EveryTick
اما عن الكومنت فمن الممكن ان لا يقدر على رصد قيمة السهم إذا قام مبرمج المؤشر باعادة قيمته الاصلية EMPTYVALUE مباشرة بعد رسم الاشارة
ولا تنسى مراجعة الاخطاء بالجورنال
Waddah
13-10-2019, 10:04 AM
الكود سليم وسبق ان تم عمله باكسبيرت بالموضوع التالي: عمل اكسبيرت لمؤشر وحش لا يعيد رسم نفسه (https://www.fxprg.com/vb/showthread.php?t=35920)
استخدم باكتيست من نوع EveryTick
اما عن الكومنت فمن الممكن ان لا يقدر على رصد قيمة السهم إذا قام مبرمج المؤشر باعادة قيمته الاصلية EMPTYVALUE مباشرة بعد رسم الاشارة
ولا تنسى مراجعة الاخطاء بالجورنال
شكرا جزيلا للرد أستاذ .... قمت بعمل باك تيست للإكسبرت الذي ذكرته والنتيجة هي نفس ما وصلت إليه ..... لايتم فتح أي صفقة فقط راسائل في الجورنال للبيع أو الشراء ولا يوجد أي أخطاء في الجورنال كما في الصورة المرفقة ...لو تكرمت ممكن تعمل باك تيست وتتأكد من الموضوع ...مع الشكر الجزيل لسعة صدرك
17308
kira-h
13-10-2019, 05:39 PM
شكرا جزيلا للرد أستاذ .... قمت بعمل باك تيست للإكسبرت الذي ذكرته والنتيجة هي نفس ما وصلت إليه ..... لايتم فتح أي صفقة فقط راسائل في الجورنال للبيع أو الشراء ولا يوجد أي أخطاء في الجورنال كما في الصورة المرفقة ...لو تكرمت ممكن تعمل باك تيست وتتأكد من الموضوع ...مع الشكر الجزيل لسعة صدرك
17308
يوجد خطأ ما بدالة استدعاء المؤشر
اما إذا تقصد الاكسبيرت بموضوع الطلب فهو يعمل معي عادي ولا يوجد اخطاء!
amr2020
14-10-2019, 01:30 AM
السلام عليكم أخي حسن
عندي سؤال اريد ان اعرف هل يمكن برمجته ام لا وهو كالتالي:
عند إعطاء مؤشر ما إشارة بيع (لأزواج محددة مسبقًا ) (خلال فترة زمنية محددة مثلا اربع ساعات) يضع صفقات معلقه ذات نوع Stop على بعد نقاط محدده على الأزواج التي توفرت فيها الشروط
مثلا اذا شغلنا الاكسبيرت على خمسة أزواج
GBPUSD
GBPJPY
GBPNZD
GBPCHF
GBPCAD
فمثلًا أعطى المؤشر إشارة بيع على الباوند دولار الساعة ١٢:٣٠
واعطى إشارة بيع على الباوند كندي والباوند نيوزلندي الساعة ١٣:٠٠
عند إعطاء اشارات متشابهة (بيع مثلا) على ثلاثة أزواج كحد ادنى خلال ١٢٠ دقيقة مثلا بين ظهور اول اشارة وظهور ثالث اشارة
عندها يتم وضع ثلاث صفقات معلقة ( sell stop ) على الثلاث ازواج على بعد نقاط محدده سلفًا من الإعدادات
المطلوب بالإعدادات الخارجية للاكسبيرت
١- تحديد الأزواج التي سيعمل عليها الاكسبيرت لتحديد تطابق الإشارات بينهم
٢- اضافة اختيار المده الزمنية التي سيبدأ يحسب الاكسبيرت بين اول اشارة لثالث اشارة ، إذا مضت المده ولم تكتمل الإشارات الثلاث يبدأ حساب المده من جديد
نفس الشيء بالنسبة للشراء
فهل يمكن برمجة مثل هذا الطلب ، انا فقط اسأل على الامكانية البرمجية
وشكرا جزيلا
kira-h
14-10-2019, 10:14 PM
السلام عليكم أخي حسن
عندي سؤال اريد ان اعرف هل يمكن برمجته ام لا وهو كالتالي:
عند إعطاء مؤشر ما إشارة بيع (لأزواج محددة مسبقًا ) (خلال فترة زمنية محددة مثلا اربع ساعات) يضع صفقات معلقه ذات نوع Stop على بعد نقاط محدده على الأزواج التي توفرت فيها الشروط
مثلا اذا شغلنا الاكسبيرت على خمسة أزواج
GBPUSD
GBPJPY
GBPNZD
GBPCHF
GBPCAD
فمثلًا أعطى المؤشر إشارة بيع على الباوند دولار الساعة ١٢:٣٠
واعطى إشارة بيع على الباوند كندي والباوند نيوزلندي الساعة ١٣:٠٠
عند إعطاء اشارات متشابهة (بيع مثلا) على ثلاثة أزواج كحد ادنى خلال ١٢٠ دقيقة مثلا بين ظهور اول اشارة وظهور ثالث اشارة
عندها يتم وضع ثلاث صفقات معلقة ( sell stop ) على الثلاث ازواج على بعد نقاط محدده سلفًا من الإعدادات
المطلوب بالإعدادات الخارجية للاكسبيرت
١- تحديد الأزواج التي سيعمل عليها الاكسبيرت لتحديد تطابق الإشارات بينهم
٢- اضافة اختيار المده الزمنية التي سيبدأ يحسب الاكسبيرت بين اول اشارة لثالث اشارة ، إذا مضت المده ولم تكتمل الإشارات الثلاث يبدأ حساب المده من جديد
نفس الشيء بالنسبة للشراء
فهل يمكن برمجة مثل هذا الطلب ، انا فقط اسأل على الامكانية البرمجية
وشكرا جزيلا
وعليكم السلام
نعم ممكن
amr2020
15-10-2019, 12:55 AM
وعليكم السلام
نعم ممكن
شكرا جزيلا أخي حسن
elhelaly
15-10-2019, 07:46 PM
استاذ حسن فضلا اخى الكريم
احتاج الى كود اغلاق اول صفقه بيع او اول صفقه شراء على الشارت للزوج المفعل عليه الاكسبيرت
مثلا قمنا بفتح 10 صفقات شراء او بيع على زوج معين نريد اغلاق اول صفقه تم فتحها
مع العلم اننى استخدم داله جاهزه لارسال اوامر البيع او الشراء
Buyorder ();
وليس Ordersend();
فضلا الكود استاذ حسن
kira-h
15-10-2019, 11:23 PM
شكرا جزيلا أخي حسن
العفو أخي الكريم
kira-h
15-10-2019, 11:25 PM
استاذ حسن فضلا اخى الكريم
احتاج الى كود اغلاق اول صفقه بيع او اول صفقه شراء على الشارت للزوج المفعل عليه الاكسبيرت
مثلا قمنا بفتح 10 صفقات شراء او بيع على زوج معين نريد اغلاق اول صفقه تم فتحها
مع العلم اننى استخدم داله جاهزه لارسال اوامر البيع او الشراء
Buyorder ();
وليس Ordersend();
فضلا الكود استاذ حسن
لايمكن اغلاق صفقة محددة ضمن مجموعة صفقات دون شرط لتمييزها مثل شرط الربح أو الخسارة او الزمن او رقم التيكت...
elhelaly
16-10-2019, 12:07 AM
لايمكن اغلاق صفقة محددة ضمن مجموعة صفقات دون شرط لتمييزها مثل شرط الربح أو الخسارة او الزمن او رقم التيكت...
شكرا اخى حسن وجدت هذا الكود وهو بفي بالغرض مشكور استاذي
bool select=OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY)
{
bool close=OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
else if(OrderType()==OP_SELL)
{
bool close=OrderClose(OrderTicket(),OrderLots(),Ask,3);
}
kira-h
16-10-2019, 12:32 AM
شكرا اخى حسن وجدت هذا الكود وهو بفي بالغرض مشكور استاذي
bool select=OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY)
{
bool close=OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
else if(OrderType()==OP_SELL)
{
bool close=OrderClose(OrderTicket(),OrderLots(),Ask,3);
}
العفو
لكن هذا الكود سيقوم باغلاق صفقة تلو الاخرى..، يجب إضافة شرط ما لايقاف الاغلاق!
elhelaly
16-10-2019, 07:25 PM
العفو
لكن هذا الكود سيقوم باغلاق صفقة تلو الاخرى..، يجب إضافة شرط ما لايقاف الاغلاق!
نعم اخى حسن تم وضع شرط لذلك شكرا كثيرا اخى
kira-h
16-10-2019, 08:20 PM
نعم اخى حسن تم وضع شرط لذلك شكرا كثيرا اخى
بالتوفيق إن شاء الله
elhelaly
17-10-2019, 01:58 AM
اخى حسن هل يمكنك ان تشرح لى كيفيه استخراج نقطتين دعم ونقطتين مقاومه بناء على مؤشر الزجزاج
على ان ترتكز كل نقطه على 3 قمم او 3 قيعان خلال مثلا 400 شمعه ماضيه
كيف يمكننى صياغه ذلك برمجيا فضلا وليس امرا
مرفق اكسبيرت يعتمد على الباربوليك سار فى القمم والقيعان ان امكن شرح جزء تحديد القمم والقيعان فيه بالعربى اكون شاكر جدا جدا
//*************************************#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_width1 3
#property indicator_width2 3
//////////////////////////////
extern double Step=0.02;
extern double Maximum=0.2;
//////////////////////////////
extern string M1_Setting="<<< M1 >>>";
extern bool Show_M1=false;
extern int Top_Above_M1=1;
extern int Top_Under_M1=1;
extern int Bottom_Above_M1=1;
extern int Bottom_Under_M1=1;
extern int Size_M1=0;
extern color ColorUP_M1=MistyRose;
extern color ColorDN_M1=LightGreen;
extern string M5_Setting="<<< M5 >>>";
extern bool Show_M5=false;
extern int Top_Above_M5=1;
extern int Top_Under_M5=1;
extern int Bottom_Above_M5=1;
extern int Bottom_Under_M5=1;
extern int Size_M5=0;
extern color ColorUP_M5=PeachPuff;
extern color ColorDN_M5=Lavender;
extern string M15_Setting="<<< M15 >>>";
extern bool Show_M15=false;
extern int Top_Above_M15=1;
extern int Top_Under_M15=1;
extern int Bottom_Above_M15=1;
extern int Bottom_Under_M15=1;
extern int Size_M15=0;
extern color ColorUP_M15=SandyBrown;
extern color ColorDN_M15=Wheat;
extern string M30_Setting="<<< M30 >>>";
extern bool Show_M30=false;
extern int Top_Above_M30=1;
extern int Top_Under_M30=1;
extern int Bottom_Above_M30=1;
extern int Bottom_Under_M30=1;
extern int Size_M30=0;
extern color ColorUP_M30=Pink;
extern color ColorDN_M30=DarkSeaGreen;
extern string H1_Setting="<<< H1 >>>";
extern bool Show_H1=true;
extern int Top_Above_H1=2;
extern int Top_Under_H1=2;
extern int Bottom_Above_H1=2;
extern int Bottom_Under_H1=2;
extern int Size_H1=1;
extern color ColorUP_H1=LightSalmon;
extern color ColorDN_H1=PaleTurquoise;
extern string H4_Setting="<<< H4 >>>";
extern bool Show_H4=true;
extern int Top_Above_H4=6;
extern int Top_Under_H4=6;
extern int Bottom_Above_H4=6;
extern int Bottom_Under_H4=6;
extern int Size_H4=1;
extern color ColorUP_H4=HotPink;
extern color ColorDN_H4=LightSteelBlue;
extern string D1_Setting="<<< D1 >>>";
extern bool Show_D1=false;
extern int Top_Above_D1=2;
extern int Top_Under_D1=2;
extern int Bottom_Above_D1=2;
extern int Bottom_Under_D1=2;
extern int Size_D1=2;
extern color ColorUP_D1=IndianRed;
extern color ColorDN_D1=DarkTurquoise;
extern string W1_Setting="<<< W1 >>>";
extern bool Show_W1=false;
extern int Top_Above_W1=2;
extern int Top_Under_W1=2;
extern int Bottom_Above_W1=2;
extern int Bottom_Under_W1=2;
extern int Size_W1=2;
extern color ColorUP_W1=OrangeRed;
extern color ColorDN_W1=DodgerBlue;
extern string MN1_Setting="<<< MN1 >>>";
extern bool Show_MN1=false;
extern int Top_Above_MN1=2;
extern int Top_Under_MN1=2;
extern int Bottom_Above_MN1=2;
extern int Bottom_Under_MN1=2;
extern int Size_MN1=3;
extern color ColorUP_MN1=Red;
extern color ColorDN_MN1=Blue;
extern bool Alert_ON=true;
extern int Trade_Signal=0;
extern bool Show_arrows=false;
extern bool Arrow_History=false;
extern int Arrow_distance=10;
//////////////////////////////
double arrow_up[];
double arrow_dn[];
double sar1_M1[][2];
double sar2_M1[][2];
double sar1_M5[][2];
double sar2_M5[][2];
double sar1_M15[][2];
double sar2_M15[][2];
double sar1_M30[][2];
double sar2_M30[][2];
double sar1_H1[][2];
double sar2_H1[][2];
double sar1_H4[][2];
double sar2_H4[][2];
double sar1_D1[][2];
double sar2_D1[][2];
double sar1_W1[][2];
double sar2_W1[][2];
double sar1_MN1[][2];
double sar2_MN1[][2];
double tag1,tag2;
//+------------------------------------------------------------------+
int init()
{
//----
Comment(" Mahmoud Amer "+"\n"+"pisces7644@hotmail.com");
//----
SetIndexStyle(0,DRAW_ARROW);
SetIndexBuffer(0,arrow_up);
SetIndexArrow(0,233);
//
SetIndexStyle(1,DRAW_ARROW);
SetIndexBuffer(1,arrow_dn);
SetIndexArrow(1,234);
return(0);
}
//+------------------------------------------------------------------+
int deinit()
{
Comment("");
ObjectsDeleteAll(0,OBJ_HLINE);
return(0);
}
//+------------------------------------------------------------------+
int start()
{
int pls=4;
int counted_bars= IndicatorCounted(),limit,i;
if (counted_bars>0)
counted_bars--;
limit= Bars - counted_bars;
int brs=limit;
ArrayResize(sar1_M1,brs);ArrayResize(sar2_M1,brs);
ArrayResize(sar1_M5,brs);ArrayResize(sar2_M5,brs);
ArrayResize(sar1_M15,brs);ArrayResize(sar2_M15,brs );
ArrayResize(sar1_M30,brs);ArrayResize(sar2_M30,brs );
ArrayResize(sar1_H1,brs);ArrayResize(sar2_H1,brs);
ArrayResize(sar1_H4,brs);ArrayResize(sar2_H4,brs);
ArrayResize(sar1_D1,brs);ArrayResize(sar2_D1,brs);
ArrayResize(sar1_W1,brs);ArrayResize(sar2_W1,brs);
ArrayResize(sar1_MN1,brs);ArrayResize(sar2_MN1,brs );
int a1_1=0,a2_1=0;int a1_5=0,a2_5=0;int a1_15=0,a2_15=0;int a1_30=0,a2_30=0;int a1_60=0,a2_60=0;
int a1_4=0,a2_4=0;int a1_d=0,a2_d=0;int a1_w=0,a2_w=0;int a1_m=0,a2_m=0;
RefreshRates();
double av1,av2;
for(i=1;i<=limit;i++)
{
if(Show_M1==true && Period()==1)
{
av1=(iHigh(Symbol(),PERIOD_M1,i)+iLow(Symbol(),PER IOD_M1,i))/2;
av2=(iHigh(Symbol(),PERIOD_M1,i+1)+iLow(Symbol(),P ERIOD_M1,i+1))/2;
if(sar(1,i)>=av1 && sar(1,i+1)<=av2){sar1_M1[a1_1][0]=iTime(Symbol(),PERIOD_M1,i);sar1_M1[a1_1][1]=sar(1,i);a1_1++;}//down on kema
if(sar(1,i)<=av1 && sar(1,i+1)>=av2){sar2_M1[a2_1][0]=iTime(Symbol(),PERIOD_M1,i);sar2_M1[a2_1][1]=sar(1,i);a2_1++;}//up on ka3
}
if(Show_M5==true && Period()<=5)
{
av1=(iHigh(Symbol(),PERIOD_M5,i)+iLow(Symbol(),PER IOD_M5,i))/2;
av2=(iHigh(Symbol(),PERIOD_M5,i+1)+iLow(Symbol(),P ERIOD_M5,i+1))/2;
if(sar(5,i)>=av1 && sar(5,i+1)<=av2){sar1_M5[a1_5][0]=iTime(Symbol(),PERIOD_M5,i);sar1_M5[a1_5][1]=sar(5,i);a1_5++;}//down on kema
if(sar(5,i)<=av1 && sar(5,i+1)>=av2){sar2_M5[a2_5][0]=iTime(Symbol(),PERIOD_M5,i);sar2_M5[a2_5][1]=sar(5,i);a2_5++;}//up on ka3
}
if(Show_M15==true && Period()<=15)
{
av1=(iHigh(Symbol(),PERIOD_M15,i)+iLow(Symbol(),PE RIOD_M15,i))/2;
av2=(iHigh(Symbol(),PERIOD_M15,i+1)+iLow(Symbol(), PERIOD_M15,i+1))/2;
if(sar(15,i)>=av1 && sar(15,i+1)<=av2){sar1_M15[a1_15][0]=iTime(Symbol(),PERIOD_M15,i);sar1_M15[a1_15][1]=sar(15,i);a1_15++;}//down on kema
if(sar(15,i)<=av1 && sar(15,i+1)>=av2){sar2_M15[a2_15][0]=iTime(Symbol(),PERIOD_M15,i);sar2_M15[a2_15][1]=sar(15,i);a2_15++;}//up on ka3
}
if(Show_M30==true && Period()<=30)
{
av1=(iHigh(Symbol(),PERIOD_M30,i)+iLow(Symbol(),PE RIOD_M30,i))/2;
av2=(iHigh(Symbol(),PERIOD_M30,i+1)+iLow(Symbol(), PERIOD_M30,i+1))/2;
if(sar(30,i)>=av1 && sar(30,i+1)<=av2){sar1_M30[a1_30][0]=iTime(Symbol(),PERIOD_M30,i);sar1_M30[a1_30][1]=sar(30,i);a1_30++;}//down on kema
if(sar(30,i)<=av1 && sar(30,i+1)>=av2){sar2_M30[a2_30][0]=iTime(Symbol(),PERIOD_M30,i);sar2_M30[a2_30][1]=sar(30,i);a2_30++;}//up on ka3
}
if(Show_H1==true && Period()<=60)
{
av1=(iHigh(Symbol(),PERIOD_H1,i)+iLow(Symbol(),PER IOD_H1,i))/2;
av2=(iHigh(Symbol(),PERIOD_H1,i+1)+iLow(Symbol(),P ERIOD_H1,i+1))/2;
if(sar(60,i)>=av1 && sar(60,i+1)<=av2){sar1_H1[a1_60][0]=iTime(Symbol(),PERIOD_H1,i);sar1_H1[a1_60][1]=sar(60,i);a1_60++;}//down on kema
if(sar(60,i)<=av1 && sar(60,i+1)>=av2){sar2_H1[a2_60][0]=iTime(Symbol(),PERIOD_H1,i);sar2_H1[a2_60][1]=sar(60,i);a2_60++;}//up on ka3
}
if(Show_H4==true && Period()<=240)
{
av1=(iHigh(Symbol(),PERIOD_H4,i)+iLow(Symbol(),PER IOD_H4,i))/2;
av2=(iHigh(Symbol(),PERIOD_H4,i+1)+iLow(Symbol(),P ERIOD_H4,i+1))/2;
if(sar(240,i)>=av1 && sar(240,i+1)<=av2){sar1_H4[a1_4][0]=iTime(Symbol(),PERIOD_H4,i);sar1_H4[a1_4][1]=sar(240,i);a1_4++;}//down on kema
if(sar(240,i)<=av1 && sar(240,i+1)>=av2){sar2_H4[a2_4][0]=iTime(Symbol(),PERIOD_H4,i);sar2_H4[a2_4][1]=sar(240,i);a2_4++;}//up on ka3
}
if(Show_D1==true && Period()<=1440)
{
av1=(iHigh(Symbol(),PERIOD_D1,i)+iLow(Symbol(),PER IOD_D1,i))/2;
av2=(iHigh(Symbol(),PERIOD_D1,i+1)+iLow(Symbol(),P ERIOD_D1,i+1))/2;
if(sar(1440,i)>=av1 && sar(1440,i+1)<=av2){sar1_D1[a1_d][0]=iTime(Symbol(),PERIOD_D1,i);sar1_D1[a1_d][1]=sar(1440,i);a1_d++;}//down on kema
if(sar(1440,i)<=av1 && sar(1440,i+1)>=av2){sar2_D1[a2_d][0]=iTime(Symbol(),PERIOD_D1,i);sar2_D1[a2_d][1]=sar(1440,i);a2_d++;}//up on ka3
}
if(Show_W1==true && Period()<=10080)
{
av1=(iHigh(Symbol(),PERIOD_W1,i)+iLow(Symbol(),PER IOD_W1,i))/2;
av2=(iHigh(Symbol(),PERIOD_W1,i+1)+iLow(Symbol(),P ERIOD_W1,i+1))/2;
if(sar(10080,i)>=av1 && sar(10080,i+1)<=av2){sar1_W1[a1_w][0]=iTime(Symbol(),PERIOD_W1,i);sar1_W1[a1_w][1]=sar(10080,i);a1_w++;}//down on kema
if(sar(10080,i)<=iLow(Symbol(),PERIOD_W1,i) && sar(10080,i+1)>=iHigh(Symbol(),PERIOD_W1,i+1)){sar2_W1[a2_w][0]=iTime(Symbol(),PERIOD_W1,i);sar2_W1[a2_w][1]=sar(10080,i);a2_w++;}//up on ka3
}
if(Show_MN1==true && Period()<=43200)
{
av1=(iHigh(Symbol(),PERIOD_MN1,i)+iLow(Symbol(),PE RIOD_MN1,i))/2;
av2=(iHigh(Symbol(),PERIOD_MN1,i+1)+iLow(Symbol(), PERIOD_MN1,i+1))/2;
if(sar(43200,i)>=av1 && sar(43200,i+1)<=av2){sar1_MN1[a1_m][0]=iTime(Symbol(),PERIOD_MN1,i);sar1_MN1[a1_m][1]=sar(43200,i);a1_m++;}//down on kema
if(sar(43200,i)<=av1 && sar(43200,i+1)>=av2){sar2_MN1[a2_m][0]=iTime(Symbol(),PERIOD_MN1,i);sar2_MN1[a2_m][1]=sar(43200,i);a2_m++;}//up on ka3
}
}
////////
int t;color clr1=Red,clr2=Blue;
int c_m1,d_m1,c_m5,d_m5,c_m15,d_m15,c_m30,d_m30,c_h1,d _h1,c_h4,d_h4,c_d1,d_d1,c_w1,d_w1,c_mn1=0,d_mn1=0;
int Lines_Total=((Top_Above_M1+Top_Above_M5+Top_Above_ M30+Top_Above_H1+Top_Above_H4+Top_Above_D1+Top_Abo ve_W1+Top_Above_MN1)*2);
///////////////// 1=kema 2=ka3
c_m1=0;d_m1=0;c_m5=0;d_m5=0;c_m15=0;d_m15=0;c_m30= 0;d_m30=0;c_h1=0;d_h1=0;c_h4=0;d_h4=0;c_d1=0;d_d1= 0;c_w1=0;d_w1=0;c_mn1=0;d_mn1=0;
/////
for(t=0;t<Lines_Total+10;t++)
{
if(Show_M1==true && Period()<=1)
{
if(c_m1<Top_Above_M1)
{
if(sar1_M1[t][1]>Close[0]){clr1=ColorUP_M1;//else clr1=ColorDN_H1;
set_h("M1:"+TimeToStr(sar1_M1[t][0],TIME_DATE|TIME_MINUTES), sar1_M1[t][1],clr1, 0,Size_M1);c_m1++;}
}
}
}
for(t=0;t<Lines_Total+10;t++)
{
if(Show_M1==true && Period()<=1)
{
if(d_m1<Bottom_Above_M1)
{
if(sar2_M1[t][1]>Close[0]){clr2=ColorUP_M1;//else clr2=ColorDN_H1;
set_h("M1:"+TimeToStr(sar2_M1[t][0],TIME_DATE|TIME_MINUTES), sar2_M1[t][1],clr2, 0,Size_M1);d_m1++;}
}
}
}
////////////
for(t=0;t<Lines_Total+10;t++)
{
if(Show_M5==true && Period()<=5)
{
if(c_m5<Top_Above_M5)
{
if(sar1_M5[t][1]>Close[0]){clr1=ColorUP_M5;//else clr1=ColorDN_H1;
set_h("M5:"+TimeToStr(sar1_M5[t][0],TIME_DATE|TIME_MINUTES), sar1_M5[t][1],clr1, 0,Size_M5);c_m5++;}
}
}
}
for(t=0;t<Lines_Total+10;t++)
{
if(Show_M5==true && Period()<=5)
{
if(d_m5<Bottom_Above_M5)
{
if(sar2_M5[t][1]>Close[0]){clr2=ColorUP_M5;//else clr2=ColorDN_H1;
set_h("M5:"+TimeToStr(sar2_M5[t][0],TIME_DATE|TIME_MINUTES), sar2_M5[t][1],clr2, 0,Size_M5);d_m5++;}
}
}
}
////////////
for(t=0;t<Lines_Total+10;t++)
{
if(Show_M15==true && Period()<=15)
{
if(c_m15<Top_Above_M15)
{
if(sar1_M15[t][1]>Close[0]){clr1=ColorUP_M15;//else clr1=ColorDN_H1;
set_h("M15:"+TimeToStr(sar1_M15[t][0],TIME_DATE|TIME_MINUTES), sar1_M15[t][1],clr1, 0,Size_M15);c_m15++;}
}
}
}
for(t=0;t<Lines_Total+10;t++)
{
if(Show_M15==true && Period()<=15)
{
if(d_m15<Bottom_Above_M15)
{
if(sar2_M15[t][1]>Close[0]){clr2=ColorUP_M15;//else clr2=ColorDN_H1;
set_h("M15:"+TimeToStr(sar2_M15[t][0],TIME_DATE|TIME_MINUTES), sar2_M15[t][1],clr2, 0,Size_M15);d_m15++;}
}
}
}
////////////
for(t=0;t<Lines_Total+10;t++)
{
if(Show_M30==true && Period()<=30)
{
if(c_m30<Top_Above_M30)
{
if(sar1_M30[t][1]>Close[0]){clr1=ColorUP_M30;//else clr1=ColorDN_H1;
set_h("M30:"+TimeToStr(sar1_M30[t][0],TIME_DATE|TIME_MINUTES), sar1_M30[t][1],clr1, 0,Size_M30);c_m30++;}
}
}
}
for(t=0;t<Lines_Total+10;t++)
{
if(Show_M30==true && Period()<=30)
{
if(d_m30<Bottom_Above_M30)
{
if(sar2_M30[t][1]>Close[0]){clr2=ColorUP_M30;//else clr2=ColorDN_H1;
set_h("M30:"+TimeToStr(sar2_M30[t][0],TIME_DATE|TIME_MINUTES), sar2_M30[t][1],clr2, 0,Size_M30);d_m30++;}
}
}
}
////////////
for(t=0;t<Lines_Total+10;t++)
{
if(Show_H1==true && Period()<=60)
{
if(c_h1<Top_Above_H1)
{
if(sar1_H1[t][1]>Close[0]){clr1=ColorUP_H1;//else clr1=ColorDN_H1;
set_h("H1:"+TimeToStr(sar1_H1[t][0],TIME_DATE|TIME_MINUTES), sar1_H1[t][1],clr1, 0,Size_H1);c_h1++;}
}
}
}
for(t=0;t<Lines_Total+10;t++)
{
if(Show_H1==true && Period()<=60)
{
if(d_h1<Bottom_Above_H1)
{
if(sar2_H1[t][1]>Close[0]){clr2=ColorUP_H1;//else clr2=ColorDN_H1;
set_h("H1:"+TimeToStr(sar2_H1[t][0],TIME_DATE|TIME_MINUTES), sar2_H1[t][1],clr2, 0,Size_H1);d_h1++;}
}
}
}
////////////
for(t=0;t<Lines_Total+10;t++)
{
if(Show_H4==true && Period()<=240)
{
if(c_h4<Top_Above_H4)
{
if(sar1_H4[t][1]>Close[0]){clr1=ColorUP_H4;//else clr1=ColorDN_H1;
set_h("H4:"+TimeToStr(sar1_H4[t][0],TIME_DATE|TIME_MINUTES), sar1_H4[t][1],clr1, 0,Size_H4);c_h4++;}
}
}
}
for(t=0;t<Lines_Total+10;t++)
{
if(Show_H4==true && Period()<=240)
{
if(d_h4<Bottom_Above_H4)
{
if(sar2_H4[t][1]>Close[0]){clr2=ColorUP_H4;//else clr2=ColorDN_H1;
set_h("H4:"+TimeToStr(sar2_H4[t][0],TIME_DATE|TIME_MINUTES), sar2_H4[t][1],clr2, 0,Size_H4);d_h4++;}
}
}
}
////////////
for(t=0;t<Lines_Total+10;t++)
{
if(Show_D1==true && Period()<=1440)
{
if(c_d1<Top_Above_D1)
{
if(sar1_D1[t][1]>Close[0]){clr1=ColorUP_D1;//else clr1=ColorDN_H1;
set_h("D1:"+TimeToStr(sar1_D1[t][0],TIME_DATE|TIME_MINUTES), sar1_D1[t][1],clr1, 0,Size_D1);c_d1++;}
}
}
}
for(t=0;t<Lines_Total+10;t++)
{
if(Show_D1==true && Period()<=1440)
{
if(d_d1<Bottom_Above_D1)
{
if(sar2_D1[t][1]>Close[0]){clr2=ColorUP_D1;//else clr2=ColorDN_H1;
set_h("D1:"+TimeToStr(sar2_D1[t][0],TIME_DATE|TIME_MINUTES), sar2_D1[t][1],clr2, 0,Size_D1);d_d1++;}
}
}
}
////////////
for(t=0;t<Lines_Total+10;t++)
{
if(Show_W1==true && Period()<=10080)
{
if(c_w1<Top_Above_W1)
{
if(sar1_W1[t][1]>Close[0]){clr1=ColorUP_W1;//else clr1=ColorDN_H1;
set_h("W1:"+TimeToStr(sar1_W1[t][0],TIME_DATE|TIME_MINUTES), sar1_W1[t][1],clr1, 0,Size_W1);c_w1++;}
}
}
}
for(t=0;t<Lines_Total+10;t++)
{
if(Show_W1==true && Period()<=10080)
{
if(d_w1<Bottom_Above_W1)
{
if(sar2_W1[t][1]>Close[0]){clr2=ColorUP_W1;//else clr2=ColorDN_H1;
set_h("W1:"+TimeToStr(sar2_W1[t][0],TIME_DATE|TIME_MINUTES), sar2_W1[t][1],clr2, 0,Size_W1);d_w1++;}
}
}
}
////////////
for(t=0;t<Lines_Total+10;t++)
{
if(Show_MN1==true && Period()<=43200)
{
if(c_mn1<Top_Above_MN1)
{
if(sar1_MN1[t][1]>Close[0]){clr1=ColorUP_MN1;//else clr1=ColorDN_H1;
set_h("MN1:"+TimeToStr(sar1_MN1[t][0],TIME_DATE|TIME_MINUTES), sar1_MN1[t][1],clr1, 0,Size_MN1);c_mn1++;}
}
}
}
for(t=0;t<Lines_Total+10;t++)
{
if(Show_MN1==true && Period()<=43200)
{
if(d_mn1<Bottom_Above_MN1)
{
if(sar2_MN1[t][1]>Close[0]){clr2=ColorUP_MN1;//else clr2=ColorDN_H1;
set_h("MN1:"+TimeToStr(sar2_MN1[t][0],TIME_DATE|TIME_MINUTES), sar2_MN1[t][1],clr2, 0,Size_MN1);d_mn1++;}
}
}
}
///////////////////
c_m1=0;d_m1=0;c_m5=0;d_m5=0;c_m15=0;d_m15=0;c_m30= 0;d_m30=0;c_h1=0;d_h1=0;c_h4=0;d_h4=0;c_d1=0;d_d1= 0;c_w1=0;d_w1=0;c_mn1=0;d_mn1=0;
//////////////////
for(t=0;t<Lines_Total+10;t++)
{
if(Show_M1==true && Period()<=1)
{
if(c_m1<Top_Under_M1)
{
if(sar1_M1[t][1]<Close[0]){clr1=ColorDN_M1;//else clr1=ColorDN_H1;
set_h("M1:"+TimeToStr(sar1_M1[t][0],TIME_DATE|TIME_MINUTES), sar1_M1[t][1],clr1, 0,Size_M1);c_m1++;}
}
}
}
for(t=0;t<Lines_Total+10;t++)
{
if(Show_M1==true && Period()<=1)
{
if(d_m1<Bottom_Under_M1)
{
if(sar2_M1[t][1]<Close[0]){clr2=ColorDN_M1;//else clr2=ColorDN_H1;
set_h("M1:"+TimeToStr(sar2_M1[t][0],TIME_DATE|TIME_MINUTES), sar2_M1[t][1],clr2, 0,Size_M1);d_m1++;}
}
}
}
////////////
for(t=0;t<Lines_Total+10;t++)
{
if(Show_M5==true && Period()<=5)
{
if(c_m5<Top_Under_M5)
{
if(sar1_M5[t][1]<Close[0]){clr1=ColorDN_M5;//else clr1=ColorDN_H1;
set_h("M5:"+TimeToStr(sar1_M5[t][0],TIME_DATE|TIME_MINUTES), sar1_M5[t][1],clr1, 0,Size_M5);c_m5++;}
}
}
}
for(t=0;t<Lines_Total+10;t++)
{
if(Show_M5==true && Period()<=5)
{
if(d_m5<Bottom_Under_M5)
{
if(sar2_M5[t][1]<Close[0]){clr2=ColorDN_M5;//else clr2=ColorDN_H1;
set_h("M5:"+TimeToStr(sar2_M5[t][0],TIME_DATE|TIME_MINUTES), sar2_M5[t][1],clr2, 0,Size_M5);d_m5++;}
}
}
}
////////////
for(t=0;t<Lines_Total+10;t++)
{
if(Show_M15==true && Period()<=15)
{
if(c_m15<Top_Under_M15)
{
if(sar1_M15[t][1]<Close[0]){clr1=ColorDN_M15;//else clr1=ColorDN_H1;
set_h("M15:"+TimeToStr(sar1_M15[t][0],TIME_DATE|TIME_MINUTES), sar1_M15[t][1],clr1, 0,Size_M15);c_m15++;}
}
}
}
for(t=0;t<Lines_Total+10;t++)
{
if(Show_M15==true && Period()<=15)
{
if(d_m15<Bottom_Under_M15)
{
if(sar2_M15[t][1]<Close[0]){clr2=ColorDN_M15;//else clr2=ColorDN_H1;
set_h("M15:"+TimeToStr(sar2_M15[t][0],TIME_DATE|TIME_MINUTES), sar2_M15[t][1],clr2, 0,Size_M15);d_m15++;}
}
}
}
////////////
for(t=0;t<Lines_Total+10;t++)
{
if(Show_M30==true && Period()<=30)
{
if(c_m30<Top_Under_M30)
{
if(sar1_M30[t][1]<Close[0]){clr1=ColorDN_M30;//else clr1=ColorDN_H1;
set_h("M30:"+TimeToStr(sar1_M30[t][0],TIME_DATE|TIME_MINUTES), sar1_M30[t][1],clr1, 0,Size_M30);c_m30++;}
}
}
}
for(t=0;t<Lines_Total+10;t++)
{
if(Show_M30==true && Period()<=30)
{
if(d_m30<Bottom_Under_M30)
{
if(sar2_M30[t][1]<Close[0]){clr2=ColorDN_M30;//else clr2=ColorDN_H1;
set_h("M30:"+TimeToStr(sar2_M30[t][0],TIME_DATE|TIME_MINUTES), sar2_M30[t][1],clr2, 0,Size_M30);d_m30++;}
}
}
}
////////////
for(t=0;t<Lines_Total+10;t++)
{
if(Show_H1==true && Period()<=60)
{
if(c_h1<Top_Under_H1)
{
if(sar1_H1[t][1]<Close[0]){clr1=ColorDN_H1;//else clr1=ColorDN_H1;
set_h("H1:"+TimeToStr(sar1_H1[t][0],TIME_DATE|TIME_MINUTES), sar1_H1[t][1],clr1, 0,Size_H1);c_h1++;}
}
}
}
for(t=0;t<Lines_Total+10;t++)
{
if(Show_H1==true && Period()<=60)
{
if(d_h1<Bottom_Under_H1)
{
if(sar2_H1[t][1]<Close[0]){clr2=ColorDN_H1;//else clr2=ColorDN_H1;
set_h("H1:"+TimeToStr(sar2_H1[t][0],TIME_DATE|TIME_MINUTES), sar2_H1[t][1],clr2, 0,Size_H1);d_h1++;}
}
}
}
////////////
for(t=0;t<Lines_Total+10;t++)
{
if(Show_H4==true && Period()<=240)
{
if(c_h4<Top_Under_H4)
{
if(sar1_H4[t][1]<Close[0]){clr1=ColorDN_H4;//else clr1=ColorDN_H1;
set_h("H4:"+TimeToStr(sar1_H4[t][0],TIME_DATE|TIME_MINUTES), sar1_H4[t][1],clr1, 0,Size_H4);c_h4++;}
}
}
}
for(t=0;t<Lines_Total+10;t++)
{
if(Show_H4==true && Period()<=240)
{
if(d_h4<Bottom_Under_H4)
{
if(sar2_H4[t][1]<Close[0]){clr2=ColorDN_H4;//else clr2=ColorDN_H1;
set_h("H4:"+TimeToStr(sar2_H4[t][0],TIME_DATE|TIME_MINUTES), sar2_H4[t][1],clr2, 0,Size_H4);d_h4++;}
}
}
}
////////////
for(t=0;t<Lines_Total+10;t++)
{
if(Show_D1==true && Period()<1440)
{
if(c_d1<Top_Under_D1)
{
if(sar1_D1[t][1]<Close[0]){clr1=ColorDN_D1;//else clr1=ColorDN_H1;
set_h("D1:"+TimeToStr(sar1_D1[t][0],TIME_DATE|TIME_MINUTES), sar1_D1[t][1],clr1, 0,Size_D1);c_d1++;}
}
}
}
for(t=0;t<Lines_Total+10;t++)
{
if(Show_D1==true && Period()<=1440)
{
if(d_d1<Bottom_Under_D1)
{
if(sar2_D1[t][1]<Close[0]){clr2=ColorDN_D1;//else clr2=ColorDN_H1;
set_h("D1:"+TimeToStr(sar2_D1[t][0],TIME_DATE|TIME_MINUTES), sar2_D1[t][1],clr2, 0,Size_D1);d_d1++;}
}
}
}
////////////
for(t=0;t<Lines_Total+10;t++)
{
if(Show_W1==true && Period()<10080)
{
if(c_w1<Top_Under_W1)
{
if(sar1_W1[t][1]<Close[0]){clr1=ColorDN_W1;//else clr1=ColorDN_H1;
set_h("W1:"+TimeToStr(sar1_W1[t][0],TIME_DATE|TIME_MINUTES), sar1_W1[t][1],clr1, 0,Size_W1);c_w1++;}
}
}
}
for(t=0;t<Lines_Total+10;t++)
{
if(Show_W1==true && Period()<=10080)
{
if(d_w1<Bottom_Under_W1)
{
if(sar2_W1[t][1]<Close[0]){clr2=ColorDN_W1;//else clr2=ColorDN_H1;
set_h("W1:"+TimeToStr(sar2_W1[t][0],TIME_DATE|TIME_MINUTES), sar2_W1[t][1],clr2, 0,Size_W1);d_w1++;}
}
}
}
////////////
for(t=0;t<Lines_Total+10;t++)
{
if(Show_MN1==true && Period()<43200)
{
if(c_mn1<Top_Under_MN1)
{
if(sar1_MN1[t][1]<Close[0]){clr1=ColorDN_MN1;//else clr1=ColorDN_H1;
set_h("MN1:"+TimeToStr(sar1_MN1[t][0],TIME_DATE|TIME_MINUTES), sar1_MN1[t][1],clr1, 0,Size_MN1);c_mn1++;}
}
}
}
for(t=0;t<Lines_Total+10;t++)
{
if(Show_MN1==true && Period()<=43200)
{
if(d_mn1<Bottom_Under_MN1)
{
if(sar2_MN1[t][1]<Close[0]){clr2=ColorDN_MN1;//else clr2=ColorDN_H1;
set_h("MN1:"+TimeToStr(sar2_MN1[t][0],TIME_DATE|TIME_MINUTES), sar2_MN1[t][1],clr2, 0,Size_MN1);d_mn1++;}
}
}
}
///////////////////
////////////// arrow signal and alert
if(Alert_ON==true)
{
int al;
for(int br=limit;br>=0;br--)
{
if(sar(Trade_Signal,br+1)>=iHigh(Symbol(),Trade_Signal,br+1) && sar(Trade_Signal,br+2)<=iLow(Symbol(),Trade_Signal,br+2))
{
if(Show_arrows==true)
{arrow_dn[br]=sar(Trade_Signal,br+1)+Arrow_distance*Point;arrow _up[br]=0;
if(Arrow_History==false){for(al=limit;al>=br+2;al--){arrow_dn[al]=0;}}}
if(tag1!=iTime(Symbol(),Trade_Signal,br))
{Print("Signal down At ",Symbol()," ",Period()," Time : ",TimeToStr(iTime(Symbol(),Trade_Signal,br),TIME_DA TE|TIME_MINUTES));tag1=iTime(Symbol(),Trade_Signal ,br);}
}
if(sar(Trade_Signal,br+1)<=iLow(Symbol(),Trade_Signal,br+1) && sar(Trade_Signal,br+2)>=iHigh(Symbol(),Trade_Signal,br+2))
{
if(Show_arrows==true)
{arrow_up[br]=sar(Trade_Signal,br+1)-Arrow_distance*Point;arrow_dn[br]=0;
if(Arrow_History==false){for(al=limit;al>=br+2;al--){arrow_up[al]=0;}}}
if(tag2!=iTime(Symbol(),Trade_Signal,br))
{Print("Signal Up At ",Symbol()," ",Period()," Time : ",TimeToStr(iTime(Symbol(),Trade_Signal,br),TIME_DA TE|TIME_MINUTES));tag2=iTime(Symbol(),Trade_Signal ,br);}
}
}
}
return(0);
}
//+------------------------------------------------------------------+
//////////////////////
double sar(int fram,int i)
{
double c;
c=iSAR(Symbol(),fram,Step,Maximum,i);
return(c);
}
//////////////////////
void set_h(string name, double pr,color clr, int style,int size)
{
if(ObjectFind(name) != 0)
{
ObjectCreate(name, OBJ_HLINE, 0, 0,pr);
ObjectSet(name, OBJPROP_COLOR, clr);
ObjectSet(name, OBJPROP_STYLE, style);
ObjectSet(name, OBJPROP_WIDTH, size);
ObjectSet(name, OBJPROP_RAY, 0);
ObjectSet(name, OBJPROP_BACK, 1);
}
else{if(ObjectGet(name,OBJPROP_PRICE1)!=pr)
{ObjectDelete(name);}}
}
kira-h
17-10-2019, 05:32 AM
اخى حسن هل يمكنك ان تشرح لى كيفيه استخراج نقطتين دعم ونقطتين مقاومه بناء على مؤشر الزجزاج
على ان ترتكز كل نقطه على 3 قمم او 3 قيعان خلال مثلا 400 شمعه ماضيه
كيف يمكننى صياغه ذلك برمجيا فضلا وليس امرا
المرجو التوضيح اكثر بصور من الشارت
مرفق اكسبيرت يعتمد على الباربوليك سار فى القمم والقيعان ان امكن شرح جزء تحديد القمم والقيعان فيه بالعربى اكون شاكر جدا جدا
هذا شرح مبسط لأهم النقاط :
for(i=1;i<=limit;i++)//البحث بالشموع السابقة بعد الشمعة الحالية
{
if(Show_M1==true && Period()==1)//عند تفعيل فريم الدقيقة والشارت الحالي بفريم الدقيقة
{
av1=(iHigh(Symbol(),PERIOD_M1,i)+iLow(Symbol(),PER IOD_M1,i))/2;//متوسط الهاي واللو بشمعة سابقة
av2=(iHigh(Symbol(),PERIOD_M1,i+1)+iLow(Symbol(),P ERIOD_M1,i+1))/2;//متوسط الهاي واللو بشمعة قبل السابقة
if(sar(1,i)/*السار السابق*/>=av1 && sar(1,i+1)/*السار قبل السابق*/<=av2){sar1_M1[a1_1][0]=iTime(Symbol(),PERIOD_M1,i);sar1_M1[a1_1][1]=sar(1,i);a1_1++;}//يستخرج توقيت وسعر السار الهابط
if(sar(1,i)<=av1 && sar(1,i+1)>=av2){sar2_M1[a2_1][0]=iTime(Symbol(),PERIOD_M1,i);sar2_M1[a2_1][1]=sar(1,i);a2_1++;}//يستخرج توقيت وسعر السار الصاعد
}
//نفس الشروط بالفريمات الاخرى
// ثم رسم خطوط حسب الفريم المستخدم وتسميتها حسب توقيت السار المحقق للقمة لكي يتم رسم كل الخطوط المحققة للشروط
for(t=0;t<Lines_Total+10;t++)//عدد الخطوط
{
if(Show_M1==true && Period()<=1)//شرط الفريم المستخدم
{
if(c_m1<Top_Above_M1)//أقصى عدد خطوط القمة
{
if(sar1_M1[t][1]>Close[0])//يكون سعره أكبر من السعر الحالي
{
clr1=ColorUP_M1;//لون خطوط القمة
set_h("M1:"+TimeToStr(sar1_M1[t][0],TIME_DATE|TIME_MINUTES),sar1_M1[t][1],clr1,0,Size_M1);c_m1++;//وظيفة رسم خطوط القمة
}
}
}
}
ثم دالة رسم الخطوط الافقية
void set_h(string name, double pr,color clr, int style,int size)
{
if(ObjectFind(name) != 0)
{
ObjectCreate(name, OBJ_HLINE, 0, 0,pr);
ObjectSet(name, OBJPROP_COLOR, clr);
ObjectSet(name, OBJPROP_STYLE, style);
ObjectSet(name, OBJPROP_WIDTH, size);
ObjectSet(name, OBJPROP_RAY, 0);
ObjectSet(name, OBJPROP_BACK, 1);
}
else{if(ObjectGet(name,OBJPROP_PRICE1)!=pr)
{ObjectDelete(name);}}
}
ammar
17-10-2019, 06:24 AM
السلام عليكم
الاخ حسن ارجو ان تساعدني في مشكلة في الاكسبيرت هناك دوال ترليلنج تعمل بصورة صحيحة لجميع الاوردرات فقط في حالة يوجد قيم للستوب للوز والتيكبروفت اما في حالة الستوب لوز والتك بوفت قيمهم صفر تعمل فقط دالة ترلينج op_puy ودالة op_seel لاتعمل ارجو ان تعدل الاكسبيرت لكي يعمل دالة ترلينج op_seel
المرفق الاكسبيرت مع الشكر مقدما 17380
kira-h
17-10-2019, 11:50 PM
السلام عليكم
الاخ حسن ارجو ان تساعدني في مشكلة في الاكسبيرت هناك دوال ترليلنج تعمل بصورة صحيحة لجميع الاوردرات فقط في حالة يوجد قيم للستوب للوز والتيكبروفت اما في حالة الستوب لوز والتك بوفت قيمهم صفر تعمل فقط دالة ترلينج op_puy ودالة op_seel لاتعمل ارجو ان تعدل الاكسبيرت لكي يعمل دالة ترلينج op_seel
المرفق الاكسبيرت مع الشكر مقدما 17380
وعليكم السلام
تم التصحيح بالنسخة المرفقة
elhelaly
18-10-2019, 01:25 AM
اشكرك اخى حسن على جهدك الغالى ربنا يجزاك خير
انا فهمت شرحك ما شاء الله عليك
لكن انا حاولت دمج هذه الاجزاء فى اكسبيرت بدون الرسم طبعا
واستخدمت الكومنت لاستخراج قيمه الباربوليك سار كمتغير فى المؤشر وفى الاكسبيرت
فى المؤشر تخرج فى الكومنت صحيحه لانه استخدم Indicatorcounted()
لكن فى الاكسبيرت عرفت متغير اسمه CountedBars واديته قيمه 500 لكن فى الاكسبيرت تأتى مختلفه تماما
يرجى التصحيح لاستخراج القمه والقاع للباربوليك سار على هيئه متغير يمكن استخدامه كشرط للبيع والشراء
مرفق الكود
هذا الكود الخاص بالمؤشر ويستخرج الرقم صحيح ولا توجد به مشكله
int start (){
int pls=4;
int counted_bars= IndicatorCounted(),limit,i;
if (counted_bars>0)
counted_bars--;
limit= Bars - counted_bars;
int brs=limit;
ArrayResize(sar1_M1,brs);ArrayResize(sar2_M1,brs);
ArrayResize(sar1_M5,brs);ArrayResize(sar2_M5,brs);
ArrayResize(sar1_M15,brs);ArrayResize(sar2_M15,brs );
ArrayResize(sar1_M30,brs);ArrayResize(sar2_M30,brs );
ArrayResize(sar1_H1,brs);ArrayResize(sar2_H1,brs);
ArrayResize(sar1_H4,brs);ArrayResize(sar2_H4,brs);
ArrayResize(sar1_D1,brs);ArrayResize(sar2_D1,brs);
ArrayResize(sar1_W1,brs);ArrayResize(sar2_W1,brs);
ArrayResize(sar1_MN1,brs);ArrayResize(sar2_MN1,brs );
int a1_1=0,a2_1=0;int a1_5=0,a2_5=0;int a1_15=0,a2_15=0;int a1_30=0,a2_30=0;int a1_60=0,a2_60=0;
int a1_4=0,a2_4=0;int a1_d=0,a2_d=0;int a1_w=0,a2_w=0;int a1_m=0,a2_m=0;
RefreshRates();
double av1,av2;
for(i=1;i<=limit;i++)//البحث بالشموع السابقة بعد الشمعة الحالية
{
if(Show_D1==true && Period()<=1440)
{
av1=(iHigh(Symbol(),PERIOD_D1,i)+iLow(Symbol(),PER IOD_D1,i))/2;
av2=(iHigh(Symbol(),PERIOD_D1,i+1)+iLow(Symbol(),P ERIOD_D1,i+1))/2;
if(sar(1440,i)>=av1 && sar(1440,i+1)<=av2){sar1_D1[a1_d][0]=iTime(Symbol(),PERIOD_D1,i);sar1_D1[a1_d][1]=sar(1440,i);a1_d++;}//down on kema
if(sar(1440,i)<=av1 && sar(1440,i+1)>=av2){sar2_D1[a2_d][0]=iTime(Symbol(),PERIOD_D1,i);sar2_D1[a2_d][1]=sar(1440,i);a2_d++;}//up on ka3
}
Comment (" Down " + " " +sar1_D1[a1_d][1] + " " + " UP " + " " + sar2_D1[a2_d][1]);
وهذا هو الكود الذي حاولت صياغته من نفس الكود ولكن لاستخدامه داخل الاكسبيرت يرجى ايضاح الخطأ وتعديله اخى وجزاك الله خيرا
int pls=4; int counted_bars=CountedBars ,limit,i;
if (counted_bars>0)
counted_bars--;
limit= Bars - counted_bars;
int brs=limit;
ArrayResize(sar1_D1,brs);ArrayResize(sar2_D1,brs);
ArrayResize(sar1_W1,brs);ArrayResize(sar2_W1,brs);
ArrayResize(sar1_MN1,brs);ArrayResize(sar2_MN1,brs );
int a1_1=0,a2_1=0;int a1_5=0,a2_5=0;int a1_15=0,a2_15=0;int a1_30=0,a2_30=0;int a1_60=0,a2_60=0;
int a1_4=0,a2_4=0;int a1_d=0,a2_d=0;int a1_w=0,a2_w=0;int a1_m=0,a2_m=0;
RefreshRates();
double av1,av2;
for(i=1;i<=limit;i++)//البحث بالشموع السابقة بعد الشمعة الحالية
{
// iSAR( string symbol, int timeframe, double step, double maximum, int shift);
if(Show_D1==true && Period()<=1440)
{
av1=(iHigh(Symbol(),PERIOD_D1,i)+iLow(Symbol(),PER IOD_D1,i))/2;
av2=(iHigh(Symbol(),PERIOD_D1,i+1)+iLow(Symbol(),P ERIOD_D1,i+1))/2;
if(sar(1440,i)>=av1 && sar(1440,i+1)<=av2){sar1_D1[a1_d][0]=iTime(Symbol(),PERIOD_D1,i);sar1_D1[a1_d][1]=sar(1440,i);a1_d++;}//down on kema
if(sar(1440,i)<=av1 && sar(1440,i+1)>=av2){sar2_D1[a2_d][0]=iTime(Symbol(),PERIOD_D1,i);sar2_D1[a2_d][1]=sar(1440,i);a2_d++;}//up on ka3
}
}
Comment (" Down " + " " +sar1_D1[a1_d][1] + " " + " UP " + " " + sar2_D1[a2_d][1]);
ammar
18-10-2019, 12:59 PM
الف الف الف شكرا اخي حسن
ammar
18-10-2019, 01:02 PM
وعليكم السلام
تم التصحيح بالنسخة المرفقة
الف شكر اخي حسن الله يوفقك ويعوضك عنا خيرا بالتوفيق لخدمة الناس
kira-h
18-10-2019, 09:53 PM
الف الف الف شكرا اخي حسن
الف شكر اخي حسن الله يوفقك ويعوضك عنا خيرا بالتوفيق لخدمة الناس
العفو أخي الكريم
والله الموفق
kira-h
19-10-2019, 12:59 AM
اشكرك اخى حسن على جهدك الغالى ربنا يجزاك خير
انا فهمت شرحك ما شاء الله عليك
لكن انا حاولت دمج هذه الاجزاء فى اكسبيرت بدون الرسم طبعا
واستخدمت الكومنت لاستخراج قيمه الباربوليك سار كمتغير فى المؤشر وفى الاكسبيرت
فى المؤشر تخرج فى الكومنت صحيحه لانه استخدم Indicatorcounted()
لكن فى الاكسبيرت عرفت متغير اسمه CountedBars واديته قيمه 500 لكن فى الاكسبيرت تأتى مختلفه تماما
يرجى التصحيح لاستخراج القمه والقاع للباربوليك سار على هيئه متغير يمكن استخدامه كشرط للبيع والشراء
مرفق الكود
هذا الكود الخاص بالمؤشر ويستخرج الرقم صحيح ولا توجد به مشكله
int start (){
int pls=4;
int counted_bars= IndicatorCounted(),limit,i;
if (counted_bars>0)
counted_bars--;
limit= Bars - counted_bars;
int brs=limit;
ArrayResize(sar1_M1,brs);ArrayResize(sar2_M1,brs);
ArrayResize(sar1_M5,brs);ArrayResize(sar2_M5,brs);
ArrayResize(sar1_M15,brs);ArrayResize(sar2_M15,brs );
ArrayResize(sar1_M30,brs);ArrayResize(sar2_M30,brs );
ArrayResize(sar1_H1,brs);ArrayResize(sar2_H1,brs);
ArrayResize(sar1_H4,brs);ArrayResize(sar2_H4,brs);
ArrayResize(sar1_D1,brs);ArrayResize(sar2_D1,brs);
ArrayResize(sar1_W1,brs);ArrayResize(sar2_W1,brs);
ArrayResize(sar1_MN1,brs);ArrayResize(sar2_MN1,brs );
int a1_1=0,a2_1=0;int a1_5=0,a2_5=0;int a1_15=0,a2_15=0;int a1_30=0,a2_30=0;int a1_60=0,a2_60=0;
int a1_4=0,a2_4=0;int a1_d=0,a2_d=0;int a1_w=0,a2_w=0;int a1_m=0,a2_m=0;
RefreshRates();
double av1,av2;
for(i=1;i<=limit;i++)//البحث بالشموع السابقة بعد الشمعة الحالية
{
if(Show_D1==true && Period()<=1440)
{
av1=(iHigh(Symbol(),PERIOD_D1,i)+iLow(Symbol(),PER IOD_D1,i))/2;
av2=(iHigh(Symbol(),PERIOD_D1,i+1)+iLow(Symbol(),P ERIOD_D1,i+1))/2;
if(sar(1440,i)>=av1 && sar(1440,i+1)<=av2){sar1_D1[a1_d][0]=iTime(Symbol(),PERIOD_D1,i);sar1_D1[a1_d][1]=sar(1440,i);a1_d++;}//down on kema
if(sar(1440,i)<=av1 && sar(1440,i+1)>=av2){sar2_D1[a2_d][0]=iTime(Symbol(),PERIOD_D1,i);sar2_D1[a2_d][1]=sar(1440,i);a2_d++;}//up on ka3
}
Comment (" Down " + " " +sar1_D1[a1_d][1] + " " + " UP " + " " + sar2_D1[a2_d][1]);
وهذا هو الكود الذي حاولت صياغته من نفس الكود ولكن لاستخدامه داخل الاكسبيرت يرجى ايضاح الخطأ وتعديله اخى وجزاك الله خيرا
int pls=4; int counted_bars=CountedBars ,limit,i;
if (counted_bars>0)
counted_bars--;
limit= Bars - counted_bars;
int brs=limit;
ArrayResize(sar1_D1,brs);ArrayResize(sar2_D1,brs);
ArrayResize(sar1_W1,brs);ArrayResize(sar2_W1,brs);
ArrayResize(sar1_MN1,brs);ArrayResize(sar2_MN1,brs );
int a1_1=0,a2_1=0;int a1_5=0,a2_5=0;int a1_15=0,a2_15=0;int a1_30=0,a2_30=0;int a1_60=0,a2_60=0;
int a1_4=0,a2_4=0;int a1_d=0,a2_d=0;int a1_w=0,a2_w=0;int a1_m=0,a2_m=0;
RefreshRates();
double av1,av2;
for(i=1;i<=limit;i++)//البحث بالشموع السابقة بعد الشمعة الحالية
{
// iSAR( string symbol, int timeframe, double step, double maximum, int shift);
if(Show_D1==true && Period()<=1440)
{
av1=(iHigh(Symbol(),PERIOD_D1,i)+iLow(Symbol(),PER IOD_D1,i))/2;
av2=(iHigh(Symbol(),PERIOD_D1,i+1)+iLow(Symbol(),P ERIOD_D1,i+1))/2;
if(sar(1440,i)>=av1 && sar(1440,i+1)<=av2){sar1_D1[a1_d][0]=iTime(Symbol(),PERIOD_D1,i);sar1_D1[a1_d][1]=sar(1440,i);a1_d++;}//down on kema
if(sar(1440,i)<=av1 && sar(1440,i+1)>=av2){sar2_D1[a2_d][0]=iTime(Symbol(),PERIOD_D1,i);sar2_D1[a2_d][1]=sar(1440,i);a2_d++;}//up on ka3
}
}
Comment (" Down " + " " +sar1_D1[a1_d][1] + " " + " UP " + " " + sar2_D1[a2_d][1]);
العفو أخي الكريم
ارفق الكود كاملا للمراجعة
elhelaly
19-10-2019, 09:07 PM
العفو أخي الكريم
ارفق الكود كاملا للمراجعة
مرفق الكود بالكامل اخى احسن والمطلوب فقط هو اصلاح الاخطاء
وان احصل على نفس متغيرات المؤشر لكن بتنفيذ الكود داخل الاكسبيرت بحيث يمككنى استخدام نقاط الدعم والمقاومه للمتاجره
انا كتبت لك داخل الاكسبيرت ما اريده على هيئه كومنت بالعربى اتمنى منك الشرح ايضا لاستفيد اخى الكريم اشكرك شكرا جزيلا
*********************************
وفى الاخير حقيقه اذكرها والله على ما اقول شهيد اننى عندما استفسر بأى منتدى اخر الرد يمكث ايام واسابيع واحيانا لا يوجد رد اما هنا انا تعلمت منك الكثير
وسرعه الرد تعتبر من اجمل الاشياء هنا
اشكرك استاذ حسن على مساعدتك لاخوانك فهذه شهاده حق فى حقك سأحاسب عليها
kira-h
20-10-2019, 02:04 AM
مرفق الكود بالكامل اخى احسن والمطلوب فقط هو اصلاح الاخطاء
وان احصل على نفس متغيرات المؤشر لكن بتنفيذ الكود داخل الاكسبيرت بحيث يمككنى استخدام نقاط الدعم والمقاومه للمتاجره
انا كتبت لك داخل الاكسبيرت ما اريده على هيئه كومنت بالعربى اتمنى منك الشرح ايضا لاستفيد اخى الكريم اشكرك شكرا جزيلا
*********************************
وفى الاخير حقيقه اذكرها والله على ما اقول شهيد اننى عندما استفسر بأى منتدى اخر الرد يمكث ايام واسابيع واحيانا لا يوجد رد اما هنا انا تعلمت منك الكثير
وسرعه الرد تعتبر من اجمل الاشياء هنا
اشكرك استاذ حسن على مساعدتك لاخوانك فهذه شهاده حق فى حقك سأحاسب عليها
بارك الله فيك
مرفق الاكسبيرت
elhelaly
20-10-2019, 06:40 PM
بارك الله فيك
مرفق الاكسبيرت
الف شكر اخى حسن جزاك الله كل خير
kira-h
20-10-2019, 06:55 PM
الف شكر اخى حسن جزاك الله كل خير
وإياك اخي الكريم
elhelaly
21-10-2019, 06:35 PM
استاذ حسن بارك الله فيك اعلم انى اثقل عليك كثيرا لكن سامحنى ان اكثرت فى اسألتى
يمكنك ايضا اجابتى عليها جزء جزء كلما سمح وقتك بذلك لا توجد مشكله
احتاج فقط شرح بسيط لكيفيه تحديد نموذج واحد فقط من نماذج الهارمونيك فى خطوات وانا يمكننى ان شاء الله ان اقيس باقى النماذج عليه
وهى كالتالى
1- هنعتمد على الزجزاج وطبعا النماذج هتكون مثلا لمده 250 شمعه (عمل داله تعود بكل القمم والقيعان المكونه على الفريم الحالى خلال 250 شمعه ) وتخزينها كمتغيرات
2-
عمل داله تقوم بتاكد من قيم الفيبوناتشي اللي موجودة بين القمم والقيعان اللي احتفظنا باسعارها ونشوف الفروفات والقياسات بينها اذا تحققت حسابات الفيبوناتشي يعني حصولنا على نمط
ارفقت لك اخى مؤشرات شهيره للهارمونيك لو اسهل بالنسبه لك الشرح عليه باللغه العربيه خطوه بخطوه اكون شاكرا جدا جدا جدا
kira-h
21-10-2019, 08:31 PM
استاذ حسن بارك الله فيك اعلم انى اثقل عليك كثيرا لكن سامحنى ان اكثرت فى اسألتى
يمكنك ايضا اجابتى عليها جزء جزء كلما سمح وقتك بذلك لا توجد مشكله
احتاج فقط شرح بسيط لكيفيه تحديد نموذج واحد فقط من نماذج الهارمونيك فى خطوات وانا يمكننى ان شاء الله ان اقيس باقى النماذج عليه
وهى كالتالى
1- هنعتمد على الزجزاج وطبعا النماذج هتكون مثلا لمده 250 شمعه (عمل داله تعود بكل القمم والقيعان المكونه على الفريم الحالى خلال 250 شمعه ) وتخزينها كمتغيرات
2-
عمل داله تقوم بتاكد من قيم الفيبوناتشي اللي موجودة بين القمم والقيعان اللي احتفظنا باسعارها ونشوف الفروفات والقياسات بينها اذا تحققت حسابات الفيبوناتشي يعني حصولنا على نمط
ارفقت لك اخى مؤشرات شهيره للهارمونيك لو اسهل بالنسبه لك الشرح عليه باللغه العربيه خطوه بخطوه اكون شاكرا جدا جدا جدا
أخي الكريم لا يمكنني ذلك، فبرمجة نماذج الهارمونيك وكذلك الدايفرجنس من أعقد المؤشرات ويصعب شرح تفاصيلها... لأن فيها مصفوفات كثيرة ومعادلات هندسية...
هذا موضوع كبير وليس فقط سؤال برمجي
elhelaly
21-10-2019, 10:19 PM
أخي الكريم لا يمكنني ذلك، فبرمجة نماذج الهارمونيك وكذلك الدايفرجنس من أعقد المؤشرات ويصعب شرح تفاصيلها... لأن فيها مصفوفات كثيرة ومعادلات هندسية...
هذا موضوع كبير وليس فقط سؤال برمجي
مشكور اخى حسن بالفعل هو موضوع كبير سلمت يداك سأحاول فيه وان شاء الله لو احتجت لمساعده بسيطه اعود اليك
elhelaly
24-10-2019, 09:31 AM
السلام عليكم اخي حسن
فضلا احتاج الي كود وقت عمل الاكسبيرت في ثلاث فترات مختلفه من اليوم بتوقيت المنصه
كمثال
اول فتره من الساعه 12 صباحا الساعه 5 الفجر واضع شرط الشراء ينفذ شراء مثلا
ثاني فتره مثلا من الساعه 7 الي الساعه 11 وبيع
ثالث فتره من 3الي 11 مساء ووضع الشرط
يعني الكود يجعل الكود ينفذ الشروط في أوقات معينه فقط
وجعل الأوقات متغيرات خارجيه وشكرا اخي الكريم
kira-h
24-10-2019, 09:09 PM
السلام عليكم اخي حسن
فضلا احتاج الي كود وقت عمل الاكسبيرت في ثلاث فترات مختلفه من اليوم بتوقيت المنصه
كمثال
اول فتره من الساعه 12 صباحا الساعه 5 الفجر واضع شرط الشراء ينفذ شراء مثلا
ثاني فتره مثلا من الساعه 7 الي الساعه 11 وبيع
ثالث فتره من 3الي 11 مساء ووضع الشرط
يعني الكود يجعل الكود ينفذ الشروط في أوقات معينه فقط
وجعل الأوقات متغيرات خارجيه وشكرا اخي الكريم
وعليكم السلام
دالة التوقيت كالتالي:
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);
}
فتكون الشروط كالتالي:
if(TimeFilter(Start_Time1,End_Time1)==true||TimeFi lter(Start_Time2,End_Time2)==true||TimeFilter(Star t_Time3,End_Time3)==true)//...
بحيث المتغيرات الخارجية كالتالي :
input string Start_Time1="00:00",
End_Time1="05:00",
Start_Time2="07:00",
End_Time2="11:00",
Start_Time3="15:00",
End_Time3="23:00";
elhelaly
25-10-2019, 06:19 PM
وعليكم السلام
دالة التوقيت كالتالي:
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);
}
فتكون الشروط كالتالي:
if(TimeFilter(Start_Time1,End_Time1)==true||TimeFi lter(Start_Time2,End_Time2)==true||TimeFilter(Star t_Time3,End_Time3)==true)//...
بحيث المتغيرات الخارجية كالتالي :
input string Start_Time1="00:00",
End_Time1="05:00",
Start_Time2="07:00",
End_Time2="11:00",
Start_Time3="15:00",
End_Time3="23:00";
الف الف شكر يا جان العرب
kira-h
26-10-2019, 01:32 AM
الف الف شكر يا جان العرب
العفو اخي الكريم
والله الموفق
elhelaly
28-10-2019, 02:20 PM
أستاذ حسن السلام عليكم احتاج شرط إغلاق الصفقات الموجودة علي الحساب في الحاله التاليه
في حاله ان يكون مضي علي احد الصفقات المفتوحه اكثر من أسبوع او 10 ايّام وياريت يكون متغير خارجي وأيضا في نفس الوقت ان يكون اجمالي ربح الصفقات المفتوحه يساوي اجمالي الخسارة يعني الصفقات وصلت لنقطه التعادل
والإغلاق يكون للشارت اللي عليه الاكسبيرت فقط وليس لكل صفقات الحساب
عاوز شرط الإغلاق دا لو سمحت اخي الكريم
kira-h
29-10-2019, 01:21 AM
أستاذ حسن السلام عليكم احتاج شرط إغلاق الصفقات الموجودة علي الحساب في الحاله التاليه
في حاله ان يكون مضي علي احد الصفقات المفتوحه اكثر من أسبوع او 10 ايّام وياريت يكون متغير خارجي وأيضا في نفس الوقت ان يكون اجمالي ربح الصفقات المفتوحه يساوي اجمالي الخسارة يعني الصفقات وصلت لنقطه التعادل
والإغلاق يكون للشارت اللي عليه الاكسبيرت فقط وليس لكل صفقات الحساب
عاوز شرط الإغلاق دا لو سمحت اخي الكريم
وعليكم السلام
هل الاجمالي ربح للصفقات المحددة زمنيا أم لكل الصفقات المفتوحة للزوج الحالي ؟
elhelaly
29-10-2019, 09:00 PM
وعليكم السلام
هل الاجمالي ربح للصفقات المحددة زمنيا أم لكل الصفقات المفتوحة للزوج الحالي ؟
المحدده زمنيا استاذ حسن
kira-h
29-10-2019, 10:02 PM
المحدده زمنيا استاذ حسن
طيب:
دالة الربح للصفقات التي تجاوزت عدد أيام محددة MinDays كالتالي :
double TotalProfit()
{
double pts=0;
for(int i=0;i<OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
datetime tm=OrderOpenTime();
if(sy==Symbol()&&mn==MagicNo)
{
if(tm<=iTime(Symbol(),1440,MinDays))
{
pts+=pt+sw+cm;
}
}
}
return(pts);
}
دالة اغلاق الصفقات حسب الشروط كالتالي :
void CloseOrders(int type=-1)
{
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();
datetime tm=OrderOpenTime();
if(sy==Symbol()&&mn==MagicNo&&tm<=iTime(Symbol(),1440,MinDays))
{
if(TotalProfit()>=0)
{
if(ty==OP_BUY)close=OrderClose(tk,lo,Bid,5);
if(ty==OP_SELL)close=OrderClose(tk,lo,Ask,5);
if(ty>OP_SELL)close=OrderDelete(tk);
}
}
}
}
ومتغير عدد الايام كالتالي:
input int MinDays=10;
elhelaly
30-10-2019, 01:11 PM
الف شكر اخي حسن بارك الله فيك وفي علمك
kira-h
30-10-2019, 05:15 PM
الف شكر اخي حسن بارك الله فيك وفي علمك
العفو وبالتوفيق إن شاء الله
elhelaly
31-10-2019, 04:50 PM
أستاذ حسن
فضلا كان فيه كود حضرتك برمجته يقوم بعمل صفقه تبريد علي الحساب في حال فتح صفقه يدوي وانعكست مقدار معين من النقاط يقوم الاكسبيرت بفتح صفقه تبريد
احتاج نفس الكود لكن بتعديل بسيط
انه يعمل تبريد علي الزوج اللي عليه الاكسبيرت فقط بنفس الماجيك نمبر لاني ممكن أضع الاكسبيرت علي اكثر من زوج
وعايز الكود يكون خاص بكل زوج علي حدا
علي ما اعتقد كان اسم الكود GrillAll. او GridAll حاجه زي كدا انا بحثت ولم اجده اسف اخي حسن علي كثره اسألتي
يرجي إرفاق الكود لو أمكن مع التعديل عليه
elhelaly
31-10-2019, 06:31 PM
أستاذ حسن
فضلا كان فيه كود حضرتك برمجته يقوم بعمل صفقه تبريد علي الحساب في حال فتح صفقه يدوي وانعكست مقدار معين من النقاط يقوم الاكسبيرت بفتح صفقه تبريد
احتاج نفس الكود لكن بتعديل بسيط
انه يعمل تبريد علي الزوج اللي عليه الاكسبيرت فقط بنفس الماجيك نمبر لاني ممكن أضع الاكسبيرت علي اكثر من زوج
وعايز الكود يكون خاص بكل زوج علي حدا
علي ما اعتقد كان اسم الكود GrillAll. او GridAll حاجه زي كدا انا بحثت ولم اجده اسف اخي حسن علي كثره اسألتي
يرجي إرفاق الكود لو أمكن مع التعديل عليه
هذا هو الكود استاذ حسن حاولت التعديل عليه لكن لم انجح ... اريده يتعامل فقط على الزوج الموضوع عليه بالماجيك نمبر الخاص به وليس مع اخر صفقه تم فتحها على الحساب وذلك لوضعه على اكثر من زوج .. وفى حال تحقق الشرط على اى زوج ينفذ المطلوب ارجو التعديل ع الكود وتوضيح مكان التعديل
//+------------------------------------------------------------------+//| hassan.mb@hotmail.com |
//| Kira-h |
//+-------------------DO NOT REMOVE THIS HEADER----------------------+
#property copyright "Copyright ©2017, Programmed by Kira-h"
#property link "hassan.mb@hotmail.com"
#property version "1.00"
input double Step=50,
Lots=0.02,
Takeprofit=0,
Stoploss=0;
input int MagicNo=0;
double point;
int Q;
int OnInit()
{
Comment("Programmed by Kira-h");
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason){Comment("");}
void Points(string symbol)
{
if(MarketInfo(symbol,MODE_DIGITS)<4){point=0.01;}else{point=0.0001;}
if(MarketInfo(symbol,MODE_DIGITS)==5||MarketInfo(s ymbol,MODE_DIGITS)==3)Q=10;else Q=1;
}
string LastSymbol()//دالة لمعرفة اسم الزوج لآخر صفقة مفتوحة
{
bool select;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
{
return(OrderSymbol());
}
}
return(0);
}
int Orderscnt(string symbol,int type)//عدد الصفقات المفتوحة بدلالة اسم الزوج والنوع
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==symbol)
{
if(OrderType()==type)cnt++;
}
}
}
return(cnt);
}
void OnTick()
{
double p,SL,TP;
int tk;
if(Orderscnt(LastSymbol(),OP_BUY)==1&&Orderscnt(LastSymbol(),OP_BUYLIMIT)==0)
{
Points(LastSymbol());
p=MarketInfo(LastSymbol(),MODE_ASK)-Step*point;
if(Stoploss!=0)SL=p-Stoploss*point;else SL=0;
if(Takeprofit!=0)TP=p+Takeprofit*point;else TP=0;
tk=OrderSend(LastSymbol(),OP_BUYLIMIT,Lots,p,5*Q,S L,TP,"Kira-h",MagicNo,0,Blue);
}
if(Orderscnt(LastSymbol(),OP_SELL)==1&&Orderscnt(LastSymbol(),OP_SELLLIMIT)==0)
{
Points(LastSymbol());
p=MarketInfo(LastSymbol(),MODE_BID)+Step*point;
if(Stoploss!=0)SL=p+Stoploss*point;else SL=0;
if(Takeprofit!=0)TP=p-Takeprofit*point;else TP=0;
tk=OrderSend(LastSymbol(),OP_SELLLIMIT,Lots,p,5*Q, SL,TP,"Kira-h",MagicNo,0,Red);
}
}
//+---------------------------------------------------------------------------------+
elhelaly
31-10-2019, 07:05 PM
هذا هو الكود استاذ حسن حاولت التعديل عليه لكن لم انجح ... اريده يتعامل فقط على الزوج الموضوع عليه بالماجيك نمبر الخاص به وليس مع اخر صفقه تم فتحها على الحساب وذلك لوضعه على اكثر من زوج .. وفى حال تحقق الشرط على اى زوج ينفذ المطلوب ارجو التعديل ع الكود وتوضيح مكان التعديل
//+------------------------------------------------------------------+//| hassan.mb@hotmail.com |
//| Kira-h |
//+-------------------DO NOT REMOVE THIS HEADER----------------------+
#property copyright "Copyright ©2017, Programmed by Kira-h"
#property link "hassan.mb@hotmail.com"
#property version "1.00"
input double Step=50,
Lots=0.02,
Takeprofit=0,
Stoploss=0;
input int MagicNo=0;
double point;
int Q;
int OnInit()
{
Comment("Programmed by Kira-h");
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason){Comment("");}
void Points(string symbol)
{
if(MarketInfo(symbol,MODE_DIGITS)<4){point=0.01;}else{point=0.0001;}
if(MarketInfo(symbol,MODE_DIGITS)==5||MarketInfo(s ymbol,MODE_DIGITS)==3)Q=10;else Q=1;
}
string LastSymbol()//دالة لمعرفة اسم الزوج لآخر صفقة مفتوحة
{
bool select;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
{
return(OrderSymbol());
}
}
return(0);
}
int Orderscnt(string symbol,int type)//عدد الصفقات المفتوحة بدلالة اسم الزوج والنوع
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==symbol)
{
if(OrderType()==type)cnt++;
}
}
}
return(cnt);
}
void OnTick()
{
double p,SL,TP;
int tk;
if(Orderscnt(LastSymbol(),OP_BUY)==1&&Orderscnt(LastSymbol(),OP_BUYLIMIT)==0)
{
Points(LastSymbol());
p=MarketInfo(LastSymbol(),MODE_ASK)-Step*point;
if(Stoploss!=0)SL=p-Stoploss*point;else SL=0;
if(Takeprofit!=0)TP=p+Takeprofit*point;else TP=0;
tk=OrderSend(LastSymbol(),OP_BUYLIMIT,Lots,p,5*Q,S L,TP,"Kira-h",MagicNo,0,Blue);
}
if(Orderscnt(LastSymbol(),OP_SELL)==1&&Orderscnt(LastSymbol(),OP_SELLLIMIT)==0)
{
Points(LastSymbol());
p=MarketInfo(LastSymbol(),MODE_BID)+Step*point;
if(Stoploss!=0)SL=p+Stoploss*point;else SL=0;
if(Takeprofit!=0)TP=p-Takeprofit*point;else TP=0;
tk=OrderSend(LastSymbol(),OP_SELLLIMIT,Lots,p,5*Q, SL,TP,"Kira-h",MagicNo,0,Red);
}
}
//+---------------------------------------------------------------------------------+
مشكور اخى حسن تم التعديل والحمد لله لكن لو لك اى ملاحظات على الكود برجاء ادراجها
هذا هو الكود بعد التعديل
input double Step=50,
Lots=0.02,
Takeprofit=0,
Stoploss=0;
input int MagicNo=0;
double point;
int Q;
void Points(string symbol)
{
if(MarketInfo(symbol,MODE_DIGITS)<4){point=0.01;}else{point=0.0001;}
if(MarketInfo(symbol,MODE_DIGITS)==5||MarketInfo(s ymbol,MODE_DIGITS)==3)Q=10;else Q=1;
}
//-------------------------------------------------------+
int start ()
{
double p,SL,TP;
int tk;
if(Ask <=(LastOrderCurrent("OpenPrice",OP_BUY)-Step*point))
{
Points(Symbol());
p=LastOrderCurrent("OpenPrice",OP_BUY)-Step*point;
if(Stoploss!=0)SL=p-Stoploss*point;else SL=0;
if(Takeprofit!=0)TP=p+Takeprofit*point;else TP=0;
tk=OrderSend(Symbol(),OP_BUY,Lots,p,5*Q,SL,TP,"Kira-h",MagicNo,0,Blue);
}
if(Bid >=(LastOrderCurrent("OpenPrice",OP_SELL)+Step*point))
{
Points(Symbol());
p=LastOrderCurrent("OpenPrice",OP_SELL)+Step*point;
if(Stoploss!=0)SL=p+Stoploss*point;else SL=0;
if(Takeprofit!=0)TP=p-Takeprofit*point;else TP=0;
tk=OrderSend(Symbol(),OP_SELLLIMIT,Lots,p,5*Q,SL,T P,"Kira-h",MagicNo,0,Red);
}
return (0);
}
//+---------------------------------------------------------------------------------+
int Orderscnt(string symbol,int type)//عدد الصفقات المفتوحة بدلالة اسم الزوج والنوع
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==symbol)
{
if(OrderType()==type)cnt++;
}
}
}
return(cnt);
}
//---------------------------------------------------------------------------------------+
double LastOrderCurrent(string info,int type=-1)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
TT=OrderTicket(),
ty=OrderType();
double lo=OrderLots(),
op=OrderOpenPrice(),
pt=OrderProfit(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();
datetime om=OrderOpenTime();
if(sy==Symbol())
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="OpenPrice")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);
else if(info=="OpenTime")return(om);
else if(info=="Comment")return(mm);
else if(info=="Ticket")return(TT);
}
}
}
return(0);
}
kira-h
01-11-2019, 01:39 AM
مشكور اخى حسن تم التعديل والحمد لله لكن لو لك اى ملاحظات على الكود برجاء ادراجها
هذا هو الكود بعد التعديل
الصحيح كالتالي:
input double Step=50,
Lots=0.02,
Takeprofit=0,
Stoploss=0;
input int MagicNo=0;
double point;
int Q;
int OnInit()
{
if(_Digits==5||_Digits==3)Q=10;else Q=1;
if(_Digits<4)point=0.01;else point=0.0001;
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason){Comment("");}
void OnTick()
{
double SL,TP;
int tk;
bool select,ret;
if(Orderscnt(OP_BUY)>0 && Ask <=LastOrderCurrent("Price",OP_BUY)-Step*point)
{
if(Stoploss!=0)SL=Ask-Stoploss*point;else SL=0;
if(Takeprofit!=0)TP=Ask+Takeprofit*point;else TP=0;
tk=OrderSend(Symbol(),OP_BUY,Lots,Ask,5*Q,0,0,"Kira-h",MagicNo,0,Blue);
if(tk>0&&(TP>0||SL>0))//قد تكون المنصة من نوع اي سي ان لهذا يجب وضع الهدف والوقف بعد فتح الصفقة
{
select=OrderSelect(tk,SELECT_BY_TICKET);
ret=OrderModify(OrderTicket(),OrderOpenPrice(),0,T P,SL,Blue);
return;
}
}
if(Orderscnt(OP_SELL)>0 && Bid >=LastOrderCurrent("Price",OP_SELL)+Step*point)
{
if(Stoploss!=0)SL=Bid+Stoploss*point;else SL=0;
if(Takeprofit!=0)TP=Bid-Takeprofit*point;else TP=0;
tk=OrderSend(Symbol(),OP_SELL,Lots,Bid,5*Q,0,0,"Kira-h",MagicNo,0,Red);
if(tk>0&&(TP>0||SL>0))
{
select=OrderSelect(tk,SELECT_BY_TICKET);
ret=OrderModify(OrderTicket(),OrderOpenPrice(),0,T P,SL,Red);
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()&&((MagicNo>0&&OrderMagicNumber()==MagicNo)||MagicNo<=0))
{
if(OrderType()==type||type==-1)cnt++;
}
}
}
return(cnt);
}
//---------------------------------------------------------------------------------------+
double LastOrderCurrent(string info,int type=-1)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
TT=OrderTicket(),
ty=OrderType();
double lo=OrderLots(),
op=OrderOpenPrice(),
pt=OrderProfit(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();
datetime om=OrderOpenTime();
if(sy==Symbol()&&((MagicNo>0&&mn==MagicNo)||MagicNo<=0))
{
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);
else if(info=="Time")return(om);
else if(info=="Comment")return(mm);
else if(info=="Ticket")return(TT);
}
}
}
return(0);
}
elhelaly
01-11-2019, 08:48 PM
الصحيح كالتالي:
input double Step=50,
Lots=0.02,
Takeprofit=0,
Stoploss=0;
input int MagicNo=0;
double point;
int Q;
int OnInit()
{
if(_Digits==5||_Digits==3)Q=10;else Q=1;
if(_Digits<4)point=0.01;else point=0.0001;
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason){Comment("");}
void OnTick()
{
double SL,TP;
int tk;
bool select,ret;
if(Orderscnt(OP_BUY)>0 && Ask <=LastOrderCurrent("Price",OP_BUY)-Step*point)
{
if(Stoploss!=0)SL=Ask-Stoploss*point;else SL=0;
if(Takeprofit!=0)TP=Ask+Takeprofit*point;else TP=0;
tk=OrderSend(Symbol(),OP_BUY,Lots,Ask,5*Q,0,0,"Kira-h",MagicNo,0,Blue);
if(tk>0&&(TP>0||SL>0))//قد تكون المنصة من نوع اي سي ان لهذا يجب وضع الهدف والوقف بعد فتح الصفقة
{
select=OrderSelect(tk,SELECT_BY_TICKET);
ret=OrderModify(OrderTicket(),OrderOpenPrice(),0,T P,SL,Blue);
return;
}
}
if(Orderscnt(OP_SELL)>0 && Bid >=LastOrderCurrent("Price",OP_SELL)+Step*point)
{
if(Stoploss!=0)SL=Bid+Stoploss*point;else SL=0;
if(Takeprofit!=0)TP=Bid-Takeprofit*point;else TP=0;
tk=OrderSend(Symbol(),OP_SELL,Lots,Bid,5*Q,0,0,"Kira-h",MagicNo,0,Red);
if(tk>0&&(TP>0||SL>0))
{
select=OrderSelect(tk,SELECT_BY_TICKET);
ret=OrderModify(OrderTicket(),OrderOpenPrice(),0,T P,SL,Red);
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()&&((MagicNo>0&&OrderMagicNumber()==MagicNo)||MagicNo<=0))
{
if(OrderType()==type||type==-1)cnt++;
}
}
}
return(cnt);
}
//---------------------------------------------------------------------------------------+
double LastOrderCurrent(string info,int type=-1)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
TT=OrderTicket(),
ty=OrderType();
double lo=OrderLots(),
op=OrderOpenPrice(),
pt=OrderProfit(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();
datetime om=OrderOpenTime();
if(sy==Symbol()&&((MagicNo>0&&mn==MagicNo)||MagicNo<=0))
{
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);
else if(info=="Time")return(om);
else if(info=="Comment")return(mm);
else if(info=="Ticket")return(TT);
}
}
}
return(0);
}
الف شكر استاذى
kira-h
02-11-2019, 12:20 AM
الف شكر استاذى
العفو أخي الكريم
والله الموفق
Waddah
02-11-2019, 03:57 PM
السلام عليكم أستاذ
في مؤشر تقاطع الموفينغات الموجود في صفحة أهم الدوال البرمجية ...حاولت تعديله ليكون متعدد الفريمات : يظهر سهم التقاطع على فريم الأربع ساعات في فريم الربع ساعة ....غيرت الفترة Period في سطر استدعاء المؤشر من 0 إلى 240..لم تظهر الأسهم .....ممكن الحل لو سمحت
kira-h
02-11-2019, 06:35 PM
السلام عليكم أستاذ
في مؤشر تقاطع الموفينغات الموجود في صفحة أهم الدوال البرمجية ...حاولت تعديله ليكون متعدد الفريمات : يظهر سهم التقاطع على فريم الأربع ساعات في فريم الربع ساعة ....غيرت الفترة Period في سطر استدعاء المؤشر من 0 إلى 240..لم تظهر الأسهم .....ممكن الحل لو سمحت
وعليكم السلام
يمكنك استخدام مؤشر موفنج متعدد الفريمات وتستخدمه بالشروط مباشرة
مرفق مؤشر موفينج المتعدد الفريمات
elhelaly
03-11-2019, 01:06 PM
السلام عليكم اخى حسن
كيفيه كتابه هذا الشرط لو سمحت
لو رصيد الحساب - الاكيوتى = -150 دولار
ثم اصبح رصيد الحساب - الاكيوتى = -20 دولار
ينفذ شرط معين مثلا اغلاق الصفقات كلها
P=AccountBalance-AccountEquity = -150; //وصل الفارق فى البدايه ل خساره 150 دولار
//ثم عاد الفارق ليصبح خساره 20 دولار فقط
P=AccountBalance-AccountEquity = -20;
لاحظ اخى حسن ان الشرط هو الوصول لخساره عائمه تساوي 150 ثم العوده الى خساره عائمه فقط 20
يعنى لا ينفذ الاغلاق الا فى حاله تراجع الحساب الى خساره 150 اولا
فضلا احتاج الكود
Waddah
03-11-2019, 01:45 PM
وعليكم السلام
يمكنك استخدام مؤشر موفنج متعدد الفريمات وتستخدمه بالشروط مباشرة
مرفق مؤشر موفينج المتعدد الفريمات
شكرا للرد أستاذ حسن ...المؤشر موجود لكن أريد المساعدة في الكود لتقاطع متعدد الفريمات - ما أريده كيف أظهر سهم تقاطع موفينغيين على فريم الأربع ساعات على شارت الربع ساعة
حاولت استخدام ibar و ibartshift ضمن حلقة ال for لم تنجح معي مع جزيل الشكر
for(int i=limit; i>=0; i--)
{
int y = iBarShift(NULL,timeFrame,Time[i]);
CrossUp[i] = EMPTY_VALUE;
CrossDown[i] = EMPTY_VALUE;
MaClose[i] = iMA(NULL,240,7,0,MODE_LWMA,PRICE_CLOSE,y);
MaOpen[i] = iMA(NULL,timeFrame,SlowMaPeriod,0,SlowMaMode,SlowM aPrice,y);
}
kira-h
03-11-2019, 08:59 PM
شكرا للرد أستاذ حسن ...المؤشر موجود لكن أريد المساعدة في الكود لتقاطع متعدد الفريمات - ما أريده كيف أظهر سهم تقاطع موفينغيين على فريم الأربع ساعات على شارت الربع ساعة
حاولت استخدام ibar و ibartshift ضمن حلقة ال for لم تنجح معي مع جزيل الشكر
for(int i=limit; i>=0; i--)
{
int y = iBarShift(NULL,timeFrame,Time[i]);
CrossUp[i] = EMPTY_VALUE;
CrossDown[i] = EMPTY_VALUE;
MaClose[i] = iMA(NULL,240,7,0,MODE_LWMA,PRICE_CLOSE,y);
MaOpen[i] = iMA(NULL,timeFrame,SlowMaPeriod,0,SlowMaMode,SlowM aPrice,y);
}
راجع الكود المرفق
elhelaly
03-11-2019, 10:05 PM
السلام عليكم اخى حسن
كيفيه كتابه هذا الشرط لو سمحت
لو رصيد الحساب - الاكيوتى = -150 دولار
ثم اصبح رصيد الحساب - الاكيوتى = -20 دولار
ينفذ شرط معين مثلا اغلاق الصفقات كلها
P=AccountBalance-AccountEquity = -150; //وصل الفارق فى البدايه ل خساره 150 دولار
//ثم عاد الفارق ليصبح خساره 20 دولار فقط
P=AccountBalance-AccountEquity = -20;
لاحظ اخى حسن ان الشرط هو الوصول لخساره عائمه تساوي 150 ثم العوده الى خساره عائمه فقط 20
يعنى لا ينفذ الاغلاق الا فى حاله تراجع الحساب الى خساره 150 اولا
فضلا احتاج الكود
استاذ حسن هل يوجد كود لذلك ؟
kira-h
05-11-2019, 12:43 AM
استاذ حسن هل يوجد كود لذلك ؟
طبعا موجود باستخدام حفظ القيم في متغيرات من نوع static أو Global Variables
راجع المشاركة التالية :
Global Variables (https://www.fxprg.com/vb/showthread.php?t=31457&page=9&p=846193&viewfull=1#post846193)
elhelaly
05-11-2019, 01:22 AM
طبعا موجود باستخدام حفظ القيم في متغيرات من نوع static أو Global Variables
راجع المشاركة التالية :
Global Variables (https://www.fxprg.com/vb/showthread.php?t=31457&page=9&p=846193&viewfull=1#post846193)
طب ممكن الشرط اخى حسن ؟ لانى اول مره استخدمها
kira-h
05-11-2019, 10:30 PM
طب ممكن الشرط اخى حسن ؟ لانى اول مره استخدمها
مثال :
static int equ=0;
void OnTick()
{
if((AccountBalance()-AccountEquity())<=-150){equ=1;if(!IsTesting())GlobalVariableSet(Symbo l()+"equ",1);}
if(!IsTesting())aqu=GlobalVariableGet(Symbol()+"equ");
if(equ==1&&(AccountBalance()-AccountEquity())>=-50){CloseOrders();equ=0;if(!IsTesting())GlobalVari ableDel(Symbol()+"equ");}
}
elhelaly
06-11-2019, 12:57 AM
مثال :
static int equ=0;
void OnTick()
{
if((AccountBalance()-AccountEquity())<=-150){equ=1;if(!IsTesting())GlobalVariableSet(Symbo l()+"equ",1);}
if(!IsTesting())aqu=GlobalVariableGet(Symbol()+"equ");
if(equ==1&&(AccountBalance()-AccountEquity())>=-50){CloseOrders();equ=0;if(!IsTesting())GlobalVari ableDel(Symbol()+"equ");}
}
الف شكر اخى حسن
kira-h
06-11-2019, 08:41 PM
الف شكر اخى حسن
العفو أخي الكريم
Mohamed 12
11-11-2019, 09:39 PM
السلام عليكم ورحمة الله وبركاتة
هذا الاكسبرت هو خدمى يرسل الأشارات من الميتا ترادر الى تيليجرام
وهو شغال تمام لكن هناك عيب انة لا ييظهر الأرقام فى التيليجرام ويكتب مكانها (hidden)
ارجوا من حضرتك أصلاحها
وشكرا مقدما
extern string _token = "";
int OnInit(){
if(_token == "") {
MessageBox(" Set token ");
return(INIT_FAILED);
}
return(INIT_SUCCEEDED);
}
datetime _opened_last_time = TimeCurrent() ;
datetime _closed_last_time = TimeCurrent() ;
void OnTick(){
string message = "";
int total=OrdersTotal();
datetime max_time = 0;
for(int pos=0;pos<total;pos++){ // Current orders -----------------------
if(OrderSelect(pos,SELECT_BY_POS)==false) continue;
if(OrderOpenTime() <= _opened_last_time) continue;
message += StringFormat("New position %s openned:\r\n%s at %s \r\nLots(%s) SL(%s) TP(%s) \r\n%s \r\n",
order_type(),
OrderSymbol(),
DoubleToStr(OrderOpenPrice(),MarketInfo(OrderSymbo l(),MODE_DIGITS)),
DoubleToStr(OrderLots(),2),
DoubleToStr(OrderStopLoss(),MarketInfo(OrderSymbol (),MODE_DIGITS)),
DoubleToStr(OrderTakeProfit(),MarketInfo(OrderSymb ol(),MODE_DIGITS)),
OrderComment()
);
max_time = MathMax(max_time,OrderOpenTime());
}
_opened_last_time = MathMax(max_time,_opened_last_time);
max_time = 0;
total = OrdersHistoryTotal();
for(int pos=0;pos<total;pos++) { // History orders-----------------------
if(OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY)==fa lse) continue;
if(OrderCloseTime() <= _closed_last_time) continue;
printf(OrderCloseTime());
message += StringFormat("Position %s is closed:\r\n%s at %s \r\nLOTS(%s) SL(%s) TP(%s) \r\nProfit(%s) \r\n%s \r\n",
order_type(),
OrderSymbol(),
DoubleToStr(OrderClosePrice(),MarketInfo(OrderSymb ol(),MODE_DIGITS)),
DoubleToStr(OrderLots(),2),
DoubleToStr(OrderStopLoss(),MarketInfo(OrderSymbol (),MODE_DIGITS)),
DoubleToStr(OrderTakeProfit(),MarketInfo(OrderSymb ol(),MODE_DIGITS)),
DoubleToStr(OrderProfit(),2),
OrderComment()
);
max_time = MathMax(max_time,OrderCloseTime());
}
_closed_last_time = MathMax(max_time,_closed_last_time);
if(StringLen(message) > 0) {
printf(message);
if(!tms_send(message,_token) ) {
}
}
}
string order_type () {
if(OrderType() == OP_BUY) return "BUY";
if(OrderType() == OP_SELL) return "SELL";
if(OrderType() == OP_BUYLIMIT) return "BUYLIMIT";
if(OrderType() == OP_SELLLIMIT) return "SELLLIMIT";
if(OrderType() == OP_BUYSTOP) return "BUYSTOP";
if(OrderType() == OP_SELLSTOP) return "SELLSTOP";
return "";
}
datetime _tms_last_time_messaged;
bool tms_send(string message, string token="{YOUR_TOKEN_HERE}"){
const string url = "https://api.telegram.org";
string response,headers;
int result;
char post[],res[];
if(IsTesting() || IsOptimization()) return true;
if(_tms_last_time_messaged > TimeCurrent()) return false;
string spost = StringFormat("message=%s&token=%s&code=MQL",message,token);
ArrayResize(post,StringToCharArray(spost,post,0,WH OLE_ARRAY,CP_UTF8)-1);
result = WebRequest("POST",url,"",NULL,3000,post,ArraySize(post),res,headers);
_tms_last_time_messaged = TimeCurrent() + 1;
if(result==-1) { // WebRequest filed
if(GetLastError() == 4060) {
printf("tms_send() | Add the address %s in the list of allowed URLs on tab 'Expert Advisors'",url);
} else {
printf("tms_send() | webrequest filed - error № %i", GetLastError());
}
return false;
} else {
response = CharArrayToString(res,0,WHOLE_ARRAY);
if(StringFind(response,"\"ok\":true")==-1) {
printf("tms_send() return an error - %s",response);
return false;
}
}
Sleep(1000);
return true;
}
kira-h
12-11-2019, 05:35 AM
السلام عليكم ورحمة الله وبركاتة
هذا الاكسبرت هو خدمى يرسل الأشارات من الميتا ترادر الى تيليجرام
وهو شغال تمام لكن هناك عيب انة لا ييظهر الأرقام فى التيليجرام ويكتب مكانها (hidden)
ارجوا من حضرتك أصلاحها
وشكرا مقدما
extern string _token = "";
int OnInit(){
if(_token == "") {
MessageBox(" Set token ");
return(INIT_FAILED);
}
return(INIT_SUCCEEDED);
}
datetime _opened_last_time = TimeCurrent() ;
datetime _closed_last_time = TimeCurrent() ;
void OnTick(){
string message = "";
int total=OrdersTotal();
datetime max_time = 0;
for(int pos=0;pos<total;pos++){ // Current orders -----------------------
if(OrderSelect(pos,SELECT_BY_POS)==false) continue;
if(OrderOpenTime() <= _opened_last_time) continue;
message += StringFormat("New position %s openned:\r\n%s at %s \r\nLots(%s) SL(%s) TP(%s) \r\n%s \r\n",
order_type(),
OrderSymbol(),
DoubleToStr(OrderOpenPrice(),MarketInfo(OrderSymbo l(),MODE_DIGITS)),
DoubleToStr(OrderLots(),2),
DoubleToStr(OrderStopLoss(),MarketInfo(OrderSymbol (),MODE_DIGITS)),
DoubleToStr(OrderTakeProfit(),MarketInfo(OrderSymb ol(),MODE_DIGITS)),
OrderComment()
);
max_time = MathMax(max_time,OrderOpenTime());
}
_opened_last_time = MathMax(max_time,_opened_last_time);
max_time = 0;
total = OrdersHistoryTotal();
for(int pos=0;pos<total;pos++) { // History orders-----------------------
if(OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY)==fa lse) continue;
if(OrderCloseTime() <= _closed_last_time) continue;
printf(OrderCloseTime());
message += StringFormat("Position %s is closed:\r\n%s at %s \r\nLOTS(%s) SL(%s) TP(%s) \r\nProfit(%s) \r\n%s \r\n",
order_type(),
OrderSymbol(),
DoubleToStr(OrderClosePrice(),MarketInfo(OrderSymb ol(),MODE_DIGITS)),
DoubleToStr(OrderLots(),2),
DoubleToStr(OrderStopLoss(),MarketInfo(OrderSymbol (),MODE_DIGITS)),
DoubleToStr(OrderTakeProfit(),MarketInfo(OrderSymb ol(),MODE_DIGITS)),
DoubleToStr(OrderProfit(),2),
OrderComment()
);
max_time = MathMax(max_time,OrderCloseTime());
}
_closed_last_time = MathMax(max_time,_closed_last_time);
if(StringLen(message) > 0) {
printf(message);
if(!tms_send(message,_token) ) {
}
}
}
string order_type () {
if(OrderType() == OP_BUY) return "BUY";
if(OrderType() == OP_SELL) return "SELL";
if(OrderType() == OP_BUYLIMIT) return "BUYLIMIT";
if(OrderType() == OP_SELLLIMIT) return "SELLLIMIT";
if(OrderType() == OP_BUYSTOP) return "BUYSTOP";
if(OrderType() == OP_SELLSTOP) return "SELLSTOP";
return "";
}
datetime _tms_last_time_messaged;
bool tms_send(string message, string token="{YOUR_TOKEN_HERE}"){
const string url = "https://api.telegram.org";
string response,headers;
int result;
char post[],res[];
if(IsTesting() || IsOptimization()) return true;
if(_tms_last_time_messaged > TimeCurrent()) return false;
string spost = StringFormat("message=%s&token=%s&code=MQL",message,token);
ArrayResize(post,StringToCharArray(spost,post,0,WH OLE_ARRAY,CP_UTF8)-1);
result = WebRequest("POST",url,"",NULL,3000,post,ArraySize(post),res,headers);
_tms_last_time_messaged = TimeCurrent() + 1;
if(result==-1) { // WebRequest filed
if(GetLastError() == 4060) {
printf("tms_send() | Add the address %s in the list of allowed URLs on tab 'Expert Advisors'",url);
} else {
printf("tms_send() | webrequest filed - error № %i", GetLastError());
}
return false;
} else {
response = CharArrayToString(res,0,WHOLE_ARRAY);
if(StringFind(response,"\"ok\":true")==-1) {
printf("tms_send() return an error - %s",response);
return false;
}
}
Sleep(1000);
return true;
}
وعليكم السلام
لا اعلم ما يمكن اصلاحه فالخطأ غير واضح
Mohamed 12
12-11-2019, 05:40 PM
وعليكم السلام
لا اعلم ما يمكن اصلاحه فالخطأ غير واضح
شكرا
kira-h
12-11-2019, 10:20 PM
شكرا
العفو اخي الكريم
مبدع فوركس
18-11-2019, 08:48 AM
السلام عليكم مشرفنا الكريم
اذا كان عندى اكثر من امر شراء مفتوحين بنفس المواصفات ونفس التوقيت اذا اردت اغلاق الصفقات كلها سوف استخدم هذا الامر مثلا
if(lastclose<buyprice){CloseBuyOrders();}
ولاكن المشكله اننى اريد ان اغلق واحده واترك الاخرى فكيف استطيع تميز كل صفقه على حدى حتى لا يتم اغلاقهما جميعا
kira-h
18-11-2019, 07:44 PM
السلام عليكم مشرفنا الكريم
اذا كان عندى اكثر من امر شراء مفتوحين بنفس المواصفات ونفس التوقيت اذا اردت اغلاق الصفقات كلها سوف استخدم هذا الامر مثلا
if(lastclose<buyprice){CloseBuyOrders();}
ولاكن المشكله اننى اريد ان اغلق واحده واترك الاخرى فكيف استطيع تميز كل صفقه على حدى حتى لا يتم اغلاقهما جميعا
وعليكم السلام
يمكن تمييز الصفقات عن طريق رقم التيكت أو الماجك نمبر أو الكومنت
benaissa
27-11-2019, 06:56 PM
السلام عليكم الاخ حسن , هل يوجد كود يُعرًف الدعم و المقاومة , حيث يجعل الاكسبيرت مثلا يشتري من الدعم و يبيع عند المقاومة . شكرا
kira-h
27-11-2019, 09:35 PM
السلام عليكم الاخ حسن , هل يوجد كود يُعرًف الدعم و المقاومة , حيث يجعل الاكسبيرت مثلا يشتري من الدعم و يبيع عند المقاومة . شكرا
وعليكم السلام
لا توجد وظيفة خاصة بالدعم والمقاومة! بل يجب بناء معادلات رياضية (مبنية مثلا على الزيجزاج او الهاي واللو أو الرينج أو البيفوت او الفيبو... ) ثم يتم رسم الخطوط بناءا عليها
benaissa
29-11-2019, 02:28 PM
شكرا على الرد الاخ حسن , ممكن نرسم الدعوم و المقاومات يدويا , و يعتمد عليها الاكسبيرت ؟ شكرا
kira-h
29-11-2019, 05:21 PM
شكرا على الرد الاخ حسن , ممكن نرسم الدعوم و المقاومات يدويا , و يعتمد عليها الاكسبيرت ؟ شكرا
نعم، ستقوم باستدعاء كل خط باسمه عن طريق الوظيفة ObjectGet
benaissa
30-11-2019, 12:42 PM
نعم، ستقوم باستدعاء كل خط باسمه عن طريق الوظيفة ObjectGet
شكرا الاستاذ حسن , جزاك الله كل خير
kira-h
30-11-2019, 07:06 PM
شكرا الاستاذ حسن , جزاك الله كل خير
وإياك اخي الكريم
ammar
11-12-2019, 10:49 AM
السلام عليكم
استاذ حسن لقد قمت ببناء اكسبيرت ولاكن عند العمل الشركه بعث لي رساله مفاده ان الاكسبيرت يظغط على السيرفر كثيرا ماهو العمل لكي اخفف من ظغط الاكسبيرت على السيرفر علما ان الاكسبيرت يعتمد كثيرا على التريلنغ والبريك ايفن سلامي وتحياتي
kira-h
11-12-2019, 04:44 PM
السلام عليكم
استاذ حسن لقد قمت ببناء اكسبيرت ولاكن عند العمل الشركه بعث لي رساله مفاده ان الاكسبيرت يظغط على السيرفر كثيرا ماهو العمل لكي اخفف من ظغط الاكسبيرت على السيرفر علما ان الاكسبيرت يعتمد كثيرا على التريلنغ والبريك ايفن سلامي وتحياتي
وعليكم السلام
ستقوم بتقليل عدد الأزواج المستخدمة وزيادة في مسافة التريلينغ
ammar
12-12-2019, 02:33 PM
وعليكم السلام
ستقوم بتقليل عدد الأزواج المستخدمة وزيادة في مسافة التريلينغ
السلام عليكم
لم اعرف ماذا تقصد بالظبط بتقليل عدد الازواج اي ازواج تقصد
ammar
12-12-2019, 04:47 PM
السلام عليكم
1-هل تقصد ازواج العملات الاكسبيرت يعمل على زوج واحد
2- هل تنفع اذا استخدمت دالة سلييب فيكون الاكسبيرت يعمل بدل كل تغبر سعري يعمل حسب المدة الزمنيه
kira-h
12-12-2019, 06:45 PM
السلام عليكم
لم اعرف ماذا تقصد بالظبط بتقليل عدد الازواج اي ازواج تقصد
السلام عليكم
1-هل تقصد ازواج العملات الاكسبيرت يعمل على زوج واحد
2- هل تنفع اذا استخدمت دالة سلييب فيكون الاكسبيرت يعمل بدل كل تغبر سعري يعمل حسب المدة الزمنيه
وعليكم السلام
بالعكس المراجعة والتنفيذ التكي افضل واقل ضررا من الزمني
الضغط على السيرفر معناه كثرة الاشارات من فتح، اغلاق، وموديفاي وخصوصا الموديفاي والموجودة بالتريلينغ
اذا كنت تستخدم الاكسبيرت على سلة ازواج قم بتخفيف عددها
كذلك يمكن الزيادة في قيم التريلينغ لتقليل عدد مرات الموديفاي
قد يكون السبب خطأ ما لديك بالاكسبيرت يسبب كثرة الموديفاي التي لا داع لوجودها مثلا
كل ما سبق راجع لطبيعة الاستراتيجية التي تستخدمها قد تكون غير مناسبة للشركة
ammar
13-12-2019, 03:40 AM
وعليكم السلام
بالعكس المراجعة والتنفيذ التكي افضل واقل ضررا من الزمني
الضغط على السيرفر معناه كثرة الاشارات من فتح، اغلاق، وموديفاي وخصوصا الموديفاي والموجودة بالتريلينغ
اذا كنت تستخدم الاكسبيرت على سلة ازواج قم بتخفيف عددها
كذلك يمكن الزيادة في قيم التريلينغ لتقليل عدد مرات الموديفاي
قد يكون السبب خطأ ما لديك بالاكسبيرت يسبب كثرة الموديفاي التي لا داع لوجودها مثلا
كل ما سبق راجع لطبيعة الاستراتيجية التي تستخدمها قد تكون غير مناسبة للشركة
السلام عليكم
شكرا استاذ استفد حقا من ملاحظاتك سوف اراجع الاكسبيرت واعتقد من خلال ملاحظاتك هناك مودفاي كثير في الاكسبيرت
وهل هناك عند تجربة الاكسبيرت استطيع ان اعرف كثرة الاوامر مثل في خانه الجورنال وكيف اعرف هناك زيادة غير طيبيعة في الاوامر او هناك طريقة افضل
الشكر الجزيل للمساعدة ونعتذر عن كثرة الاسئله ووفقك الله لخدمة الناس
kira-h
13-12-2019, 08:22 PM
السلام عليكم
شكرا استاذ استفد حقا من ملاحظاتك سوف اراجع الاكسبيرت واعتقد من خلال ملاحظاتك هناك مودفاي كثير في الاكسبيرت
وهل هناك عند تجربة الاكسبيرت استطيع ان اعرف كثرة الاوامر مثل في خانه الجورنال وكيف اعرف هناك زيادة غير طيبيعة في الاوامر او هناك طريقة افضل
الشكر الجزيل للمساعدة ونعتذر عن كثرة الاسئله ووفقك الله لخدمة الناس
وعليكم السلام
لا يمكن معرفة ذلك، لكن ممكن تستفسر خدمة عملاء الشركة
ahmadwalwil
17-12-2019, 06:32 PM
السلام عليكم
اخ حسن ارجو منك تزويدي بطريقة لعمل باك تست 99% وتكون سهلة لأني جربت كذا طريقة ما زبطو معي
او برنامج يساعد في هدا الموضوع ويكون سعرو مش غالي
تحياتي
kira-h
17-12-2019, 08:17 PM
السلام عليكم
اخ حسن ارجو منك تزويدي بطريقة لعمل باك تست 99% وتكون سهلة لأني جربت كذا طريقة ما زبطو معي
او برنامج يساعد في هدا الموضوع ويكون سعرو مش غالي
تحياتي
وعليكم السلام
راجع الموضوع التالي:
طريقة عمل الباكتيست %99 ورفعه بموقع تحليلي، وطريقة عمل الأوبتيميزايشن (https://www.fxprg.com/vb/showthread.php?t=31563)
Ghassebd
18-12-2019, 02:29 PM
السلام عليكم ورحمه الله وبركاته
طلب تعديل بسيط على امر ارسال اولا شكرا على جهودكم
اود ان اضيف الستوب لوز وامر بيع او شراء معلق والهدف الى كود ارسال الايميل بحيث يكون الموضوع كمعادلة بحيث احدد برقم مسبق Stop loss و Take profit
ومن ثم تحسب في معادلة مع ASK و BID وتكون المحصلة النهاءية
EURUSD 1.1127
tp: 1.1150
sl: 1.1100
lot: 0.1
TIME AND DATE
مثال وجدته في الانترنت لكن اريد ان اعدل ان يرسل ايميل SendMail
double StopLoss = 10; //Stop loss in pips
double TakeProfit = 21; //Take profit in pips
double Lots = 0.01; //Lot Size
extern int magic = 1337; // Used to differentiate trades, so all the trades will be using this magic number for this EA
int ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,3, Ask-StopLoss*Point,Ask+TakeProfit*Point,"Buy Order",magic,0,clrGreen);
int ticket = OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+StopLoss* Point,Bid-TakeProfit*Point,"Sell Order",magic,0,clrRed);
double takeprofit=NormalizeDouble(Bid+minstoplevel*Point, Digits);
SendMail(Symbol()+" ( BUY) ",Symbol()+" **"+Period()+" **"+DoubleToStr(Ask,Digits)
TimeToStr(TimeLocal(),TIME_SECONDS));
وشكرا لكم مقدما
kira-h
19-12-2019, 01:51 AM
السلام عليكم ورحمه الله وبركاته
طلب تعديل بسيط على امر ارسال
اولا شكرا على جهودكم
اود ان اضيف الستوب لوز وامر بيع او شراء معلق والهدف الى كود ارسال الايميل بحيث يكون الموضوع كمعادلة بحيث احدد برقم مسبق Stop loss و Take profit
ومن ثم تحسب في معادلة مع ASK و BID وتكون المحصلة النهاءية
EURUSD 1.1127
tp: 1.1150
sl: 1.1100
lot: 0.1
TIME AND DATE
مثال وجدته في الانترنت لكن اريد ان اعدل ان يرسل ايميل SendMail
double StopLoss = 10; //Stop loss in pips
double TakeProfit = 21; //Take profit in pips
double Lots = 0.01; //Lot Size
extern int magic = 1337; // Used to differentiate trades, so all the trades will be using this magic number for this EA
int ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,3, Ask-StopLoss*Point,Ask+TakeProfit*Point,"Buy Order",magic,0,clrGreen);
int ticket = OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+StopLoss* Point,Bid-TakeProfit*Point,"Sell Order",magic,0,clrRed);
double takeprofit=NormalizeDouble(Bid+minstoplevel*Point, Digits);
SendMail(Symbol()+" ( BUY) ",Symbol()+" **"+Period()+" **"+DoubleToStr(Ask,Digits)
TimeToStr(TimeLocal(),TIME_SECONDS));
وشكرا لكم مقدما
وعليكم السلام
مثال :
double SLb=DoubleToStr(Ask-StopLoss*Point,Digits),
TPs=DoubleToStr(Ask+TakeProfit*Point,Digits),
SLb=DoubleToStr(Bid+StopLoss*Point,Digits),
TPs=DoubleToStr(Bid-TakeProfit*Point,Digits);
SendMail(Symbol()+" ( BUY) ",Symbol()+" **"+Period()+" **"+DoubleToStr(Ask,Digits)+" ** tp:"+TPb+" ** sl:"+SLb+" **"+TimeToStr(TimeLocal(),TIME_SECONDS));
SendMail(Symbol()+" ( SELL) ",Symbol()+" **"+Period()+" **"+DoubleToStr(Bid,Digits)+" ** tp:"+TPs+" ** sl:"+SLs+" **"+TimeToStr(TimeLocal(),TIME_SECONDS));
Ghassebd
19-12-2019, 02:47 PM
شكرا لك ولجهودك وجزاك الله خيرا
مشت الامور تمام
كيف يتم وضع فراغات بين tp و sl بحيث يكون كل منها بسطر لوحده بالايميل هل هنالك طريقة مبسطة ام نستخدم ""
اكرر شكري
kira-h
19-12-2019, 07:27 PM
شكرا لك ولجهودك وجزاك الله خيرا
مشت الامور تمام
كيف يتم وضع فراغات بين tp و sl بحيث يكون كل منها بسطر لوحده بالايميل هل هنالك طريقة مبسطة ام نستخدم ""
اكرر شكري
نعم تستخدم " " بينهما فراغات حسب المسافة التي تريد
Ghassebd
19-12-2019, 09:59 PM
ما في شيء آخر مثل enter بحيث تبدأ سطر جديد... هذه "" متعبه جدا
Ghassebd
20-12-2019, 02:32 AM
السلام عليكم ورحمه الله وبركاته
للفائدة وجدت هذا الحل يعمل
مثل enter بحيث تبدأ سطر جديد "
"
kira-h
20-12-2019, 03:01 AM
السلام عليكم ورحمه الله وبركاته
للفائدة وجدت هذا الحل يعمل
مثل enter بحيث تبدأ سطر جديد "
"
وعليكم السلام
يوجد
"\n"استخدمها بالكومنت، جربها
الفاروق
28-12-2019, 07:39 PM
ممكن مساعده في اضافه داله بحيث لو الاكسبيرت فتح صفقه شراء واغلقت علي ربح لايقوم بفتح شراء مره اخري حتي اذا تحققت الشروط ولكن ينتظر شروط البيع ويدخل بيع
يعني شراء ثم بيع ثم شراء وهكذا
عاوز حد بس يقولي ازاي اضيف الداله دي للاكسبيرت
if(GlobalVariableGet("NextOrderType")!=1)
مرفق الاكسبيرت
kira-h
28-12-2019, 11:59 PM
ممكن مساعده في اضافه داله بحيث لو الاكسبيرت فتح صفقه شراء واغلقت علي ربح لايقوم بفتح شراء مره اخري حتي اذا تحققت الشروط ولكن ينتظر شروط البيع ويدخل بيع
يعني شراء ثم بيع ثم شراء وهكذا
عاوز حد بس يقولي ازاي اضيف الداله دي للاكسبيرت
if(GlobalVariableGet("NextOrderType")!=1)
مرفق الاكسبيرت
السلام عليكم
لن تحتاج إلى دوال الجلوبال أو أي متغيرات الحفظ التي تزيد الثقل بالمنصة...، بل فقط ستستخرج نوع آخر صفقة مغلقة وتكون رابحة من خلال خصائص الصفقة المغلقة نفسها
كذلك ترتيب الدوال والشروط بالكود مهم، ليكون التنفيذ تسلسلي صحيح
مرفق الاكسبيرت
ammar
30-12-2019, 10:55 AM
السلام عليكم
اخ حسن هل يمكن تقليل عدد المودي فاي في دالة التريلينك عند تجربة الملف المرفق وبعد التجربة انظر الى خانه ريسولت سوف تجد اكثر 250 مودي فاي لمرة واحد فقط والحال الشركه التي اتداول بها اشتكت من كثرة الاوامر حاول ان اجعل المسافة كبيرة بناء على نصيحتك لكن بمجرد ان يلامس الشرط تعاود كثرة الاوامر حاولت ان اضيف دالة السليب داخل دالة الترلينك باعتبار حتى نقلل كل حركة سعرية للاسف لم يفلح
سؤالى هل هناك شي ما استطيع ان اضيفة داخل دالة التريلنج يقلل من اوامر المودي فاي
مع الشكر الجزيل لمجهودك وتعبك
18524
kira-h
30-12-2019, 06:43 PM
السلام عليكم
اخ حسن هل يمكن تقليل عدد المودي فاي في دالة التريلينك عند تجربة الملف المرفق وبعد التجربة انظر الى خانه ريسولت سوف تجد اكثر 250 مودي فاي لمرة واحد فقط والحال الشركه التي اتداول بها اشتكت من كثرة الاوامر حاول ان اجعل المسافة كبيرة بناء على نصيحتك لكن بمجرد ان يلامس الشرط تعاود كثرة الاوامر حاولت ان اضيف دالة السليب داخل دالة الترلينك باعتبار حتى نقلل كل حركة سعرية للاسف لم يفلح
سؤالى هل هناك شي ما استطيع ان اضيفة داخل دالة التريلنج يقلل من اوامر المودي فاي
مع الشكر الجزيل لمجهودك وتعبك
18524
وعليكم السلام
جرب دالة التريلينغ التي استخدمها بدون مشاكل مع الشركات
وإلا فالشركة تبعك سيرفراتها ضعيفة وأنصح بالابتعاد عنها
input double TrailingStop=0,
TrailingStep=0;
void MoveTrailingStop()
{
bool s,mod;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ty=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
if(TrailingStop>0&&sy==Symbol()&&mn==MagicNo&&ty<=OP_SELL)
{
if(ty==OP_BUY)
{
if(Ask-TrailingStep*point>op+TrailingStop*point)
{
if((sl>0&&sl<Bid-TrailingStop*point)||sl==0)mod=OrderModify(tk,op,B id-TrailingStop*point,tp,0,Blue);
}
}
else
{
if(Bid+TrailingStep*point<op-TrailingStop*point)
{
if((sl>0&&sl>Ask+TrailingStop*point)||sl==0)mod=OrderModify(tk, op,Ask+TrailingStop*point,tp,0,Red);
}
}
}
}
}
بحيث :
إذا كان مثلا TrailingStop=20 فبعد ربح 20 نقطه يتم نقل الوقف إلى نقطه الدخول ثم كل ربح نقطه يتم رفع الوقف بمقدار +1
الان مثلا عملت 20=TrailingStop و 10=TrailingStep فبعد ربح 30 نقطة (اجمالي 20+10) سيضع الإكسبريت الوقف بعد نقطة الدخول ب 10 نقاط و سيطارد السعر بفارق 20 نقطة
absafir
03-01-2020, 02:44 PM
السلام عليكم
كيف يمكن ان امنع مستخدم المنصة من التداول على عملة معينة مع ابقاء امكانية عرض هذه العملة ضمن شاشة الاسعار
(اريد عمل ذلك برمجياً اي من خلال الكود)
مع جزيل الشكر
kira-h
03-01-2020, 07:41 PM
السلام عليكم
كيف يمكن ان امنع مستخدم المنصة من التداول على عملة معينة مع ابقاء امكانية عرض هذه العملة ضمن شاشة الاسعار
(اريد عمل ذلك برمجياً اي من خلال الكود)
مع جزيل الشكر
وعليكم السلام
مثلا تريد منع الاكسبيرت من التداول على زوج اليورودولار، ستضع الشرط التالي ببداية الدالة الرئيسية OnTick (أو start) :
void OnTick()
{
if(Symbol()=="EURUSD")return;
//-----بقية الكود
}
absafir
04-01-2020, 11:52 AM
جزيت خيرا ان شاء الله
ما قصدته هو عدم تفعيل عملة اليورو مثلا للتداول عليها عن طريق منع ظهور مربع التداول (بيع - شراء - اوردر ) او ظهوره لكن بدون امكانية المتاجرة على اليورو
بطريقة اخرى:
أريد منع نفسي من الدخول الى السوق بشكل مباشر ومتسرع على عملة اليورو من خلال منع تفعيل المتاجرة على اليورو مع بقاء اليورو على شاشة الاسعار لمراقبة حركته
وذلك بكتابة كود ضمن برنامج تنبيهات خاص بي.
فهل يوجد كود يمنع ظهور مربع المتاجرة او يظهر بدون تفعيل عملات معينة ؟
عذراً على الاطالة
kira-h
04-01-2020, 06:36 PM
جزيت خيرا ان شاء الله
ما قصدته هو عدم تفعيل عملة اليورو مثلا للتداول عليها عن طريق منع ظهور مربع التداول (بيع - شراء - اوردر ) او ظهوره لكن بدون امكانية المتاجرة على اليورو
بطريقة اخرى:
أريد منع نفسي من الدخول الى السوق بشكل مباشر ومتسرع على عملة اليورو من خلال منع تفعيل المتاجرة على اليورو مع بقاء اليورو على شاشة الاسعار لمراقبة حركته
وذلك بكتابة كود ضمن برنامج تنبيهات خاص بي.
فهل يوجد كود يمنع ظهور مربع المتاجرة او يظهر بدون تفعيل عملات معينة ؟
عذراً على الاطالة
لا يمكن أخي الكريم
absafir
05-01-2020, 10:27 PM
جزاك الله كل خير ورحم الله والديك ووالدي.
kira-h
05-01-2020, 11:41 PM
جزاك الله كل خير ورحم الله والديك ووالدي.
آمين،
ammar
08-01-2020, 03:28 PM
وعليكم السلام
جرب دالة التريلينغ التي استخدمها بدون مشاكل مع الشركات
وإلا فالشركة تبعك سيرفراتها ضعيفة وأنصح بالابتعاد عنها
input double TrailingStop=0,
TrailingStep=0;
void MoveTrailingStop()
{
bool s,mod;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ty=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
if(TrailingStop>0&&sy==Symbol()&&mn==MagicNo&&ty<=OP_SELL)
{
if(ty==OP_BUY)
{
if(Ask-TrailingStep*point>op+TrailingStop*point)
{
if((sl>0&&sl<Bid-TrailingStop*point)||sl==0)mod=OrderModify(tk,op,B id-TrailingStop*point,tp,0,Blue);
}
}
else
{
if(Bid+TrailingStep*point<op-TrailingStop*point)
{
if((sl>0&&sl>Ask+TrailingStop*point)||sl==0)mod=OrderModify(tk, op,Ask+TrailingStop*point,tp,0,Red);
}
}
}
}
}
بحيث :
إذا كان مثلا TrailingStop=20 فبعد ربح 20 نقطه يتم نقل الوقف إلى نقطه الدخول ثم كل ربح نقطه يتم رفع الوقف بمقدار +1
الان مثلا عملت 20=TrailingStop و 10=TrailingStep فبعد ربح 30 نقطة (اجمالي 20+10) سيضع الإكسبريت الوقف بعد نقطة الدخول ب 10 نقاط و سيطارد السعر بفارق 20 نقطة
السلام عليكم
اخي حسن اولا الشكر الجزيل والامتنان الكبير لما تقدمه لنا من حلول وحل بعض المشاكل العويصة
اخي الحل الذي اقترحته لم يساعد في تقليل المودي الفاي كثيرا ولكن الحمد لله وبتعليمك الدائم لنا استطعت ان اجد الحل المشكله ان التريلنك يتقدم كل جزء من النقطه باعتبار المنصه خماسيه وهذا كثير يعني النقطة الواحد يعطي الترلينج عشر مرات مودي فاي والحل اني وضعت حلقة تكراريه من عشرة مرات وكلما اكتملت الحلقة التكراريه العد ينفذ التريلنج ومع التفيذ التريلنج وانشاء مودي فاي تصفر هذه الحلقة والحمد لله قبل الحل كان التريلنج اكثر 300 مودي فاي والان لا يتجاوز 30 تقريبا باعتبار يحسب النقاط وليس اجزاء النقاط
مرة اخرى كل الشكر لك اخي لان كل ما وصلت اليه من تعلم بحمد الله اولا وانته لك جزء كبير منه اعتذر عن الاطاله وشكرا
kira-h
08-01-2020, 06:00 PM
السلام عليكم
اخي حسن اولا الشكر الجزيل والامتنان الكبير لما تقدمه لنا من حلول وحل بعض المشاكل العويصة
اخي الحل الذي اقترحته لم يساعد في تقليل المودي الفاي كثيرا ولكن الحمد لله وبتعليمك الدائم لنا استطعت ان اجد الحل المشكله ان التريلنك يتقدم كل جزء من النقطه باعتبار المنصه خماسيه وهذا كثير يعني النقطة الواحد يعطي الترلينج عشر مرات مودي فاي والحل اني وضعت حلقة تكراريه من عشرة مرات وكلما اكتملت الحلقة التكراريه العد ينفذ التريلنج ومع التفيذ التريلنج وانشاء مودي فاي تصفر هذه الحلقة والحمد لله قبل الحل كان التريلنج اكثر 300 مودي فاي والان لا يتجاوز 30 تقريبا باعتبار يحسب النقاط وليس اجزاء النقاط
مرة اخرى كل الشكر لك اخي لان كل ما وصلت اليه من تعلم بحمد الله اولا وانته لك جزء كبير منه اعتذر عن الاطاله وشكرا
وعليكم السلام
العفو أخي الكريم
ولكن عوض كل هذا التعقيد يمكنك اعتماد المعالجة النقطية للاسعار والمقارنات بالدالة من خلال تعريف محدد للـ digit لتجاوز قيمة النقطة الخامسة (أو الثالثة)
مثال :
input double TrailingStop=0,
TrailingStep=0;
double point;
int digit;
int OnInit()
{
if(_Digits<4){point=0.01;digit=2;}else{point=0.0001;digit=4;}
return(INIT_SUCCEEDED);
}
void MoveTrailingStop()
{
bool s,mod;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ty=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
if(TrailingStop>0&&sy==Symbol()&&mn==MagicNo&&ty<=OP_SELL)
{
if(ty==OP_BUY)
{
if(NormalizeDouble(Ask-TrailingStep*point,digit)>NormalizeDouble(op+TrailingStop*point,digit))
{
if((sl>0&&NormalizeDouble(sl,digit)<NormalizeDouble(Bid-TrailingStop*point,digit))||sl==0)mod=OrderModify( tk,op,NormalizeDouble(Bid-TrailingStop*point,digit),tp,0,Blue);
}
}
else
{
if(NormalizeDouble(Bid+TrailingStep*point,digit)<NormalizeDouble(op-TrailingStop*point,digit))
{
if((sl>0&&NormalizeDouble(sl,digit)>NormalizeDouble(Ask+TrailingStop*point,digit))||sl ==0)mod=OrderModify(tk,op,NormalizeDouble(Ask+Trai lingStop*point,digit),tp,0,Red);
}
}
}
}
}
kira-h
08-01-2020, 06:15 PM
اشكرك يا باشمهندس كما عهدناك دائما سباق للمساعدة ربنا يذيدكم علما
يوجد موضوع اخر اريد من سيادتكم المساعدة فيه
اقوم بتعلم البرمجة واريد معرفة الاكواد والدوال التى بها اعمل الاتى وايضا شرح اين اضعها فى الاكسبيرت
1-كود تشغيل الاكسبيرت على حساب ديمو فقط وليس حقيقى
2-كود تشغيل الاكسبيرت على حساب حقيقى برقم حساب معين وتحت بروكر معين
3-كود تشغيل الاكسبيرت على حساب حقيقى او ديمو ولكن لفترة زمنية معينة
4-كيفية حماية الاكسبيرت من ان يقوم احد بمحاولة فتحه حفاظا على حقوق العمل
ولكم منى كل تقدير وتحية وجزاكم الله كل الخير
العفو أخي الكريم
يجب ان تضع الشروط التالية بالدالة الرئيسية قبل شروط الاكسبيرت الخاصة:
void OnTick()
{
if(!IsDemo())return;//تشغيل على الديمو فقط
if(AccountNumber()!=123456789)return;//شرط رقم الحساب
if(AccountServer()!="BDSwissGlobal-Demo01")return;//شرط سيرفر الشركة
if(TimeCurrent()>=StrToTime("2050.01.01 00:00"))return;//شرط تاريخ الصلاحية
//---- ثم يليه الشروط الخاصة بالاكسبيرت
}
بالنسبة للحماية حاليا ex4 حماية جيدة
وأقصى حماية تكون باستخدام ملف خارجي من نوع dll والتي تتم ببرمجة مستقلة بلغة أخرى مثل ++c
الله ينور عليك ويذيدك علم
ويبقى سؤال اخير بالنسبة لكود التشغيل للوقت
كيف استخدمه لكى يعمل الاكسبيرت مثلا لمدة يومين فقط ثم بعد ذلك يتوقف عن العمل؟
kira-h
09-01-2020, 03:35 AM
الله ينور عليك ويذيدك علم
ويبقى سؤال اخير بالنسبة لكود التشغيل للوقت
كيف استخدمه لكى يعمل الاكسبيرت مثلا لمدة يومين فقط ثم بعد ذلك يتوقف عن العمل؟
ستحدده بتاريخ الصلاحية
kira-h
09-01-2020, 06:04 PM
اشكرك يا هندسة
العفو أخي الكريم
Ghassebd
11-01-2020, 01:33 AM
السلام عليكم
اولا شكرا لكم على جهودكم
اريد اضافة دالة لارسال الايميل فيها شرطين
SendMail if(StrToDouble(Trend_UP) >=83 and if the price is above a moving average 200
بمعنى اذا تحقق الشرط SendMail if(StrToDouble(Trend_UP) >=83 وكان السعر اعلى الموفينج 200 ارسل ايميل
ممكن ان تعطوني الدالة وكيف اكتبها
ارجو انني وضحت المطلوب....
وشكرا لك مقدما
kira-h
11-01-2020, 06:44 PM
السلام عليكم
اولا شكرا لكم على جهودكم
اريد اضافة دالة لارسال الايميل فيها شرطين
SendMail if(StrToDouble(Trend_UP) >=83 and if the price is above a moving average 200
بمعنى اذا تحقق الشرط SendMail if(StrToDouble(Trend_UP) >=83 وكان السعر اعلى الموفينج 200 ارسل ايميل
ممكن ان تعطوني الدالة وكيف اكتبها
ارجو انني وضحت المطلوب....
وشكرا لك مقدما
وعليكم السلام
وظيفة ارسال الايميل SendMail
مثال :
SendMail("SELL","SELL signal at Price= "+DoubleToStr(Bid,Digits)+"On Symbol="+Symbol());
Ghassebd
11-01-2020, 11:33 PM
وظيفة ارسال الايميل SendMail
شكرا لك
لكن طلبي ليس
وظيفة ارسال الايميل SendMail
انما ارسال الايميل لارسال الايميل فيها شرطين
الاول if(StrToDouble(Trend_UP) >=83
الثاني الجملة التالية لكن ما اعرف كيفية اضاقة هذا الشرط if the price is above a moving average 200
SendMail if(StrToDouble(Trend_UP) >=83 and if the price is above a moving average 200
بمعنى اذا تحقق الشرط SendMail if(StrToDouble(Trend_UP) >=83 وكان السعر اعلى الموفينج 200 ارسل ايميل
ارجو انني وضحت المطلوب....
وشكرا لك مقدما
kira-h
12-01-2020, 12:44 AM
وظيفة ارسال الايميل SendMail
شكرا لك
لكن طلبي ليس
وظيفة ارسال الايميل SendMail
انما ارسال الايميل لارسال الايميل فيها شرطين
الاول if(StrToDouble(Trend_UP) >=83
الثاني الجملة التالية لكن ما اعرف كيفية اضاقة هذا الشرط if the price is above a moving average 200
SendMail if(StrToDouble(Trend_UP) >=83 and if the price is above a moving average 200
بمعنى اذا تحقق الشرط SendMail if(StrToDouble(Trend_UP) >=83 وكان السعر اعلى الموفينج 200 ارسل ايميل
ارجو انني وضحت المطلوب....
وشكرا لك مقدما
مثال :
double ma=iMA(Symbol(),0,200,0,0,0,1);
if(StrToDouble(Trend_UP)>=83 && Bid>ma)
{
SendMail("SELL","SELL signal at Price= "+DoubleToStr(Bid,Digits)+"On Symbol="+Symbol());
}
محمد أبوالنيل
12-01-2020, 10:14 AM
السلام عليكم
عندى سؤال لو حبيت ادمج مؤشر الزجزاج اعمل ايه
kira-h
12-01-2020, 03:31 PM
السلام عليكم
عندى سؤال لو حبيت ادمج مؤشر الزجزاج اعمل ايه
وعليكم السلام
المرجو التوضيح اكثر
محمد أبوالنيل
12-01-2020, 04:25 PM
وعليكم السلام
المرجو التوضيح اكثر
اقول للمؤشر مثلا لما يظهر قاع اشترى ولما يظهر قمة بيع
محمد أبوالنيل
12-01-2020, 07:26 PM
اقول للمؤشر مثلا لما يظهر قاع اشترى ولما يظهر قمة بيع
زى كده
[/php]
int limit;
int counted_bars=IndicatorCounted();
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//---- main loop
for(int i=0; i<limit; i++)
{
//---- ma_shift set to 0 because SetIndexShift called abowe
double hz = iCustom (Symbol(),PERIOD_M5,"ZigZag",12,5,3,1,i );
double lz = iCustom (Symbol(),PERIOD_M5,"ZigZag",12,5,3,2,i );
[php]
Ghassebd
13-01-2020, 01:49 AM
اشكرك وهو المطلوب
kira-h
13-01-2020, 02:02 AM
اقول للمؤشر مثلا لما يظهر قاع اشترى ولما يظهر قمة بيع
هذا يطول شرحه، ويفضل استخدام مؤشر أسهم خاص بالقمم والقيعان يعطي سهم عند ظهورها وثباثها
متوفر بالمرفق مفتوح الكود يمكنك مراجعته
kira-h
13-01-2020, 02:03 AM
اشكرك وهو المطلوب
العفو اخي الكريم
محمد أبوالنيل
15-01-2020, 09:01 PM
السلام عليكم
ازاى اوصف قمة والقاع على اكسبيرت
ينفع اقولة شمعة [i]
[i-1]18798
[i+1]
يبقى اتكون عندى قمة او قاع
kira-h
16-01-2020, 08:46 PM
السلام عليكم
ازاى اوصف قمة والقاع على اكسبيرت
ينفع اقولة شمعة [i]
[i-1]
[i+1]
يبقى اتكون عندى قمة او قاع
وعليكم السلام
على أي اساس يتم تحديد القمم والقيعان السابقة ؟
إذا كان على اساس مؤشر الزيجزاج فيمكنك الاطلاع على المشاركة التالية : زيجزاج (https://www.fxprg.com/vb/showthread.php?t=31457&page=121&p=881383&viewfull=1#post881383)
raame
17-01-2020, 11:44 PM
السلام عليكم ورحمة الله
كيف اضيف شرطين الى الاكسبريت الشرط الاول ان يدخل شراء او بيع حسب اغلق الشمعه السابقه اذا صعود ان يدخل شراء اذا نزول ان يدخل بيع الشرط الثاني ان يدخل بيع او شراء بعد 25 نقطه من افتتاح الشمعه الحاليه ..ارجو ان تكتب لي كيف تكتب تلك الشروط حاولت ان اضيف تلك الشروط لكن الاكسبريت يتعامل مع شرط فقط اريد ان اتعلم كيف يتعامل مع الشرطين ..بارك الله فيك
kira-h
18-01-2020, 04:56 AM
السلام عليكم ورحمة الله
كيف اضيف شرطين الى الاكسبريت الشرط الاول ان يدخل شراء او بيع حسب اغلق الشمعه السابقه اذا صعود ان يدخل شراء اذا نزول ان يدخل بيع الشرط الثاني ان يدخل بيع او شراء بعد 25 نقطه من افتتاح الشمعه الحاليه ..ارجو ان تكتب لي كيف تكتب تلك الشروط حاولت ان اضيف تلك الشروط لكن الاكسبريت يتعامل مع شرط فقط اريد ان اتعلم كيف يتعامل مع الشرطين ..بارك الله فيك
وعليكم السلام
ارفق الاكسبيرت الذي قمت بعمله لمراجعته
لأنه يوجد اختلافات في متغيرات معينة قد لا تناسب طريقة عملك للاكسبيرت مثل قيمة النقطة ...
raame
18-01-2020, 06:35 AM
مرفق الاكسبريت بارك الله فيك
محمد أبوالنيل
18-01-2020, 12:34 PM
وعليكم السلام
على أي اساس يتم تحديد القمم والقيعان السابقة ؟
إذا كان على اساس مؤشر الزيجزاج فيمكنك الاطلاع على المشاركة التالية : زيجزاج (https://www.fxprg.com/vb/showthread.php?t=31457&page=121&p=881383&viewfull=1#post881383)
هى ايه N والدالة دى هتبقى فى global area صح
و int Number ايه
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);
محمد أبوالنيل
18-01-2020, 12:54 PM
استاذنا استاذ حسن ممكن تدينا اكواد لاكسبيرتات مدرج فيها موشرات خارجية (بره الميتاتردر) علشان نقراها ونتعلم لان بصراحة الواحد حاسس انه عايز مثال محلول
شكرا مقدما استاذنا
kira-h
18-01-2020, 06:08 PM
هى ايه N والدالة دى هتبقى فى global area صح
و int Number ايه
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);
بداية من عدد شموع البحث i فخلال توالي الشموع تباعا وعندما تتكون قمة أو قاع يصبح للزيجزاج قيمة تخالف 0 (قيمة سعرية) وعندما يصبح له قيمة نقول له ان يعطي N قيمة بالزيادة برقم 1 (++)
وبالتالي كلما تكونت قمة أو قاع تزداد قيمة N بـ 1
ومنه نستطيع معرفة سعر قمة (أو قاع) حسب ترتيبه N
وهذا الترتيب تحدده من Number لأن الدالة بدلالتها
وعندما يصبح N يساوي Number أي الترتيب الذي نريده تقوم الدالة برصد قيمته السعرية (قمة أو قاع)
فمثلا لو تريد قيمة الزيجزاج الثالثة (قمة أو قاع) ستجعل Number=3
يعني
double zigzag3=ZigZag_Price(3);
استاذنا استاذ حسن ممكن تدينا اكواد لاكسبيرتات مدرج فيها موشرات خارجية (بره الميتاتردر) علشان نقراها ونتعلم لان بصراحة الواحد حاسس انه عايز مثال محلول
شكرا مقدما استاذنا
يمكنك مراجعة الموضوع التعليمي التالي :
أهم الدوال البرمجية وتطبيقات لغة mql4 (https://www.fxprg.com/vb/showthread.php?t=31456)
raame
18-01-2020, 08:04 PM
وعليكم السلام
ارفق الاكسبيرت الذي قمت بعمله لمراجعته
لأنه يوجد اختلافات في متغيرات معينة قد لا تناسب طريقة عملك للاكسبيرت مثل قيمة النقطة ...
تم ارفاق الاكسبيرت في اعلى
kira-h
18-01-2020, 09:15 PM
مرفق الاكسبريت بارك الله فيك
مرفق الاكسبيرت
raame
19-01-2020, 12:33 AM
مرفق الاكسبيرت
بارك الله فيك وجزاك الله كل خيرا
ارجو ارفاق لي اكسبيرت فارغ من الشروط فقط يكون فيه مثلا الهدف وستوب وخاصيه اوردير سند كامله لكن بدون شروط ..بحيث اني اضيف شروط عليه اتدرب عليه..اذا امكن بارك الله فيك
kira-h
19-01-2020, 12:57 AM
بارك الله فيك وجزاك الله كل خيرا
ارجو ارفاق لي اكسبيرت فارغ من الشروط فقط يكون فيه مثلا الهدف وستوب وخاصيه اوردير سند كامله لكن بدون شروط ..بحيث اني اضيف شروط عليه اتدرب عليه..اذا امكن بارك الله فيك
مرفق الاكسبيرت
محمد أبوالنيل
26-01-2020, 05:54 PM
السلام عليكم
الفورلوب دى مش عاوزة تشتغل معايا ممكن تقولى ايه السبب
void OnTick() {
double H = iHighest(Symbol(),PERIOD_M5,MODE_HIGH,50,5);
double L = iLowest(Symbol(),PERIOD_M5,MODE_LOW,50,5);
int limit = Bars<=48;
for(int i=1; i<limit; i++)
{
if(OrdersTotal()==0)
if(High[1]>H&&Close[1]<H)
if(Close[i]=(H-70*Point))
{
int Ticket = OrderSend(Symbol(),OP_SELL,.1,Bid,30,Bid+(50*Point ),Bid-(100*Point),NULL,0,0,clrBlack);
};
if(OrdersTotal()==0)
if(Low[1]<L&&Close[1]>L)
if(Close[i]<=(L+70*Point))
{
int Ticket= OrderSend(Symbol(),OP_BUY,.1,Ask,30,Ask-(50*Point),Ask+(100*Point),NULL,0,0,clrBlue);
};
}
}
kira-h
26-01-2020, 09:07 PM
السلام عليكم
الفورلوب دى مش عاوزة تشتغل معايا ممكن تقولى ايه السبب
void OnTick() {
double H = iHighest(Symbol(),PERIOD_M5,MODE_HIGH,50,5);
double L = iLowest(Symbol(),PERIOD_M5,MODE_LOW,50,5);
int limit = Bars<=48;
for(int i=1; i<limit; i++)
{
if(OrdersTotal()==0)
if(High[1]>H&&Close[1]<H)
if(Close[i]=(H-70*Point))
{
int Ticket = OrderSend(Symbol(),OP_SELL,.1,Bid,30,Bid+(50*Point ),Bid-(100*Point),NULL,0,0,clrBlack);
};
if(OrdersTotal()==0)
if(Low[1]<L&&Close[1]>L)
if(Close[i]<=(L+70*Point))
{
int Ticket= OrderSend(Symbol(),OP_BUY,.1,Ask,30,Ask-(50*Point),Ask+(100*Point),NULL,0,0,clrBlue);
};
}
}
وعليكم السلام
الدالة والشروط خاطئة
المرجو توضيح الفكرة
محمد أبوالنيل
28-01-2020, 10:12 AM
وعليكم السلام
الدالة والشروط خاطئة
المرجو توضيح الفكرة
عايز ابرمج دعم ومقاومة على اكسبيرت ازاى قربت اتجنن وانا اصلا مش قوى فى البرمجة
kira-h
28-01-2020, 03:01 PM
عايز ابرمج دعم ومقاومة على اكسبيرت ازاى قربت اتجنن وانا اصلا مش قوى فى البرمجة
اشرح معادلات رسم الدعوم والمقاومات
محمد أبوالنيل
28-01-2020, 05:17 PM
اشرح معادلات رسم الدعوم والمقاومات
عايز احدد الهاى واللو ل 50 شمعة وبعدين اساويها بمؤشر الفركتكال فاكون وصلت لقمة او قاع
kira-h
28-01-2020, 05:54 PM
عايز احدد الهاى واللو ل 50 شمعة وبعدين اساويها بمؤشر الفركتكال فاكون وصلت لقمة او قاع
المرجو التوضيح أكثر بصورة من الشارت
GBPJPY
29-01-2020, 02:57 PM
السلام عليكم
سؤال برمجى
عند اكسبيرت يفتح صفقات كثيره جدا بيع وشراء
اريد دالة تظهر لى رقم التاكيت كل صفقة من اكبر ربح الى اقل ربح
وشكرا على المساعده
GBPJPY
29-01-2020, 03:05 PM
مثال توضيح اكثر
OrderTicket_[0] OrderTicket_[1] OrderTicket_[2] OrderTicket_[3]
اريد معرفة رقم التاكيت الى اكبر صفقة لو تم OrderTicket_=0
لو OrderTicket_=1 يكون الربح الثانى
OrderTicket_=2 الربح الثالث
وشكرا على المساعده
kira-h
29-01-2020, 05:47 PM
مثال توضيح اكثر
اريد معرفة رقم التاكيت الى اكبر صفقة لو تم OrderTicket_=0
لو OrderTicket_=1 يكون الربح الثانى
OrderTicket_=2 الربح الثالث
وشكرا على المساعده
وعليكم السلام
المطلوب غير واضح
GBPJPY
29-01-2020, 06:54 PM
وعليكم السلام
المطلوب غير واضح
السلام عليكم
اولا شكرا لك على الرد والمتابعة جزاك الله عنا خيرا
الموضوع هو
طبعا كل صفقة يتم فتحه يكون له رقم Ticket تمام حتى الان
طبعا فى صفقات تكون رابحة وصفقات خاسرة
المطلوب الان معرفة رقم Ticket اكبر ربح موجود فى الصفقات
ويكون مرتب
مثال اكثر توضيح
يوجد مثلا 20 صفقة مفتوحة على نفس العملة
فى صفقة منهم رابحة 10 دولار وصفقة ثانية رابحة 9 وصفقة ثالثه ربحة 8 وصفقة رابعة رابحة 7
عايز دالة او كود اعرف رقم Ticket لكل صفقة رابحة بترتيب كما شرحت
ولك الشكر والتقدير
kira-h
29-01-2020, 09:24 PM
السلام عليكم
اولا شكرا لك على الرد والمتابعة جزاك الله عنا خيرا
الموضوع هو
طبعا كل صفقة يتم فتحه يكون له رقم Ticket تمام حتى الان
طبعا فى صفقات تكون رابحة وصفقات خاسرة
المطلوب الان معرفة رقم Ticket اكبر ربح موجود فى الصفقات
ويكون مرتب
مثال اكثر توضيح
يوجد مثلا 20 صفقة مفتوحة على نفس العملة
فى صفقة منهم رابحة 10 دولار وصفقة ثانية رابحة 9 وصفقة ثالثه ربحة 8 وصفقة رابعة رابحة 7
عايز دالة او كود اعرف رقم Ticket لكل صفقة رابحة بترتيب كما شرحت
ولك الشكر والتقدير
وعليكم السلام
دالة تيكت الصفقة المحققة اعلى ربح كالتالي:
int TicketProfit()
{
double pt=-EMPTY_VALUE;
int tk=0;
for(int cnt=0;cnt<=OrdersTotal();cnt++)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderType()<=OP_SELL)
{
if(OrderProfit()>pt){pt=OrderProfit();tk=OrderTicket();}
}
}
return(tk);
}
أما مسألة الترتيب لم اجد لها حل
GBPJPY
29-01-2020, 09:50 PM
وعليكم السلام
دالة تيكت الصفقة المحققة اعلى ربح كالتالي:
int TicketProfit()
{
double pt=-EMPTY_VALUE;
int tk=0;
for(int cnt=0;cnt<=OrdersTotal();cnt++)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderType()<=OP_SELL)
{
if(OrderProfit()>pt){pt=OrderProfit();tk=OrderTicket();}
}
}
return(tk);
}
أما مسألة الترتيب لم اجد لها حل
اولا جزاك الله خيرا
هذه الطريقة عندى بس عدد او ترتيب الصفقات ايضا لم اجد له حل
ارجو لو ظهر لك الحل
ان تساعدنى بيه ولك الشكر والعرفان
تحياتى
kira-h
30-01-2020, 05:16 PM
اولا جزاك الله خيرا
هذه الطريقة عندى بس عدد او ترتيب الصفقات ايضا لم اجد له حل
ارجو لو ظهر لك الحل
ان تساعدنى بيه ولك الشكر والعرفان
تحياتى
العفو وبالتوفيق إن شاء الله
محمد أبوالنيل
30-01-2020, 05:17 PM
المرجو التوضيح أكثر بصورة من الشارت
18983
دعم ومقاومة باستخدام مؤشر الفركتكال
محمد أبوالنيل
30-01-2020, 06:55 PM
ممكن كود يخلى صفقة واحدة تم خلال شمعة واحدة
kira-h
30-01-2020, 11:33 PM
دعم ومقاومة باستخدام مؤشر الفركتكال
لمعرفة قيمة سعر اخر مقاومة للفراكتل كالتالي :
double LastUPFractle()
{
for(int i=1;i<=200;i++)
{
double fr=iFractals(Symbol(),0,MODE_UPPER,i);
if(fr!=0)return(fr);
}
return(0);
}
والعكس بالدعم كالتالي :
double LastDOWNFractle()
{
for(int i=1;i<=200;i++)
{
double fr=iFractals(Symbol(),0,MODE_LOWER,i);
if(fr!=0)return(fr);
}
return(0);
}
أما أعلى هاي (أو أقل لو) ضمن عدد شموع سابقة موجودة سلفا بالكود الخاص بك
ممكن كود يخلى صفقة واحدة تم خلال شمعة واحدة
ستضع شرط توقيت الشمعة مع شروط فتح الصفقة، وبعد فتح الصفقة تقوم بحفظ التوقيت حتى لا يتكرر الدخول عند معالجة الشروط مرة أخرى
مثال :
if(time!=Time[0])
{
int tk=OrderSend(Symbol(),OP_BUY,0.01,Ask,2,0,0,"",0,0,Blue);
if(tk>0)time=Time[0];
}
بحيث time متغير داخلي يتم تعريفه خارج الدوال الرئيسية كالتالي :
datetime time=0;
//------------------------------
يوجد حل آخر لعدم تكرار فتح الصفقة بنفس الشمعة وهو بعمل دالة تحسب عدد الصفقات المفتوحة التي توقيتها أكبر من توقيت الشمعة المفتوحة، وهي كالتالي :
int LastCandleOrders()
{
int cnt;
for(int i=0;i<OrdersTotal();i++)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
datetime tm=OrderOpenTime();
int om=OrderMagicNumber();
if(sy==Symbol()&&om==MagicNo)
{
if(tm>=Time[0])cnt++;
}
}
return(cnt);
}
ثم تضع الشرط التالي مع شروط فتح الصفقة :
if(LastCandleOrders()==0)
محمد أبوالنيل
01-02-2020, 10:18 AM
لمعرفة قيمة سعر اخر مقاومة للفراكتل كالتالي :
double LastUPFractle()
{
for(int i=1;i<=200;i++)
{
double fr=iFractals(Symbol(),0,MODE_UPPER,i);
if(fr!=0)return(fr);
}
return(0);
}
والعكس بالدعم كالتالي :
double LastDOWNFractle()
{
for(int i=1;i<=200;i++)
{
double fr=iFractals(Symbol(),0,MODE_LOWER,i);
if(fr!=0)return(fr);
}
return(0);
}
أما أعلى هاي (أو أقل لو) ضمن عدد شموع سابقة موجودة سلفا بالكود الخاص بك
ستضع شرط توقيت الشمعة مع شروط فتح الصفقة، وبعد فتح الصفقة تقوم بحفظ التوقيت حتى لا يتكرر الدخول عند معالجة الشروط مرة أخرى
مثال :
if(time!=Time[0])
{
int tk=OrderSend(Symbol(),OP_BUY,0.01,Ask,2,0,0,"",0,0,Blue);
if(tk>0)time=Time[0];
}
بحيث time متغير داخلي يتم تعريفه خارج الدوال الرئيسية كالتالي :
datetime time=0;
//------------------------------
يوجد حل آخر لعدم تكرار فتح الصفقة بنفس الشمعة وهو بعمل دالة تحسب عدد الصفقات المفتوحة التي توقيتها أكبر من توقيت الشمعة المفتوحة، وهي كالتالي :
int LastCandleOrders()
{
int cnt;
for(int i=0;i<OrdersTotal();i++)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
datetime tm=OrderOpenTime();
int om=OrderMagicNumber();
if(sy==Symbol()&&om==MagicNo)
{
if(tm>=Time[0])cnt++;
}
}
return(cnt);
}
ثم تضع الشرط التالي مع شروط فتح الصفقة :
if(LastCandleOrders()==0)
لما استخدمت الدالة طلعلى فى الكمبيل الرسالة دى
19008
محمد أبوالنيل
01-02-2020, 06:36 PM
لمعرفة قيمة سعر اخر مقاومة للفراكتل كالتالي :
double LastUPFractle()
{
for(int i=1;i<=200;i++)
{
double fr=iFractals(Symbol(),0,MODE_UPPER,i);
if(fr!=0)return(fr);
}
return(0);
}
والعكس بالدعم كالتالي :
double LastDOWNFractle()
{
for(int i=1;i<=200;i++)
{
double fr=iFractals(Symbol(),0,MODE_LOWER,i);
if(fr!=0)return(fr);
}
return(0);
}
أما أعلى هاي (أو أقل لو) ضمن عدد شموع سابقة موجودة سلفا بالكود الخاص بك
ستضع شرط توقيت الشمعة مع شروط فتح الصفقة، وبعد فتح الصفقة تقوم بحفظ التوقيت حتى لا يتكرر الدخول عند معالجة الشروط مرة أخرى
مثال :
if(time!=Time[0])
{
int tk=OrderSend(Symbol(),OP_BUY,0.01,Ask,2,0,0,"",0,0,Blue);
if(tk>0)time=Time[0];
}
بحيث time متغير داخلي يتم تعريفه خارج الدوال الرئيسية كالتالي :
datetime time=0;
//------------------------------
يوجد حل آخر لعدم تكرار فتح الصفقة بنفس الشمعة وهو بعمل دالة تحسب عدد الصفقات المفتوحة التي توقيتها أكبر من توقيت الشمعة المفتوحة، وهي كالتالي :
int LastCandleOrders()
{
int cnt;
for(int i=0;i<OrdersTotal();i++)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
datetime tm=OrderOpenTime();
int om=OrderMagicNumber();
if(sy==Symbol()&&om==MagicNo)
{
if(tm>=Time[0])cnt++;
}
}
return(cnt);
}
ثم تضع الشرط التالي مع شروط فتح الصفقة :
if(LastCandleOrders()==0)
انا ضفت الكود لكن لسه بيفتح صفقات مع الشمعة الواحدة
19018
kira-h
01-02-2020, 08:09 PM
انا ضفت الكود لكن لسه بيفتح صفقات مع الشمعة الواحدة
لأن الصفقة تغلق بنفس الشمعة وفي هذه الحالة لازم تضيف الشرط الاول أيضا time
كذلك يمكنك بناء نفس دالة البحث بالصفقات المغلقة كالتالي :
int LastCandleOrdersClosed()
{
int cnt=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
datetime tm=OrderOpenTime();
int om=OrderMagicNumber();
if(sy==Symbol()&&om==MagicNo)
{
if(tm>=Time[0])cnt++;
}
}
return(cnt);
}
فتكون الشروط كالتالي :
if(time!=Time[0]&&LastCandleOrdersT()==0&&LastCandleOrdersClosed()==0)
أما عن تنبيه cnt ليس خطأ وليس له تأثير لكن يمكن تصحيحه بجعله معرف بصفر :
int cnt=0;
abdel3dim
02-02-2020, 03:33 PM
السلام عليكم ورحمة الله وبركاته
اولا أشكرك جزيل الشكرأخ حسن على كل ما تقدمه من مجهود في سبيل مساعدة الاخرين
لدي اكسبرت وأريد اضافة التالي:
*اضافة خاصية توقيت البدأ وتوقيت التوقف, ايقاف التداول يكون بعد ما تغلق جميع الصفقات على ربح يعني حتى لو وصل وقت الايقاف انتظار اغلاق اخر الصفقات قبل التوقف
*اضافة خاصية فتح الصفقات كل ساعة أول 4 ساعات... يعني على المنصة أحدد فريم الدقيقة لكن الاكسبرت يفتح أول الصفقات كل ساعة أول 4 ساعات...
مع خيار التحكم في تفعيل وايقاف كل خاصية (true/false)
kira-h
02-02-2020, 06:48 PM
السلام عليكم ورحمة الله وبركاته
اولا أشكرك جزيل الشكرأخ حسن على كل ما تقدمه من مجهود في سبيل مساعدة الاخرين
لدي اكسبرت وأريد اضافة التالي:
*اضافة خاصية توقيت البدأ وتوقيت التوقف, ايقاف التداول يكون بعد ما تغلق جميع الصفقات على ربح يعني حتى لو وصل وقت الايقاف انتظار اغلاق اخر الصفقات قبل التوقف
*اضافة خاصية فتح الصفقات كل ساعة أول 4 ساعات... يعني على المنصة أحدد فريم الدقيقة لكن الاكسبرت يفتح أول الصفقات كل ساعة أول 4 ساعات...
مع خيار التحكم في تفعيل وايقاف كل خاصية (true/false)
وعليكم السلام
أخي الكريم هذه ليست أسئلة برمجية،
أيضا ستجدها بموضوع أهم الدوال البرمجية وتطبيقات لغة mql4 (https://www.fxprg.com/vb/showthread.php?t=31456)
عموما يجب ان ترفق الاكسبيرت لاضافة كل هذا
abdel3dim
02-02-2020, 10:29 PM
وعليكم السلام
أخي الكريم هذه ليست أسئلة برمجية،
أيضا ستجدها بموضوع أهم الدوال البرمجية وتطبيقات لغة mql4 (https://www.fxprg.com/vb/showthread.php?t=31456)
عموما يجب ان ترفق الاكسبيرت لاضافة كل هذا
أشكرك أستاذ حسن على سرعة ردك
أعذرني اذا نشرت مشاركتي بالمكان الخطأ
هل أقوم بفتح موضوع أو كيف أرفق لك الاكسبرت هنا
raame
03-02-2020, 01:07 AM
السلام عليكم
هل توجد دالة او شرط بعكس الصفقة مثال في حال اغلقت الصفقه شراء ان يتم فتح الصفقه القادمه بيع وكذا اذا مره يفتح شراء ومره يفتح بيع بحسب اغلاق اخر صفقه
kira-h
03-02-2020, 02:17 AM
أشكرك أستاذ حسن على سرعة ردك
أعذرني اذا نشرت مشاركتي بالمكان الخطأ
هل أقوم بفتح موضوع أو كيف أرفق لك الاكسبرت هنا
يكفي هنا بالانتقال للوضع المتطور للمشاركة ثم ترفع الاكسبيرت بالمرفقات
kira-h
03-02-2020, 02:21 AM
السلام عليكم
هل توجد دالة او شرط بعكس الصفقة مثال في حال اغلقت الصفقه شراء ان يتم فتح الصفقه القادمه بيع وكذا اذا مره يفتح شراء ومره يفتح بيع بحسب اغلاق اخر صفقه
وعليكم السلام
يمكنك عمل دالة تبحث في الهيستوي عن نوع اخر صفقة مغلقة وبناء عليها تضع الشرط
مثال :
int LastOrderType()
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()<=OP_SELL)
{
return(OrderType());
}
}
return(0);
}
فتضيف شرط وجود اخر صفقة بيع ضمن شروط الشراء كالتالي :
if(LastOrderType()==OP_SELL)
والعكس بالبيع
abdel3dim
03-02-2020, 03:06 PM
يكفي هنا بالانتقال للوضع المتطور للمشاركة ثم ترفع الاكسبيرت بالمرفقات
تفضل أخي بارك الله فيك
محمد أبوالنيل
03-02-2020, 09:04 PM
لأن الصفقة تغلق بنفس الشمعة وفي هذه الحالة لازم تضيف الشرط الاول أيضا time
كذلك يمكنك بناء نفس دالة البحث بالصفقات المغلقة كالتالي :
int LastCandleOrdersClosed()
{
int cnt=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
datetime tm=OrderOpenTime();
int om=OrderMagicNumber();
if(sy==Symbol()&&om==MagicNo)
{
if(tm>=Time[0])cnt++;
}
}
return(cnt);
}
فتكون الشروط كالتالي :
if(time!=Time[0]&&LastCandleOrdersT()==0&&LastCandleOrdersClosed()==0)
أما عن تنبيه cnt ليس خطأ وليس له تأثير لكن يمكن تصحيحه بجعله معرف بصفر :
int cnt=0;
هى الدالة دى بتعمل ايه او معناها ايه
بارك الله فيك يا استاذى حسن
kira-h
03-02-2020, 11:39 PM
تفضل أخي بارك الله فيك
مرفق الاكسبيرت
kira-h
03-02-2020, 11:43 PM
هى الدالة دى بتعمل ايه او معناها ايه
بارك الله فيك يا استاذى حسن
الدالة الأولى السابقة تقوم بـ عد الصفقات المفتوحة التي توقيت افتتاحها بعد توقيت الشمعة الأخيرة والدالة الثانية تقوم بـ عد الصفقات المغلقة التي توقيت افتتاحها بعد توقيت الشمعة الأخيرة ثم اضفنا شرط تأكيدي time يقوم بحفظ توقيت الشمعة مباشرة بعد فتحها
وتكون الشروط بأن يفتح صفقة واحدة بالشمعة إذا لم يكون هناك صفقات مفتوحة ومغلقة وتوقيت الحفظ أكبر من توقيت الشمعة المغلقة
abdel3dim
04-02-2020, 06:43 PM
مرفق الاكسبيرت
الله يكرمك أستاذ حسن باذن الله أجرب وأرد عليك
kira-h
04-02-2020, 07:42 PM
الله يكرمك أستاذ حسن باذن الله أجرب وأرد عليك
بالتوفيق إن شاء الله
abdel3dim
05-02-2020, 04:51 PM
بارك الله فيك ما أريده بالضبط فقط في ملاحظات
*توقيت البدأ و التوقف شغال لكن لما يصل توقيت التوقف الاكسبرت يتوقف عن العمل و ما ينتظر آخر الصفقات يعني تبقى مفتوحة مع انه متوقف لو أمكن جعله يتوقف بعد إغلاق آخر الصفقات على ربح حتى لو وصل توقيت التوقف
*الملاحظة الثانية خاصية الاشتغال كل ساعة شغالة تمام لكن الاكسبرت يفتح صفقة واحدة فقط وأنا أريده يفتح عدة صفقات يعني أولى الصفقات مع بداية كل ساعة لو أغلقت على ربح ينتظر الساعة القادمة لكن لو عكست يفتح صفقات أخرى بناء على فريم الشارت
وشكرا لك
kira-h
06-02-2020, 01:39 AM
بارك الله فيك ما أريده بالضبط فقط في ملاحظات
*توقيت البدأ و التوقف شغال لكن لما يصل توقيت التوقف الاكسبرت يتوقف عن العمل و ما ينتظر آخر الصفقات يعني تبقى مفتوحة مع انه متوقف لو أمكن جعله يتوقف بعد إغلاق آخر الصفقات على ربح حتى لو وصل توقيت التوقف
*الملاحظة الثانية خاصية الاشتغال كل ساعة شغالة تمام لكن الاكسبرت يفتح صفقة واحدة فقط وأنا أريده يفتح عدة صفقات يعني أولى الصفقات مع بداية كل ساعة لو أغلقت على ربح ينتظر الساعة القادمة لكن لو عكست يفتح صفقات أخرى بناء على فريم الشارت
وشكرا لك
مرفق الاكسبيرت بحيث تم ربط التوقيت بفتح الصفقات فقط
أيضا ستحدد فلتر رأس الشمعة بالاعدادات، أما عمل الاكسبيرت ستضعه على الشارت الحالي بالفريم الذي تريده مباشرة
مثلا تضع الاكسبيرت بشارت الأربع ساعات وتحدد شمعة الفريم الساعة بالاعدادات
هنا سيتم فتح الصفقات على رأس كل ساعة بعد تحقق الشروط بفريم الأربع ساعات
abdel3dim
06-02-2020, 01:47 AM
مرفق الاكسبيرت بحيث تم ربط التوقيت بفتح الصفقات فقط
أيضا ستحدد فلتر رأس الشمعة بالاعدادات، أما عمل الاكسبيرت ستضعه على الشارت الحالي بالفريم الذي تريده مباشرة
مثلا تضع الاكسبيرت بشارت الأربع ساعات وتحدد شمعة الفريم الساعة بالاعدادات
هنا سيتم فتح الصفقات على رأس كل ساعة بعد تحقق الشروط بفريم الأربع ساعات
تمام الله يجزيك كل خير
kira-h
06-02-2020, 06:00 PM
تمام الله يجزيك كل خير
وإياك اخي الكريم
abdel3dim
07-02-2020, 01:40 AM
مرفق الاكسبيرت بحيث تم ربط التوقيت بفتح الصفقات فقط
أيضا ستحدد فلتر رأس الشمعة بالاعدادات، أما عمل الاكسبيرت ستضعه على الشارت الحالي بالفريم الذي تريده مباشرة
مثلا تضع الاكسبيرت بشارت الأربع ساعات وتحدد شمعة الفريم الساعة بالاعدادات
هنا سيتم فتح الصفقات على رأس كل ساعة بعد تحقق الشروط بفريم الأربع ساعات
للأسف نفس المشكل
kira-h
07-02-2020, 01:49 AM
للأسف نفس المشكل
ما هي المشكلة؟ مع توضيح صور للاعدادات وطريقة الاختبار؟
abdel3dim
10-02-2020, 03:28 AM
ما هي المشكلة؟ مع توضيح صور للاعدادات وطريقة الاختبار؟
*لو أمكن جعله يتوقف بعد إغلاق آخر الصفقات على ربح حتى لو وصل توقيت التوقف
*الاكسبرت يفتح أولى الصفقات مع بداية كل ساعة لو أغلقت على ربح ينتظر الساعة القادمة ليفتح صفقة جديدة لكن لو عكست يفتح صفقات أخرى بنفس الساعة
الصورة الأولى لتفعيل توقيت البدأ والتوقف
19216
الصورة الثانية لتفعيل فتح الصفقات كل ساعة
19217
kira-h
10-02-2020, 05:01 AM
*لو أمكن جعله يتوقف بعد إغلاق آخر الصفقات على ربح حتى لو وصل توقيت التوقف
*الاكسبرت يفتح أولى الصفقات مع بداية كل ساعة لو أغلقت على ربح ينتظر الساعة القادمة ليفتح صفقة جديدة لكن لو عكست يفتح صفقات أخرى بنفس الساعة
الصورة الأولى لتفعيل توقيت البدأ والتوقف
الصورة الثانية لتفعيل فتح الصفقات كل ساعة
مرفق الاكسبيرت
محمد أبوالنيل
10-02-2020, 10:25 AM
لو عايز اقول لما السعر يكون عند المستوى كذا يعنى بالقرب او فى المستوى كذا اعملها ازاى
محمد أبوالنيل
10-02-2020, 11:08 AM
او اقول لما السعر يكون بالقرب من مستوى كذا
kira-h
10-02-2020, 11:58 PM
لو عايز اقول لما السعر يكون عند المستوى كذا يعنى بالقرب او فى المستوى كذا اعملها ازاى
او اقول لما السعر يكون بالقرب من مستوى كذا
السلام عليكم
هذا معناه تحقق وجود السعر ضمن مجال محدد مركزه السعر
مثال :
if(Close[0]<=price+step*Point&&Close[0]>=price-step*Point)
بحيث price السعر المحدد
و step مسافة السعر بالنقاط عن السعر الحالي price من اسفله وأعلاه (مجال سعري)
abdel3dim
11-02-2020, 03:14 AM
مرفق الاكسبيرت
ما في أي تغيير على اخر نسختين
أعتقد أن الجزء الثاني من طلبي معقد شوي
شكرا لك كتير أستاذ حسن ما قصرت وأعتذر منك عذبتك معي
sabil
11-02-2020, 04:40 AM
اخي حسن
ارجو مراجعة الدوال وتعديل الخطأ
اريده يفتح امر معلق بعد فتح اول صفقة يدوياً ولكن بعد فتح اول صفقة يدوي
لا يفتح الاكسبرت اي صفقات لا اعلم اين الخلل
kira-h
11-02-2020, 07:58 PM
ما في أي تغيير على اخر نسختين
أعتقد أن الجزء الثاني من طلبي معقد شوي
شكرا لك كتير أستاذ حسن ما قصرت وأعتذر منك عذبتك معي
أخي الكريم التعديلات سليمة
فالتوقيت مرتبط فقط بدالة فتح الصفقات فليس له علاقة بالاغلاق وغيره
والجزء الثاني ايضا سليم
kira-h
11-02-2020, 08:04 PM
اخي حسن
ارجو مراجعة الدوال وتعديل الخطأ
اريده يفتح امر معلق بعد فتح اول صفقة يدوياً ولكن بعد فتح اول صفقة يدوي
لا يفتح الاكسبرت اي صفقات لا اعلم اين الخلل
السلام عليكم
لديك اخطاء في الهدف والوقف... تم تصحيحها بالنسخة المرفقة
sabil
11-02-2020, 08:42 PM
السلام عليكم
لديك اخطاء في الهدف والوقف... تم تصحيحها بالنسخة المرفقة
شكرا اخي
Waddah
12-02-2020, 10:42 AM
السلام عليكم .... أستاذ المؤشر المرفق كيف يمكن للإكسبرت أن يقرأ البيانات التي يضعها المؤشر على الشارت وهي سعر دخول وهدف و ستوب ....المؤشر ليس إندكس ولم أعرف كيف أتعامل مع الأوبجكت ....أرجو المساعدة بتوضيح الكود الذي يحقق المطلوب مع جزيل الشكر
kira-h
12-02-2020, 07:56 PM
السلام عليكم .... أستاذ المؤشر المرفق كيف يمكن للإكسبرت أن يقرأ البيانات التي يضعها المؤشر على الشارت وهي سعر دخول وهدف و ستوب ....المؤشر ليس إندكس ولم أعرف كيف أتعامل مع الأوبجكت ....أرجو المساعدة بتوضيح الكود الذي يحقق المطلوب مع جزيل الشكر
وعليكم السلام
البيانات التي بالمؤشر ليست اندكس ولا اوبجكت ولا كومنت بل من نوع ايفنت Event أحد الاضافات الجديدة للغة وحسب ما اعلم لا يمكن رصد قيمها
لكن عوض ذلك يوجد الاسهم من نوع اوبجكت ولو تلاحظ سعر التوصية هو نفسه سعر اغلاق شمعة السهم، ونوع الصفقة حسب لون السهم
أما الهدف والوقف يمكن حسابها رياضيا حسب الاعدادات التي بالمؤشر حول atr (راجع الاعدادات)
عموما نرى أن السهم الاحمر والاخضر لهما نفس الاسم والاختلاف بينهما هو اللون والتاريخ المضاف للاسم،
ولكي تكون الصفقة عند اغلاق شمعة السهم نقوم بتقيده زمنيا بتوقيت الشمعة يكون نفسه توقيت السهم
بالتالي ستكون شروط فتح صفقة الشراء مثلا :
datetime Arrow_Time=ObjectGet("Pullback Solution_arrow_"+TimeToStr(Time[1],TIME_DATE|TIME_MINUTES),OBJPROP_TIME1);//توقيت السهم
color Arrow_Color=ObjectGet("Pullback Solution_arrow_"+TimeToStr(Time[1],TIME_DATE|TIME_MINUTES),OBJPROP_COLOR);//لون السهم
if(Arrow_Time==Time[1]&&Arrow_Color==Lime)//openbuy
نفس الشيء بالبيع تغير فقط شرط اللون إلى Red
وطبعا يجب ان يكون المؤشر على الشارت، ويكون بنفس اعدادات لوني الشراء والبيع بالشروط
سميرعلي
13-02-2020, 05:04 AM
السلام عليكم ورحمة الله استاذنا حسن،
كنت اريد الكود البرمجي لمؤشر الزجزاج وتكون فكرته كتالي يبدا من افتتاح اليوم وينتهي بنهاية اليوم، بحيث اذا تحرك السعر صعودا ثلاثون نقطة فاكثر يقوم برسم ترند صاعد وفي حالة هبوط السعر ثلاثون نقطة او كثر يرسم ترند هابط...وهكذا مع كل يوم جديد...بارك الله فيكم،
kira-h
13-02-2020, 07:48 PM
السلام عليكم ورحمة الله استاذنا حسن،
كنت اريد الكود البرمجي لمؤشر الزجزاج وتكون فكرته كتالي يبدا من افتتاح اليوم وينتهي بنهاية اليوم، بحيث اذا تحرك السعر صعودا ثلاثون نقطة فاكثر يقوم برسم ترند صاعد وفي حالة هبوط السعر ثلاثون نقطة او كثر يرسم ترند هابط...وهكذا مع كل يوم جديد...بارك الله فيكم،
وعليكم السلام
لابد من توضيح معادلة رسم زيجزاج كهذا، مع صورة من الشارت
برمجيا يمكن معرفة فقط : السعر الحالي البيد والأسك، ثم اسعار الاغلاق والافتتاح والهاي واللو ثم حجم الفوليوم
سميرعلي
13-02-2020, 11:01 PM
وعليكم السلام
لابد من توضيح معادلة رسم زيجزاج كهذا، مع صورة من الشارت
برمجيا يمكن معرفة فقط : السعر الحالي البيد والأسك، ثم اسعار الاغلاق والافتتاح والهاي واللو ثم حجم الفوليوم
تفضل صورة من الشارت
19328
kira-h
14-02-2020, 02:41 AM
تفضل صورة من الشارت
ما هي المعادلة؟!، فالامر ليس سهل بحصر الزيجزاج في مدة محددة! فمعادلته لا تسمح بذلك
سميرعلي
14-02-2020, 03:51 AM
ما هي المعادلة؟!، فالامر ليس سهل بحصر الزيجزاج في مدة محددة! فمعادلته لا تسمح بذلك
ليس شرط زجزاج وإنما ايضا ترندات يتم رسمها كما في الصورة عندما يصعد السعر كل ثلاثون نقطة او اكثر وكذلك في حالة الهبوط،،،
amr0222
25-02-2020, 04:11 PM
الاخ كيرا لو سمحت انا قمت ببرمجة الاكسبيرت المرفق ولدى بعض الملاحظات ارجومن حضرتك ايضاحها لى
الاكسبيرت يفتح صفقه واحده فقط ولا يفتحصفقات اخرىما السبب
وكذلك لو حبيت اضافة شرط اخربحيث الاكسبيرت لا يدخل صفقات شراء الا اذا كان السعر فوق موفينج 200 ولايدخل صفقات بيع الا اذا كان السعر تحت الموفينج كيف يمكننى صياغه الشرط
ولكم جزيل الشكر
kira-h
25-02-2020, 10:14 PM
الاخ كيرا لو سمحت انا قمت ببرمجة الاكسبيرت المرفق ولدى بعض الملاحظات ارجومن حضرتك ايضاحها لى
الاكسبيرت يفتح صفقه واحده فقط ولا يفتحصفقات اخرىما السبب
وكذلك لو حبيت اضافة شرط اخربحيث الاكسبيرت لا يدخل صفقات شراء الا اذا كان السعر فوق موفينج 200 ولايدخل صفقات بيع الا اذا كان السعر تحت الموفينج كيف يمكننى صياغه الشرط
ولكم جزيل الشكر
السلام عليكم
تم التصحيح بالنسخة المرفقة مع الشرح
amr0222
26-02-2020, 07:10 AM
تسلم اخى كيرا بارك الله فيك ورزقك الجنه
السلام عليكم
تم التصحيح بالنسخة المرفقة مع الشرح
kira-h
26-02-2020, 06:38 PM
تسلم اخى كيرا بارك الله فيك ورزقك الجنه
بالتوفيق إن شاء الله
shivaa
27-02-2020, 10:18 PM
السلام عليكم
كيف اعرف ان صفقه تم اغلاقها من قبل اكسبير ام يدويا
حيث اريد اذا كان اغلاق يدويا لا يعيد الدخول اذا تحقق الشروط الدخول مره اخرى
اما اذا كان الاغلاق كان من اكسسبيرت يعيد الدخول مره اخرى
اكون شاكر
kira-h
28-02-2020, 01:12 AM
السلام عليكم
كيف اعرف ان صفقه تم اغلاقها من قبل اكسبير ام يدويا
حيث اريد اذا كان اغلاق يدويا لا يعيد الدخول اذا تحقق الشروط الدخول مره اخرى
اما اذا كان الاغلاق كان من اكسسبيرت يعيد الدخول مره اخرى
اكون شاكر
وعليكم السلام
ستحتاج إلى شرط حفظ قيمة ما، مثلا كأن تضع متغير ثابث من نوع static يأخذ قيمة معينة عند الاغلاق بواسطة الاكسبيرت أي بعد الدالة OrderClose
ومن خلال هذه القيمة تستطيع تنفيذ ما تريد وبمجرد التنفيذ تعيد القيمة إلى أصلها، وهكذا...
Sherry
01-03-2020, 11:33 PM
السلام عليكم
الله يعطيكم العافيه جميعا
عندي استفسار عن كيفية عمل داله لما هو آت
عندي صفقات شراء عددها اربعه او اكثر
كيف امنع الاكسبيرت من فتح صفقة شراء اخرى رغم تحقق شروط الشراء بين سعرين محددين
لوجود صفقة شراء موجوده فعلا بين السعرين المحددين
اشكر جهودكم الطيب
kira-h
02-03-2020, 05:08 PM
السلام عليكم
الله يعطيكم العافيه جميعا
عندي استفسار عن كيفية عمل داله لما هو آت
عندي صفقات شراء عددها اربعه او اكثر
كيف امنع الاكسبيرت من فتح صفقة شراء اخرى رغم تحقق شروط الشراء بين سعرين محددين
لوجود صفقة شراء موجوده فعلا بين السعرين المحددين
اشكر جهودكم الطيب
وعليكم السلام
مثال :
int OrdersP()
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()<=OP_SELL)
{
if((price1>price2&&OrderOpenPrice()<price1&&OrderOpenPrice()>Price2)
||(price1<price2&&OrderOpenPrice()<price2&&OrderOpenPrice()>Price1))cnt++;
}
}
}
return(cnt);
}
بحيث price1 و price2 السعرين
Sherry
03-03-2020, 11:10 AM
الله يعطيك العافيه
هنا اذا كان شرط الشراء هو
if(Bid>Price1)
يضاف شرط الداله بهذا الشكل
if(Bid>Price2&&Price1>Price2&&OrderOpenPrice()>Price1&&OrderOpenPrice()<Price2)
و اذا كان هناك اكثر من سعر
P1=x
P2=y
P3=z
وهكذا
هل يتم تعريف الداله بهذا الشكل
int OrdersP()
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()<=OP_SELL)
{
if((price1>price2&&OrderOpenPrice()<price1&&OrderOpenPrice()>Price2)
||(price2>price3&&OrderOpenPrice()<price2&&OrderOpenPrice()>Price3)
||(price3>price4&&OrderOpenPrice()<price3&&OrderOpenPrice()>Price4)
||(price4>price5&&OrderOpenPrice()<price4&&OrderOpenPrice()>Price5))cnt++;
}
}
}
return(cnt);
}
Sherry
03-03-2020, 11:11 AM
اشكرك على مجهودك الطيب و اعتذر على الاطاله
kira-h
03-03-2020, 05:47 PM
اشكرك على مجهودك الطيب و اعتذر على الاطاله
العفو خي الكريم
اقتراحك خاطئ إذا تريد معرفة عدد الصفقات المفتوحة بين سعرين محددين
الصحيح ما جاء بمشاركتي السابقة
Sherry
04-03-2020, 12:26 AM
العفو خي الكريم
اقتراحك خاطئ إذا تريد معرفة عدد الصفقات المفتوحة بين سعرين محددين
الصحيح ما جاء بمشاركتي السابقة
يعطيك العافيه اخي العزيز
اذا كانت شروط الشراء مثلا كالتالي
if((Bid>Price1&&Ask<Price2)
||(Bid>Price2&&Ask<Price3)
||(Bid>Price3&&Ask<Price4)
||(Bid>Price4&&Ask<Price5)
&&BUY==0))
فاذا تحقق شرط الشراء وفقا للشروط السابقه و تم فتح صفقة شراء
و المطلوب اضافة شروط اخرى في حالة وجود صفقة شراء
هل الدالة التاليه صحيحه
||BUY!=0&&((!OrderOpenPrice()>Price1&&!OrderOpenPrice<Price2)
||(!OrderOpenPrice()>Price2&&!OrderOpenPrice<Price3)
||(!OrderOpenPrice()>Price3&&!OrderOpenPrice<Price4)
||(!OrderOpenPrice()>Price4&&!OrderOpenPrice<Price5))
kira-h
04-03-2020, 02:31 AM
يعطيك العافيه اخي العزيز
اذا كانت شروط الشراء مثلا كالتالي
if((Bid>Price1&&Ask<Price2)
||(Bid>Price2&&Ask<Price3)
||(Bid>Price3&&Ask<Price4)
||(Bid>Price4&&Ask<Price5)
&&BUY==0))
فاذا تحقق شرط الشراء وفقا للشروط السابقه و تم فتح صفقة شراء
و المطلوب اضافة شروط اخرى في حالة وجود صفقة شراء
هل الدالة التاليه صحيحه
||BUY!=0&&((!OrderOpenPrice()>Price1&&!OrderOpenPrice<Price2)
||(!OrderOpenPrice()>Price2&&!OrderOpenPrice<Price3)
||(!OrderOpenPrice()>Price3&&!OrderOpenPrice<Price4)
||(!OrderOpenPrice()>Price4&&!OrderOpenPrice<Price5))
الدالة غير مفهومة لانها منطقيا غير صحيحة
اشرح المطلوب تفصيلا لعمل التصحيح
Sherry
04-03-2020, 03:40 PM
الله يسعدك ما قصرت
في البدايه اذا كانت شروط الشراء تتكون من 7 مستويات سعريه كالآتي
P1
P2
P3
P4
P5
P6
P7
مع العلم ان P7 اكبر من P6 و هكذا الى P1 هي الاصغر
و شروط الشراء في حالة ان buy==0
هي ان Bid اكبر من المستوى السعري P1 و اصغر من المستوى السعري P2
او Bid اكبر من المستوى السعري P3 و اصغر من المستوى السعري P4
او Bid اكبر من المستوى السعري P5 و اصغر من المستوى السعري P6
او Bid اكبر من P7
اما في حالة ان BUY!=0
فهي نفس الشروط السابقه في حالة عدم وجود شراء فعلي بين P1 و P2
او عدم وجود شراء فعلي بين P3 و P4
او عدم وجود شراء فعلي بين P5 و P6
او عدم وجود شراء فعلي اكبر من P7
ان شاء الله اكون قدرت اوصل فكرتي
كل الشكر و التقدير لمجهودك الطيب
kira-h
04-03-2020, 05:34 PM
الله يسعدك ما قصرت
في البدايه اذا كانت شروط الشراء تتكون من 7 مستويات سعريه كالآتي
P1
P2
P3
P4
P5
P6
P7
مع العلم ان P7 اكبر من P6 و هكذا الى P1 هي الاصغر
و شروط الشراء في حالة ان buy==0
هي ان Bid اكبر من المستوى السعري P1 و اصغر من المستوى السعري P2
او Bid اكبر من المستوى السعري P3 و اصغر من المستوى السعري P4
او Bid اكبر من المستوى السعري P5 و اصغر من المستوى السعري P6
او Bid اكبر من P7
اما في حالة ان BUY!=0
فهي نفس الشروط السابقه في حالة عدم وجود شراء فعلي بين P1 و P2
او عدم وجود شراء فعلي بين P3 و P4
او عدم وجود شراء فعلي بين P5 و P6
او عدم وجود شراء فعلي اكبر من P7
ان شاء الله اكون قدرت اوصل فكرتي
كل الشكر و التقدير لمجهودك الطيب
كما قلت سابقا يمكنك جعل الدالة المقترحة بدلالة السعرين
مثال :
int OrdersP(double price1,double price2)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()<=OP_SELL)
{
if((price1>price2&&OrderOpenPrice()<price1&&OrderOpenPrice()>price2)
||(price1<price2&&OrderOpenPrice()<price2&&OrderOpenPrice()>price1))cnt++;
}
}
}
return(cnt);
}
مثال للشروط :
if(BUY!=0&&(OrdersP(P1,P2)==0||OrdersP(P2,P3)==0
||OrdersP(P3,P4)==0||OrdersP(P4,P5)==0
||OrdersP(P5,P6)==0||OrdersP(P6,P7)==0))
Sherry
05-03-2020, 02:34 PM
كما قلت سابقا يمكنك جعل الدالة المقترحة بدلالة السعرين
مثال :
int OrdersP(double price1,double price2)
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()<=OP_SELL)
{
if((price1>price2&&OrderOpenPrice()<price1&&OrderOpenPrice()>price2)
||(price1<price2&&OrderOpenPrice()<price2&&OrderOpenPrice()>price1))cnt++;
}
}
}
return(cnt);
}
مثال للشروط :
if(BUY!=0&&(OrdersP(P1,P2)==0||OrdersP(P2,P3)==0
||OrdersP(P3,P4)==0||OrdersP(P4,P5)==0
||OrdersP(P5,P6)==0||OrdersP(P6,P7)==0))
الله يعطيك العافيه ما قصرت
في هذه الحاله شروط
مثال للشروط :
كود:
if(BUY!=0&&(OrdersP(P1,P2)==0||OrdersP(P2,P3)==0
||OrdersP(P3,P4)==0||OrdersP(P4,P5)==0
||OrdersP(P5,P6)==0||OrdersP(P6,P7)==0))
هي تعني عدد الصفقات بين السعرين
السؤال هنا اذا اردت معرفة قيمة الصفقه كسعر اكبر من P2
و قيمة الصفقه كسعر اصغر من P1
على اعتبار ان P2 اكبر من P1
فما هي الداله لذلك ؟؟؟
ازعجتك اخي العزيز كل الشكر و التقدير لسعة صدرك
kira-h
05-03-2020, 06:46 PM
الله يعطيك العافيه ما قصرت
في هذه الحاله شروط
مثال للشروط :
كود:
if(BUY!=0&&(OrdersP(P1,P2)==0||OrdersP(P2,P3)==0
||OrdersP(P3,P4)==0||OrdersP(P4,P5)==0
||OrdersP(P5,P6)==0||OrdersP(P6,P7)==0))
هي تعني عدد الصفقات بين السعرين
السؤال هنا اذا اردت معرفة قيمة الصفقه كسعر اكبر من P2
و قيمة الصفقه كسعر اصغر من P1
على اعتبار ان P2 اكبر من P1
فما هي الداله لذلك ؟؟؟
ازعجتك اخي العزيز كل الشكر و التقدير لسعة صدرك
العفو أخي الكريم
السؤال غير واضح، ماذا تعني بقيمة الصفقة ؟
Sherry
05-03-2020, 10:23 PM
العفو أخي الكريم
السؤال غير واضح، ماذا تعني بقيمة الصفقة ؟
مثال لسعر الذهب
الصفقه الاعلى = 1620
p2 = 1610
p1 = 1600
الصفقه الاصغر = 1590
يعني المطلوب تحديد سعر الصفقه المفتوحه و اكبر من p2
و سعر الصفقه المفتوحه و اصغر من p1
kira-h
05-03-2020, 11:25 PM
مثال لسعر الذهب
الصفقه الاعلى = 1620
p2 = 1610
p1 = 1600
الصفقه الاصغر = 1590
يعني المطلوب تحديد سعر الصفقه المفتوحه و اكبر من p2
و سعر الصفقه المفتوحه و اصغر من p1
مثال :
double HighPriceP(double price)//دالة تحديد سعر الصفقة التي اكبر من السعر المحدد
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber();
double op=OrderOpenPrice();
if(sy==Symbol()&&mn==MagicNo)
{
if(op>price)return(op);
}
}
return(0);
}
double LowPriceP(double price)//دالة تحديد سعر الصفقة التي اقل من السعر المحدد
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber();
double op=OrderOpenPrice();
if(sy==Symbol()&&mn==MagicNo)
{
if(op<price)return(op);
}
}
return(0);
}
GBPJPY
09-03-2020, 06:57 AM
وعليكم السلام
دالة تيكت الصفقة المحققة اعلى ربح كالتالي:
int TicketProfit()
{
double pt=-EMPTY_VALUE;
int tk=0;
for(int cnt=0;cnt<=OrdersTotal();cnt++)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderType()<=OP_SELL)
{
if(OrderProfit()>pt){pt=OrderProfit();tk=OrderTicket();}
}
}
return(tk);
}
أما مسألة الترتيب لم اجد لها حل
السلام عليكم
هذه الدالة ممكن العمل عليه ايضا فى معرفة اكبر خسارة
السؤال هنا
هل فى طريقة لمعرفة الصفقة الاقل خسارة من الصفقة الاكبر خسارة
بمعى الدالة تظهر لى الصفقة اكبر خسارة او اكبر ربح
انا عايز الصفقة التى قبله فقط
يعنى لو اكبر خسارة كانت -100
والصفقة الاقل خسارة من الاخيره عامله -90
انا عايز اعرف رقم التكيت هذه الصفقة
وشكرا على المساعده
shivaa
09-03-2020, 02:24 PM
السلام عليكم
كيف اقول برمجه
اذا كان الوقت اغلاق اخر صفقه على نفس الزوج
على نفس الشمعه على نفس التيم فريم
لا تفتح حتى تغلق الشمعه الحاليه
ثانى شى
الوقت يخرج بشكل رقم صحيح كيف اغيره الى صيغه الوقت الساعه ودقائق
Sherry
09-03-2020, 03:24 PM
مثال :
double HighPriceP(double price)//دالة تحديد سعر الصفقة التي اكبر من السعر المحدد
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber();
double op=OrderOpenPrice();
if(sy==Symbol()&&mn==MagicNo)
{
if(op>price)return(op);
}
}
return(0);
}
double LowPriceP(double price)//دالة تحديد سعر الصفقة التي اقل من السعر المحدد
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber();
double op=OrderOpenPrice();
if(sy==Symbol()&&mn==MagicNo)
{
if(op<price)return(op);
}
}
return(0);
}
الله يعطيك العافيه اخي الكريم ما قصرت
shivaa
09-03-2020, 04:00 PM
السلام عليكم
كيف اقول برمجه
اذا كان الوقت اغلاق اخر صفقه على نفس الزوج
على نفس الشمعه على نفس التيم فريم
لا تفتح حتى تغلق الشمعه الحاليه
ثانى شى
الوقت يخرج بشكل رقم صحيح كيف اغيره الى صيغه الوقت الساعه ودقائق
up
kira-h
09-03-2020, 06:12 PM
السلام عليكم
هذه الدالة ممكن العمل عليه ايضا فى معرفة اكبر خسارة
السؤال هنا
هل فى طريقة لمعرفة الصفقة الاقل خسارة من الصفقة الاكبر خسارة
بمعى الدالة تظهر لى الصفقة اكبر خسارة او اكبر ربح
انا عايز الصفقة التى قبله فقط
يعنى لو اكبر خسارة كانت -100
والصفقة الاقل خسارة من الاخيره عامله -90
انا عايز اعرف رقم التكيت هذه الصفقة
وشكرا على المساعده
وعليكم السلام
نعم يمكن معرفة اكبر خسارة بنفس الطريقة
الدالة كالتالي :
int TicketProfit()
{
double pt1=-EMPTY_VALUE,pt2=-EMPTY_VALUE;
int tk1=0,tk2=0;
for(int cnt=0;cnt<=OrdersTotal();cnt++)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderType()<=OP_SELL)
{
if(OrderProfit()>pt1){pt1=OrderProfit();tk1=OrderTicket();}
if(OrderProfit()<pt1&&OrderProfit()>pt2){pt2=OrderProfit();tk2=OrderTicket();}
}
}
return(tk2);
}