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

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



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

kira-h
12-11-2021, 11:43 PM
جزاك الله كل خير
أنا حاليا مبتدأ في برمجة تقبل اعتذاري اذا أكثرت عليك الطلبات
حسانا
InpDepth هيا الفترة الزمنية
لكن ماذا يقصد بهذه :InpDeviation و InpBackstep و ExtLevel=3


هي نفسها المتغيرات ExtDeviation و ExtBackstep باللغة القديمة، تم تصحيحها بالمتغيرات الجديدة بمشاركتي السابقة #3499 (https://www.fxprg.com/vb/showthread.php?t=31457&p=930502&viewfull=1#post930502)
ExtLevel ليس بتلك الاهمية مجرد عداد في حال وجود عدد شموع سابقة قليل على الشارت

taayeb
13-11-2021, 01:31 AM
هي نفسها المتغيرات ExtDeviation و ExtBackstep باللغة القديمة، تم تصحيحها بالمتغيرات الجديدة بمشاركتي السابقة #3499 (https://www.fxprg.com/vb/showthread.php?t=31457&p=930502&viewfull=1#post930502)
ExtLevel ليس بتلك الاهمية مجرد عداد في حال وجود عدد شموع سابقة قليل على الشارت
لا أنا قصدت ما دورها في لكود
مثلا extdepth هيا تخص الفترة زمنية لشموع
أما deviation و backstep لم أفهم دورهم
هل deviation تخص أيضا فترة زمنية ؟

kira-h
13-11-2021, 07:06 AM
لا أنا قصدت ما دورها في لكود
مثلا extdepth هيا تخص الفترة زمنية لشموع
أما deviation و backstep لم أفهم دورهم
هل deviation تخص أيضا فترة زمنية ؟
اخي الكريم
الانحراف deviation : نسبة مئوية بحيث يحدد الحد الأدنى من تغير السعر اللازم للمؤشر لتشكيل هاي / لو .
العمق depth: يحدد الحد الأدنى للفاصل الزمني الذي سيرسم فيه المؤشر هاي جديد إذا تم الامتثال لإعداد الانحراف. يتم قياسه بعدد الشموع.
الخطوة backstep: هو الحد الأدنى لعدد الشموع بحيث لن يتم رسم الهايات / القيعان الجديدة إذا اختلفت عن الهايات السابقة لحجم الانحراف..
الشرح بالانجليزي اوضح



Deviation : the minimum quantity of the points (in % between min and max of two next bars) which is necessary for the formation of a new local extremum. All price movements above this value will be noted by the ZigZag line, and those that are less, − are ignored. In the majority of the trading platform versions 5% of the deviation are offered by default, values more than 10% make sense only for assets with non-standard volatility. Results of the graphic creation of the indicator depend on a timeframe

Depth : the minimum quantity of bars at which ZigZag won't form a new extremum even if the condition for the Deviation parameter is satisfied. For example, if the value 10 is established, and the change in price has happened for 9 (bars), then the indicator simply «skips one step»

Backstep: a minimum quantity of the bars between consecutive local max/min. If this condition isn't satisfied, new extremum isn't formed even if the first two parameters are met

taayeb
14-11-2021, 09:39 PM
جزاكم الله كل خير

taayeb
15-11-2021, 03:27 AM
السلام عليكم
هل يمكن اضهار الكتابة داخل صندوق أو له خلفية و في نفس الوقت يمكن تحريك هذا الصندوق الذي يحتوي الكتابة في جهة من شاشة شارت
وكذلك يتغير حجم هذا الصندوق يزداد أو ينقص بكمية الكتابة المعروضة
جزاكم الله كل خير

metmet
15-11-2021, 02:04 PM
السلام عليكم باشمهندس
عايز كود يظهر تنبيه صوتى إذا ظهرت
شمعة يكون افتتاحها أسفل اغلاق شمعة قبلها هابطة
وكود آخر يظهر تنبيه صوتى إذا ظهرت
شمعة يكون افتتاحها أعلى اغلاق شمعة قبلها صاعدة

ولك جزيل الشكر

metmet
15-11-2021, 05:21 PM
السلام عليكم باشمهندس
عايز كود يظهر تنبيه صوتى إذا ظهرت
شمعة صاعدة يكون افتتاحها أسفل اغلاق شمعة قبلها هابطة
وكود آخر يظهر تنبيه صوتى إذا ظهرت
شمعة هابطة يكون افتتاحها أعلى اغلاق شمعة قبلها صاعدة


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

kira-h
15-11-2021, 11:25 PM
عذرا فقد كنت نسيت كلمتين
ولك جزيل الشكر
وعليكم السلام
الشروط كالتالي:


if(Close[1]>Open[1]&&Close[2]<Open[2]&&Open[1]<Close[2])Alert("up");
if(Close[1]<Open[1]&&Close[2]>Open[2]&&Open[1]>Close[2])Alert("dn");

kira-h
15-11-2021, 11:29 PM
السلام عليكم
هل يمكن اضهار الكتابة داخل صندوق أو له خلفية و في نفس الوقت يمكن تحريك هذا الصندوق الذي يحتوي الكتابة في جهة من شاشة شارت
وكذلك يتغير حجم هذا الصندوق يزداد أو ينقص بكمية الكتابة المعروضة
جزاكم الله كل خير
وعليكم السلام
إذا تقصد صندوق التنبيهات المعروف فهذا غير ممكن
اما إذا تقصد جدول على الشارت فهذا ممكن عن طريق دالة OnChartEvent ويطول شرح ما تريد لكن يوجد شرح للأساسيات بهذه المشاركة #85 (https://www.fxprg.com/vb/showthread.php?t=31457&p=846554&viewfull=1#post846554)

taayeb
16-11-2021, 12:30 AM
28728

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

kira-h
16-11-2021, 01:35 PM
28728

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

taayeb
18-11-2021, 01:49 PM
السلام عليكم
أريد استدعاء مؤشر زقزاق أثناء وضع اكسبيرت و يظهر زقزاق على شارت
هل أقوم بنسخ كود مؤشر الزقزاق في دالة onite داخل اكسبيرت
أم يوجد طريقة أخرى
جزاكم الله كل خير

sabil
18-11-2021, 08:15 PM
اخي حسن هل يوجد لديكم اكسبرت نسخ السيجنال من قنوات التليجرام
او ماهي الاكواد البرمجية لتنفيذ ذلك؟

kira-h
19-11-2021, 09:36 PM
السلام عليكم ورحمة الله وبركاته... هل ممكن كود يمكن اضافتة المؤشر بحيث احدد وقت عمله... مثلا يعمل كل يوم من الساعة الرابعة فجرا إلى الساعة العاشرة مساءا
او عدة اوقات محددة خلال اليوم مثلا افتتاح السوق الأمريكي مع السوق الأوروبي.. المختصرتشغيل وإيقاف عمل المؤشر خلال وقت محدد خلال اليوم من خلال تحديدها من الاعدادات
اشكرك على جهودك الطيبه...
وعليكم السلام
ستضع شرط التوقيت قبل شروط الاشارة
مثال ان يعمل بين الساعة 8 و الساعة 20:


if(TimeHour(Time[i])>8&&TimeHour(Time[i])<20)//

kira-h
19-11-2021, 09:38 PM
اخي حسن هل يوجد لديكم اكسبرت نسخ السيجنال من قنوات التليجرام
او ماهي الاكواد البرمجية لتنفيذ ذلك؟
ليس من اختصاصي اخي الكريم

kira-h
19-11-2021, 09:46 PM
السلام عليكم
أريد استدعاء مؤشر زقزاق أثناء وضع اكسبيرت و يظهر زقزاق على شارت
هل أقوم بنسخ كود مؤشر الزقزاق في دالة onite داخل اكسبيرت
أم يوجد طريقة أخرى
جزاكم الله كل خير
وعليكم السلام
هذا الامر ممكن فقط مع المؤشرات الرسومية (ترندات قنوات هارمونيك...) وليس مؤشرات الاندكس Buffers غير ممكن أخي

taayeb
20-11-2021, 12:32 PM
السلام عليكم
اذا كيف يمكن جعل اكسبيرت يتبع مؤشر موضوع على شارت
بحيث عندما أغير اعدادات مؤشر يبدا اكسبيرت يحسب على اعدادات الجديدة للمؤشر

kira-h
20-11-2021, 06:08 PM
السلام عليكم
اذا كيف يمكن جعل اكسبيرت يتبع مؤشر موضوع على شارت
بحيث عندما أغير اعدادات مؤشر يبدا اكسبيرت يحسب على اعدادات الجديدة للمؤشر
وعليكم السلام
تستخرج قيم الاندكسات (الالوان Buffers) باستدعاء المؤشر باسمه من خلال الوظيفة iCustom ولا يحتاج الى وجود المؤشر على الشارت وكذلك تضع اعداداته ضمن اعدادات دالة الاستدعاء
راجع المشاركة التالية #740 (https://www.fxprg.com/vb/showthread.php?t=31457&p=874388&viewfull=1#post874388)
مثلا مؤشر اسمه arrows عبارة عن سهم صاعد بالقيمة 0 وسهم هابط بالقيمة 1 (القيم 0 و 1 حسب ترتيب لوني السهم) وله اعدادين اسمهما مثلا period و method سيكون شكل الكود كالتالي :


//اعدادات المؤشر ستضعهما ضمن اعدادات الاكسبيرت حتى يتبعها كما تريد
input int period=10,
method=1;

double ind(int index)//دالة استدعاء المؤشر بدلالة نوع السهم او الاندكس
{
return(iCustom(Symbol(),0,"arrows",period,method,index,1));//الدالة بهما الاعداداين تبع المؤشر
}


ثم ستحاول معرفة قيم الاندكسين لعمل الشروط كما شرحت بالمشاركة #740 (https://www.fxprg.com/vb/showthread.php?t=31457&p=874388&viewfull=1#post874388)

Ghassebd
21-11-2021, 05:49 PM
if(TimeHour(Time[i])>8&&TimeHour(Time[i])<20)

Alert=False;

else


Alert=True;






if(TimeGMT()>=8&& TimeGMT()<=20)
Alert=False;

else

Alert=True;







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

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

يوجد مؤشر هنا ارفقتة في مشاركة سابقة
هل ممكن اضاقة الكود داخله لايقاف ارسال الايميل والتنبية في الوقت المحدد مسيقا
https://www.fxprg.com/vb/attachment.php?attachmentid=28714&d=1636752373


اشكرك

rambo
21-11-2021, 06:29 PM
السلام عليكم ورحمة الله وبركاته
مساء النور أخي حسن
أتمنى أن تكون بأفضل حال
أتمنى عمل دالتين تعمل وفق الطريقة التالية:
الدالة الأولى
المطلوب هو وضع أمر معلق باي ستوب عند آخر قمة للزيجزاج (هاي الشمعة) وسيل ستوب عند آخر قاع للزيجزاج (لو الشمعة) .. يوجد شرطين لإختيار آخر قمة و قاع للزيجزاج سأذكرهما :
بالنسبة للقمة
1- آخر قمة للزيجزاج لم يلمسها السعر
2- السعر قد سبق له الإبتعاد عن هذه القمة بعدد معين من النقاط (سيتم إختيار عدد النقاط كمتغير خارجي)
إذا تحقق هذين الشرطين سيتم وضع أمر معلق باي ستوب عند ( هاي الشمعة ) لهذه القمة

بالنسبة للقاع
1- آخر قاع للزيجزاج لم يلمسه السعر
2- السعر قد سبق له الإبتعاد عن هذا القاع بعدد معين من النقاط (سيتم إختيار عدد النقاط كمتغير خارجي)
إذا تحقق هذين الشرطين سيتم وضع أمر معلق سيل ستوب عند ( لو الشمعة ) لهذا القاع

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

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

أتمنى أن أكون وفقت في إيصال المقصود وإذا كان هناك أي شيء غير واضح فسقوم بإيضاحه إن شاء الله
الشكر الجزيل لك مقدما

kira-h
21-11-2021, 07:45 PM
if(TimeHour(Time[i])>8&&TimeHour(Time[i])<20)

Alert=False;

else


Alert=True;





if(TimeGMT()>=8&& TimeGMT()<=20)
Alert=False;

else

Alert=True;




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

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

يوجد مؤشر هنا ارفقتة في مشاركة سابقة
هل ممكن اضاقة الكود داخله لايقاف ارسال الايميل والتنبية في الوقت المحدد مسيقا
https://www.fxprg.com/vb/attachment.php?attachmentid=28714&d=1636752373


اشكرك





السلام عليكم
الكود غير صحيح
عموما حسب ما فهمت تريد ان لا يعمل التنبيه بين الساعة 8 و الساعة 20
إذا كان كذلك فقد تم اضافته بالسطر رقم 2429 (بالمؤشر المرفق)

if(time!=Time[0]&&(TimeHour(TimeCurrent())<=Start_Hour||TimeHour(TimeCurrent())>=End_Hour))

أما إذا تريد ان يعمل التنبيه بين الساعة 8 والساعة 20 فالسطر يجب ان يكون كالتالي:

if(time!=Time[0]&&TimeHour(TimeCurrent())>=Start_Hour&&TimeHour(TimeCurrent())<=End_Hour)

taayeb
22-11-2021, 11:52 PM
السلام عليكم
كيف يمكنني اضهار عدد شموع فوق كل قمة أو قاع لزقزاق
جزاكم الله كل خير

rambo
24-11-2021, 02:56 PM
السلام عليكم ورحمة الله وبركاته
مساء النور أخي حسن
أتمنى أن تكون بأفضل حال
أتمنى عمل دالتين تعمل وفق الطريقة التالية:
الدالة الأولى
المطلوب هو وضع أمر معلق باي ستوب عند آخر قمة للزيجزاج (هاي الشمعة) وسيل ستوب عند آخر قاع للزيجزاج (لو الشمعة) .. يوجد شرطين لإختيار آخر قمة و قاع للزيجزاج سأذكرهما :
بالنسبة للقمة
1- آخر قمة للزيجزاج لم يلمسها السعر
2- السعر قد سبق له الإبتعاد عن هذه القمة بعدد معين من النقاط (سيتم إختيار عدد النقاط كمتغير خارجي)
إذا تحقق هذين الشرطين سيتم وضع أمر معلق باي ستوب عند ( هاي الشمعة ) لهذه القمة

بالنسبة للقاع
1- آخر قاع للزيجزاج لم يلمسه السعر
2- السعر قد سبق له الإبتعاد عن هذا القاع بعدد معين من النقاط (سيتم إختيار عدد النقاط كمتغير خارجي)
إذا تحقق هذين الشرطين سيتم وضع أمر معلق سيل ستوب عند ( لو الشمعة ) لهذا القاع

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

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

أتمنى أن أكون وفقت في إيصال المقصود وإذا كان هناك أي شيء غير واضح فسقوم بإيضاحه إن شاء الله
الشكر الجزيل لك مقدما

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

28830

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

28831

28832

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

kira-h
24-11-2021, 06:16 PM
السلام عليكم ورحمة الله وبركاته
مساء النور أخي حسن
أتمنى أن تكون بأفضل حال
أتمنى عمل دالتين تعمل وفق الطريقة التالية:
الدالة الأولى
المطلوب هو وضع أمر معلق باي ستوب عند آخر قمة للزيجزاج (هاي الشمعة) وسيل ستوب عند آخر قاع للزيجزاج (لو الشمعة) .. يوجد شرطين لإختيار آخر قمة و قاع للزيجزاج سأذكرهما :
بالنسبة للقمة
1- آخر قمة للزيجزاج لم يلمسها السعر
2- السعر قد سبق له الإبتعاد عن هذه القمة بعدد معين من النقاط (سيتم إختيار عدد النقاط كمتغير خارجي)
إذا تحقق هذين الشرطين سيتم وضع أمر معلق باي ستوب عند ( هاي الشمعة ) لهذه القمة

بالنسبة للقاع
1- آخر قاع للزيجزاج لم يلمسه السعر
2- السعر قد سبق له الإبتعاد عن هذا القاع بعدد معين من النقاط (سيتم إختيار عدد النقاط كمتغير خارجي)
إذا تحقق هذين الشرطين سيتم وضع أمر معلق سيل ستوب عند ( لو الشمعة ) لهذا القاع

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

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

أتمنى أن أكون وفقت في إيصال المقصود وإذا كان هناك أي شيء غير واضح فسقوم بإيضاحه إن شاء الله
الشكر الجزيل لك مقدما


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

28830

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

28831

28832

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

وعليكم السلام
أخي الكريم هذا طلب اكسبيرت وليس فقط سؤال برمجي!
عموما راجع المشاركة التالية #1204 (https://www.fxprg.com/vb/showthread.php?t=31457&p=881383&viewfull=1#post881383) ستجد فيها القيم السعرية والزمنية للقمم والقيعان السابقة، وعليه يمكنك بناء الشروط

rambo
24-11-2021, 08:04 PM
وعليكم السلام
أخي الكريم هذا طلب اكسبيرت وليس فقط سؤال برمجي!
عموما راجع المشاركة التالية #1204 (https://www.fxprg.com/vb/showthread.php?t=31457&p=881383&viewfull=1#post881383) ستجد فيها القيم السعرية والزمنية للقمم والقيعان السابقة، وعليه يمكنك بناء الشروط

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

metmet
24-11-2021, 10:05 PM
السلام عليكم أخي
مثلا


Close[0]>=High[1]+Pips*Point

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

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


if(Close[1]>Open[1]&&Close[0]<Open[0]&&Open[0]>Close[1]+pips*Point&&Close[0]<Close[1])Alert("-----");

والعكس


if(Close[1]<Open[1]&&Close[0]>Open[0]&&Open[0]<Close[1]-pips*Point&&Close[0]>Close[1])Alert("-----");

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

وأنا عايز يظهر التنبيه مرة واحدة فقط عندما
أولا ::: الشمعة (1) صاعدة و الشمعة (0) هابطة
ثانيا ::: لا يظهر التنببيه الا بعد أن تغلق الشمعة (0) هابطة أقل من اغلاق الشمعة (1)
ويظهر سهم أحمر هابط

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

مع التوضيح أين كانت مشكلة التكرار
وجزاك الله الجنة

kira-h
25-11-2021, 09:52 PM
السلام عليكم أخي
مثلا


Close[0]>=High[1]+Pips*Point

هنا بقوله افتح buy بعد اختراق الشمعة 0 بعدد معين من النقاط لا هذا شرط اختراق السعر الحالي لهاي الشمعة 1 بعدد نقاط بيبس
عايز اذا تم الاختراق سواء في الشمعة 0 أو بعدها بعدد مثلا 3 شموع يفتح امر اشراء
كيف يمكننى أن أكتب هذا الكود بحيث يكون هناك اعداد خارجى اكتب فيه عدد الشموع
وجزاك الله الجنة



input int bars=5;

if(Close[0]>=High[iHighest(Symbol(),0,MODE_HIGH,bars,1]+Pips*point)

نفس الشيء باللو:

if(Close[0]<=Low[iLowest(Symbol(),0,MODE_LOW,bars,1]-Pips*point)



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


if(Close[1]<Open[1]&&Close[0]>Open[0]&&Open[0]<Close[1]-pips*Point&&Close[0]>Close[1])Alert("-----");

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

وأنا عايز يظهر التنبيه مرة واحدة فقط عندما
أولا ::: الشمعة (1) صاعدة و الشمعة (0) هابطة
ثانيا ::: لا يظهر التنببيه الا بعد أن تغلق الشمعة (0) هابطة أقل من اغلاق الشمعة (1)
ويظهر سهم أحمر هابط

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

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


static datetime time=0;


int start()
{
if(Close[1]<Open[1]&&Close[2]>Open[2]&&Close[1]<Close[2]&&time!=Time[0])
{
Alert("down");
time=Time[0];
}

if(Close[1]>Open[1]&&Close[2]<Open[2]&&Close[1]>Close[2]&&time!=Time[0])
{
Alert("up");
time=Time[0];
}
}

taayeb
26-11-2021, 03:36 AM
السلام عليكم
كيف يمكنني اضهار عدد شموع فوق كل قمة أو قاع لزقزاق
جزاكم الله كل خير

metmet
26-11-2021, 05:30 PM
السلام عليكم أخي
مثلا


Close[0]>=High[1]+Pips*Point

هنا بقوله افتح buy بعد اختراق الشمعة 0 بعدد معين من النقاط لا هذا شرط اختراق السعر الحالي لهاي الشمعة 1 بعدد نقاط بيبس
عايز اذا تم الاختراق سواء في الشمعة 0 أو بعدها بعدد مثلا 3 شموع يفتح امر اشراء
كيف يمكننى أن أكتب هذا الكود بحيث يكون هناك اعداد خارجى اكتب فيه عدد الشموع
وجزاك الله الجنة
حضرتك رديت عليا ب هذا الكود


input int bars=5;

if(Close[0]>=High+Pips*point)
واللو


if(Close[0]<=Low[iLowest(Symbol(),0,MODE_LOW,bars,1]-Pips*point)

بالفعل وضعت في الاعدادات الخارجية

input int bars=5;

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

أنا كتبت الكود هكذا


if(IsTradeAllowed())
{
int ticket;
if(UP>MM&&time&&(OP_BUY)==0&&Close[0]>=High[iHighest(Symbol(),0,MODE_HIGH,bars,1]+Pips*point&&T_1!=Time[0]){

if(TradesCount(OP_BUY)<Max_Open_Buy)
{
ticket = open(OP_BUY,Lots(MaxRisk),Ask,TakeProfit,StopLoss) ;
}
if(ticket <= 0) return;
T_1=Time[0];
}

}


if(IsTradeAllowed())
{
int ticket;
if(UP>MM&&time&&Close[0]<=Low[iLowest(Symbol(),0,MODE_LOW,bars,1]-Pips*point&&T_1!=Time[0]){
if(TradesCount(OP_SELL)<Max_Open_Sell)
{
ticket =open(OP_SELL,Lots(MaxRisk),Bid,TakeProfit,StopLos s) ;
}
if(ticket <=0) return;
T_1=Time[0];
}
}


ولكن بردو هناك أخطاء
أرجو تصويب الأخطاء

حيث أن شروط دخول ال buy
أن يتم اختراق شمعة (محددة عن طريق مؤشر خارجي) أن يتم اختراقها لأعلى ، بعدد معين من النقاط ، سواء في الشمعة (0) أو بعد شمعة ال(0) بعدد معين من الشموع يتم تحديده في الاعدادات الخارجية ، وطبعا أقصى عدد لصفقات الباي محدد مسبقا في الاعدادات الخارجية أيضا
والعكس في ال sell

[I]وجزاك الله الجنة

kira-h
26-11-2021, 09:41 PM
اخي metmet (https://www.fxprg.com/vb/member.php?u=121107) لديك خطأ بالاقواس وخطأ تقني بعد دالة فتح الصفقة،
الصحيح منطقيا كالتالي :


if(IsTradeAllowed())
{
int ticket=0;
if(UP>MM&&Close[0]>=High[iHighest(Symbol(),0,MODE_HIGH,bars,1)]+Pips*point&&T_1!=Time[0])
{
if(TradesCount(OP_BUY)<Max_Open_Buy)
ticket = open(OP_BUY,Lots(MaxRisk),Ask,TakeProfit,StopLoss) ;
if(ticket > 0)
T_1=Time[0];
}


if(UP>MM&&Close[0]<=Low[iLowest(Symbol(),0,MODE_LOW,bars,1)]-Pips*point&&T_1!=Time[0])
{
if(TradesCount(OP_SELL)<Max_Open_Sell)
ticket =open(OP_SELL,Lots(MaxRisk),Bid,TakeProfit,StopLos s) ;
if(ticket >0)
T_1=Time[0];
}
}

metmet
27-11-2021, 02:26 AM
اخي metmet (https://www.fxprg.com/vb/member.php?u=121107) لديك خطأ بالاقواس وخطأ تقني بعد دالة فتح الصفقة،
الصحيح منطقيا كالتالي :


if(IsTradeAllowed())
{
int ticket=0;
if(UP>MM&&Close[0]>=High[iHighest(Symbol(),0,MODE_HIGH,bars,1)]+Pips*point&&T_1!=Time[0])
{
if(TradesCount(OP_BUY)<Max_Open_Buy)
ticket = open(OP_BUY,Lots(MaxRisk),Ask,TakeProfit,StopLoss) ;
if(ticket > 0)
T_1=Time[0];
}


if(UP>MM&&Close[0]<=Low[iLowest(Symbol(),0,MODE_LOW,bars,1)]-Pips*point&&T_1!=Time[0])
{
if(TradesCount(OP_SELL)<Max_Open_Sell)
ticket =open(OP_SELL,Lots(MaxRisk),Bid,TakeProfit,StopLos s) ;
if(ticket >0)
T_1=Time[0];
}
}



حبيبي ومعلمي الفاضل
جزاك الله عنى كل خير
الكود كما تفضلت لا يوجد به أخطاء في ال metaEditor
إلا في كلمة Pips*point وقد عدلتها لتكون Pips*Point

ورغم ذلك
فالصفقات لا تفتح إلا إذا حدث الاختراق في الشمعة (0) فــقـط
واذا لم يتم الاختراق في الشمعة (0) فلا يفتح رغم أن ال bars في الاعدادات الخارجية 5

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

kira-h
27-11-2021, 03:49 PM
حبيبي ومعلمي الفاضل
جزاك الله عنى كل خير
الكود كما تفضلت لا يوجد به أخطاء في ال metaEditor
إلا في كلمة Pips*point وقد عدلتها لتكون Pips*Point

ورغم ذلك
فالصفقات لا تفتح إلا إذا حدث الاختراق في الشمعة (0) فــقـط
واذا لم يتم الاختراق في الشمعة (0) فلا يفتح رغم أن ال bars في الاعدادات الخارجية 5

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

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

metmet
27-11-2021, 11:29 PM
اخي الكريم ارفق الكود كاملا مع شرح الشروط بصورة من الشارت، فربما الشمعة 0 فاهمها بشكل خاطئ

حبيبي جزاك الله الجنة
الكود هو



#property copyright "BetterVolume 1.4"
#property link ""
#property version "1.00"
#property strict

extern double Lot1=0.01;
extern bool Auto_Lots=false;
extern double MaxRisk = 0.25;
extern int TakeProfit=50;
extern int StopLoss=0;
extern int TrailingStop=10;
extern int TrailingStep=7;
extern int BreakEven=10;
extern int movestopto=3;
extern int win_USD=3;
extern int Pips=2;
input int bars=5;
input int Max_Open_Buy=5;
input int Max_Open_Sell=5;
input int Max_SPREAD=88;
extern string Time_Start="00:00";
extern string Time_End="23:59";
extern bool Multiplication=false;
extern string Multiplication_info = "0=1,1,1,1.... 1=1,2,3,5,8.... 2=1,2,4,8,16.... 3=1,3,6,9....";
extern double Multiplication_Mode = 1;
extern int MagicNumber=123;
string T,nam_B,nam_S;double pr,pt;
color color_pofet,clr;
datetime T_1,T_2,TB1,TB2,TS1,TS2,TD;
double openpriceb,openprices,lot_b,lot_s;
bool op;
int TB,TS,typeo1;

double lot_A,openprice,L;
double low_Day,high_Day;
int BB,SS;

double openpriceS,openpriceB;
int OnInit()
{
if(Digits==4 || Digits<=2) pt=Point;
if(Digits==5 || Digits==3) pt=Point*10;
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

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

double hour=Hour()+Minute()/100.0;
datetime start_= StrToTime(TimeToStr(TimeCurrent(), TIME_DATE) + " " + Time_Start);
datetime end= StrToTime(TimeToStr(TimeCurrent(), TIME_DATE) + " " + Time_End);
bool time=(Time[0]>=start_ && Time[0]<=end);
bool end_time=(Time[0]>=end);



double UP=iCustom(Symbol(),0,"BetterVolume 1.4",4,1);
double MM=iCustom(Symbol(),0,"BetterVolume 1.4",1,1);


Comment(UP," ",MM);

double SPREAD=MathAbs(Ask-Bid)/pt;
int SPREAD1=(int)SPREAD;





if(SPREAD1<=Max_SPREAD)



if(IsTradeAllowed())
{
int ticket=0;
if(UP>MM&&Close[0]>=High[iHighest(Symbol(),0,MODE_HIGH,bars,1)]+Pips*pt&&T_1!=Time[0])
{
if(TradesCount(OP_BUY)<Max_Open_Buy)
ticket = open(OP_BUY,Lots(MaxRisk),Ask,TakeProfit,StopLoss) ;
if(ticket > 0)
T_1=Time[0];
}


if(UP>MM&&Close[0]<=Low[iLowest(Symbol(),0,MODE_LOW,bars,1)]-Pips*pt&&T_1!=Time[0])
{
if(TradesCount(OP_SELL)<Max_Open_Sell)
ticket =open(OP_SELL,Lots(MaxRisk),Bid,TakeProfit,StopLos s) ;
if(ticket >0)
T_1=Time[0];
}
}
if(BreakEven>0)MoveBreakEven();
if(TrailingStop>0)MoveTrailingStop();
if(win_USD>0&&pofet()>win_USD)
CloseDeleteAll();


int B=0;
for( B=0;B<OrdersTotal();B++){
if(OrderSelect(B,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()==MagicNumber&&OrderSymbol()==Symbol()&&OrderType()<=1){
lot_A = OrderLots(); openprice=OrderOpenPrice();typeo1=OrderType();
}
}



for( B=0;B<OrdersTotal();B++){
if(OrderSelect(B,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()==MagicNumber&&OrderSymbol()==Symbol()&&(OrderType()==OP_SELL||OrderType()==OP_SELLSTOP)){
openpriceS=OrderOpenPrice();
}
}

for( B=0;B<OrdersTotal();B++){
if(OrderSelect(B,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()==MagicNumber&&OrderSymbol()==Symbol()&&(OrderType()==OP_BUY||OrderType()==OP_BUYSTOP)){
openpriceB=OrderOpenPrice();
}
}




if(Multiplication_Mode==0)L=lot_A;
if(Multiplication_Mode==1)L=lot_A+Lots(MaxRisk);
if(Multiplication_Mode>1)L=lot_A*Multiplication_Mode;



if(Multiplication){


if(typeo1==OP_BUY&&ordestotal1_2(OP_SELLSTOP)==0&&ordestotal1_2(OP_BUYSTOP)==0&&ordestotal1_2(OP_BUY)>=1){
open(OP_SELLSTOP,L,openpriceS,TakeProfit,StopLoss) ;
}




if(typeo1==OP_SELL&&ordestotal1_2(OP_SELLSTOP)==0&&ordestotal1_2(OP_BUYSTOP)==0&&ordestotal1_2(OP_SELL)>=1){
open(OP_BUYSTOP,L,openpriceB,TakeProfit,StopLoss);
}

}






if(ordestotal1_2(OP_SELL)==0&&ordestotal1_2(OP_SELLSTOP)==0)Delete(OP_BUYSTOP);

if(ordestotal1_2(OP_SELL)>=1&&ordestotal1_2(OP_BUY)==0&&TB==0){Delete(OP_BUYSTOP);TB=1;}




if(ordestotal1_2(OP_BUY)==0&&ordestotal1_2(OP_BUYSTOP)==0)Delete(OP_SELLSTOP);

if(ordestotal1_2(OP_BUY)>=1&&ordestotal1_2(OP_SELL)==0&&TS==0){Delete(OP_SELLSTOP);TS=1;}


if(ordestotal1()<=0){BB=0;SS=0;TB=0;TS=0;}



// if(ordestotal1_2(OP_SELLSTOP)>=1)closeordar(OP_SELL);

// if(ordestotal1_2(OP_BUYSTOP)>=1)closeordar(OP_BUY);


// if(ordestotal1_2(OP_BUYSTOP)==0)closeordar(OP_SELL );

// if(ordestotal1_2(OP_SELLSTOP)==0)closeordar(OP_BUY );


if(LastOrderCloseTime()>LastOrderOpenTime()) {Delete(OP_BUYSTOP);Delete(OP_SELLSTOP);}

// BuyOrderModify();
// SELLOrderModify();

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

if(pofet()>=0)color_pofet=Lime;else{color_pofet=Red;}

BetterVolume("Panel_MAT1",1,20,80," Balance ",10,"",Lime);
BetterVolume("Panel_MA1",1,20,21,DoubleToStr(AccountBalance(), 2),11,"",Aqua);

BetterVolume("Panel_MAT2",1,40,80," Equity ",10,"",Lime);
BetterVolume("Panel_MA2",1,40,21,DoubleToStr(AccountEquity(), 2),11,"",Aqua);


BetterVolume("Panel_MAT3",1,60,80,"profit",10,"",Lime);
BetterVolume("Panel_MA3",1,60,21,DoubleToStr(pofet(), 2),11,"",color_pofet);






}
//+------------------------------------------------------------------+

//-----------------------------------------------------------دالة فتح الصفقات
int open(int ty,double lott,double prc,int pof,int sll)
{
double sl=0,tp=0;

bool modi;

if(ty==OP_BUY || ty==OP_BUYSTOP || ty==OP_BUYLIMIT)
{
if(sll>0){sl=prc-(sll*pt);}else{sl=0;}
if(pof>0){tp=prc+(pof*pt);}else{tp=0;}
clr=Green;
T="Ask ";
pr=NormalizeDouble(Ask,Digits);
}
if(ty==OP_SELL || ty==OP_SELLSTOP || ty==OP_SELLLIMIT)
{
if(sll>0){sl=prc+(sll*pt);}else{sl=0;}
if(pof>0){tp=prc-(pof*pt);}else{tp=0;}
clr=Red;
T="Bid";
pr=NormalizeDouble(Bid,Digits);
}
int tik=OrderSend(Symbol()
,ty
,lott
,NormalizeDouble(prc,Digits)
,10
,0
,0
,"BetterVolume"
,MagicNumber
,0
,clr);
string t;
if(ty==OP_BUY)t="BUY";if(ty==OP_SELL)t="SELL";if(ty==OP_BUYSTOP)t="BUY STOP";if(ty==OP_SELLSTOP)t="SELL STOP";if(ty==OP_BUYLIMIT)t="BUY LIMIT";if(ty==OP_SELLLIMIT)t="SELL LIMIT";
if(tik>0)
{
if(tp>0 || sl>0)modi=OrderModify(tik,prc,NormalizeDouble(sl,Digi ts),NormalizeDouble(tp,Digits),0,CLR_NONE); else modi=true;
if(!modi){Print("Modify Err#= ",GetLastError()," ",Symbol()," ",Period()," Open Price= ",DoubleToStr(prc,Digits)," SL= ",DoubleToStr(sl,Digits)," Tp= ",DoubleToStr(tp,Digits));}
Print("Order Opened successfully " ,"Type ",t," LotSize ",lott," Price ",DoubleToStr(prc,Digits)," TP ",DoubleToStr(tp,Digits)," SL ",DoubleToStr(sl,Digits));
}
else
{
Print("OrderSend failed with error #",GetLastError(), " Type ",t," LotSize= ",lott," ",T,"Now= ",DoubleToStr(pr,Digits)," Price= ",DoubleToStr(prc,Digits)," TP= ",DoubleToStr(tp,Digits)," SL= ",DoubleToStr(sl,Digits)," Spread= ",MarketInfo(Symbol(),MODE_SPREAD));
}
//////
return(tik);

}

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


int ordestotal1_2(int type)//دالة التحكم فى عدد الصفقات
{
int total_2=0;
for(int b=0;b<OrdersTotal();b++){
if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()&&OrderType()==type){
total_2++;
}
}
return(total_2);
}
//-----------------------------------------------------


int ordestotal1()
{
int total_2=0;
for(int b=0;b<OrdersTotal();b++){
if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()){
total_2++;
}
}
return(total_2);
}

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


bool CloseDeleteAll()//دالة اغلاق الصفقات معا
{
int total = OrdersTotal();
for (int cnt = total-1 ; cnt >=0 ; cnt--)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))

if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()){
switch(OrderType())
{
case OP_BUY :
{
if(!OrderClose(OrderTicket(),OrderLots(),MarketInf o(OrderSymbol(),MODE_BID),0,Violet))
return(false);
}break;
case OP_SELL :
{
if(!OrderClose(OrderTicket(),OrderLots(),MarketInf o(OrderSymbol(),MODE_ASK),0,Violet))
return(false);
}break;
}


if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP || OrderType()==OP_BUYLIMIT || OrderType()==OP_SELLLIMIT)
if(!OrderDelete(OrderTicket()))
{
Print("Error deleting " + (string)OrderType() + " order : ",GetLastError());
return (false);
} }
}
}
return (true);
}

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


double Lots(double risk)//دالة ادارة راس المال
{
double Lot;
if(Auto_Lots)
{
if(risk>1)risk=1;
//__________________________________________________ _______________________________________
double Min_Lot = MarketInfo(Symbol(), MODE_MINLOT);
double Max_Lot = MarketInfo(Symbol(), MODE_MAXLOT);
double lot_step= MarketInfo(Symbol(), MODE_LOTSTEP);
Lot=NormalizeDouble(AccountBalance()*risk/100/10,2);
Lot=NormalizeDouble(Lot,2);
Lot=NormalizeDouble(Lot/lot_step,0)*lot_step;
if (Lot < Min_Lot) Lot = Min_Lot;
if (Lot > Max_Lot) Lot = Max_Lot;
//__________________________________________________ _______________________________________
}
else Lot=Lot1;
return(Lot);
}


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

double pofet(){ //دالة معرفة حجم ربح الصفقات المفتوحه

double pr_2=0;
for(int p=0;p<OrdersTotal();p++){
if(OrderSelect(p,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()){
pr_2=pr_2+OrderProfit();
}
}return(pr_2);
}

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

//دالة التوضيح على الشارت بيانات عمل الاكسبيرت
void BetterVolume(string a_name_0, double a_corner_8, int a_y_16, int a_x_20, string a_text_24, int a_fontsize_32, string a_fontname_36, color a_color_44) {
ObjectCreate(a_name_0, OBJ_LABEL, 0, 0, 0);
ObjectSetText(a_name_0, a_text_24, a_fontsize_32, a_fontname_36, a_color_44);
ObjectSet(a_name_0, OBJPROP_CORNER, a_corner_8);
ObjectSet(a_name_0, OBJPROP_XDISTANCE, a_x_20);
ObjectSet(a_name_0, OBJPROP_YDISTANCE, a_y_16);
}

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

double lastlot(){
double O=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()<=1)
O=OrderLots();

}
return(O);
}

void Delete(int type){
for(int a=0;a<OrdersTotal();a++){
if(OrderSelect(a,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()&&OrderType()==type){
bool m=OrderDelete(OrderTicket());
}
}
}


void line(string name, double pr1,color clrr, int style)
{
if(ObjectFind(name) != 0)
{
ObjectCreate(name, OBJ_HLINE, 0, 0,pr1);
ObjectSet(name, OBJPROP_COLOR, clrr);
ObjectSet(name, OBJPROP_STYLE, style);
}
else{if(ObjectGet(name,OBJPROP_PRICE1)!=pr1)
{ObjectDelete(name);}}
}

//////////

void line2(string name,datetime t1 ,color clrr, int style)
{
if(ObjectFind(name) != 0)
{
ObjectCreate(name, OBJ_VLINE, 0, t1,0);
ObjectSet(name, OBJPROP_COLOR, clrr);
ObjectSet(name, OBJPROP_STYLE, style);
ObjectSet(name, OBJPROP_RAY, 0);
ObjectSet(name, OBJPROP_BACK, 1);
}
else{if(ObjectGet(name,OBJPROP_TIME1)!=t1)
{ObjectDelete(name);}}
}


double LastOrderCloseTime(){
for(int i=OrdersHistoryTotal()-1; i>=0; i--){
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if(OrderMagicNumber()==MagicNumber&&OrderSymbol()==Symbol()){
return((int)OrderCloseTime());
}
}
return(0);
}





double LastOrderOpenTime(){
for(int i=OrdersTotal()-1; i>=0; i--){
if( OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
return((int)OrderOpenTime());
}
}
return(0);
}

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

double LastOrderTPB(){
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==OP_BUY){
return(OrderTakeProfit());
}
}
return(0);
}


double LastOrderSLB(){
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==OP_BUY){
return(OrderStopLoss());
}
}
return(0);
}



void BuyOrderModify()

{
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
int ticket=OrderTicket();
if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber&&OrderStopLoss()!=LastOrderTPB())
{
bool ret = OrderModify(ticket, OrderOpenPrice(), LastOrderSLB(), LastOrderTPB(), 0, White);

}
}

}

double LastOrderTPS(){
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==OP_SELL){
return(OrderTakeProfit());
}
}
return(0);
}

double LastOrderSLS(){
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==OP_SELL){
return(OrderStopLoss());
}
}
return(0);
}

void SELLOrderModify()
{
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
int ticket=OrderTicket();
if (OrderType() == OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber&&OrderStopLoss()!=LastOrderTPS())
{
bool ret = OrderModify(ticket, OrderOpenPrice(), LastOrderSLS(), LastOrderTPS(), 0, White);

}
}

}
bool typeopen(int ord_type)
{
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false ) break;
if(OrderMagicNumber()==MagicNumber
&& OrderSymbol()==Symbol()
&& OrderType()==ord_type
)
{
return(true);
}
}
return(false);
}

void closeordar(int typer){
for(int c=0;c<OrdersTotal();c++){
if(OrderSelect(c,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()==MagicNumber&&OrderSymbol()==Symbol()&&OrderType()== typer){
if(OrderType()==OP_BUY)bool m=OrderClose(OrderTicket(),OrderLots(),Bid,30);
if(OrderType()==OP_SELL)bool n=OrderClose(OrderTicket(),OrderLots(),Ask,30);
RefreshRates();
}
}
}


void MoveTrailingStop()
{

for(int cnt=0;cnt<OrdersTotal();cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0&&NormalizeDouble(Ask-TrailingStep*pt,Digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*pt,D igits))
{
if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-TrailingStop*pt,Digits))||(OrderStopLoss()==0))
{
bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(Bid-TrailingStop*pt,Digits),OrderTakeProfit(),0,Blue);

}
}
}
else
{
if(TrailingStop>0&&NormalizeDouble(Bid+TrailingStep*pt,Digits)<NormalizeDouble(OrderOpenPrice()-TrailingStop*pt,Digits))
{
if((NormalizeDouble(OrderStopLoss(),Digits)>(NormalizeDouble(Ask+TrailingStop*pt,Digits)))||(O rderStopLoss()==0))
{
bool mnm=OrderModify(OrderTicket(),OrderOpenPrice(),Nor malizeDouble(Ask+TrailingStop*pt,Digits),OrderTake Profit(),0,Red);

}
}
}
}
}
}

void MoveBreakEven()
{
int cnt,total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
if(BreakEven>0)
{
if(NormalizeDouble((Bid-OrderOpenPrice()),Digits)>BreakEven*pt)
{
if(NormalizeDouble((OrderStopLoss()-OrderOpenPrice()),Digits)<0)
{
bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(OrderOpenPrice()+movestopto*pt,Digits) ,OrderTakeProfit(),0,Blue);

}
}
}
}
else
{
if(BreakEven>0)
{
if(NormalizeDouble((OrderOpenPrice()-Ask),Digits)>BreakEven*pt)
{
if(NormalizeDouble((OrderOpenPrice()-OrderStopLoss()),Digits)<0)
{
bool nn=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(OrderOpenPrice()-movestopto*pt,Digits),OrderTakeProfit(),0,Red);

}
}
}
}
}
}
}
int TradesCount(int type) //returns # of open trades for order type, current symbol and magic number
{
int result = 0;
int total = OrdersTotal();
for(int i = 0; i < total; i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) continue;
if(OrderMagicNumber() != MagicNumber || OrderSymbol() != Symbol() || OrderType() != type) continue;
result++;
}
return(result);
}

مرفق المؤشر
أنا بحدد شمعة اللون اأحمر واللون الأبيض
عند اختراق الشمعة لأعلى بعد عدد معين من النقاط يفتح باي
والعكس
اذا تم الاختراق لأسفل بعد عدد معين من النقاط يفتح سيل
المطلوب
1- يفتح مع كل إشارة .
2- إذا تم الاختراق بعد شمعة أو اتنين أو أكثر (عدد أحدده في الاعددات الخارجية ) فيفتح الصفقة .
3- إذا تم اغلاق صفقة بروفيت او استوب لا يغلق الجميع (فهذه مشكلة ألاحظها دائما)
لا يغلق الجميع إلا إذا كان على win_usd فقط

وجزاك الله الجنة

kira-h
28-11-2021, 11:40 PM
حبيبي جزاك الله الجنة
الكود هو

مرفق المؤشر
أنا بحدد شمعة اللون اأحمر واللون الأبيض
عند اختراق الشمعة لأعلى بعد عدد معين من النقاط يفتح باي
والعكس
اذا تم الاختراق لأسفل بعد عدد معين من النقاط يفتح سيل
المطلوب
1- يفتح مع كل إشارة .
2- إذا تم الاختراق بعد شمعة أو اتنين أو أكثر (عدد أحدده في الاعددات الخارجية ) فيفتح الصفقة .
3- إذا تم اغلاق صفقة بروفيت او استوب لا يغلق الجميع (فهذه مشكلة ألاحظها دائما)
لا يغلق الجميع إلا إذا كان على win_usd فقط

وجزاك الله الجنة



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

shivaa
30-11-2021, 03:27 AM
السلام عليكم
ممكن مساعده
يوجد عندي موفينج 100

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

kira-h
01-12-2021, 02:16 AM
السلام عليكم
ممكن مساعده
يوجد عندي موفينج 100

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


double ma(int shift)
{
return(iMA(Symbol(),0,14,0,0,0,shift));
}


int bars()
{
for(int i=1; i<=500; i++)
{
if(Close[i]>ma(i)&&Close[i+1]<=ma(i+1)&&Close[1]>ma(1))
return(i-1);
if(Close[i]<ma(i)&&Close[i+1]>=ma(i+1)&&Close[1]<ma(1))
return(i-1);
}
return(0);
}


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

taayeb
02-12-2021, 03:19 AM
السلام عليكم
كيف يمكنني اضهار عدد شموع فوق كل قمة أو قاع لزقزاق
جزاكم الله كل خير

kira-h
02-12-2021, 03:45 AM
السلام عليكم
كيف يمكنني اضهار عدد شموع فوق كل قمة أو قاع لزقزاق
جزاكم الله كل خير


وعليكم السلام
هذا الامر يطول شرحة ويحتاج إلى عدة دوال!
يمكنك مراجعة كود المؤشر المرفق بحيث يحسب عدد الشموع وعدد النقاط بين كل قمة وقاع للزجزاج

taayeb
06-12-2021, 04:02 AM
السلام عليكم
هل يمكن تقديم شرح يوضح ماهي buffer في لغة mql4
تقوم بتحويل أرقام الى رسومات ام ماذا
وكيفية عملها
جزاك الله كل خير

shivaa
19-12-2021, 09:19 PM
السلام عليكم
عندى متغيرات من نوع datetime
مثلا

"2021.06.15 20:00","2021.06.19 01:00","2021.06.19 03:30","2021.06.19 05:00","2021.06.19 04:00"
اريد ترتب تصاعد او تنازلى اى منهم اقرب للوقت الحالى
اكون شاكر

metmet
20-12-2021, 10:14 PM
إذا تريد ظهور اشارة المؤشر وبعدها يراقب اختراق المجال السعري bars فالكود المرفق يحقق ذلك
للأسف لا يلتزم بعدد البارات ويفتح مع كل شمعة صفقة وهذا ليس مطلوب نهائيا
فالمطلوب
1- ظهور اشارة المؤشر أولا
2- بعدها الاكسيبرت يراقب السعر هل اخترق (High) شمعة اشارة المؤشر فيفتح buy
ولابد أن يكون الاختراق في مجال bars في الإعدادات الخارجية
أما اذا تم الاختراق بعد bars لا يفتح صفقة buy
***إذا تم الاختراق بعد شمعة أو اتنين أو أكثر (عدد أحدده في الاعددات الخارجية ) فيفتح الصفقة
***طبعا كل إشارة منفصلة
بمعنى إذا ظهرت اشارة وتحققت الشروط وفتح وظهرت اشارة أخرى وتحققت شروطها يفتح ثانية
أى يفتح مع كل إشارة محققة الشروط
***لا يفتح على الاشارة الواحدة أكثر من صفقة
----------------------
1- ظهور اشارة المؤشر أولا
2-بعدها الاكسيبرت يراقب السعر هل اخترق (Low) شمعة اشارة المؤشر فيفتح Sell
ولابد أن يكون الاختراق في مجال bars في الإعدادات الخارجية
أما اذا تم الاختراق بعد bars لا يفتح صفقة Sell
***إذا تم الاختراق بعد شمعة أو اتنين أو أكثر (عدد أحدده في الاعددات الخارجية ) فيفتح الصفقة
***طبعا كل إشارة منفصلة
بمعنى إذا ظهرت اشارة وتحققت الشروط وفتح وظهرت اشارة أخرى وتحققت شروطها يفتح ثانية
أى يفتح مع كل إشارة محققة الشروط
***لا يفتح على الاشارة الواحدة أكثر من صفقة
----------------------------------------------------
أما إذا تريد تحقق الاشارة وفي نفس الشمعة تحقق الاختراق فالكود تبعك صحيح
في نفس شمعة اشارة المؤشر لا أريد ذلك
----------------------------------------------------
أما اغلاق الصفقة بدون سبب هذا راجع لشروط الاوامر المعلقة وما بعدها متداخلة
لا يوجد مشكلة أستطيع التغلب على المشكلة
----------------------------------------------------
بالنسبة للربح الدولاري تم تعديله بالكود المرفق
جزاك الله الجنة



رقم المشاركة #3534 (https://www.fxprg.com/vb/showthread.php?t=31457&p=930816&viewfull=1#post930816)
عذرا أخي في تأخر الرد والمتابعة
حيث قد كنت مرضت طويلا
عافانا الله وإياكم من كل شر

المطلوب في الاقتباس

وجزاك الله الجنة

shivaa
23-12-2021, 12:42 PM
السلام عليكم
عندى متغيرات من نوع datetime
مثلا

"2021.06.15 20:00","2021.06.19 01:00","2021.06.19 03:30","2021.06.19 05:00","2021.06.19 04:00"
اريد ترتب تصاعد او تنازلى اى منهم اقرب للوقت الحالى
اكون شاكر


up

taayeb
23-12-2021, 11:03 PM
السلام عليكم
هل يمكن تقديم شرح يوضح ماهي buffer في لغة mql4
تقوم بتحويل أرقام الى رسومات ام ماذا
وكيفية عملها
جزاك الله كل خير

kira-h
24-12-2021, 12:00 AM
السلام عليكم
هل يمكن تقديم شرح يوضح ماهي buffer في لغة mql4
تقوم بتحويل أرقام الى رسومات ام ماذا
وكيفية عملها
جزاك الله كل خير

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


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

مثلا مؤشر المتوسط المتحرك عبارة عن خط واحد (اندكس واحد) بينما مؤشر البولينجر عبارة عن ثلاثة خطوط (3 اندكسات).
كل خط من خطوط المؤشر يجب أن يرتبط بمصفوفة نقوم نحن بإنشائها.

- ربط مصفوفة كل اندكس مع الذاكرة الرسومية الوسيطة Buffer. وهي التي تحول مصفوفتنا وتربطها بمعالج داخلي للغة MQL4 والذي يقوم برسم قيم المصفوفة على الشارت نفسه.
وأي تغيير في قيم هذه المصفوفة سينعكس مباشرة على الشارت.
- إعطاء هذه الذاكرة الرسومية الوسيطة الخصائص الرسومية المناسبة لطريقة رسم الاندكس.
هذه الخصائص الرسومية هي شكل الاندكس ولونه وطريقة رسمه.
- آخر خطوة هي ملء المصفوفة بالقيم المناسبة في كل مرة يتغير فيها السعر.

لمزيد من التوضيح مع الامثلة راجع درس المؤشرات بالموقع الرسمي للغة mql
https://docs.mql4.com/customind

shivaa
25-12-2021, 07:03 AM
السلام عليكم
عاوز اعرف عدد نقات الشموع الخضراء(اتجاه الشراء) فى 50 شمعه سابقه
الجسم فقط من Close الى Open او العكس
حولت اعمل المطلوب هذا ماعملته
ممكن تصحح ليه لانه لم ينجح
شاكر لك

double TOTAL_PRATTS_BUY()
{
for( i=50; i>=0; i--)
{
//Up bars (Close-Open)
// Down bars (Open-Close)
bool select = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magicnumber)
{
if(Open[i]<Close[i])
{
pip=(Close[i]-Open[i]);
TOTAL_PIP_BUY=(TOTAL_PIP_BUY+(pip));
}
}
}
return(TOTAL_PIP_BUY);
}

kira-h
25-12-2021, 04:46 PM
السلام عليكم
عاوز اعرف عدد نقات الشموع الخضراء(اتجاه الشراء) فى 50 شمعه سابقه
الجسم فقط من Close الى Open او العكس
حولت اعمل المطلوب هذا ماعملته
ممكن تصحح ليه لانه لم ينجح
شاكر لك

double TOTAL_PRATTS_BUY()
{
for( i=50; i>=0; i--)
{
//Up bars (Close-Open)
// Down bars (Open-Close)
bool select = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magicnumber)
{
if(Open[i]<Close[i])
{
pip=(Close[i]-Open[i]);
TOTAL_PIP_BUY=(TOTAL_PIP_BUY+(pip));
}
}
}
return(TOTAL_PIP_BUY);
}

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


double TOTAL_PRATTS_BUY()
{
double pip=0;
for(int i=1; i<=50; i++)
{
if(Close[i]>Open[i])
{
pip+=Close[i]-Open[i];
}
}
return(NormalizeDouble(pip,Digits));
}

shivaa
25-12-2021, 05:45 PM
وعليكم السلام
الصحيح كالتالي:


double TOTAL_PRATTS_BUY()
{
double pip=0;
for(int i=1; i<=50; i++)
{
if(Close[i]>Open[i])
{
pip+=Close[i]-Open[i];
}
}
return(NormalizeDouble(pip,Digits));
}



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

kira-h
26-12-2021, 07:29 PM
الف شكر وجزاك الله كل خير

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

taayeb
30-12-2021, 02:19 AM
السلام عليكم
هل يمكن تقديم شرح يوضح كيفية برمجة سكانر لكل العملات
يعني مثلا لدي مؤشر يظهر اشارة معينة
لكي لا أفتح كل لعملات أضع فقط سكانر يظهر لي العملات التي ظهرت فيها اشارة المؤشر فقط
بعد ذلك أضغط على العملة من نافذة سكانر ويفتح شارت العملة
ماهي الخطوات من فظلكم لعمل هذا السكانر
جزاك الله كل خير

menna
06-01-2022, 01:26 AM
السلام عليكم اخوتي
هل يمكن عمل داله تقوم بحساب مجموع خسائر(وليس عددها) الصفقات الخاسره بعد اخر صفقه رابحه من الهيستوري
جزاكم الله خيرا

metmet
06-01-2022, 01:52 PM
المشاركة الأصلية كتبت بواسطة kira-h https://www.fxprg.com/vb/images/buttons/viewpost-left.png (https://www.fxprg.com/vb/showthread.php?p=930816#post930816) إذا تريد ظهور اشارة المؤشر وبعدها يراقب اختراق المجال السعري bars فالكود المرفق يحقق ذلك
للأسف لا يلتزم بعدد البارات ويفتح مع كل شمعة صفقة وهذا ليس مطلوب نهائيا
فالمطلوب
1- ظهور اشارة المؤشر أولا
2- بعدها الاكسيبرت يراقب السعر هل اخترق (High) شمعة اشارة المؤشر فيفتح buy
ولابد أن يكون الاختراق في مجال bars في الإعدادات الخارجية
أما اذا تم الاختراق بعد bars لا يفتح صفقة buy
***إذا تم الاختراق بعد شمعة أو اتنين أو أكثر (عدد أحدده في الاعددات الخارجية ) فيفتح الصفقة
***طبعا كل إشارة منفصلة
بمعنى إذا ظهرت اشارة وتحققت الشروط وفتح وظهرت اشارة أخرى وتحققت شروطها يفتح ثانية
أى يفتح مع كل إشارة محققة الشروط
***لا يفتح على الاشارة الواحدة أكثر من صفقة
----------------------
1- ظهور اشارة المؤشر أولا
2-بعدها الاكسيبرت يراقب السعر هل اخترق (Low) شمعة اشارة المؤشر فيفتح Sell
ولابد أن يكون الاختراق في مجال bars في الإعدادات الخارجية
أما اذا تم الاختراق بعد bars لا يفتح صفقة Sell
***إذا تم الاختراق بعد شمعة أو اتنين أو أكثر (عدد أحدده في الاعددات الخارجية ) فيفتح الصفقة
***طبعا كل إشارة منفصلة
بمعنى إذا ظهرت اشارة وتحققت الشروط وفتح وظهرت اشارة أخرى وتحققت شروطها يفتح ثانية
أى يفتح مع كل إشارة محققة الشروط
***لا يفتح على الاشارة الواحدة أكثر من صفقة
----------------------------------------------------
أما إذا تريد تحقق الاشارة وفي نفس الشمعة تحقق الاختراق فالكود تبعك صحيح
في نفس شمعة اشارة المؤشر لا أريد ذلك
----------------------------------------------------
أما اغلاق الصفقة بدون سبب هذا راجع لشروط الاوامر المعلقة وما بعدها متداخلة
لا يوجد مشكلة أستطيع التغلب على المشكلة
----------------------------------------------------
بالنسبة للربح الدولاري تم تعديله بالكود المرفق


جزاك الله الجنة





رقم المشاركة #3534 (https://www.fxprg.com/vb/showthread.php?t=31457&p=930816&viewfull=1#post930816)
عذرا أخي في تأخر الرد والمتابعة
حيث قد كنت مرضت طويلا
عافانا الله وإياكم من كل شر


المطلوب في الاقتباس

وجزاك الله الجنة

kira-h
06-01-2022, 07:48 PM
رقم المشاركة #3534 (https://www.fxprg.com/vb/showthread.php?t=31457&p=930816&viewfull=1#post930816)
عذرا أخي في تأخر الرد والمتابعة
حيث قد كنت مرضت طويلا
عافانا الله وإياكم من كل شر

المطلوب في الاقتباس

وجزاك الله الجنة

طيب جرب النسخة المرفقة بحيث :
Signal_shift اقصى عدد الشموع السابقة لظهور اشارة المؤشر
Bars_Shift اقصى عدد الشموع لمنطقة الاختراق

menna
06-01-2022, 09:02 PM
هل هناك حل ؟؟؟؟؟

menna
06-01-2022, 09:04 PM
السلام عليكم اخوتي
هل يمكن عمل داله تقوم بحساب مجموع خسائر(وليس عددها) الصفقات الخاسره بعد اخر صفقه رابحه من الهيستوري
جزاكم الله خيرا

kira-h
06-01-2022, 10:21 PM
السلام عليكم اخوتي
هل يمكن عمل داله تقوم بحساب مجموع خسائر(وليس عددها) الصفقات الخاسره بعد اخر صفقه رابحه من الهيستوري
جزاكم الله خيرا

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


datetime ProfitTime()
{
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int ty=OrderType();
double pt=OrderProfit();
datetime tm=OrderCloseTime();
if(sy==Symbol()&&ty<=OP_SELL&&pt>=0)
{
return(tm);
}
}
return(0);
}


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


double TotalLoss()
{
double pts=0;
for(int i=0; i<OrdersHistoryTotal(); i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
datetime tm=OrderCloseTime();
if(sy==Symbol()&&tm>ProfitTime())
{
pts+=pt+sw+cm;
}
}
return(pts);
}

metmet
06-01-2022, 10:28 PM
طيب جرب النسخة المرفقة بحيث :
Signal_shift اقصى عدد الشموع السابقة لظهور اشارة المؤشر
Bars_Shift اقصى عدد الشموع لمنطقة الاختراق

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

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

لا أحتاج هدف ولا استوب ولا أنظمة المضاعفات ولا أقصى عدد باي ولا أقصى عدد سيل
ولا أى شىء آخر

لان الكود أصبح كبيرا جدا والاستراتيجية الأساسية له تاهت وتشعبت

فأرجوك

kira-h
06-01-2022, 10:49 PM
حبيبي الله يجزيك خير عني وعن الجميع
النسخة غير ملتزمة بشروط الدخول نهائي
ومرفق صورة تأكد ذلك

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

لا أحتاج هدف ولا استوب ولا أنظمة المضاعفات ولا أقصى عدد باي ولا أقصى عدد سيل
ولا أى شىء آخر

لان الكود أصبح كبيرا جدا والاستراتيجية الأساسية له تاهت وتشعبت

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

taayeb
07-01-2022, 02:03 AM
السلام عليكم
لدي مؤشر يظهر مجموعة من ترندات في أماكن مختلفة ولديها أسماء مختلفة
كيف يمكنني استخراج قيم لترند أخير المتشكل لوضع شروط دخول صفقة سواء كانت بيع أو شراء
لا أستطيع استخدام icustom لأنه لا يوجد اندكس حتى objectget لم أستطع وضعها بسبب أن الترندات تغير من أسمائها
هل يمكن المساعدة
جزاك الله كل خير

kira-h
07-01-2022, 06:45 PM
السلام عليكم
لدي مؤشر يظهر مجموعة من ترندات في أماكن مختلفة ولديها أسماء مختلفة
كيف يمكنني استخراج قيم لترند أخير المتشكل لوضع شروط دخول صفقة سواء كانت بيع أو شراء
لا أستطيع استخدام icustom لأنه لا يوجد اندكس حتى objectget لم أستطع وضعها بسبب أن الترندات تغير من أسمائها
هل يمكن المساعدة
جزاك الله كل خير
وعليكم السلام
ارفق المؤشر مع صورة توضيحية للمطلوب

metmet
07-01-2022, 11:20 PM
هذا بسبب الفكرة نفسها حول شموع الاشارة السابقة تضل محققة بالشموع السابقة التي بعد شمعة الاشارة
جرب النسخة المرفقة بحيث يدخل فقط مع الاشارة مع تحقق اختراق المنطقة

الله يجزيك خير
جيد جدا بيفتح مع اللون الأحمر والأبيض فعلا
-------------------
كمان انا غيرت الرقم 2 الى 1 حتى يفتح بعد الهاي أو اللو وليس بعد الاغلاق
لأنه كان بيفتح قبل اختراق الهاي واللو والحمد لله ضبطت كما أريد
في هذا الكود


if(Close[0]>=High[iHighest(Symbol(),0,MODE_HIGH,Bars_shift,2)]+Pips*pt)



if(Close[0]>=High[iHighest(Symbol(),0,MODE_HIGH,Bars_shift,1)]+Pips*pt)

--------------------
لكن للأسف لا يحترم منطقة الاختراق
اذا كان Bars_shift=1 فهو يفتح اذا اخترق السعر شمعة الاشارة
اذا كان Bars_shift=اي رقم آخر
فهو يفتح الصفقة اذا الشمعة التالية مباشرة اخترقت الاشارة
واذا الشمعة التالية مباشرة لم تخترق الاشارة فلا يفتح وينتظر اشارة جديدة
اذن لا يحترم منطقة الختراق
كما في الصورة المرفقة
لذلك أرجو الحل
-----------------------

taayeb
08-01-2022, 01:38 PM
وعليكم السلام
ارفق المؤشر مع صورة توضيحية للمطلوب
هذه الترندات المشار اليها بالأبيض هيا التي عندما تظهر تظهر بأسم جديد لهذا كنت أبحث عن كود يجد أسم الترند أخير المتشكل لأستخدام objectget
لقد وضعت هذا الكود لمعرفة الإسم ثم بعد ذلك استعملت object get ووضع شروط دخول الصفقات
هذا الكود من اجتهادي لا أعرف هل تجود طريقة أفضل من هذا الكود29167


string trend;
int num_trend;
num_trend=ObjectsTotal();
trend=ObjectName(num_trend-1);
datetime BLUE =ObjectGet(trend,OBJPROP_TIME1);

kira-h
09-01-2022, 07:13 PM
هذه الترندات المشار اليها بالأبيض هيا التي عندما تظهر تظهر بأسم جديد لهذا كنت أبحث عن كود يجد أسم الترند أخير المتشكل لأستخدام objectget
لقد وضعت هذا الكود لمعرفة الإسم ثم بعد ذلك استعملت object get ووضع شروط دخول الصفقات
هذا الكود من اجتهادي لا أعرف هل تجود طريقة أفضل من هذا الكود29167


string trend;
int num_trend;
num_trend=ObjectsTotal();
trend=ObjectName(num_trend-1);
datetime BLUE =ObjectGet(trend,OBJPROP_TIME1);

ارفق المؤشر للمراجعة

taayeb
09-01-2022, 09:15 PM
ارفق المؤشر للمراجعة
ما هي طريقة ارفاق ملفات في المنتدى

kira-h
09-01-2022, 10:52 PM
ما هي طريقة ارفاق ملفات في المنتدى
عن طريق الانتقال الى الوضع المتطور للمشاركة ستجدها اسفل اطار المشاركة
ثم تابع الصورة المرفقة لطريقة ارفاق الملفات بالمشاركة

29173

metmet
10-01-2022, 03:55 PM
أرجو النظر على المشاركة

#3560 (https://www.fxprg.com/vb/showthread.php?t=31457&p=931365&viewfull=1#post931365)

وجزاك الله الجنة

kira-h
10-01-2022, 06:11 PM
الله يجزيك خير
جيد جدا بيفتح مع اللون الأحمر والأبيض فعلا
-------------------
كمان انا غيرت الرقم 2 الى 1 حتى يفتح بعد الهاي أو اللو وليس بعد الاغلاق
لأنه كان بيفتح قبل اختراق الهاي واللو والحمد لله ضبطت كما أريد
في هذا الكود


if(Close[0]>=High[iHighest(Symbol(),0,MODE_HIGH,Bars_shift,2)]+Pips*pt)



if(Close[0]>=High[iHighest(Symbol(),0,MODE_HIGH,Bars_shift,1)]+Pips*pt)

--------------------
لكن للأسف لا يحترم منطقة الاختراق
اذا كان Bars_shift=1 فهو يفتح اذا اخترق السعر شمعة الاشارة
اذا كان Bars_shift=اي رقم آخر
فهو يفتح الصفقة اذا الشمعة التالية مباشرة اخترقت الاشارة
واذا الشمعة التالية مباشرة لم تخترق الاشارة فلا يفتح وينتظر اشارة جديدة
اذن لا يحترم منطقة الختراق
كما في الصورة المرفقة
لذلك أرجو الحل
-----------------------
مشاركتي السابقة واضحة
الشرط ينتظر تحقق المستطيل ثم يدخل مع شمعة الاشارة تحقق في نفس الوقت اختراق للمستطيل

taayeb
10-01-2022, 10:00 PM
عن طريق الانتقال الى الوضع المتطور للمشاركة ستجدها اسفل اطار المشاركة
ثم تابع الصورة المرفقة لطريقة ارفاق الملفات بالمشاركة

29173
هذا هو المؤشر

taayeb
10-01-2022, 11:18 PM
السلام عليكم
كيف يكون كود في حال تحقق شروط معينة أن يقوم اكسبيرت أو مؤشر برسم خطين أفقيين على الشمعة خط على هاي وخط على لوو لا يكونان ممتدان على طول الشاشة "مثل ترند صغير" و خط عمودي على شمعة وهكذا كل ما تحقق شروط على شمعة يرسم 3 خطوط و لا يقوم بمسح الخطوط السابقة
ويقوم بدراسة على كل شموع الموجودة في شارت
جزاك الله كل خير

kira-h
11-01-2022, 02:14 AM
هذا هو المؤشر
اسم الخط عبارة عن اسم ثابث + توقيت الشمعة، لهذا سنقوم بالبحث بالشموع السابقة عن توقيت آخر ترند كالتالي :


datetime LastTime()
{
for(int i=1; i<200; i++)
{
double price=ObjectGet("PZ Divergence Lite (Awesome)-10-0-"+Time[i],OBJPROP_PRICE1);
if(price>0)
return(ObjectGet("PZ Divergence Lite (Awesome)-10-0-"+Time[i],OBJPROP_TIME1));
}
return(0);
}


يمكنك عمل ما تشاء من خلال الدالة السابقة

kira-h
11-01-2022, 02:22 AM
السلام عليكم
كيف يكون كود في حال تحقق شروط معينة أن يقوم اكسبيرت أو مؤشر برسم خطين أفقيين على الشمعة خط على هاي وخط على لوو لا يكونان ممتدان على طول الشاشة "مثل ترند صغير" و خط عمودي على شمعة وهكذا كل ما تحقق شروط على شمعة يرسم 3 خطوط و لا يقوم بمسح الخطوط السابقة
ويقوم بدراسة على كل شموع الموجودة في شارت
جزاك الله كل خير

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


void Draw_vLine(string name,datetime Time1)
{
if(ObjectFind(name)==-1)
{
ObjectCreate(name,OBJ_VLINE,0,Time1,0);
ObjectSet(name,OBJPROP_WIDTH,0);
ObjectSet(name,OBJPROP_COLOR,Red);
}
else
if(ObjectGet(name,OBJPROP_TIME1)!=Time1)
{
ObjectDelete(name);
Draw_vLine(name,Time1);
}
}

taayeb
11-01-2022, 05:38 PM
وعليكم السلام
راجع كود المؤشر المرفق
بالنسبة للخط العمودي استخدم الدالة التالية :


void Draw_vLine(string name,datetime Time1)
{
if(ObjectFind(name)==-1)
{
ObjectCreate(name,OBJ_VLINE,0,Time1,0);
ObjectSet(name,OBJPROP_WIDTH,0);
ObjectSet(name,OBJPROP_COLOR,Red);
}
else
if(ObjectGet(name,OBJPROP_TIME1)!=Time1)
{
ObjectDelete(name);
Draw_vLine(name,Time1);
}
}

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

kira-h
11-01-2022, 06:28 PM
أين هو المؤشر من فظلك اذا كنت تقصد المؤشر السابق فليس لدي ملف الكود لدي فقط النسخة التنفيذية
عفوا نسيت ارفاقه
المؤشر بالمرفق

taayeb
12-01-2022, 02:52 PM
جزاك الله كل خير على ما تقدمه و جعلها الله في ميزان حسناتك

taayeb
12-01-2022, 04:16 PM
السلام عليكم
ما هو كود الذي يجعل المؤشر يقوم بوضع الخطوط العمودية لفترات التي يكون مؤشر الماكد تحت الصفر و فوق صفر
مثل التي في صورة
جزاك الله كل خير29187

kira-h
13-01-2022, 08:07 PM
السلام عليكم
ما هو كود الذي يجعل المؤشر يقوم بوضع الخطوط العمودية لفترات التي يكون مؤشر الماكد تحت الصفر و فوق صفر
مثل التي في صورة
جزاك الله كل خير
وعليكم السلام
راجع المؤشر المرفق

taayeb
14-01-2022, 09:25 PM
- دالة كتابة كومنت على الشارت كالتالي:
كود PHP:
void Info(string n,string text,int fontsize,color Color,double c,double X,double Y,string font)
{
ObjectCreate(n, OBJ_LABEL, 0, 0, 0);
ObjectSetText(n,text,fontsize,font,Color);
ObjectSet(n, OBJPROP_CORNER,1);
ObjectSet(n, OBJPROP_XDISTANCE,X);
ObjectSet(n, OBJPROP_YDISTANCE,Y);
}

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

kira-h
14-01-2022, 11:44 PM
- دالة كتابة كومنت على الشارت كالتالي:
كود PHP:
void Info(string n,string text,int fontsize,color Color,double c,double X,double Y,string font)
{
ObjectCreate(n, OBJ_LABEL, 0, 0, 0);
ObjectSetText(n,text,fontsize,font,Color);
ObjectSet(n, OBJPROP_CORNER,1);
ObjectSet(n, OBJPROP_XDISTANCE,X);
ObjectSet(n, OBJPROP_YDISTANCE,Y);
}

السلام عليكم
هل يمكن تقديم صورة أو توضيح لنتيجة التي تضهرها هذه الدالة
فلم أفهم الفرق بينها وبين comment
جزاك الله كل خير
دالة عبارة عن كتابات تعرض على شكل كائنات على الشارت (Objects) بحيث تستطيع تغيير لونها، حجمها، ومكانها...
اما الكومنت الافتراضي لا يمكن تغيير اي شيء، يظهر دائما على يسار الشارت

taayeb
15-01-2022, 02:39 PM
دالة عبارة عن كتابات تعرض على شكل كائنات على الشارت (Objects) بحيث تستطيع تغيير لونها، حجمها، ومكانها...
اما الكومنت الافتراضي لا يمكن تغيير اي شيء، يظهر دائما على يسار الشارت
السلام عليكم
كيف يمكن اضافة خلفية لها بلون ؟
جزاك الله كل خير

kira-h
15-01-2022, 06:27 PM
السلام عليكم
كيف يمكن اضافة خلفية لها بلون ؟
جزاك الله كل خير
وعليكم السلام
مثلا :


ObjectCreate("label", OBJ_LABEL, 0, 0, 0, 0, 0);
ObjectSetText("label", "g", 69, "Webdings");
ObjectSet("label", OBJPROP_CORNER, 0);
ObjectSet("label", OBJPROP_XDISTANCE, 0);
ObjectSet("label", OBJPROP_YDISTANCE, 0);
ObjectSet("label", OBJPROP_COLOR, DimGray);
ObjectSet("label", OBJPROP_BACK, FALSE);


يمكنك التحكم في موقعه من خلال وظيفتي XDISTANCE و YDISTANCE

taayeb
15-01-2022, 10:43 PM
وعليكم السلام
مثلا :


ObjectCreate("label", OBJ_LABEL, 0, 0, 0, 0, 0);
ObjectSetText("label", "g", 69, "Webdings");
ObjectSet("label", OBJPROP_CORNER, 0);
ObjectSet("label", OBJPROP_XDISTANCE, 0);
ObjectSet("label", OBJPROP_YDISTANCE, 0);
ObjectSet("label", OBJPROP_COLOR, DimGray);
ObjectSet("label", OBJPROP_BACK, FALSE);


يمكنك التحكم في موقعه من خلال وظيفتي XDISTANCE و YDISTANCE
لقد قمت بتجربته لكن لا تضهر الخلفية التي تخطي شموع و تضهر فقط الكتابة
لقد غيرت في ObjectSet("label", OBJPROP_BACK, TRUE); هل صحيح ؟
29216

kira-h
15-01-2022, 11:10 PM
لقد قمت بتجربته لكن لا تضهر الخلفية التي تخطي شموع و تضهر فقط الكتابة
لقد غيرت في ObjectSet("label", OBJPROP_BACK, TRUE); هل صحيح ؟
29216
ارفق الكود كاملا للمراجعة

taayeb
16-01-2022, 10:47 AM
ارفق الكود كاملا للمراجعة

haz1
16-01-2022, 01:32 PM
السلام عليكم ورحمه الله
ما هو الكود البرمجى اللى ممكن اضعه فى البرمجه لكى اضيف التريلنج ستوب والتريلنج ستيب للاكسبيرت بحيث انه الاكسبيرت يغلق جميع الصفقات المفتوحه عند ضرب السعر للتريلنج ستيب والتريلنج ستوب

kira-h
16-01-2022, 09:52 PM
مرفق المؤشر

kira-h
16-01-2022, 10:06 PM
السلام عليكم ورحمه الله
ما هو الكود البرمجى اللى ممكن اضعه فى البرمجه لكى اضيف التريلنج ستوب والتريلنج ستيب للاكسبيرت بحيث انه الاكسبيرت يغلق جميع الصفقات المفتوحه عند ضرب السعر للتريلنج ستيب والتريلنج ستوب
وعليكم السلام
لا يمكن برمجيا تمييز نوع الاغلاق هل بالهدف ام بالترلينغ لأنهما معا عبارة عن هدف، فإذا كان لا يهم هذا الامر يمكن عمل التالي:
- دالة عدد الصفقات المفتوحة :


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


- دالة نتيجة آخر صفقة مغلقة :


double ClosedProfit()
{
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();
if(sy==Symbol()&&mn==MagicNo&&ty<=OP_SELL)
{
return(pt);
}
}
return(0);
}


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


datetime CloseTime()
{
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int ty=OrderType();
double pt=OrderProfit();
datetime tm=OrderCloseTime();
if(sy==Symbol()&&ty<=OP_SELL)
{
return(tm);
}
}
return(0);
}


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


datetime OpenTime()
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int ty=OrderType();
double pt=OrderProfit();
datetime tm=OrderOpenTime();
if(sy==Symbol()&&ty<=OP_SELL)
{
return(tm);
}
}
return(0);
}


- ثم دالة اغلاق الصفقات :


void CloseOrders(int type=-1)
{
bool select,close,del;
for(int i=OrdersTotal()-1; i>=0; i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tt=OrdersTotal(),
tk=OrderTicket(),
ty=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots();
if(tt>0&&sy==Symbol()&&mn==MagicNo)
{
if(ty==type||type==-1)
{
if(ty==OP_BUY)
close=OrderClose(tk,lo,NormalizeDouble(Bid,Digits) ,30);
if(ty==OP_SELL)
close=OrderClose(tk,lo,NormalizeDouble(Ask,Digits) ,30);
if(ty>OP_SELL)
del=OrderDelete(tk);
}
}
}
}


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

if(Orderscnt()>0&&CloseTime()>OpenTime()&&ClosedProfit()>0)CloseOrders();

taayeb
17-01-2022, 12:10 AM
مرفق المؤشر
حاليا توجد خلفية لي أوبجكت لكن عند تغير نوع الخط من Webdings الى arial تختفي الخلفية تبقى الكتابة
أنا أريد كود برمجي لأوبجت تستطيع تحريكه و وفي نفس الوقت تظهر الكتابة داخله مع خلفية (يعني عند التحريك يغطي الشموع)
و كذلك تغير حجم أوبجكت حسب حجم النص
جزاك الله كل خير

taayeb
19-01-2022, 01:24 AM
السلام عليكم
ما هو الشرط الذي أضعه لي أكسبيرت لكي يفتح عدد صفقات معينة في كل مجال جديد
يعني مادام لم يظهر مجال جديد لا يفتح أكثر من الصفقات التي أنا محددها مثلا أنا أحدد صفقة واحدة من كل orders يعني 6
كل مجال يفتح 6 صفقات
29227
المجال هو من 1 الى 2
جزاك الله كل خير

most
21-01-2022, 07:22 PM
السلام عليكم
الاستاذ الفاضل كيف يمكن وضع شرط برمجى انه لو وصل الرصيد الى مبلغ معين يتوقف الاكسبيرت عن المتاجرة
يعن لو الرصيد مثلاً 1000 دولار والسعر اصبح 900 دولار او مثلاً اصبح 1100 دولار حسب الشرط نفسه الذى تم وضعه فيتم توقف الاكسبيرت عن المتاجرة .. هل يمكن وضع شرط برمجى بهذه الكيفية؟؟ .. تحياتى.

kira-h
22-01-2022, 07:03 PM
السلام عليكم
الاستاذ الفاضل كيف يمكن وضع شرط برمجى انه لو وصل الرصيد الى مبلغ معين يتوقف الاكسبيرت عن المتاجرة
يعن لو الرصيد مثلاً 1000 دولار والسعر اصبح 900 دولار او مثلاً اصبح 1100 دولار حسب الشرط نفسه الذى تم وضعه فيتم توقف الاكسبيرت عن المتاجرة .. هل يمكن وضع شرط برمجى بهذه الكيفية؟؟ .. تحياتى.
وعليكم السلام
الشرط كالتالي ببداية الدالة الرئيسية :


void OnTick()
{
if(AccountEquity()<=900 || AccountEquity()>=1100)
return;
//---
}

kira-h
22-01-2022, 07:12 PM
السلام عليكم
ما هو الشرط الذي أضعه لي أكسبيرت لكي يفتح عدد صفقات معينة في كل مجال جديد
يعني مادام لم يظهر مجال جديد لا يفتح أكثر من الصفقات التي أنا محددها مثلا أنا أحدد صفقة واحدة من كل orders يعني 6
كل مجال يفتح 6 صفقات
29227
المجال هو من 1 الى 2
جزاك الله كل خير
وعليكم السلام
سنحتاج إلى ما يلي :
- دالة الماكد بدلالة رقم الشمعة :


double macd(int shift)
{
return(iMACD(Symbol(),0,12,26,9,0,MODE_MAIN,shift) );
}


- دالة معرفة توقيت آخر تغير للماكد :


datetime LastTime()
{
for(int i=1; i<5000; i++)
{
if((macd(i)>0&&macd(i+1)<=0)||(macd(i)<0&&macd(i+1)>=0))
return(Time[i]);
}
return(0);
}


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


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()&&OrderType()<=OP_SELL)
{
if(OrderOpenTime()>=LastTime())
cnt++;
}
}
}
return(cnt);
}

taayeb
24-01-2022, 09:17 PM
جزاك الله كل خير

most
25-01-2022, 09:06 PM
وعليكم السلام
الشرط كالتالي ببداية الدالة الرئيسية :


void OnTick()
{
if(AccountEquity()<=900 || AccountEquity()>=1100)
return;
//---
}


شكرا جزيلا استاذى الفاضل وجزاك الله خيرا

kira-h
25-01-2022, 11:17 PM
جزاك الله كل خير
وإياك اخي الكريم

haz1
29-01-2022, 06:50 PM
السلام عليكم ورحمه الله
ممكن الكود البرمجى يا با ش مهندس حسن لعدم استمرار الاكسبيرت فى العمل بعد اغلاق كل الصفقات المفتوحه

haz1
29-01-2022, 08:55 PM
مع التحكم فى تلك الخاصيه بترو او فولس

kira-h
29-01-2022, 09:13 PM
السلام عليكم ورحمه الله
ممكن الكود البرمجى يا با ش مهندس حسن لعدم استمرار الاكسبيرت فى العمل بعد اغلاق كل الصفقات المفتوحه


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

kira-h
30-01-2022, 02:48 AM
السلام عليكم
اخوتي هل هذه الداله صحيحه لحساب مجموع الصفقات الرابحه في خلال يوم واحد



double Totalwinpos(int type=-1)
{
double wins=0;
datetime var1,var2;
var1=StrToTime("00:00");
var2=StrToTime("23:00");
for(int i=0; i<OrdersHistoryTotal(); i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
double pt=OrderProfit(),
sw=OrderSwap(),
mn=OrderMagicNumber(),
cm=OrderCommission();
datetime tm=OrderCloseTime();
if(sy==Symbol()&&tm>var1&&tm<var2&&mn==MagicNo&&pt>=TargetD)
{
if(OrderType()==type||type==-1)
{
wins++;
}
}
return(wins);
}
}

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


double Totalwinpos(int type=-1)
{
double wins=0;
for(int i=0; i<OrdersHistoryTotal(); i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int ty=OrderType();
double pt=OrderProfit(),
sw=OrderSwap(),
mn=OrderMagicNumber(),
cm=OrderCommission();
datetime tm=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNo&&(ty==type||type==-1)&&pt>=TargetD)
{
if(tm>=iTime(Symbol(),PERIOD_D1,0))
{
wins+=pt+sw+cm;
}
}
}
return(wins);
}

menna
30-01-2022, 11:13 AM
السلام عليكم
شكر للمساعده اخي لن هناك مشكله ان الداله لا تقوم بحساب مجموع الارباح يوم بيوم بل تقوم بحسابه مره واحد فقط ولا تكرر نفسها هل من طريقه لاصلاح ذلك

kira-h
30-01-2022, 05:28 PM
السلام عليكم
شكر للمساعده اخي لن هناك مشكله ان الداله لا تقوم بحساب مجموع الارباح يوم بيوم بل تقوم بحسابه مره واحد فقط ولا تكرر نفسها هل من طريقه لاصلاح ذلك
وعليكم السلام
لم توضح فيم تريد استخدامها ! هل تستهدف ربح محدد لفعل امر ما ام تحليل ام ماذا؟
الدالة تحسب اجمالي الربح بالصفقات المغلقة على ربح لليوم الحالي، فعند نهاية اليوم وبداية يوم جديد سيبدأ الحساب من جديد
وهذا ما فهمته من طلبك

menna
31-01-2022, 10:35 AM
وعليكم السلام
لم توضح فيم تريد استخدامها ! هل تستهدف ربح محدد لفعل امر ما ام تحليل ام ماذا؟
الدالة تحسب اجمالي الربح بالصفقات المغلقة على ربح لليوم الحالي، فعند نهاية اليوم وبداية يوم جديد سيبدأ الحساب من جديد
وهذا ما فهمته من طلبك

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

kira-h
31-01-2022, 04:24 PM
نعم اخي ها بالضبط ما اريد استخدامها فيه كما قلت حساب اجمالي الربح بالصفقات المغلقة على ربح لليوم الحالي لكن للاسف لا زالت هناك مشكله في طريقه عمل الداله قمت بتجربتها في الباك تست وهي تعطي قيمه واحده وتظل محتفظه بها بقيت الايام اي لا تعيد حساب نفسها مع بدايه كل يوم بل تظل القيمه ثابته علي مدي ايام لا تتغير
ما اريد فعله بهه الداله اخي هو تحديد قيمه ربح يوميه يتوقف بعدها الاكسبيرت عن عمل صفقات اخري حتي بدايه اليوم التالي وهكذا ارجو ان تساعدني في هذا وجزاك الله عنا كل خير ونفع بعلمك يارب
الخطأ بالمتغير Target استخدمه بالشروط وليس بداخل دالة حساب الاجمالي
ستصبح الدالة كالتالي:


double Totalwinpos(int type=-1)
{
double wins=0;
for(int i=0; i<OrdersHistoryTotal(); i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int ty=OrderType();
double pt=OrderProfit(),
sw=OrderSwap(),
mn=OrderMagicNumber(),
cm=OrderCommission();
datetime tm=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNo&&(ty==type||type==-1)&&pt>=0)
{
if(tm>=iTime(Symbol(),PERIOD_D1,0))
{
wins+=pt+sw+cm;
}
}
}
return(wins);
}


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


void OnTick()
{
if(TargetD>0&&Totalwinpos()>=TargetD)return;
//---بقية الكود
}

shivaa
23-02-2022, 03:18 AM
السلام عليكم ورحمه الله وبركاته
ممكن مساعده اكون شاكر
انا اعمل على اكسبيرت يعمل على 28 زوج
عاوز عدد اللوط الصفقات اللي اتقفلت بعد 2:00 صباحا
الكل يوم على حدا
اذا تقفل اليوم يتصفر العداد وابدا من جديد
شاكر ليك

kira-h
23-02-2022, 10:39 PM
السلام عليكم ورحمه الله وبركاته
ممكن مساعده اكون شاكر
انا اعمل على اكسبيرت يعمل على 28 زوج
عاوز عدد اللوط الصفقات اللي اتقفلت بعد 2:00 صباحا
الكل يوم على حدا
اذا تقفل اليوم يتصفر العداد وابدا من جديد
شاكر ليك
وعليكم السلام
مثال :


double DailyLots(int type=-1)
{
double los=0;
for(int i=0; i<OrdersHistoryTotal(); i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
int ty=OrderType();
double lo=OrderLots();
datetime tm=OrderCloseTime();
if(ty==type||type==-1)
{
if(tm>=iTime(Symbol(),PERIOD_D1,0))
los+=lo;
}
}
return(los);
}

shivaa
24-02-2022, 08:10 AM
وعليكم السلام
مثال :


double DailyLots(int type=-1)
{
double los=0;
for(int i=0; i<OrdersHistoryTotal(); i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
int ty=OrderType();
double lo=OrderLots();
datetime tm=OrderCloseTime();
if(ty==type||type==-1)
{
if(tm>=iTime(Symbol(),PERIOD_D1,0))
los+=lo;
}
}
return(los);
}



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

menna
24-02-2022, 09:43 AM
السلام عليكم
هل هناك داله تقوم بجمع عدد البارات بعد اخر صفقه رابحه
شكرا

kira-h
24-02-2022, 08:59 PM
شاكر ليك وجزاك الله بكل خير
العفو وبالتوفيق إن شاء الله

kira-h
24-02-2022, 09:04 PM
السلام عليكم
هل هناك داله تقوم بجمع عدد البارات بعد اخر صفقه رابحه
شكرا
وعليكم السلام
نعم بمعرفة توقيت الصفقة ومنه تعرف رقم الشمعة بالشارت
مثال :


datetime CloseTime()
{
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int ty=OrderType(),
mn=OrderMagicNumber();
double pt=OrderProfit();
datetime tm=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNo&&ty<=OP_SELL&&pt>=0)
{
return(tm);
}
}
return(0);
}

int bars=iBarShift(Symbol(),0,CloseTime());

shivaa
27-02-2022, 06:54 AM
انا شاكر لك دائما انت دعم لينا يا رب يا رب اكتبه لك في ميزان حسناتك ان شاء الله ممكن مساعده عاوز عدد القمم والقيعان في يوم واحد اليوم الحالي لمؤشر الزجاجه اكون شاكر

shivaa
28-02-2022, 04:12 AM
انا شاكر لك دائما انت دعم لينا يا رب اكتبه لك في ميزان حسناتك ان شاء الله
ممكن مساعده
عاوز عدد القمم والقيعان في يوم واحد اليوم الحالي لمؤشر الزجزاج
اكون شاكر

taayeb
28-02-2022, 08:50 PM
السلام عليكم
كيف حالكم يا شباب ان شاء الله تكونو جميعا بألف خير يا رب
سؤال: كيف يمكن صنع مؤشر لرسم موجات اليوت يكون وضعه يدويا ويظهر الترقيم لكي يساعد في حساب الموجات
مثل ما هو موجود في موقع تريدينج فيو
مثل ما هو واضح في صور أولى وثانية
جزاكم الله كل خير

Waddah
01-03-2022, 01:27 PM
السلام عليكم ....ممكن المساعدة في الكود الذي يجمع أرقام عدد معين مثلا : 1234 يعطي نتيجة جمع 1+2+3+4 = 10 ......مع جزيل الشكر

shivaa
01-03-2022, 06:53 PM
انا شاكر لك دائما انت دعم لينا يا رب اكتبه لك في ميزان حسناتك ان شاء الله
ممكن مساعده
عاوز عدد القمم والقيعان في يوم واحد اليوم الحالي لمؤشر الزجزاج
اكون شاكر

up

shivaa
02-03-2022, 08:31 PM
السلام عليكم
الداله الموجوده فى الاسفل ترجع سعر اخر صفقه
كيف اعدلها اخليها ترجع ما قبل الاخيره

double LastOrderCurrent_OpenPrice_type(string info, int type)
{
for(i = OrdersTotal() - 1; i >= 0; i--)
{
bool select = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol()
&& OrderType() == type
&& OrderMagicNumber() == Magicnumber
)
{
if(info == "OpenPrice")
return(OrderOpenPrice());
}
}
return(0);
}

sabil
08-03-2022, 06:24 PM
السلام عليكم
التنبيهات كالتالي :


Alert("SELL / ",Symbol()," / ",NormalizeDouble(Close[1],Digits));
SendMail("Alert","SELL "+Symbol()+" / "+DoubleToStr(Close[1],Digits));
SendNotification("SELL /"+Symbol()+" / "+DoubleToStr(Close[1],Digits));


دالة توحيد الهدف او ما يسمى بمتوسط الربح الاجمالي كالتالي :


input double MainProfit=0;
void OnTick()
{
if(MainProfit>0)AvTakeProfit();
}

double Av_Prices(int type)
{
double Price;
double lots;
for(int i=0; i<=OrdersTotal(); i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
double op=OrderOpenPrice(),
lo=OrderLots();
int mn=OrderMagicNumber(),
ty=OrderType();
if(sy==Symbol()&&mn==MagicNo&&ty<=OP_SELL)
{
if(OrderType()==type)
{
Price+=op*lo;
lots+=lo;
}
}
}
if(lots!=0)
return(Price/lots);
else
return(0);
}


void AvTakeProfit()
{
double Av;
bool m;
for(int cnt=0; cnt<OrdersTotal(); cnt++)
{
bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
double sl=OrderStopLoss(),
tp=OrderTakeProfit(),
op=OrderOpenPrice();
int tk=OrderTicket(),
mn=OrderMagicNumber(),
ty=OrderType();


if(sy==Symbol()&&mn==MagicNo)
{
if(ty==OP_BUY)
{
Av=Av_Prices(OP_BUY)+MainProfit*point;
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(Av, Digits)&&NormalizeDouble(tp,Digits)!=NormalizeDouble(Av,Dig its))
{
if(Bid>Av)
m=OrderModify(tk,op,Av,tp,0,Blue);
if(Bid<Av)
m=OrderModify(tk,op,sl,Av,0,Blue);
}
}
else
if(ty==OP_SELL)
{
Av=Av_Prices(OP_SELL)-MainProfit*point;
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(Av, Digits)&&NormalizeDouble(tp,Digits)!=NormalizeDouble(Av,Dig its))
{
if(Ask<Av)
m=OrderModify(tk,op,Av,tp,0,Red);
if(Ask>Av)
m=OrderModify(tk,op,sl,Av,0,Red);
}
}
}
}
}

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

Aboilyasse
30-03-2022, 01:54 PM
السلام عليكم
من فضلكم كيف أعدل الكود لأعلق الصفقات على مسافات متغيرة بناءا على متغير Step multiplier

if(OpenSellLimitOrders) { for(i=1; i<=NumberOfSellLimitOrders; i++) { if(UseMultiplier) { if(X_Multiplier) { newlot=Multiplier*lastlot; } else { newlot=lastlot+SellLimitFirstLot; } } else { newlot=SellLimitFirstLot; } if(newlot==0) { newlot=SellLimitFirstLot; } lastlot=newlot;
if(StartPrice==0) { Price=Bid+(DistanceFromCurrentPriceSL*point)+(i*St ep*point+i*Distance_AddSellL*point); } else { Price=StartPrice+(DistanceFromCurrentPriceSL*point )+(i*Step*point); } if(HighLowCandle) { Price=High[1]+(DistanceFromCurrentPriceSL*point)+(i*Step*point) ; } if(SellLimitTakeProfit==0) { TP=0; } else { TP=Price-SellLimitTakeProfit*point; } if(SellLimitSL==0) { SL=0; } else { SL=Price+SellLimitSL*point; }
if((StartPrice==0&&HighLowCandle==false)||(HighLowCandle==true&&Hour()==OCh_Hour+1)||(Close[0]>=StartPrice-Gap*point&&Close[0]<=StartPrice+Gap*point)) { OrderSend(Symbol(),OP_SELLLIMIT,newlot,Price,3,SL, TP,"X"+totalNumber+"_",MagicNumber,0,Red); totalNumber++; } }

shivaa
15-04-2022, 11:15 PM
السلام عليكم
كل سنه وانت طيب استاذى
ممكن مساعده اريد اكبر هاى بين زمنين على فريم 5 الحالى وفريم ا اخر 15

2021.04.28 10:03
وبين
2021.04.28 12:03

hre007
05-05-2022, 09:35 AM
السلام عليكم ورحمة الله
اخي حسن برجاء اعطائي دالة تعطيني اقل لو خلال عدد معين من الشموع
وكذلك دالة تعطي اعلى هاي خلال عدد معين من الشموع يحدد من المتغيرات الخارجية
ولك جزبل الشكر
وعيدكم مبارك بإذن الله

shivaa
08-05-2022, 05:53 AM
السلام عليكم ورحمة الله
اخي حسن برجاء اعطائي دالة تعطيني اقل لو خلال عدد معين من الشموع
وكذلك دالة تعطي اعلى هاي خلال عدد معين من الشموع يحدد من المتغيرات الخارجية
ولك جزبل الشكر
وعيدكم مبارك بإذن الله

السلام عليكم
الاستاذ حسن من فتره ما ظهرش رجاء من الله ان يكون فى افضل الحال



int index_High = iHighest ( Symbol(), PERIOD_CURRENT, MODE_HIGH , 20,4)
int index_Low = iLowest ( Symbol(), PERIOD_CURRENT, MODE_LOW , 20,4)



حساب أعلى او اقل قيمة على 20 شمعه متتاليًا في النطاق من الشمعه 4 الى الشمعه 23

hre007
10-05-2022, 05:33 PM
السلام عليكم
الاستاذ حسن من فتره ما ظهرش رجاء من الله ان يكون فى افضل الحال



int index_High = iHighest ( Symbol(), PERIOD_CURRENT, MODE_HIGH , 20,4)
int index_Low = iLowest ( Symbol(), PERIOD_CURRENT, MODE_LOW , 20,4)



حساب أعلى او اقل قيمة على 20 شمعه متتاليًا في النطاق من الشمعه 4 الى الشمعه 23


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

hre007
11-05-2022, 04:31 PM
السلام عليكم اخيshivaa (https://www.fxprg.com/vb/member.php?u=120484)
انا اسف لو كنت بتقل علي حضرتك بس بصراحة في موضوع مجنني
دالة المضاعفات تعمل على الشراء ولا تعمل على البيع رغم كتابتها بنفس الطريقة
وجربت دالة المضاعفات الموجودة بقسم اهم الدوال البرمجية ونفس المشكلة
ولا اعلم اين الخطأ ؟؟؟
فبما انك اقدر مني على الفهم ممكن تبص على الاكسبيرت التجريبي المرفق وتقولي اين الخطأ الي انا واقع فيه ؟؟
انا اسف مرة اخري اني بتقل على حضرتك بس بصراحة مفيش مجيب لي في اي منتدي اخر
فلو ممكن تساعدني يبقي كتر خيرك

shivaa
16-05-2022, 10:33 PM
السلام عليكم اخيshivaa (https://www.fxprg.com/vb/member.php?u=120484)
انا اسف لو كنت بتقل علي حضرتك بس بصراحة في موضوع مجنني
دالة المضاعفات تعمل على الشراء ولا تعمل على البيع رغم كتابتها بنفس الطريقة
وجربت دالة المضاعفات الموجودة بقسم اهم الدوال البرمجية ونفس المشكلة
ولا اعلم اين الخطأ ؟؟؟
فبما انك اقدر مني على الفهم ممكن تبص على الاكسبيرت التجريبي المرفق وتقولي اين الخطأ الي انا واقع فيه ؟؟
انا اسف مرة اخري اني بتقل على حضرتك بس بصراحة مفيش مجيب لي في اي منتدي اخر
فلو ممكن تساعدني يبقي كتر خيرك



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

double LastOrderLot(int typee)
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderSymbol()==Symbol()
&& OrderMagicNumber()==MagicNumber
&& OrderType()==type
)
{
return OrderLots();
}
}
return(0);
}



double LastOrderLot(int typee)

والشرط


&& OrderType()==type
الفرق حرف (e)
راجع الاكسبيرت كله لانه الخطاء متكرر

hre007
24-05-2022, 05:13 AM
اسف لم انتبه للمشاركه العيب اللي موجود في الاكسبيرت الخاص بك هو:

double LastOrderLot(int typee)
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderSymbol()==Symbol()
&& OrderMagicNumber()==MagicNumber
&& OrderType()==type
)
{
return OrderLots();
}
}
return(0);
}



double LastOrderLot(int typee)

والشرط


&& OrderType()==type
الفرق حرف (e)
راجع الاكسبيرت كله لانه الخطاء متكرر



الف شكر احي الكريم

metmet
15-06-2022, 08:42 PM
السلام عليكم جميعا
أولا أنا بقالى فترة مش قليلة مش شايف أخونا حسن (كيرا)
يا ريت أحد يطمنا عليه .... حقيقى له فضل كبير جدا علينا وعليا خاصة فقد تعلمت منه الكثير وإن كان لا يعرفني
---------------
ثانيا : لى سؤال برمجي بس تعبنى جدا
وهو
إذا كان هناك مؤشر خارجي أسهم حمراء وخضراء مثلا وعايز أكتب الكود تبعه


double B=iCustom(Symbol(),0,"xxxxxxxxx",0,1);
double S=iCustom(Symbol(),0,"xxxxxxxxx",1,1);


if(B!=EMPTY_VALUE && B>0) {Buy="BUY";} else{Buy="NONE";}
if(S!=EMPTY_VALUE && S>0) {Sell="SELL";} else{Sell="NONE";}


تمام كدة ... اذا كان كما بالصورة التالية (1)
29796


ماذا إذا كان هناك أسهم بتظهر من أرقام أخرى كما بالصورة التالية (2)
29797
هل يتم كتابة الكود هكذا


double B=iCustom(Symbol(),0,"xxxxxxxxx",0,2,4,6,1);
double S=iCustom(Symbol(),0,"xxxxxxxxx",1,3,5,7,1);

if(B!=EMPTY_VALUE && B>0) {Buy="BUY";} else{Buy="NONE";}
if(S!=EMPTY_VALUE && S>0) {Sell="SELL";} else{Sell="NONE";}


اذا كان نعم
فعندما أقوم بعمل ذلك فان الاكسيبرت في االباكتيست وعلى المنصة يكون ثقيل جدا جدا جدا جدا
فما السبب ؟؟
وكيف أجعل الاكسيبرت يأخذ الصفقة من ال 0,2,4,6 في حالة الشراء ومن ال 1,3,5,7 في حالة البيع


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

forex7
23-06-2022, 03:48 AM
السلام عليكم
جالس حاليا بتعلم MQL4
في هذه فونكشن جربتها اغلاق عقود البيع



void CloseAllSell(){
int cnt;
for(cnt = OrdersTotal()-1;cnt >=0;cnt--){

if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)){
// check order sell
if(Symbol() == OrderSymbol()&& OrderType() == OP_SELL){
bool close_sell = OrderClose(OrderTicket(),OrderLots(),Ask,3,clrToma to);
}
}
}
}


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

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

forex7
23-06-2022, 04:08 AM
بعد البحث وجدت هذه المشاركة
https://stackoverflow.com/questions/69027162/order-closing-and-opening-very-quickly-unintendedly-in-mql4-when-using-multiple

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

forex7
29-06-2022, 12:11 PM
كيف احول الوحدة الاساسيه الى لوت يقبله ميتاتريدر
مثلا


1.00 تعني لوت قياسي واحد أو 100000 وحدة من العملة الأساسية.



0.10 تعني لوت مصّغر واحد أو 10000 وحدة من العملة الأساسية.



0.01 تعني مايكر لوت واحد أو 1000 وحدة من العملة الأساسية.

اريد تحويل 100000 الى لوت يكون 1.00 كيف احولها بشكل برمجي
مثل 1000 وحدة عند التحويل يعطيني لوت 0.01 هنا اريد صيغه التحويل
لانني احسب مخاطرتي على حجم الوحدة عند الحساب يظهر لي مثلا 100000 او 2000 اريد تحويل هذه الارقام الى لوت يقبلها البرنامج

shivaa
03-07-2022, 08:01 AM
السلام عليكم
الرجاء المساعده بداله تعمل الاتى كما فى الصوره
فى الصور خط عمودى رقم 1 وخط اخر عمودى 2
المسافه بين خطين معلومه
اريد رسم خط عمودى رقم 3 فى المستقبل يبعد عن الخط رقم 1 مسافه متساويه مع المسافه المعلومه

shivaa
11-07-2022, 10:59 AM
الخط الازرق والبنفسجى متساوين فى عدد الشموع

taayeb
14-07-2022, 03:14 AM
الخط الازرق والبنفسجى متساوين فى عدد الشموع

عند وضع الخط أول قم باستخراج رقم شمعة الخط ثم أضف المسافة الى رقم الشمعة وقم باضهار خط رقم 2
أما الخط رقم 3 فتقوم أول بايجاد المسافة المتبقية بين الشمعة رقم 0 و مكان الخط هل هو بعد شمعتين أو ثلاثة من شمعة 0
ثم ترسم الخط في مكانه باستعمال هذا الكود
Time[0]+(1)*PeriodSeconds())
1 هو المسافة المتبقية
بالتوفيق ان شاء الله

metmet
29-07-2022, 07:29 PM
السلام عليكم
مازال الأخ حسن لم يظهر حتى اليوم
والله أنا نفسي اطمن عليه
ربنا يجزيه عنا كل خير
--------------
أرجو ممن يستطيع تقديم المساعدة أن
يكتب لى شروط فتح صفقة
buyعندما يخترق السعر ويغلق شمعة فوق آخر قمة موجودة على فريم معين مثلا 4 ساعات
sell عندما يتخترق ويغلق شمعة أسفل آخر قاع موجود على فريم معين مثلا 4 ساعات
--------------
وشاكر فضلكم

hre007
13-08-2022, 03:14 AM
السلام عليكم
مازال الأخ حسن لم يظهر حتى اليوم
والله أنا نفسي اطمن عليه
ربنا يجزيه عنا كل خير
--------------
أرجو ممن يستطيع تقديم المساعدة أن
يكتب لى شروط فتح صفقة
buyعندما يخترق السعر ويغلق شمعة فوق آخر قمة موجودة على فريم معين مثلا 4 ساعات
sell عندما يتخترق ويغلق شمعة أسفل آخر قاع موجود على فريم معين مثلا 4 ساعات
--------------
وشاكر فضلكم


اولا اخي تحدد اعلي قمة وادني قاع خلال عدد معين من الشموع


aLo=iLowest(Symbol(),Period_Frame,MODE_LOW,Candle_ End,Candle_Start);
zLo=iLow(Symbol(),Period_Frame,aLo);

aHi=iHighest(Symbol(),Period_Frame,MODE_HIGH,Candl e_End,Candle_Start);
zHi=iHigh(Symbol(),Period_Frame,aHi);



ثم يأتي الشرط كالاتي


if( Ask > ( zHi + step*points) && TotalOrders(OP_BUY)==0 ) Buy_Market();

if( Bid < ( zLo - step*points) && TotalOrders(OP_SELL)==0 ) Sell_Market();

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



extern int Candle_Start=1, Candle_End=30, Period_Frame=60, step=20;
double aLo ,zLo;
double aHi ,zHi;


بالتوفيق

hre007
13-08-2022, 03:41 AM
السلام عليكم جميعا
أولا أنا بقالى فترة مش قليلة مش شايف أخونا حسن (كيرا)
يا ريت أحد يطمنا عليه .... حقيقى له فضل كبير جدا علينا وعليا خاصة فقد تعلمت منه الكثير وإن كان لا يعرفني
---------------
ثانيا : لى سؤال برمجي بس تعبنى جدا
وهو
إذا كان هناك مؤشر خارجي أسهم حمراء وخضراء مثلا وعايز أكتب الكود تبعه


double B=iCustom(Symbol(),0,"xxxxxxxxx",0,1);
double S=iCustom(Symbol(),0,"xxxxxxxxx",1,1);


if(B!=EMPTY_VALUE && B>0) {Buy="BUY";} else{Buy="NONE";}
if(S!=EMPTY_VALUE && S>0) {Sell="SELL";} else{Sell="NONE";}


تمام كدة ... اذا كان كما بالصورة التالية (1)
29796


ماذا إذا كان هناك أسهم بتظهر من أرقام أخرى كما بالصورة التالية (2)
29797
هل يتم كتابة الكود هكذا


double B=iCustom(Symbol(),0,"xxxxxxxxx",0,2,4,6,1);
double S=iCustom(Symbol(),0,"xxxxxxxxx",1,3,5,7,1);

if(B!=EMPTY_VALUE && B>0) {Buy="BUY";} else{Buy="NONE";}
if(S!=EMPTY_VALUE && S>0) {Sell="SELL";} else{Sell="NONE";}


اذا كان نعم
فعندما أقوم بعمل ذلك فان الاكسيبرت في االباكتيست وعلى المنصة يكون ثقيل جدا جدا جدا جدا
فما السبب ؟؟
وكيف أجعل الاكسيبرت يأخذ الصفقة من ال 0,2,4,6 في حالة الشراء ومن ال 1,3,5,7 في حالة البيع


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

الكود الاول هو الصحيح .. بالنسبة للالوان الكتير الي مع المؤشر غير الوانها عشان تعرف اي رقم خاص بسهم الشراء واي رقم خاص بسهم البيع والارقام دي هتكون بدل 0 و1

ابو عمر
13-08-2022, 01:25 PM
بارك الله فيك اخي hre007

احمد
27-08-2022, 06:55 PM
السلام عليكم ورحمة الله وبركاته
عندي مشكلة مع مؤشر hidden gap volume وهي عند استدعائة في الاكسبيرت يتم تكراره كما في الصورة وهذا عندما اجري اختبار للاكسبيرت29882
ما الحل بارك الله فيكم

احمد
28-08-2022, 03:06 AM
السلام عليكم ورحمة الله وبركاته
اشكركم اخواني الكرام
وجدت الحل لهذه المشكلة في مشاركات سابقة للأستاذ حسن

most
11-01-2023, 05:21 PM
السلام عليكم
استاذى الفاضل كيف اجعل الاكسبيرت يعمل وفقاً لمرور الساعة؟
بمعنى انى فى الاكسبيرت اجعله يعمل مثلاً من الساعة 10 الى الساعة 15 ولكن المشكلة انه اذا اغلق صفقة وكانت الساعة 10 ونصف مثلاً 10:30 فانه يقوم بفتح صفقة جديدة وانا اريده يفتح الصفقة وفق الساعة ليس اكثر ولا اقل يعنى اذا اغلق صفقة الساعة 10:30 يفتح الصفقة الاخرى الساعة 11:00 وهكذا فهل يمكننى ضبط الاكسبيرت وفق هذا؟؟


انا اضع الامر لعمل الاكسبيرت هكذا
&&Hour()>=10&&Hour()<=15

حسن مقيدم
05-03-2023, 02:08 PM
السلام عليكم ورحمة الله وبركاته
اخى الفاضل صممت اكسيبرت يفتح صفقات بيع وشراء ويغلق الشراء على ربح وايضا يغلق على الربح الاجمالى لو شغلته على عمله واحده يعمل بطريقة سليمه وعند تشغيله على اكثر من عمله يحدث خطا فى اغلاق الصفقات هذه هى الشرورط
if(USD!=0&&ChartProfit()>=USD){CA();}//اغلاق كل الصفقات على ربح
if(USD2!=0&&BuyProfit()>=USD2){CB();}//اغلاق صفقات الشراء فقط على ربح


double ChartProfit(){
double p= 0 ;
for(cnt=0;cnt<OrdersTotal();cnt++){
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNamber){
p=p+OrderProfit()+OrderCommission()+OrderSwap();
}


}return(p);
}


//----------------------------------------------------------------------------------------
// ربح الشراء
//----------------------------------------------------------------------------------------


double BuyProfit(){
double p= 0 ;
for(cnt=0;cnt<OrdersTotal();cnt++){
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNamber){
if (OrderType()==OP_BUY)
p=p+OrderProfit()+OrderCommission()+OrderSwap();
}


}return(p);
}
//----------------------------------------------------------------------------------------
// ربح البيع
//----------------------------------------------------------------------------------------




double SellProfit(){
double p= 0 ;
for(cnt=0;cnt<OrdersTotal();cnt++){
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNamber)
if(OrderType()==OP_SELL){
p=p+OrderProfit()+OrderCommission()+OrderSwap();
}


}return(p);
}
//----------------------------------------------------------------------------------------
// اغلاق جميع الصفقات
//----------------------------------------------------------------------------------------
void CA() {


for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
if(OrderSelect(SELECT_BY_POS,MODE_TRADES))
if (OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNamber)
if (OrderType()==OP_BUY){
zs=OrderClose(OrderTicket(),OrderLots(),Bid,3,N);
} else if (OrderType()==OP_SELL){
zs=OrderClose(OrderTicket(),OrderLots(),Ask,3,N);
}else{
zs=OrderDelete(OrderTicket(),N);


}
}
//----------------------------------------------------------------------------
// اغلاق صفقات الشراء
//----------------------------------------------------------------------------
void CB(){
for (cnt=OrdersTotal()-1;cnt>=0;cnt--)
if (OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
if (OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNamber&&OrderType()==OP_BUY)
{
bool close_b=OrderClose(OrderTicket(),OrderLots(),Bid,3 ,clrGoldenrod);
}
}
//-------------------------------------------------------------------
// اغلاق صفقات البيع
//-------------------------------------------------------------------
void CS(){


for (cnt=OrdersTotal()-1;cnt>=0;cnt--)
if (OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
if (OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNamber&&OrderType()==OP_SELL)
{
bool close_s=OrderClose(OrderTicket(),OrderLots(),Ask,3 ,clrAzure);
}
}
اريده يحسب ربح وخسارة كل عمله على حده ويخرج واجمالى ربح او خسارة كل عمله على حده مع العلم عند تشغيله على عمله واحده يعمل بشكل طبيعى وعند اضافه عمله اخرى تحدث اخطاء

forexfighters
17-03-2023, 07:26 AM
السلام عليكم / كيف يمكننى عمل دالة خارجية لتخذين عدد الشموع بين كل بفر لكى استخدمها فيما بعد فى الرسم و تحديد مكان الshift المطلوب
/للتوضيح /
اقوم برسم بفر تحديد قمم مثلا
و باستخدام دالة خارجية اقوم بتحديد سعر البفر قبل الاخير
و ارسم علية بفر اضافى جديد
- هنا يرسم المؤشر البفر فى السعر المطلوب ولكن لا يرسمة فى نفس البار للبفر السابق و علية اقوم بتعديل الshift و هنا واجهت مشكلة فى عمل دالة مناسبة لاستنتاج عدد البارات

فريد
15-04-2023, 01:32 PM
كيف اعرف تاريخ انتهاء عمل الاكسيبرت. شكرا

ابو عمر
15-04-2023, 02:28 PM
حياك الله
لن تعرف الا اذا كتب المبرمج انه انتهى او اذا كان عندك الكود او لاحطت انه كان يعمل وفق شروط معينة ثم توقف عن فتح الصفقات ضمن نفس الشروط

metmet
19-05-2023, 04:01 PM
السلام عليكم
يبدو أن الموضوع المخصص للأسئلة البرمجية أصبحا خاويا على عروشه (للأسف)
وخاصة بعد أن غاب عنه الأخ حسن كيرا
والله المستعان

لى سؤال للأخوة المبرمجين
أولا :
كيف أرسم فيبوناتشي على شمعة فوليوم ال Dark Blue الموجودة في
مؤشر Hidden Gap Volume
*********************************
ثانيا:
وكيف أكتب شرط دخول الصفقة إذا تم اغلاق شمعة أسفل مستوى 100 يفتح شراء