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

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



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

Abdullah Mohammed
19-05-2019, 06:07 PM
حياك الله اخي حسن

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

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

ودائما يبقى الانسان يتعلم و يردد ((وقل ربي زدني علما))

وتعبكم ان شاء الله في ميزان حسناتكم يوم القيامه.

kira-h
19-05-2019, 06:56 PM
حياك الله استاذي العزيز

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

صراحة قرات ردك اكثر من مرة ولم افهم ماتقصدة بالضبط

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

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

كيف ستكون الترجمه لهذا الشرط مثلا


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

اي بمعني

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

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

kira-h
19-05-2019, 07:08 PM
حياك الله اخي حسن

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

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

ودائما يبقى الانسان يتعلم و يردد ((وقل ربي زدني علما))

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

Abdullah Mohammed
19-05-2019, 09:20 PM
أخي الكريم
ردي السابق والذي قبله واضحين جدا !
عموما كخلاصة
إذا تريد تلك الشروط تتحقق بشمعة مغلقة سابقا فهي غير ممكنة برمجيا لأن البرنامج لا يعرف حركات السعر السابقة،
أما إذا تريد تلك الشروط تتحقق بآخر شمعة مفتوحة فهذا ممكن برمجيا باستخدام حفظ القيم من نوع static ومقارنتها بالقيم الجديدة...
أما إذا تريد الشروط بمجموعة شموع سابقة فهذا ممكن وهي نفس الشروط التي يعمل عليها الزيجزاج تقريبا

طيب اخي حسن

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

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

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

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

بعني بالمختصر

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

اتمنى ان تكون الفكرة وصلت

Ahmed
20-05-2019, 01:36 PM
السلام عليكم استاذ حسن
اريد وظيفة تضع استوب صفقة الشراء اسفل اقل قاع + 5 نقاط ( اقل قاع لاخر عشرة شموع )
وتضع استوب صفقة البيع اعلى من اعلى قمة + 5 نقاط ( اعلى قمة لاخر عشرة شموع )
بارك الله فيك وتقبل الله منا ومنك الصيام والقيام

kira-h
21-05-2019, 06:34 AM
السلام عليكم استاذ حسن
اريد وظيفة تضع استوب صفقة الشراء اسفل اقل قاع + 5 نقاط ( اقل قاع لاخر عشرة شموع )
وتضع استوب صفقة البيع اعلى من اعلى قمة + 5 نقاط ( اعلى قمة لاخر عشرة شموع )
بارك الله فيك وتقبل الله منا ومنك الصيام والقيام
وعليكم السلام
مثال :


double HighPos=High[iHighest(Symbol(),0,MODE_HIGH,10 ,1)];//أعلى هاي لـ 10 شموع سابقة
double LowPos=Low[iLowest(Symbol(),0,MODE_LOW,10,1)];//أقل لو لـ 10 شموع سابقة

kira-h
21-05-2019, 06:46 AM
طيب اخي حسن

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

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

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

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

بعني بالمختصر

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

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


static double LastBid=0;
void OnTick()
{
if(Bid>LastBid)LastBid=Bid;//إذا كان السعر الحالي أكبر قطعا من السعر السابق يتم حفظ السعر الحالي
}


من خلال المثال يمكنك بناء أي شرط كما تريد

Abdullah Mohammed
21-05-2019, 11:49 AM
هذا ممكن ولكن لم يكن بمضمون طلبك السابق!
طيب بما أن العمل على الشمعة اليومية الحالية فلن تحتاج لفريم الدقيقة بل يمكن حفظ قيم حركة السعر الحالية ومقارنتها بالقيم الجديدة، وهو ما قلت سابقا أنه ممكن باستخدام المتغيرات الثابثة من نوع static
ولديك وظيفة الـ Bid للسعر الحالي
يعني مثلا :


static double LastBid=0;
void OnTick()
{
if(Bid>LastBid)LastBid=Bid;//إذا كان السعر الحالي أكبر قطعا من السعر السابق يتم حفظ السعر الحالي
}


من خلال المثال يمكنك بناء أي شرط كما تريد

السلام عليكم اخي حسن

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

kira-h
21-05-2019, 07:44 PM
السلام عليكم اخي حسن

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

Ahmed
21-05-2019, 09:02 PM
وعليكم السلام
مثال :


double HighPos=High[iHighest(Symbol(),0,MODE_HIGH,10 ,1)];//أعلى هاي لـ 10 شموع سابقة
double LowPos=Low[iLowest(Symbol(),0,MODE_LOW,10,1)];//أقل لو لـ 10 شموع سابقة


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

Abdullah Mohammed
21-05-2019, 09:31 PM
هذا ممكن ولكن لم يكن بمضمون طلبك السابق!
طيب بما أن العمل على الشمعة اليومية الحالية فلن تحتاج لفريم الدقيقة بل يمكن حفظ قيم حركة السعر الحالية ومقارنتها بالقيم الجديدة، وهو ما قلت سابقا أنه ممكن باستخدام المتغيرات الثابثة من نوع static
ولديك وظيفة الـ Bid للسعر الحالي
يعني مثلا :


static double LastBid=0;
void OnTick()
{
if(Bid>LastBid)LastBid=Bid;//إذا كان السعر الحالي أكبر قطعا من السعر السابق يتم حفظ السعر الحالي
}


من خلال المثال يمكنك بناء أي شرط كما تريد

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

شمعه عباره عن مجموعة من الشموع الصغيره.. او انا غلطان؟!

لان حسب كلامك انه لايمكن معرفه حركة السعر او تكاته في الشموع السابقه ولكن على ضوء الهاي واللوا والافتتاح والاغلاق ممكن...

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

kira-h
22-05-2019, 05:24 AM
لماذا مازلت مصر اخي حسن على الشمعه الحاليه.. اريد معرفة الترندات حتى في الشموع السابقه وذلك من خلال مقارنه الفوارق بين هاي ولو الشمعات الصغيره الموجوده في داخل الشمعه الكبيره , لان كل

شمعه عباره عن مجموعة من الشموع الصغيره.. او انا غلطان؟!

لان حسب كلامك انه لايمكن معرفه حركة السعر او تكاته في الشموع السابقه ولكن على ضوء الهاي واللوا والافتتاح والاغلاق ممكن...

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

Abdullah Mohammed
22-05-2019, 06:20 PM
لأنك ذكرت الفوارق للهاي... بشموع الدقيقة لشمعة اليوم، إذن من الأفضل استخدام فوارق التكات لشمعة اليوم مباشرة ولديك مثال لحفظ القيم! طبعا المقصود اليوم الحالي وليس السابق، ويبدأ العد من بداية اليوم
يمكن عمل المقارنات ولكن لا يمكن رسم الترندات عليها!

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

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


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

ان شاء الله فهمت ما اقصد....

mr.forex
23-05-2019, 11:49 AM
السلام عليكم
صباح الخير مشرفنا القدير حسن
تقبل لله صيامك
استفسار بسيط ) ما هو الحل لجعل دالة الموديفاي الخاصة بتعديل هدف ووقف الصفقة تعمل لمرة واحدة فقط
أي لا أريدها تعمل بإستمرار حتى لا تتناقض مع دالة التريلينج
مع ملاحظة انني أفتح أكثر من صفقة في الشمعة الواحدة
وفقك الله

sabil
23-05-2019, 12:37 PM
السلام عليكم
صباح الخير مشرفنا القدير حسن
تقبل لله صيامك
استفسار بسيط ) ما هو الحل لجعل دالة الموديفاي الخاصة بتعديل هدف ووقف الصفقة تعمل لمرة واحدة فقط
أي لا أريدها تعمل بإستمرار حتى لا تتناقض مع دالة التريلينج
مع ملاحظة انني أفتح أكثر من صفقة في الشمعة الواحدة
وفقك الله

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

if(ordercnt()==1)
(
order_modify();
)


غير انت بقى شرط حساب الصفقات لشروطك انت

sabil
23-05-2019, 12:50 PM
اخي حسن لما بكتب #property strict ف الاكسبرت بيطلعلي اخطاء كتيرة وكمان ف الاكواد الل باخدها من حضرتك
حتى الاكواد والدوال الموضوعة هنا ف المنتدى في الموضوع المثبت بيطلع فيها اخطاء لما بكتب #property strict فوق
فبضطر احذفها واشتغل بدونها
ايه الحل وخاصة اني بحس اني محتاج اتعلم من اول وجديد
وهل يمكنك تعديل الدوال مرة اخرى لتتلائم مع التحديثات الاخيرة للغة وكيف يمكنني متابعة التحديثات وتحديث الدوال ؟

kira-h
23-05-2019, 07:14 PM
اخي حسن لما بكتب #property strict ف الاكسبرت بيطلعلي اخطاء كتيرة وكمان ف الاكواد الل باخدها من حضرتك
حتى الاكواد والدوال الموضوعة هنا ف المنتدى في الموضوع المثبت بيطلع فيها اخطاء لما بكتب #property strict فوق
فبضطر احذفها واشتغل بدونها
ايه الحل وخاصة اني بحس اني محتاج اتعلم من اول وجديد
وهل يمكنك تعديل الدوال مرة اخرى لتتلائم مع التحديثات الاخيرة للغة وكيف يمكنني متابعة التحديثات وتحديث الدوال ؟
ليست أخطاء بل اغلبها تنبيهات ليس لها تأثير على عمل الاكسبيرت
عموما property strict للتدقيق البرمجي في كل كلمة أو تعبير بالكود
يعني مثلا البرنامج يتجاوز حالة جمع بين كلمة وعدد صحيح (أو عشري) بينما بالـ strict لابد من تحويل العدد الى كلمة من نوع string
مثلا

"kira"+21
"kira"+string(21)//strict
وهكذا...
اكتب الكود للتعديل عليه
ويمكنك متابعة التحديثاث من الموقع الرسمي للغة على الرابط التالي Updated MQL4 (https://docs.mql4.com/basis/mql4changes#compiler_difference)

samizhraldeen
23-05-2019, 10:05 PM
السلام عليكم اخي كيرا اريد من حضرتك طلب صغير
وهو كود تحريك الاوامر المعلقة كل مدة من الثواني او الدقائق
شكرا لك

Ahmed
23-05-2019, 11:38 PM
السلام عليكم استاذ حسن
كيف اجعل تتبع الربح بناء على مؤشر atr
جزاك الله خيرا

sabil
24-05-2019, 02:21 AM
ليست أخطاء بل اغلبها تنبيهات ليس لها تأثير على عمل الاكسبيرت
عموما property strict للتدقيق البرمجي في كل كلمة أو تعبير بالكود
يعني مثلا البرنامج يتجاوز حالة جمع بين كلمة وعدد صحيح (أو عشري) بينما بالـ strict لابد من تحويل العدد الى كلمة من نوع string
مثلا

"kira"+21
"kira"+string(21)//strict
وهكذا...
اكتب الكود للتعديل عليه
ويمكنك متابعة التحديثاث من الموقع الرسمي للغة على الرابط التالي Updated MQL4 (https://docs.mql4.com/basis/mql4changes#compiler_difference)

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

#property strict
وعند وضعها يظهرلي اخطاء برمجية واحيانا تحذيرات





مثلا الاكسبرت المرفق يعمل بشكل صحيح عند وضع شروط الدخول في اكسبرت منفرد لكل زوج
وعندما صنعته ف اكسبرت واحد ليعمل ع كل الازواج من خلال شارت واحد ظهرلي مشكلة الاوامر المعلقة حيث يقوم بفتحها عند اسعار غير صحيحة واحيانا لا يفتح رغم انها نفس المتغيرات مع الاكسبرت المنفرد ويعمل هناك بشكل صحيح بجانب انه لا يعمل مع ازواج الين نهائيا والعكس مع الاكسبرت المنفرد يعمل بدون مشاكل
اما بعد اضاافة #property strict
ظهرلي 7 اخطاء و 24 تحذيرات
ارجو اصلاحها اذا امكن لاتعلم منها

mr.forex
24-05-2019, 02:23 AM
يبقى تضع شروط التيك بروفيت والاستوب لوز داخل حلقة شروط فتح الصفقة وليس الموديفاي
او لو حابب تستخدمها ممكن تقييدها كالاتي :
لو هنفترض انك بتحط الاستوب عند للو الشمعة السابقة ف حالة الشراء وعند الهاي ف حالة البيع
ومثلا مثلا بتبيع وتشتري عند اغلاق كل شمعة وانت عايز الاكسبرت مش يحرك الاستوب من بعد الصفقة الاولى
يبقى باختصار هتعمل كده داخل الدالة الرئيسية

if(ordercnt()==1)
(
order_modify();
)


غير انت بقى شرط حساب الصفقات لشروطك انت

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

sabil
24-05-2019, 11:08 AM
شكرا لك أخي سبيل على تعاونك معي سلمت يمناك
نعم هذه أول محاولة حاولتها قبل طرح الاستفسار وكتبت نفس هذا الكود ولكن هذا الكود لا ينفذ الفكرة
لأن مشكلته التكرار الدائم ولو ترجمنا هذا الكود فهو يعني (طالما أن هناك صفقة مفتوحة فإن دالة الموديفاي لتعديل الهدف والوقف سوف تعمل بإستمرار) وهذا يتناقض مع دالة التريلينج
ما أريده هو أن دالة الموديفاي تعدل وقف صفقة البيع أو الشراء المفتوحة لمرة واحدة فقط ثم تتوقف عن العمل
دالة التريلينج لا تتوقف عن العمل أبدا طالما أن هناك صفقة مفتوحة
ماهي شروط الموديفاي عندك اصلا عشان اقدر افيدك

mr.forex
24-05-2019, 01:17 PM
ماهي شروط الموديفاي عندك اصلا عشان اقدر افيدك

((( إذا تم إفتتاح صفقة بيع أو شراء قم بتعديل الهدف والوقف لمرة واحدة فقط )))

يرجى ملاحظة أنني أقوم بإفتتاح أكثر من صفقة في الشمعة الواحدة

sabil
24-05-2019, 06:17 PM
((( إذا تم إفتتاح صفقة بيع أو شراء قم بتعديل الهدف والوقف لمرة واحدة فقط )))

يرجى ملاحظة أنني أقوم بإفتتاح أكثر من صفقة في الشمعة الواحدة

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

mr.forex
25-05-2019, 01:35 AM
يبقى مش هتحتاج دالة الموديفاي وهتعمل الهدف والاستوب داخل الحلقة تحت شروط الدخول

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


if (باقي الشروط البرمجية && Orderscnt == 0)
{
,
,
,
دالة الموديفاي
}



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

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

mr.forex
25-05-2019, 01:36 AM
يبقى مش هتحتاج دالة الموديفاي وهتعمل الهدف والاستوب داخل الحلقة تحت شروط الدخول

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


if (باقي الشروط البرمجية && Orderscnt == 0)
{
,
,
,
دالة الموديفاي
}


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

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

sabil
25-05-2019, 02:34 AM
أخي الكريم
لابد من دالة الموديفاي لأن الهدف والوقف قيمتهم مختلفة قبل افتتاح الصفقة وبعد افتتاحها
أنا فاهم قصدك بشكل عام .....أنت تقصد المنطق البرمجي التالي


if (باقي الشروط البرمجية && Orderscnt == 0)
{
,
,
,
دالة الموديفاي
}


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

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

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

هذا الكود خارج الدالة


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(),
ty=OrderType();
double lo=OrderLots(),
op=OrderOpenPrice(),
pt=OrderProfit(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();
datetime om=OrderOpenTime();

if(sy==Symbol()&&mn==MagicNo)
{
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);
}
}
}
return(0);
}


اما داخل الدالة
سوف تضع داخل الحلقة
في حالة الشراء


if(Stoploss!=0){double SLb=LastOrderCurrent("OpenPrice",OP_BUYSTOP)-Stoploss*point;}else SLb=0;
if(Takeprofit!=0){double TPb=LastOrderCurrent("OpenPrice",OP_BUYSTOP)+Takeprofit*point;}else TPb=0;



وفي حالة البيع


if(Stoploss!=0){double SLs=LastOrderCurrent("OpenPrice",OP_SELLSTOP)+Stoploss*point;}else SLs=0; //
if(Takeprofit!=0){double TPs=LastOrderCurrent("OpenPrice",OP_SELLSTOP)-Takeprofit*point;}else TPs=0;

kira-h
25-05-2019, 05:10 AM
بعض الاكواد التي اصنعها تعمل بشكل صحيح بدون استخدام

#propertystrict
وعند وضعها يظهرلي اخطاء برمجية واحيانا تحذيرات




مثلا الاكسبرت المرفق يعمل بشكل صحيح عند وضع شروط الدخول في اكسبرت منفرد لكل زوج
وعندما صنعته ف اكسبرت واحد ليعمل ع كل الازواج من خلال شارت واحد ظهرلي مشكلة الاوامر المعلقة حيث يقوم بفتحها عند اسعار غير صحيحة واحيانا لا يفتح رغم انها نفس المتغيرات مع الاكسبرت المنفرد ويعمل هناك بشكل صحيح بجانب انه لا يعمل مع ازواج الين نهائيا والعكس مع الاكسبرت المنفرد يعمل بدون مشاكل
اما بعد اضاافة #propertystrict
ظهرلي 7 اخطاء و 24 تحذيرات
ارجو اصلاحها اذا امكن لاتعلم منها
تم تصحيح الأخطاء مع الشرح بالكود المرفق

kira-h
25-05-2019, 06:59 AM
السلام عليكم اخي كيرا اريد من حضرتك طلب صغير
وهو كود تحريك الاوامر المعلقة كل مدة من الثواني او الدقائق
شكرا لك
وعليكم السلام
مثال لدالة تحريك الأمر المعلق كل مسافة معينة ويمكنك تغييره بالفرق الزمني بين توقيت فتح الأمر OrderOpenTime و التوقيت الحالي TimeCurrent


void PandingsModify()
{
bool mod;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
double op=OrderOpenPrice();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()>OP_SELL)
{
if(OrderType()==OP_SELLSTOP)
{
double price=Bid-50*point),
SL=price+Stoploss*point,
TP=price-Takeprofit*point;

if(NormalizeDouble(price,Digits)!=NormalizeDouble( op,Digits))
{
mod=OrderModify(OrderTicket(),price,SL,TP,0,Red);
}
}
}
}
}

mr.forex
25-05-2019, 04:02 PM
تمام فهمتك
الحل بسيط اخي
اولا سوف تضع دالة بيانات اخر صفقة جارية سواء مباشرة او معلقة خارج الدالة

هذا الكود خارج الدالة


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(),
ty=OrderType();
double lo=OrderLots(),
op=OrderOpenPrice(),
pt=OrderProfit(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();
datetime om=OrderOpenTime();

if(sy==Symbol()&&mn==MagicNo)
{
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);
}
}
}
return(0);
}


اما داخل الدالة
سوف تضع داخل الحلقة
في حالة الشراء


if(Stoploss!=0){double SLb=LastOrderCurrent("OpenPrice",OP_BUYSTOP)-Stoploss*point;}else SLb=0;
if(Takeprofit!=0){double TPb=LastOrderCurrent("OpenPrice",OP_BUYSTOP)+Takeprofit*point;}else TPb=0;



وفي حالة البيع


if(Stoploss!=0){double SLs=LastOrderCurrent("OpenPrice",OP_SELLSTOP)+Stoploss*point;}else SLs=0; //
if(Takeprofit!=0){double TPs=LastOrderCurrent("OpenPrice",OP_SELLSTOP)-Takeprofit*point;}else TPs=0;


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




datetime a;

int start() {


if (a != LastOrderCurrent("OpenTime"))

{

// دالة الموديفاي
a = LastOrderCurrent("OpenTime")

}
}


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

sabil
25-05-2019, 09:34 PM
تم تصحيح الأخطاء مع الشرح بالكود المرفق

تمام الف شكر ياغالي
جاري التجربة
بس لدي ببعض الاستفسارات الصغيرة
1- لاحظت انه لا يوجد استخدام ل void Point() داخل الدالة فما فائدتها؟
2- فهمت من تعديلاتك ان سبب عدم عمل الاكسبرت ع ازواج الين هو قسمة المتغيرات ع Point مباشرة
والمفروض كانت Marketinfo(sym,mode_point) صح؟
3- بخصوص دالة CandleOrders ما الفرق بينها وبين الاخرى لاني لم افهم الشرح
حيث ان الاوامر المعلقة لا تفتح مباشرة بعد الصفقة الاولى بل تنتظر اغلاق شمعة اولا ع الفريم المستخدم وحيث ان الوقت اطول فاستدعيت فريم الدقيقة ف التوقيت الزمني

sabil
25-05-2019, 09:35 PM
أخي الكريم sabil
أشكرك وأحيي فيك روح التعاون والمساعدة
وهكذا نحن نتعلم نصيب ونخطئ مرات عدة حتى نتقن الأمور
بالنسبة لهذا الكود أراه بعيد عن طلبي وليس له علاقة
أعتقد بأن الحل يكمن في التوقيت والزمن
أنا أقتبست فكرة عدم افتتاح أكثر من صفقة في الشمعة الواحدة وعدلت عليها




datetime a;

int start() {


if (a != LastOrderCurrent("OpenTime"))

{

// دالة الموديفاي
a = LastOrderCurrent("OpenTime")

}
}


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

kira-h
25-05-2019, 11:32 PM
تمام الف شكر ياغالي
جاري التجربة
بس لدي ببعض الاستفسارات الصغيرة
1- لاحظت انه لا يوجد استخدام ل void Point() داخل الدالة فما فائدتها؟
2- فهمت من تعديلاتك ان سبب عدم عمل الاكسبرت ع ازواج الين هو قسمة المتغيرات ع Point مباشرة
والمفروض كانت Marketinfo(sym,mode_point) صح؟
3- بخصوص دالة CandleOrders ما الفرق بينها وبين الاخرى لاني لم افهم الشرح
حيث ان الاوامر المعلقة لا تفتح مباشرة بعد الصفقة الاولى بل تنتظر اغلاق شمعة اولا ع الفريم المستخدم وحيث ان الوقت اطول فاستدعيت فريم الدقيقة ف التوقيت الزمني
1- لأنه التعامل مع عدة أزواج من شارت واحد فلازم دالة فرعية للبوينت حسب الزوج، ويوجد استخدامات لها بالدالة الرئيسية، راجع الكود أكثر
2- نعم صحيح
3- لأن طريقة الزوج الواحد تتعامل مع متغير وحيد time أو BarTime وعند فتح الصفقة على زوج ما لن يكرر فتح صفقة بزووج آخر بنفس الشمعة، لهذا عملنا دالة فرعية تستخرج توقيت الشمعة حسب الزوج ومقارنتها مع توقيت الفتح
ما هي شروط الأوامر المعلقة؟ لأنه كان لديك خطأ في سعر الفتح،

kira-h
25-05-2019, 11:41 PM
السلام عليكم استاذ حسن
كيف اجعل تتبع الربح بناء على مؤشر atr
جزاك الله خيرا
وعليكم السلام
اعط امثلة منطقية بالارقام أو بصورة من الشارت

kira-h
25-05-2019, 11:49 PM
السلام عليكم
صباح الخير مشرفنا القدير حسن
تقبل لله صيامك
استفسار بسيط ) ما هو الحل لجعل دالة الموديفاي الخاصة بتعديل هدف ووقف الصفقة تعمل لمرة واحدة فقط
أي لا أريدها تعمل بإستمرار حتى لا تتناقض مع دالة التريلينج
مع ملاحظة انني أفتح أكثر من صفقة في الشمعة الواحدة
وفقك الله
وعليكم السلام
مثال لتعديل الهدف والوقف بعد فتح الصفقة مباشرة


if(Orderscnt(OP_SELL)==0)
{
int tk=OrderSend(Symbol(),OP_SELL,Lots,Bid,5*Q,0,0,"",MagicNo,0,Red);
if(tk>0)
{
if(Stoploss!=0){SL=Bid+Stoploss*point;}else SL=0;
if(Takeprofit!=0){TP=Bid-Takeprofit*point;}else TP=0;
select=OrderSelect(tk,SELECT_BY_TICKET);
if(SL>0||TP>0)ret=OrderModify(OrderTicket(),OrderOpenPrice(),S L,TP,0,Red);
}
}

sosobom
26-05-2019, 03:10 AM
مرحباً أخي كرا وضعت كود في اكسبيرت لكن لا يعمل اعطني خطاء
الكود كالتالي تضعه ببداية الدالة الرئيسية OnTick أو start


if(TimeCurrent()>=StrToTime("2019.05.05 00:00"))
{
Comment("EA Expired");
Alert("EA Expired");
return(0);
}

sabil
26-05-2019, 06:11 AM
مرحباً أخي كرا وضعت كود في اكسبيرت لكن لا يعمل اعطني خطاء

ما ترجعش للقيمة صفر
الصحيح كالتالي :


if(TimeCurrent()>=StrToTime("2019.05.05 00:00"))
{
Comment("EA Expired");
Alert("EA Expired");
return;
}

sabil
26-05-2019, 06:27 AM
1- لأنه التعامل مع عدة أزواج من شارت واحد فلازم دالة فرعية للبوينت حسب الزوج، ويوجد استخدامات لها بالدالة الرئيسية، راجع الكود أكثر
2- نعم صحيح
3- لأن طريقة الزوج الواحد تتعامل مع متغير وحيد time أو BarTime وعند فتح الصفقة على زوج ما لن يكرر فتح صفقة بزووج آخر بنفس الشمعة، لهذا عملنا دالة فرعية تستخرج توقيت الشمعة حسب الزوج ومقارنتها مع توقيت الفتح
ما هي شروط الأوامر المعلقة؟ لأنه كان لديك خطأ في سعر الفتح،

اقصد دي لم اجد لها استخدام داخل الدالة
بحثت عنها ولم اجدها


void Points(string symbol)//<==
{
if(MarketInfo(symbol,MODE_MINLOT)<0.1)Lot_Decimal=2;else Lot_Decimal=1;
if(MarketInfo(symbol,MODE_DIGITS)==5||MarketInfo(s ymbol,MODE_DIGITS)==3)Q=10;else Q=1;
if(MarketInfo(symbol,MODE_DIGITS)<4)point=0.01;else point=0.0001;
}




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

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

mr.forex
26-05-2019, 04:28 PM
وعليكم السلام
مثال لتعديل الهدف والوقف بعد فتح الصفقة مباشرة


if(Orderscnt(OP_SELL)==0)
{
int tk=OrderSend(Symbol(),OP_SELL,Lots,Bid,5*Q,0,0,"",MagicNo,0,Red);
if(tk>0)
{
if(Stoploss!=0){SL=Bid+Stoploss*point;}else SL=0;
if(Takeprofit!=0){TP=Bid-Takeprofit*point;}else TP=0;
select=OrderSelect(tk,SELECT_BY_TICKET);
if(SL>0||TP>0)ret=OrderModify(OrderTicket(),OrderOpenPrice(),S L,TP,0,Red);
}
}


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

if(Orderscnt(OP_SELL)==0)


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

kira-h
26-05-2019, 07:06 PM
اقصد دي لم اجد لها استخدام داخل الدالة
بحثت عنها ولم اجدها


void Points(string symbol)//<==
{
if(MarketInfo(symbol,MODE_MINLOT)<0.1)Lot_Decimal=2;else Lot_Decimal=1;
if(MarketInfo(symbol,MODE_DIGITS)==5||MarketInfo(s ymbol,MODE_DIGITS)==3)Q=10;else Q=1;
if(MarketInfo(symbol,MODE_DIGITS)<4)point=0.01;else point=0.0001;
}




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

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

kira-h
26-05-2019, 07:08 PM
شكرا لك أستاذ حسن
المشكلة هي أنني أستخدم الأوامر المعلقة لدخول الصفقة، وبمجرد أن يتم تفعيل الأمر المعلق فإن هذا الشرط لن يعمل

if(Orderscnt(OP_SELL)==0)


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

samizhraldeen
26-05-2019, 09:35 PM
السلام عليكم اخي كيرا

اريد من حضرتك كود لتحريك الاوامر المعلقة خلاى عدد من الدقائق او الثواني

اتشكرك

sosobom
27-05-2019, 03:39 AM
مرحباً أخي شكراً على المساعدة لكن اكسبيرت يضل يفتح صفقات
ولا يتوقف تصعد رسالة أن اكسبيرت انتهت صلاحية لكن يشتغل عادي

ما ترجعش للقيمة صفر
الصحيح كالتالي :


if(TimeCurrent()>=StrToTime("2019.05.05 00:00"))
{
Comment("EA Expired");
Alert("EA Expired");
return;
}

mr.forex
27-05-2019, 05:11 AM
الكود الذي ينفع لجميع الحالات سيكون متعارض مع التريلينغ
ما هي الشروط بالتفصيل أو ارفق الكود للتصحيح


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

kira-h
27-05-2019, 07:14 AM
أستاذ حسن هي ليست فكرة واحدة فقط محصورة بشروط معينة
أنا أرغب بالإنتقال إلى وسيط ecn والكود هذا سأستخدمه في جميع محاولاتي البرمجية القادمة مع هذا الوسيط
المشكلة بالتفصيل هي عند تعاملي مع وسيط ecn يجب أن يكون الأمر المعلق قيمته صفرا للهدف والستوب حتى تتفعل الصفقة بدون أي مشاكل
بمجرد تفعيل هذا الأمر المعلق هنا يتم تعديل الهدف والستوب لمرة واحدة فقط (حتى لا تتناقض مع دالة التريلينج مستقبلا)
بعد هذه الخطوة هنا يأتي دور دالة التريلينج لتعمل بشكل طبيعي وفق الإعدادات الموضوعة لها
وهكذا بنفس هذا الأسلوب يتم التعامل مع كل صفقة جديدة تفتتح، ولا يهم إن أفتتحت بشكل مباشر أو عن طريق أمر معلق
وما توفيقي إلا من رب العالمين
الكود يحقق المطلوب
فشرط الموديفاي سيعمل لمرة واحدة مباشرة بعد فتح الصفقة او الامر المعلق
ولن يتعارض مع التريلينغ او يتدخل بصفقة اخرى سابقة لان الحلقة تغلق مباشرة بعد الموديفاي
لاحظ الشرط tk>0

kira-h
27-05-2019, 07:19 AM
السلام عليكم اخي كيرا

اريد من حضرتك كود لتحريك الاوامر المعلقة خلاى عدد من الدقائق او الثواني

اتشكرك

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

kira-h
27-05-2019, 07:21 AM
مرحباً أخي شكراً على المساعدة لكن اكسبيرت يضل يفتح صفقات
ولا يتوقف تصعد رسالة أن اكسبيرت انتهت صلاحية لكن يشتغل عادي
ضع الشروط ببداية الدالة الرئيسية OnTick
حتى لا يكمل البرنامج مراجعة بقية الكود

mr.forex
27-05-2019, 06:40 PM
الكود يحقق المطلوب
فشرط الموديفاي سيعمل لمرة واحدة مباشرة بعد فتح الصفقة او الامر المعلق
ولن يتعارض مع التريلينغ او يتدخل بصفقة اخرى سابقة لان الحلقة تغلق مباشرة بعد الموديفاي
لاحظ الشرط tk>0

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


if (Orderscnt(OP_SELL) == 0)


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

kira-h
27-05-2019, 09:15 PM
المعذرة أستاذ حسن لم أفهم كيف يمكن للكود أن يعدل صفقة البيع أو الشراء التي تفعلت عن طريق الأمر المعلق وهذا الشرط موجود


if (Orderscnt(OP_SELL) == 0)


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


if(tk>0)
{
if(Stoploss!=0){SL=Bid+Stoploss*point;}else SL=0;
if(Takeprofit!=0){TP=Bid-Takeprofit*point;}else TP=0;
select=OrderSelect(tk,SELECT_BY_TICKET);
if(SL>0||TP>0)ret=OrderModify(OrderTicket(),OrderOpenPrice(),S L,TP,0,Red);
}


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

mr.forex
28-05-2019, 03:59 AM
هذا مثال فقط لأمر مباشر يمكنك استخدامه أيضا بالامر المعلق
لا يهم الشرط المهم انه بعد دالة الفتح OrderSend (بها الهدف والوقف 0 نقطة) تضع الشرط التالي بنفس حلقة الشرط الأساسي، مع مراعاة معادلتي الهدف والوقف


if(tk>0)
{
if(Stoploss!=0){SL=Bid+Stoploss*point;}else SL=0;
if(Takeprofit!=0){TP=Bid-Takeprofit*point;}else TP=0;
select=OrderSelect(tk,SELECT_BY_TICKET);
if(SL>0||TP>0)ret=OrderModify(OrderTicket(),OrderOpenPrice(),S L,TP,0,Red);
}


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


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

sabil
28-05-2019, 10:00 PM
في الاكسبرت الاخير الل عدلنا عليه ضفت عليه مؤشر pipsfxgainer
ولكنه لا يعمل طبقاً للشروط كأنه غير موجود
رغم انه يعمل بدون مشاكل ف الاكسبرت المنفرد
تلك كتابتي للاكواد
اولا استدعاء المؤشر خارج الدالة


//-----------Indicators fonctions
double pp(string symbol,int index,int shift)
{
double p=iCustom(string symbol, 0,"pipsfxgainer",index,shift);
return(p);
}

شروط الشراء


pp(sym,0,1)!=EMPTY_VALUE&&pp(sym,2,2)!=EMPTY_VALUE

شروط البيع


pp(sym,2,1)!=EMPTY_VALUE&&pp(sym,0,2)!=EMPTY_VALUE


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

المؤشر بالمرفقات

kira-h
29-05-2019, 05:11 AM
تمام أستاذ حسن فهمت المقصود الآن
راح أبدأ ببرمجة الإكسبيرت بعد التفرغ في قادم الأيام إن شاء الله
ألف شكر لك مرة أخرى
مع خالص تقديري وامتناني لك
وإياك أخي الكريم
والله الموفق

kira-h
29-05-2019, 05:19 AM
في الاكسبرت الاخير الل عدلنا عليه ضفت عليه مؤشر pipsfxgainer
ولكنه لا يعمل طبقاً للشروط كأنه غير موجود
رغم انه يعمل بدون مشاكل ف الاكسبرت المنفرد
تلك كتابتي للاكواد
اولا استدعاء المؤشر خارج الدالة


//-----------Indicators fonctions
double pp(string symbol,int index,int shift)
{
double p=iCustom(string symbol, 0,"pipsfxgainer",index,shift);
return(p);
}

شروط الشراء


pp(sym,0,1)!=EMPTY_VALUE&&pp(sym,2,2)!=EMPTY_VALUE

شروط البيع


pp(sym,2,1)!=EMPTY_VALUE&&pp(sym,0,2)!=EMPTY_VALUE


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

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


double pp(string symbol,int index,int shift)
{
double p=iCustom(symbol, 0,"pipsfxgainer",index,shift);
return(p);
}

sabil
29-05-2019, 05:39 AM
السلام عليكم
الشروط سليمة لكن الخطأ لديك في دالة الاستدعاء يجب أن تكون هكذا:


double pp(string symbol,int index,int shift)
{
double p=iCustom(symbol, 0,"pipsfxgainer",index,shift);
return(p);
}


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

Ahmed
29-05-2019, 12:58 PM
الاسهم بهذا المؤشر عبارة عن اوبجكت وليس اندكس
وبالتالي لمعرفة قيمة السهم ستستخدم الوظيفة ObjectGet
مثال حسب المؤشر :


datetime up=ObjectGet("i-AO-Div3_chart_la1_"+Time[1],OBJPROP_TIME1),//توقيت السهم الأزرق عند الشمعة1
dn=ObjectGet("i-AO-Div3_chart_ua1_"+Time[1],OBJPROP_TIME1);//توقيت السهم الأصفر عند الشمعة1
if(up==Time[1])//buy
if(dn==Time[1])//sell


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

kira-h
30-05-2019, 04:42 AM
السلام عليكم استاذ حسن
جربت الكود لكنه لم يفتح ولا صفقة
هل توجد طريقة اخرى
السؤال في المشاركة 2234 (https://www.fxprg.com/vb/showthread.php?t=31457&p=897416&viewfull=1#post897416)
بارك الله فيك وجزاك الله خيرا
وعليكم السلام
ارفق الاكسبيرت للمراجعة

kira-h
30-05-2019, 04:43 AM
عذراً
خطأ مطبعي اخي حسن اثناء عمل المشاركة والا فلن يعمل الاكسبرت بوجود هذا الخطأ
راجعت الاكواد مرة اخرى ووجدتها سليمة وما زال الاكسبرت لا يعمل بشكل صحيح
مشاكل غريبة
ارفق الاكسبيرت للمراجعة

mahmoud1111
30-05-2019, 12:13 PM
السلام عليكم
ارغب استاذي بتزويدي بدالة اغلاق الصفقات للازواج المفتوحة

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

وياريت طريقة التركيب الدالة علي الاكسبيرت

شكرا لكم استاذي

Ahmed
30-05-2019, 01:28 PM
وعليكم السلام
ارفق الاكسبيرت للمراجعة

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

sabil
30-05-2019, 04:33 PM
السلام عليكم
ارغب استاذي بتزويدي بدالة اغلاق الصفقات للازواج المفتوحة

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

وياريت طريقة التركيب الدالة علي الاكسبيرت

شكرا لكم استاذي

راجع المشاركة
https://www.fxprg.com/vb/showthread.php?t=31456&p=844601&viewfull=1#post844601

sabil
30-05-2019, 04:43 PM
ارفق الاكسبيرت للمراجعة

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

اتمنى ان تجد الخلل

kira-h
31-05-2019, 08:18 AM
ستجد شروط كثيرة لذلك اود ان اخبرك اني مسحت كل تلك الشروط وتركت فقط شروط المؤشر ولكن ما زالت المشكلة كماهي لا يفتح طبقاً لها
فرجعت الشروط المحذوفة تاني

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

sabil
31-05-2019, 04:02 PM
الشروط سليمة
ويمكنك اختباره بالباكتيست بالنسخة المرفقة

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

Ahmed
31-05-2019, 05:37 PM
السلام عليكم استاذ حسن
الاكسبيرت المرفق
يضع خط اعلى سعر الشراء ب 30 نقطة
ويضع خط اسفل سعر البيع ب 30 نقطة


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


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

sabil
31-05-2019, 07:35 PM
انظر
اول مركبته ع الشارت فتح 3 صفقات
واحدة فقط الصحيحة
والاتنين غلط

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

samizhraldeen
31-05-2019, 07:59 PM
اشكرك جزيل الشكر اخي كيرا

Abdullah Mohammed
01-06-2019, 02:02 PM
السلام عليكم اخي حسن..

هل يمكن معرفة الوقت او الزمن للهاي وكذلك اللو للشمعه ام ان هذا غير ممكن؟!!

Mohamadsabry2040
01-06-2019, 04:08 PM
سلام عليكم اخواتي الكرام كل عام وانت بخير بمناسبه شهر رمضان الكريم ارجو المساعده و التكرم في التعديل علي اكسبيرت المضاعفات
التعديل الاول
ارجوا اضافه خط احمر والتحكم فيه يديويا فوق للبيع و بدا المضاعفات عند وصول السعر له يفتح صفقه بيع و اضافه خط اخضر تحت للشراء والعكس صحيح
عند تركيب الزوج علي اكثر من زوج عملات يفتح صفقه واحده علي زوج عملات واحد ويلغي باقي الخطوط في باقي الازواج حتي يتحقق الهدف ويفعل الخطوط مره اخري
التعديل الثاني
ارجو اضافه ملاحقه السعر بعد حصول خساره في المضاعفه الاولي اللي اخر مضاعفه مثلا لو حصلت خساره في المضاعفه الاولي والثانيه 2دولار يقوم بملاحقه السعر بعدد النقاط المحدده في الاعدادات بعد الخسراه التي حصلت اول مضاعفات
واضافه بريك ايفن او نقل الاستوب علي الدخول بعد حركه السعر بعدد معين من النقاط
لو هايتم قفل كود الأكسبيرت ارجوا اظهار الكود فقط بالتعديلات اعلاه لان الأكسبيرت محتاج تعديلات اخري بعد التجربه و جزاكم الله خيرا
مرفق الأكسبيرت بالمرفقات

kira-h
02-06-2019, 04:21 AM
عذراً
راجعت مرة اخرى وجدتك حذفت خاصية التايم فريم من خلال المتغيرات الخارجية وبالتالي عمل ع الفريم المستخدم
غريبة مكانش شغال مظبوط الاول
هجرب الشروط التانية واشوف
بالتوفيق إن شاء الله


اشكرك جزيل الشكر اخي كيرا
العفو أخي الكريم

kira-h
02-06-2019, 04:22 AM
السلام عليكم اخي حسن..

هل يمكن معرفة الوقت او الزمن للهاي وكذلك اللو للشمعه ام ان هذا غير ممكن؟!!
وعليكم السلام
يوجد فقط توقيت الفتح
مثال لتوقيت فتح آخر شمعة مغلقة [1]Time

kira-h
02-06-2019, 04:28 AM
سلام عليكم اخواتي الكرام كل عام وانت بخير بمناسبه شهر رمضان الكريم ارجو المساعده و التكرم في التعديل علي اكسبيرت المضاعفات
التعديل الاول
ارجوا اضافه خط احمر والتحكم فيه يديويا فوق للبيع و بدا المضاعفات عند وصول السعر له يفتح صفقه بيع و اضافه خط اخضر تحت للشراء والعكس صحيح
عند تركيب الزوج علي اكثر من زوج عملات يفتح صفقه واحده علي زوج عملات واحد ويلغي باقي الخطوط في باقي الازواج حتي يتحقق الهدف ويفعل الخطوط مره اخري
التعديل الثاني
ارجو اضافه ملاحقه السعر بعد حصول خساره في المضاعفه الاولي اللي اخر مضاعفه مثلا لو حصلت خساره في المضاعفه الاولي والثانيه 2دولار يقوم بملاحقه السعر بعدد النقاط المحدده في الاعدادات بعد الخسراه التي حصلت اول مضاعفات
واضافه بريك ايفن او نقل الاستوب علي الدخول بعد حركه السعر بعدد معين من النقاط
لو هايتم قفل كود الأكسبيرت ارجوا اظهار الكود فقط بالتعديلات اعلاه لان الأكسبيرت محتاج تعديلات اخري بعد التجربه و جزاكم الله خيرا
مرفق الأكسبيرت بالمرفقات
وعليكم السلام
أخي الكريم هذا الموضوع مخصص فقط للأسئلة البرمجية وليس للطلبات
كما أن الاكسبيرت مغلق الكود لا يمكن التعديل عليه، ارفقه مفتوح بصيغة mq4
يمكنك فتح موضوع طلب بقسم برمجة المـؤشرات و الاكسبـيرتـات و برامـج التـداول فـي الفـوركس (https://www.fxprg.com/vb/forumdisplay.php?f=208)

kira-h
02-06-2019, 04:35 AM
جزاك الله خير
لو سمحت ممكن الفونكشن التي تحسب لنا هذا الموضوع ؟
شكرا لك
كالتالي:


double LotManage()
{
if(Digits==5||Digits==3)int Q=10;else Q=1;
double pip_value=MarketInfo(Symbol(),MODE_TICKVALUE)*Q;
if(pip_value==0)pip_value=1;
double lots=NormalizeDouble(MoneyLoss/StopLoss/pip_value,2);
return(lots);
}

Abdullah Mohammed
02-06-2019, 11:08 AM
وعليكم السلام
يوجد فقط توقيت الفتح
مثال لتوقيت فتح آخر شمعة مغلقة [1]Time

اتوقع لوفكرت اخي حسن خارج الصندوق لتمكنت من ايجاد طريقه او فكرة لايجاد الوقت الذي تكون عنده هاي الشمعه!...

معقولة هل mql4 ضيقة لهذة الدرجة!!

Ahmed
02-06-2019, 12:54 PM
للتذكير اخي حسن
بارك الله فيك

Ahmed
02-06-2019, 12:56 PM
السلام عليكم استاذ حسن
الاكسبيرت المرفق
يضع خط اعلى سعر الشراء ب 30 نقطة
ويضع خط اسفل سعر البيع ب 30 نقطة


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


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


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


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

kira-h
02-06-2019, 05:32 PM
اتوقع لوفكرت اخي حسن خارج الصندوق لتمكنت من ايجاد طريقه او فكرة لايجاد الوقت الذي تكون عنده هاي الشمعه!...

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

14012

Abdullah Mohammed
02-06-2019, 05:56 PM
كيف خارج الصندوق؟!
ليس السبب اللغة بل الشموع هي السبب، يوجد بها فقط توقيت الفتح ثم 4 أسعار (الهاي واللو والفتح والاغلاق) ثم الفوليوم
يعني حتى لو استخدمت لغة قوية خارجية لن تستخرج توقيت تكون الهاي!



14012


ماهو الفوليوم... وعلى اي اساس يتم حسابه وما فائدته؟

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

kira-h
02-06-2019, 06:05 PM
ماهو الفوليوم... وعلى اي اساس يتم حسابه وما فائدته؟

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

Abdullah Mohammed
02-06-2019, 09:44 PM
الفكرة تبدو سهلة, لكن تطبيقها صعب، وكما يقولون ما اسهل الحرب عند المتفرجين!!

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

من خلالها مئات النقاط... فأنا لا يهمنا التكات ، بقدر مايهمني كم قطعت هذة التكات من النقاط.. ما نستفيد من معرفتنا بعدد التكات او مايسمى الفوليوم؟

kira-h
03-06-2019, 01:20 AM
الفكرة تبدو سهلة, لكن تطبيقها صعب، وكما يقولون ما اسهل الحرب عند المتفرجين!!

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

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

iForex
03-06-2019, 03:51 PM
السلام عليكم إخوتي
تقبل الله منا و منكم صالح الأعمال.

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

و شكرا جزيلا

kira-h
03-06-2019, 07:04 PM
السلام عليكم إخوتي
تقبل الله منا و منكم صالح الأعمال.

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

و شكرا جزيلا
وعليكم السلام
آمين،،
يمكن ذلك من خلال وظيفة الموديفاي OrderModify
مثال لتوحيد اهداف الصفقات عد هدف آخر صفقة مفعلة حسب النوع:


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

if(sy==Symbol()&&mn==MagicNo&&ty==type)
{
if(ty==OP_BUY)
{
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(Las tTP(OP_BUY),Digits))m=OrderModify(tk,op,LastTP(OP_ BUY),tp,0,Blue);
}
if(ty==OP_SELL)
{
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(Las tTP(OP_SELL),Digits))m=OrderModify(tk,op,LastTP(OP _SELL),tp,0,Red);
}
}
}
}


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


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

Mohamadsabry2040
03-06-2019, 08:35 PM
وعليكم السلام
أخي الكريم هذا الموضوع مخصص فقط للأسئلة البرمجية وليس للطلبات
كما أن الاكسبيرت مغلق الكود لا يمكن التعديل عليه، ارفقه مفتوح بصيغة mq4
يمكنك فتح موضوع طلب بقسم برمجة المـؤشرات و الاكسبـيرتـات و برامـج التـداول فـي الفـوركس (https://www.fxprg.com/vb/forumdisplay.php?f=208)

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

sabil
05-06-2019, 02:18 AM
اخي حسن
كل عام وانتم بخير

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


double distancebuy=(moving-LastOrderCurrent(sym,"OpenPrice",OP_BUY));
if(distancebuy>0)buylimit=(LastOrderCurrent(sym,"OpenPrice",OP_BUY)-distancebuy);


pending buy order = buylimit

البيع المعلق



double distancesell=(LastOrderCurrent(sym,"OpenPrice",OP_SELL)-moving);
if(distancesell>0)selllimit=(distancesell+LastOrderCurrent(sym,"OpenPrice",OP_SELL));


pending sell order = selllimit

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

احمد
05-06-2019, 02:49 AM
وعليكم السلام
آمين،،
يمكن ذلك من خلال وظيفة الموديفاي OrderModify
مثال لتوحيد اهداف الصفقات عد هدف آخر صفقة مفعلة حسب النوع:


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

if(sy==Symbol()&&mn==MagicNo&&ty==type)
{
if(ty==OP_BUY)
{
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(Las tTP(OP_BUY),Digits))m=OrderModify(tk,op,LastTP(OP_ BUY),tp,0,Blue);
}
if(ty==OP_SELL)
{
if(NormalizeDouble(sl,Digits)!=NormalizeDouble(Las tTP(OP_SELL),Digits))m=OrderModify(tk,op,LastTP(OP _SELL),tp,0,Red);
}
}
}
}


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


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

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

sabil
06-06-2019, 08:48 PM
اخي حسن
كل عام وانتم بخير

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


double distancebuy=(moving-LastOrderCurrent(sym,"OpenPrice",OP_BUY));
if(distancebuy>0)buylimit=(LastOrderCurrent(sym,"OpenPrice",OP_BUY)-distancebuy);


pending buy order = buylimit

البيع المعلق



double distancesell=(LastOrderCurrent(sym,"OpenPrice",OP_SELL)-moving);
if(distancesell>0)selllimit=(distancesell+LastOrderCurrent(sym,"OpenPrice",OP_SELL));


pending sell order = selllimit

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

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

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

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

kira-h
07-06-2019, 01:07 AM
جربت هذا الكود اخوي بارك الله فيك ولكن لم يعمل كيف استطيع تشغيل الكود في دالة اونتيك
هذا الكود فقط مثال لتوحيد الهدف عند هدف آخر صفقة مفتوحة
اشرح طريقتك في توحيد الهدف وارفق الاكسبيرت للمراجعة

kira-h
07-06-2019, 05:58 AM
اخي حسن
كل عام وانتم بخير

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


double distancebuy=(moving-LastOrderCurrent(sym,"OpenPrice",OP_BUY));
if(distancebuy>0)buylimit=(LastOrderCurrent(sym,"OpenPrice",OP_BUY)-distancebuy);


pending buy order = buylimit

البيع المعلق



double distancesell=(LastOrderCurrent(sym,"OpenPrice",OP_SELL)-moving);
if(distancesell>0)selllimit=(distancesell+LastOrderCurrent(sym,"OpenPrice",OP_SELL));


pending sell order = selllimit

المشكلة فين هنا؟
علما بان الكود شغال تمام ع ازواج الين فقط وع كل الازواج ف الاكسبرت المنفرد
أخي الكريم شروط المسافة سليمة! لو قيمة الـ moving سليمة
ارفق الاكسبيرت للمراجعة فقد يكون ترتيب الشروط غير منطقي

Abdullah Mohammed
07-06-2019, 04:14 PM
طبعا اخي حسن نعرف الطرق التقليدية مثل الهيدج والتعزيز والتبريد والمضاعفات وعقود معلقة...


1.هل هناك طرق اخرى بنفس هذا النهج او حتى شبيهه بهذه الطرق التي ذكرتها؟

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



2. بحكم انك قد صنعت الكثير من الاكسبيرتات وقرأت الكثير من الفكر والموضيع للاعضاء ...ماهي افضل الاستراتيجيات التي مرت عليك تحت هذا البند-هيدج مضاعفات تعزيز تبريد و عقود

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

ياريت تدلنا على افضل ما تم التوصل اليه في هذا الموضوع؟

sabil
08-06-2019, 05:01 AM
أخي الكريم شروط المسافة سليمة! لو قيمة الـ moving سليمة
ارفق الاكسبيرت للمراجعة فقد يكون ترتيب الشروط غير منطقي
مش عايز اتعبك
انا شغال يدوي مع الاكسبرت
لو النتائج مجزية هكمل التعديلات مع حضرتك

kira-h
08-06-2019, 05:43 AM
مش عايز اتعبك
انا شغال يدوي مع الاكسبرت
لو النتائج مجزية هكمل التعديلات مع حضرتك
بارك الله فيك
وبالتوفيق ان شاء الله

Abdullah Mohammed
09-06-2019, 04:27 PM
اخي حسن لوتكرمتم نريد نصيحتكم...


بحكم انك قد صنعت الكثير من الاكسبيرتات وقرأت الكثير من الفكر والموضيع للاعضاء ...ماهي افضل الاستراتيجيات التي مرت عليك تحت هذا البند-هيدج مضاعفات تعزيز تبريد و عقود


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


ياريت تدلنا على افضل ما تم التوصل اليه في هذا الموضوع؟

kira-h
10-06-2019, 02:19 AM
اخي حسن لوتكرمتم نريد نصيحتكم...


بحكم انك قد صنعت الكثير من الاكسبيرتات وقرأت الكثير من الفكر والموضيع للاعضاء ...ماهي افضل الاستراتيجيات التي مرت عليك تحت هذا البند-هيدج مضاعفات تعزيز تبريد و عقود



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



ياريت تدلنا على افضل ما تم التوصل اليه في هذا الموضوع؟

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

aut
11-06-2019, 02:47 AM
السلام عليكم

بعد اذنك اخى حسن سؤال ومساعده بسيطه

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

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

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




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



input double Lots = 0.01;
input double StopL = 50;
input double TakeP = 50;
input int MagicNumber = 321;



double SL,TP,Lots;
double point;
int Q,digits;









//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if(_Digits==5||_Digits==3)Q=10;else Q=1;
if(_Digits<4){point=0.01;digits=2;}else{point=0.0001;digits=4 ;}
return(INIT_SUCCEEDED);
}








//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{

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



//--------------------Buy Order
{
if(StopL!=0){SL=Ask-StopL*point;}else SL=0;
if(TakeP!=0){TP=Ask+TakeP*point;}else TP=0;
int BuyStopOrder=OrderSend(Symbol(),OP_BUYSTOP,Lots,As k,3*Q,SL,TP,"",MagicNumber,0,Blue);



if(StopL!=0){SL=Ask-StopL*point;}else SL=0;
if(TakeP!=0){TP=Ask+TakeP*point;}else TP=0;
int BuyLimitOrder=OrderSend(Symbol(),OP_BUYLIMIT,Lots, Ask,3*Q,SL,TP,"",MagicNumber,0,Blue);



}




//--------------------Sell Order
{
if(StopL!=0){SL=Bid+StopL*point;}else SL=0;
if(TakeP!=0){TP=Bid-TakeP*point;}else TP=0;
int SellStopOrder=OrderSend(Symbol(),OP_SELLSTOP,Lots, Bid,3*Q,SL,TP,"",MagicNumber,0,Red);


if(StopL!=0){SL=Bid+StopL*point;}else SL=0;
if(TakeP!=0){TP=Bid-TakeP*point;}else TP=0;
int SellLimitOrder=OrderSend(Symbol(),OP_SELLLIMIT,Lot s,Bid,3*Q,SL,TP,"",MagicNumber,0,Red);



}
}





double Closed(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
pt=OrderProfit(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
tp=OrderTakeProfit();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="Profit")return(pt);
else if(info=="Type")return(ty);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
else if(info=="TP")return(tp);
}
}
}
return(0);
}

احمد
11-06-2019, 11:38 AM
السلام عليكم ورحمة الله وبركاته
اخي حسن بارك الله فيك
انا بحاجة دالة تجمع لي سعر افتتاح صفقات البيع المفعلة
وأخرى تجمع سعر افتتاح صفقات الشراء المفعله
مع الشكر الجزيل لك

Abdullah Mohammed
12-06-2019, 12:28 AM
اخي حسن اريد دالة تقوم بعمل بحث ومقارنة داخل الشمعة الاسبوعية ومن ثم تقوم بايجاد اطول شمعة طبع ستكون من نوع شموع دقيقة ثم يعطيها الرقم واحد...وهكذا مع كل شمعة اسبوعية..

kira-h
12-06-2019, 12:45 AM
السلام عليكم ورحمة الله وبركاته
اخي حسن بارك الله فيك
انا بحاجة دالة تجمع لي سعر افتتاح صفقات البيع المفعلة
وأخرى تجمع سعر افتتاح صفقات الشراء المفعله
مع الشكر الجزيل لك
وعليكم السلام
دالة جمع اسعار الفتح للصفقات المفعلة بدلالة النوع كالتالي:


double TotalPrices(int type)
{
double opp=0;
for(int i=0;i<OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ot=OrderType();
double op=OrderOpenPrice();
if(sy==Symbol()&&mn==MagicNo&&ot==type)
{
opp+=op;
}
}
return(opp);
}


مثلا لجمع اسعار الفتح لصفقات الشراء سيكون كالتالي:
TotalPrices(OP_BUY);

aut
12-06-2019, 02:48 AM
بعد اذنك اخى حسن



السلام عليكم

بعد اذنك اخى حسن سؤال ومساعده بسيطه

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

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

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




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



input double Lots = 0.01;
input double StopL = 50;
input double TakeP = 50;
input int MagicNumber = 321;



double SL,TP,Lots;
double point;
int Q,digits;









//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if(_Digits==5||_Digits==3)Q=10;else Q=1;
if(_Digits<4){point=0.01;digits=2;}else{point=0.0001;digits=4 ;}
return(INIT_SUCCEEDED);
}








//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{

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



//--------------------Buy Order
{
if(StopL!=0){SL=Ask-StopL*point;}else SL=0;
if(TakeP!=0){TP=Ask+TakeP*point;}else TP=0;
int BuyStopOrder=OrderSend(Symbol(),OP_BUYSTOP,Lots,As k,3*Q,SL,TP,"",MagicNumber,0,Blue);



if(StopL!=0){SL=Ask-StopL*point;}else SL=0;
if(TakeP!=0){TP=Ask+TakeP*point;}else TP=0;
int BuyLimitOrder=OrderSend(Symbol(),OP_BUYLIMIT,Lots, Ask,3*Q,SL,TP,"",MagicNumber,0,Blue);



}




//--------------------Sell Order
{
if(StopL!=0){SL=Bid+StopL*point;}else SL=0;
if(TakeP!=0){TP=Bid-TakeP*point;}else TP=0;
int SellStopOrder=OrderSend(Symbol(),OP_SELLSTOP,Lots, Bid,3*Q,SL,TP,"",MagicNumber,0,Red);


if(StopL!=0){SL=Bid+StopL*point;}else SL=0;
if(TakeP!=0){TP=Bid-TakeP*point;}else TP=0;
int SellLimitOrder=OrderSend(Symbol(),OP_SELLLIMIT,Lot s,Bid,3*Q,SL,TP,"",MagicNumber,0,Red);



}
}





double Closed(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
pt=OrderProfit(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
tp=OrderTakeProfit();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="Profit")return(pt);
else if(info=="Type")return(ty);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
else if(info=="TP")return(tp);
}
}
}
return(0);
}

kira-h
12-06-2019, 07:15 AM
السلام عليكم

بعد اذنك اخى حسن سؤال ومساعده بسيطه

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

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

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




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



input double Lots = 0.01;
input double StopL = 50;
input double TakeP = 50;
input int MagicNumber = 321;



double SL,TP,Lots;
double point;
int Q,digits;









//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if(_Digits==5||_Digits==3)Q=10;else Q=1;
if(_Digits<4){point=0.01;digits=2;}else{point=0.0001;digits=4 ;}
return(INIT_SUCCEEDED);
}








//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{

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



//--------------------Buy Order
{
if(StopL!=0){SL=Ask-StopL*point;}else SL=0;
if(TakeP!=0){TP=Ask+TakeP*point;}else TP=0;
int BuyStopOrder=OrderSend(Symbol(),OP_BUYSTOP,Lots,As k,3*Q,SL,TP,"",MagicNumber,0,Blue);



if(StopL!=0){SL=Ask-StopL*point;}else SL=0;
if(TakeP!=0){TP=Ask+TakeP*point;}else TP=0;
int BuyLimitOrder=OrderSend(Symbol(),OP_BUYLIMIT,Lots, Ask,3*Q,SL,TP,"",MagicNumber,0,Blue);



}




//--------------------Sell Order
{
if(StopL!=0){SL=Bid+StopL*point;}else SL=0;
if(TakeP!=0){TP=Bid-TakeP*point;}else TP=0;
int SellStopOrder=OrderSend(Symbol(),OP_SELLSTOP,Lots, Bid,3*Q,SL,TP,"",MagicNumber,0,Red);


if(StopL!=0){SL=Bid+StopL*point;}else SL=0;
if(TakeP!=0){TP=Bid-TakeP*point;}else TP=0;
int SellLimitOrder=OrderSend(Symbol(),OP_SELLLIMIT,Lot s,Bid,3*Q,SL,TP,"",MagicNumber,0,Red);



}
}





double Closed(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
pt=OrderProfit(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
tp=OrderTakeProfit();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="Profit")return(pt);
else if(info=="Type")return(ty);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
else if(info=="TP")return(tp);
}
}
}
return(0);
}




وعليكم السلام
ستقارن توقيت اغلاق الصفقة مع توقيت افتتاح الشمعة الحالية اذا كان اكبر نفذ امر معلق واذا العكس لا ينفذ

Abdullah Mohammed
13-06-2019, 09:41 PM
اخي حسن اريد دالة تقوم بعمل بحث ومقارنة داخل الشمعة الاسبوعية ومن ثم تقوم بايجاد اطول شمعة 5 دقائق ثم يعطيها الرقم واحد...وهكذا مع كل شمعة اسبوعية..

kira-h
14-06-2019, 01:03 AM
اخي حسن اريد دالة تقوم بعمل بحث ومقارنة داخل الشمعة الاسبوعية ومن ثم تقوم بايجاد اطول شمعة 5 دقائق ثم يعطيها الرقم واحد...وهكذا مع كل شمعة اسبوعية..


بحث ومقارنة عن ماذا؟
ماذا تعني بـ "أطول شمعة"؟ ولماذا الرقم "1" ؟!

aut
14-06-2019, 05:55 AM
دالة مضاعافات المصفوفه اللى فى الرابط ده https://www.fxprg.com/vb/showthread.php?t=31456&p=844598&viewfull=1#post844598


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



Lots_1=0.1,
Lots_2=0.14,
Lots_3=0.18,
Lots_4=0.22,
Lots_5=0.26,
Lots_6=0.33,
Lots_7=0.44,
Lots_8=0.58,
Lots_9=0.78,
Lots_10=1.04,
Lots_11=1.38,
Lots_12=1.45,
Lots_13=1.53,
Lots_14=1.64,
Lots_15=1.78,
Lots_16=2.04,
Lots_17=2.38,
Lots_18=2.45,
Lots_19=2.53,
Lots_20=2.64;



ياريت اذا فى تعديل مطلوب او ايه الحل حتى يعمل بشكل صحيح ؟

kira-h
14-06-2019, 04:43 PM
دالة مضاعافات المصفوفه اللى فى الرابط ده https://www.fxprg.com/vb/showthread.php?t=31456&p=844598&viewfull=1#post844598


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



Lots_1=0.1,
Lots_2=0.14,
Lots_3=0.18,
Lots_4=0.22,
Lots_5=0.26,
Lots_6=0.33,
Lots_7=0.44,
Lots_8=0.58,
Lots_9=0.78,
Lots_10=1.04,
Lots_11=1.38,
Lots_12=1.45,
Lots_13=1.53,
Lots_14=1.64,
Lots_15=1.78,
Lots_16=2.04,
Lots_17=2.38,
Lots_18=2.45,
Lots_19=2.53,
Lots_20=2.64;



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

Abdullah Mohammed
14-06-2019, 09:09 PM
بحث ومقارنة عن ماذا؟
ماذا تعني بـ "أطول شمعة"؟ ولماذا الرقم "1" ؟!

مثلا نحن عندما نفتح الشارت غلى الفريم الاسبوعي لنفترض ان هناك مائة شمعة اسبوعيه ...طبعا الشمعة الاسبوعية بداخلها الاف من شموع فريم 5 الدقائق..

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

الاسبوعي الاول ، وسستاخذ الرقم 2 بداخل الفريم الاسبوعي الثاني ، وهكذا الى نهاية اخر شمعة اسبوعية...

مشكور

kira-h
15-06-2019, 02:33 AM
مثلا نحن عندما نفتح الشارت غلى الفريم الاسبوعي لنفترض ان هناك مائة شمعة اسبوعيه ...طبعا الشمعة الاسبوعية بداخلها الاف من شموع فريم 5 الدقائق..

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

الاسبوعي الاول ، وسستاخذ الرقم 2 بداخل الفريم الاسبوعي الثاني ، وهكذا الى نهاية اخر شمعة اسبوعية...

مشكور

الدالة مع الشرح كالتالي:


double MaxV(int y)//دالة فرق شمعة الـ 5 دقائق بدلالة رقم الأسبوع
{
double vv=0;
for(int i=iBars(Symbol(),PERIOD_M5)-1;i>0;i--)//البحث بشموع الـ 5 دقائق
{
int b0=iBarShift(Symbol(),PERIOD_M5,iTime(Symbol(),PER IOD_W1,y),false),//رقم آخر شمعة 5 دقائق في الأسبوع
b1=iBarShift(Symbol(),PERIOD_M5,iTime(Symbol(),PER IOD_W1,y+1),false);//رقم أول شمعة 5 دقائق في الأسبوع
if(iTime(Symbol(),PERIOD_M5,i)<=iTime(Symbol(),PERIOD_M5,b0)
&&iTime(Symbol(),PERIOD_M5,i)>iTime(Symbol(),PERIOD_M5,b1))//شرط البحث ضمن توقيت أول وآخر شمعة بالاسبوع المحدد سلفا
{
double v=iHigh(Symbol(),PERIOD_M5,i)-iLow(Symbol(),PERIOD_M5,i);//فرق الهاي واللو لشمعة الـ 5 دقائق
if(v>vv){vv=v;}//البحث كل ماكان الفرق اكبر من الفرق السابق يتم حفظ الفرق الأخير
}
}
return(NormalizeDouble(vv/point,Digits));//نتيجة الفرق بالنقاط
}


فمثلا نتيجة الأسبوع السابق سيكون
MaxV(0);
والأسبوع قبل السابق سيكون
MaxV(1);
وهكذا...

aut
15-06-2019, 03:38 AM
ارفق الاكسبيرت للمراجعة


اتفضل اخى

فى علامات تعجب حالياً مش عارف ايه المطلوب حتى يتم اصلاحها


//+------------------------------------------------------------------+
//| Copyright 2019, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict


input int MaxTrades = 2;
input int Step = 250;
input double Lots = 0.01;
input int StopL = 50;
input int TakeP = 100;
input bool CloseAtNext=false;
input int MagicNumber = 321;


double f1,f2,s1,s2,ma,Macd1,Macd2,Macd3,Macd4,Macd5;
input double Lots_1=0.1,

Lots_2=0.15,
Lots_3=0.18,
Lots_4=0.22,
Lots_5=0.26,
Lots_6=0.33,
Lots_7=0.44,
Lots_8=0.58,
Lots_9=0.78,
Lots_10=1.04,
Lots_11=1.38,
Lots_12=1.45,
Lots_13=1.53,
Lots_14=1.64,
Lots_15=1.78,
Lots_16=2.04,
Lots_17=2.38,
Lots_18=2.45,
Lots_19=2.53,
Lots_20=2.64;



double SL,TP,NewLots;
double point;
int Q,digits;
datetime time=0;

string comment;




//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if(_Digits==5||_Digits==3)Q=10;else Q=1;
if(_Digits<4){point=0.01;digits=2;}else{point=0.0001;digits=4 ;}
return(INIT_SUCCEEDED);
}


//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
f1=iMA(Symbol(),0,15,0,0,0,1);//
ma=iMA(Symbol(),0,200,0,0,0,1);//

Macd1=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1 );
Macd2=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,2 );

//-------
if(CloseAtNext)
{
if(f1>ma)CloseDeleteOrders(OP_SELL);
if(f1<ma)CloseDeleteOrders(OP_BUY);
}


//-------



double chain[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20};

chain[1]=Lots_1;
chain[2]=Lots_2;
chain[3]=Lots_3;
chain[4]=Lots_4;
chain[5]=Lots_5;
chain[6]=Lots_6;
chain[7]=Lots_7;
chain[8]=Lots_8;
chain[9]=Lots_9;
chain[10]=Lots_10;
chain[11]=Lots_11;
chain[12]=Lots_12;
chain[13]=Lots_13;
chain[14]=Lots_14;
chain[15]=Lots_15;
chain[16]=Lots_16;
chain[17]=Lots_17;
chain[18]=Lots_18;
chain[19]=Lots_19;
chain[20]=Lots_20;


if(LastOrder("Profit")<0)
{
NewLots=chain[LEVEL()+1];
comment=DoubleToStr(LEVEL()+1,0);
}
if(Closed("Profit")>=0&&(HistoryOrders()==0||(HistoryOrders())))NewLots=Lo ts;
if(LastOrder("Profit")>=0){NewLots=Lots;comment="0";}

for(int i=1;i<=20;i++)

{
//--------------------Buy Order
if((TotalOrders(OP_BUY)!=MaxTrades*i&&f1>ma&&time!=Time[0])
||(TotalOrders(OP_BUY)==MaxTrades*i&&Ask<=LastPrice(OP_BUY)-Step*point))
{
if(StopL!=0){SL=Ask-StopL*point;}else SL=0;
if(TakeP!=0){TP=Ask+TakeP*point;}else TP=0;
int BuyOrder=OrderSend(Symbol(),OP_BUY,NewLots,Ask,3*Q ,SL,TP,"",MagicNumber,0,Blue);
if(BuyOrder>0)time=Time[0];
}

//--------------------Sell Order
if((TotalOrders(OP_SELL)!=MaxTrades*i&&f1<ma&&time!=Time[0])
||(TotalOrders(OP_SELL)==MaxTrades*i&&Bid>=LastPrice(OP_SELL)+Step*point))
{
if(StopL!=0){SL=Bid+StopL*point;}else SL=0;
if(TakeP!=0){TP=Bid-TakeP*point;}else TP=0;
int SellOrder=OrderSend(Symbol(),OP_SELL,NewLots,Bid,3 *Q,SL,TP,"",MagicNumber,0,Red);
if(SellOrder>0)time=Time[0];
}
}
}




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


int HistoryOrders(int type=-1)
{
int cnt=0;
for(int i =0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()&&(OrderType()==type||type==-1))
{
cnt++;
}
}
}
return(cnt);
}

double Closed(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
pt=OrderProfit(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
tp=OrderTakeProfit();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="Profit")return(pt);
else if(info=="Type")return(ty);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
else if(info=="TP")return(tp);
}
}
}
return(0);
}


double CurrentLots(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(),
ty=OrderType();
double lo=OrderLots();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
return(lo);
}
}
}
return(0);
}


void CloseDeleteOrders(int type)
{
bool select,close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
if(OrderType()==type)
{
if(OrderType()==OP_BUY)
{
close=OrderClose(OrderTicket(),OrderLots(),Normali zeDouble(Bid,Digits),5*Q);
}
if(OrderType()==OP_SELL)
{
close=OrderClose(OrderTicket(),OrderLots(),Normali zeDouble(Ask,Digits),5*Q);
}
if(OrderType()>OP_SELL)
{
close=OrderDelete(OrderTicket());
}
}
}
}


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



double LastOrder(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
pt=OrderProfit(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();
datetime om=OrderOpenTime(),
cm=OrderCloseTime();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
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=="CloseTime")return(cm);
else if(info=="Comment")return(mm);
}
}
}
return(0);
}



int LEVEL()
{
int c;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
comment=OrderComment();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
StringReplace(comment,"[sl]","");
c=StrToInteger(comment);
return(c);
}
}
return(c);
}

kira-h
15-06-2019, 05:38 PM
اتفضل اخى

فى علامات تعجب حالياً مش عارف ايه المطلوب حتى يتم اصلاحها



لكن يوجد شروط صفقات تبريد، في حين المضاعفات بناء على نتيجة آخر صفقة مغلقة !
عموما الصحيح كالتالي:


//+------------------------------------------------------------------+
//| Copyright 2019, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict




input int MaxTrades = 2;
input int Step = 250;
input double Lots = 0.01;
input int StopL = 50;
input int TakeP = 100;
input bool CloseAtNext=false;
input int MagicNumber = 321;




double f1,f2,s1,s2,ma,Macd1,Macd2,Macd3,Macd4,Macd5;
input double Lots_1=0.1,
Lots_2=0.15,
Lots_3=0.18,
Lots_4=0.22,
Lots_5=0.26,
Lots_6=0.33,
Lots_7=0.44,
Lots_8=0.58,
Lots_9=0.78,
Lots_10=1.04,
Lots_11=1.38,
Lots_12=1.45,
Lots_13=1.53,
Lots_14=1.64,
Lots_15=1.78,
Lots_16=2.04,
Lots_17=2.38,
Lots_18=2.45,
Lots_19=2.53,
Lots_20=2.64;






double SL,TP,NewLots;
double point;
int Q,digits;
datetime time=0;
double chain[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20,21};


string comment;








//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if(_Digits==5||_Digits==3)Q=10;else Q=1;
if(_Digits<4){point=0.01;digits=2;}else{point=0.0001;digits=4 ;}
return(INIT_SUCCEEDED);
}




//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
f1=iMA(Symbol(),0,15,0,0,0,1);//
ma=iMA(Symbol(),0,200,0,0,0,1);//

Macd1=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1 );
Macd2=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,2 );

//-------
if(CloseAtNext)
{
if(f1>ma)CloseDeleteOrders(OP_SELL);
if(f1<ma)CloseDeleteOrders(OP_BUY);
}
//-------
chain[1]=Lots_1;
chain[2]=Lots_2;
chain[3]=Lots_3;
chain[4]=Lots_4;
chain[5]=Lots_5;
chain[6]=Lots_6;
chain[7]=Lots_7;
chain[8]=Lots_8;
chain[9]=Lots_9;
chain[10]=Lots_10;
chain[11]=Lots_11;
chain[12]=Lots_12;
chain[13]=Lots_13;
chain[14]=Lots_14;
chain[15]=Lots_15;
chain[16]=Lots_16;
chain[17]=Lots_17;
chain[18]=Lots_18;
chain[19]=Lots_19;
chain[20]=Lots_20;



NewLots=Lots;
comment="0";

if(Closed("Profit")<0)
{
NewLots=chain[LEVEL()+1];
comment=DoubleToStr(LEVEL()+1,0);
}



for(int i=1;i<=20;i++)
{
//--------------------Buy Order
if((TotalOrders(OP_BUY)!=MaxTrades*i&&f1>ma&&time!=Time[0])
||(TotalOrders(OP_BUY)==MaxTrades*i&&Ask<=LastPrice(OP_BUY)-Step*point))
{
if(StopL!=0){SL=Ask-StopL*point;}else SL=0;
if(TakeP!=0){TP=Ask+TakeP*point;}else TP=0;
int BuyOrder=OrderSend(Symbol(),OP_BUY,NewLots,Ask,3*Q ,SL,TP,comment,MagicNumber,0,Blue);
if(BuyOrder>0)time=Time[0];
}

//--------------------Sell Order
if((TotalOrders(OP_SELL)!=MaxTrades*i&&f1<ma&&time!=Time[0])
||(TotalOrders(OP_SELL)==MaxTrades*i&&Bid>=LastPrice(OP_SELL)+Step*point))
{
if(StopL!=0){SL=Bid+StopL*point;}else SL=0;
if(TakeP!=0){TP=Bid-TakeP*point;}else TP=0;
int SellOrder=OrderSend(Symbol(),OP_SELL,NewLots,Bid,3 *Q,SL,TP,comment,MagicNumber,0,Red);
if(SellOrder>0)time=Time[0];
}
}
}

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




int HistoryOrders(int type=-1)
{
int cnt=0;
for(int i =0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()&&(OrderType()==type||type==-1))
{
cnt++;
}
}
}
return(cnt);
}

double Closed(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
pt=OrderProfit(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
tp=OrderTakeProfit();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="Profit")return(pt);
else if(info=="Type")return(ty);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
else if(info=="TP")return(tp);
}
}
}
return(0);
}




double CurrentLots(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(),
ty=OrderType();
double lo=OrderLots();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
return(lo);
}
}
}
return(0);
}




void CloseDeleteOrders(int type)
{
bool select,close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
if(OrderType()==type)
{
if(OrderType()==OP_BUY)
{
close=OrderClose(OrderTicket(),OrderLots(),Normali zeDouble(Bid,Digits),5*Q);
}
if(OrderType()==OP_SELL)
{
close=OrderClose(OrderTicket(),OrderLots(),Normali zeDouble(Ask,Digits),5*Q);
}
if(OrderType()>OP_SELL)
{
close=OrderDelete(OrderTicket());
}
}
}
}

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


int LEVEL()
{
int c=0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
comment=OrderComment();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
StringReplace(comment,"[started/gap]","");
StringReplace(comment,"[sl]","");
c=StrToInteger(comment);
return(c);
}
}
return(c);
}

aut
16-06-2019, 03:23 AM
لكن يوجد شروط صفقات تبريد، في حين المضاعفات بناء على نتيجة آخر صفقة مغلقة !
عموما الصحيح كالتالي:


//+------------------------------------------------------------------+
//| Copyright 2019, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict




input int MaxTrades = 2;
input int Step = 250;
input double Lots = 0.01;
input int StopL = 50;
input int TakeP = 100;
input bool CloseAtNext=false;
input int MagicNumber = 321;




double f1,f2,s1,s2,ma,Macd1,Macd2,Macd3,Macd4,Macd5;
input double Lots_1=0.1,
Lots_2=0.15,
Lots_3=0.18,
Lots_4=0.22,
Lots_5=0.26,
Lots_6=0.33,
Lots_7=0.44,
Lots_8=0.58,
Lots_9=0.78,
Lots_10=1.04,
Lots_11=1.38,
Lots_12=1.45,
Lots_13=1.53,
Lots_14=1.64,
Lots_15=1.78,
Lots_16=2.04,
Lots_17=2.38,
Lots_18=2.45,
Lots_19=2.53,
Lots_20=2.64;






double SL,TP,NewLots;
double point;
int Q,digits;
datetime time=0;
double chain[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20,21};


string comment;








//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if(_Digits==5||_Digits==3)Q=10;else Q=1;
if(_Digits<4){point=0.01;digits=2;}else{point=0.0001;digits=4 ;}
return(INIT_SUCCEEDED);
}




//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
f1=iMA(Symbol(),0,15,0,0,0,1);//
ma=iMA(Symbol(),0,200,0,0,0,1);//

Macd1=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1 );
Macd2=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,2 );

//-------
if(CloseAtNext)
{
if(f1>ma)CloseDeleteOrders(OP_SELL);
if(f1<ma)CloseDeleteOrders(OP_BUY);
}
//-------
chain[1]=Lots_1;
chain[2]=Lots_2;
chain[3]=Lots_3;
chain[4]=Lots_4;
chain[5]=Lots_5;
chain[6]=Lots_6;
chain[7]=Lots_7;
chain[8]=Lots_8;
chain[9]=Lots_9;
chain[10]=Lots_10;
chain[11]=Lots_11;
chain[12]=Lots_12;
chain[13]=Lots_13;
chain[14]=Lots_14;
chain[15]=Lots_15;
chain[16]=Lots_16;
chain[17]=Lots_17;
chain[18]=Lots_18;
chain[19]=Lots_19;
chain[20]=Lots_20;



NewLots=Lots;
comment="0";

if(Closed("Profit")<0)
{
NewLots=chain[LEVEL()+1];
comment=DoubleToStr(LEVEL()+1,0);
}



for(int i=1;i<=20;i++)
{
//--------------------Buy Order
if((TotalOrders(OP_BUY)!=MaxTrades*i&&f1>ma&&time!=Time[0])
||(TotalOrders(OP_BUY)==MaxTrades*i&&Ask<=LastPrice(OP_BUY)-Step*point))
{
if(StopL!=0){SL=Ask-StopL*point;}else SL=0;
if(TakeP!=0){TP=Ask+TakeP*point;}else TP=0;
int BuyOrder=OrderSend(Symbol(),OP_BUY,NewLots,Ask,3*Q ,SL,TP,comment,MagicNumber,0,Blue);
if(BuyOrder>0)time=Time[0];
}

//--------------------Sell Order
if((TotalOrders(OP_SELL)!=MaxTrades*i&&f1<ma&&time!=Time[0])
||(TotalOrders(OP_SELL)==MaxTrades*i&&Bid>=LastPrice(OP_SELL)+Step*point))
{
if(StopL!=0){SL=Bid+StopL*point;}else SL=0;
if(TakeP!=0){TP=Bid-TakeP*point;}else TP=0;
int SellOrder=OrderSend(Symbol(),OP_SELL,NewLots,Bid,3 *Q,SL,TP,comment,MagicNumber,0,Red);
if(SellOrder>0)time=Time[0];
}
}
}

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




int HistoryOrders(int type=-1)
{
int cnt=0;
for(int i =0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()&&(OrderType()==type||type==-1))
{
cnt++;
}
}
}
return(cnt);
}

double Closed(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
pt=OrderProfit(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
tp=OrderTakeProfit();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="Profit")return(pt);
else if(info=="Type")return(ty);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
else if(info=="TP")return(tp);
}
}
}
return(0);
}




double CurrentLots(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(),
ty=OrderType();
double lo=OrderLots();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
return(lo);
}
}
}
return(0);
}




void CloseDeleteOrders(int type)
{
bool select,close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
if(OrderType()==type)
{
if(OrderType()==OP_BUY)
{
close=OrderClose(OrderTicket(),OrderLots(),Normali zeDouble(Bid,Digits),5*Q);
}
if(OrderType()==OP_SELL)
{
close=OrderClose(OrderTicket(),OrderLots(),Normali zeDouble(Ask,Digits),5*Q);
}
if(OrderType()>OP_SELL)
{
close=OrderDelete(OrderTicket());
}
}
}
}

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


int LEVEL()
{
int c=0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
comment=OrderComment();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
StringReplace(comment,"[started/gap]","");
StringReplace(comment,"[sl]","");
c=StrToInteger(comment);
return(c);
}
}
return(c);
}





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

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

عايز ان يكون عندى اكتر من مجموعة لوتات زى دى مثلاً 5 مجموعات

المجموعه الاولى وهى دى


Lots_1=0.1,
Lots_2=0.15,
Lots_3=0.18,
Lots_4=0.22,
Lots_5=0.26,



المجموعة التانيه


Lots_6=0.5,
Lots_7=0.9,
Lots_8=1.18,
Lots_9=2.22,
Lots_10=3.26,


المجموعة الثالثه


Lots_11=5.1,
Lots_12=6.15,
Lots_13=7.18,
Lots_14=9.22,
Lots_15=10.26,


المجموعة الرابعه


Lots_16=12.1,
Lots_17=14.15,
Lots_18=16.18,
Lots_19=18.22,
Lots_20=20.26,




المجموعة الخامسه


Lots_21=0.1,
Lots_22=0.15,
Lots_23=0.18,
Lots_24=0.22,
Lots_25=0.26,



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

واذا انتقل الى اى مجموعة تاليه وخسر 5 صفقات متتاليه سوف يبداء من اللوت الاول للمجموعة الاولى مره اخرى

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

aut
16-06-2019, 08:28 AM
بعد اذنك تعديل على المشاركه السابقه

التعديل باللون الاحمر


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

واذا انتقل الى اى مجموعة تاليه وخسر 5 صفقات متتاليه سوف يبداء من اللوت الاول للمجموعة الاولى مره اخرى

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

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

Sherry
16-06-2019, 10:10 PM
السلام عليكم و رحمة الله و بركاته

اتمنى لجميع الاعضاء الصحه و العافيه

ما هي دالة اغلاق جزء من العقد

مثلا اذا كان عندي صفقة بيع 0.6 لوت

و صفقة شراء 0.9 لوت

و الشراء محقق ربح

المطلوب اغلاق الفرق بينهم اي اغلاق 0.3 لوت من صفقة الشراء

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

kira-h
17-06-2019, 03:01 AM
السلام عليكم و رحمة الله و بركاته

اتمنى لجميع الاعضاء الصحه و العافيه

ما هي دالة اغلاق جزء من العقد

مثلا اذا كان عندي صفقة بيع 0.6 لوت

و صفقة شراء 0.9 لوت

و الشراء محقق ربح

المطلوب اغلاق الفرق بينهم اي اغلاق 0.3 لوت من صفقة الشراء

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


input double PartialProfit=20;


void OnTick()
{
if(PartialProfit>0)PartialClose();
}


void PartialClose()
{
bool close;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
bool select=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
datetime ot=OrderOpenTime();
double op=OrderOpenPrice(),
ol=OrderLots(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
int tk=OrderTicket(),
ty=OrderType(),
mn=OrderMagicNumber(),
closecount=OrderCloseCount(op,ot);
double pc=NormalizeDouble(ol/2,2);//نصف العقد
if(sy==Symbol()&&mn==MagicNo)
{
if(ty==OP_BUY)
{
if(Bid>=op+PartialProfit*point&&closecount<1)
{
close=OrderClose(tk,pc,Bid,30);
}
}
if(ty==OP_SELL)
{
if(Ask<=op-PartialProfit*point&&closecount<1)
{
close=OrderClose(tk,pc,Ask,30);
}
}
}
}
}


ودالة لحساب عدد الاغلاقات الجزئية للعقد الأساسي كالتالي:


int OrderCloseCount(double openprice,datetime opentime)
{
int closecount=0;
int i=0;
while(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
i++;
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderOpenPrice()==openprice&&OrderOpenTime()==opentime)closecount++;
}
}
return(closecount);
}


بحيث :
PartialProfit الربح الجزئي بالنقاط لاغلاق نصف العقد الأساسي

احمد
20-06-2019, 12:47 AM
السلام عليكم ورحمة الله وبركاته
سبق وأن وضعت لنا دالة لحساب أو معرفة آخر قمة لمؤشر الزقزاق بارك الله فيك
هل من الممكن دالة معرفة وقت وتاريخ آخر قمة لمؤشر الزقزاق
مع شكري واحترامي لك ولجميع الاعضاء

kira-h
20-06-2019, 08:26 AM
السلام عليكم ورحمة الله وبركاته
سبق وأن وضعت لنا دالة لحساب أو معرفة آخر قمة لمؤشر الزقزاق بارك الله فيك
هل من الممكن دالة معرفة وقت وتاريخ آخر قمة لمؤشر الزقزاق
مع شكري واحترامي لك ولجميع الاعضاء
وعليكم السلام
وإياك أخي الكريم
راجع المشاركة التالية ستجد الدالة الزمنية للزيجزاج
https://www.fxprg.com/vb/showthread.php?t=31457&page=121&p=881383&viewfull=1#post881383

احمد
20-06-2019, 10:55 PM
وعليكم السلام
وإياك أخي الكريم
راجع المشاركة التالية ستجد الدالة الزمنية للزيجزاج
https://www.fxprg.com/vb/showthread.php?t=31457&page=121&p=881383&viewfull=1#post881383
تسلم وبارك الله فيك

kira-h
21-06-2019, 01:08 AM
تسلم وبارك الله فيك
وإياك أخي الكريم

iForex
25-06-2019, 05:55 PM
أستاذ حسن

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

و شكرا جزيلا

مثال لفتح صفقة شراء





//--------------------Buy Order
if((((MaxTrades>0&&TotalOrders(OP_BUY)<MaxTrades)||MaxTrades==0)&&time!=Time[0]&&f1>s1&&f2<s2)
||(((MaxTrades>0&&TotalOrders(OP_BUY)<MaxTrades)||MaxTrades==0)&&time!=Time[0]&&Closed("Profit",OP_SELL)<0))
{
if(StopL!=0){SL=Ask-StopL*point;}else SL=0;
if(TakeP!=0){TP=Ask+TakeP*point;}else TP=0;
int BuyOrder=OrderSend(Symbol(),OP_BUY,NewLots,Ask,3*Q ,SL,TP,"",MagicNumber,0,Blue);
if(BuyOrder>0)time=Time[0];
}

kira-h
26-06-2019, 02:28 AM
أستاذ حسن

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

و شكرا جزيلا

مثال لفتح صفقة شراء





//--------------------Buy Order
if((((MaxTrades>0&&TotalOrders(OP_BUY)<MaxTrades)||MaxTrades==0)&&time!=Time[0]&&f1>s1&&f2<s2)
||(((MaxTrades>0&&TotalOrders(OP_BUY)<MaxTrades)||MaxTrades==0)&&time!=Time[0]&&Closed("Profit",OP_SELL)<0))
{
if(StopL!=0){SL=Ask-StopL*point;}else SL=0;
if(TakeP!=0){TP=Ask+TakeP*point;}else TP=0;
int BuyOrder=OrderSend(Symbol(),OP_BUY,NewLots,Ask,3*Q ,SL,TP,"",MagicNumber,0,Blue);
if(BuyOrder>0)time=Time[0];
}



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


void OnTick()
{
if((MaxTrades>0&&TotalOrders(OP_BUY)<MaxTrades)||MaxTrades==0)
{
if((time!=Time[0]&&f1>s1&&f2<s2)
||(Closed("Profit",OP_SELL)<0&&Closed("Time",OP_SELL)>Current("Time")))
{
if(StopL!=0){SL=Ask-StopL*point;}else SL=0;
if(TakeP!=0){TP=Ask+TakeP*point;}else TP=0;
int BuyOrder=OrderSend(Symbol(),OP_BUY,NewLots,Ask,3*Q ,SL,TP,"",MagicNumber,0,Blue);
if(BuyOrder>0)time=Time[0];
}
}
}

double Closed(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
pt=OrderProfit(),
sl=OrderStopLoss();
datetime tm=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNo)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="Profit")return(pt);
else if(info=="Type")return(ty);
else if(info=="Time")return(tm);
}
}
}
return(0);
}


double Current(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(),
ty=OrderType();
double lo=OrderLots(),
sl=OrderStopLoss();
datetime tm=OrderOpenTime();
if(sy==Symbol()&&mn==MagicNo)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="Type")return(ty);
else if(info=="Time")return(tm);
}
}
}
return(0);
}

sal_moh85
26-06-2019, 05:37 PM
سلام عليكم اخ حسن في مرفق موشر مبني على شموع هيكن اشي لي اربع تايم فريم حاولت اني اعرف قيمة السهم يلي بيظهر بس ما حسنت هاد الكود تبعي قلي وين غلطي عاوز من الموشر يفتح صفقه واحده فقط عند ظهور السهم
double Hsh(int ti ,int tr ,int shift) { double hsh=iCustom(Symbol(),ti,"TF Heiken Ashi Arrows",tr,shift); return(hsh); }
وشكرا

kira-h
27-06-2019, 12:20 AM
سلام عليكم اخ حسن في مرفق موشر مبني على شموع هيكن اشي لي اربع تايم فريم حاولت اني اعرف قيمة السهم يلي بيظهر بس ما حسنت هاد الكود تبعي قلي وين غلطي عاوز من الموشر يفتح صفقه واحده فقط عند ظهور السهم
double Hsh(int ti ,int tr ,int shift) { double hsh=iCustom(Symbol(),ti,"TF Heiken Ashi Arrows",tr,shift); return(hsh); }
وشكرا

وعليكم السلام
الدالة سليمة
وشروط ظهور السهم بالفريم الحالي كالتالي:


if(Hsh(0,0,1)!=EMPTY_VALUE&&Hsh(0,2,1)!=EMPTY_VALUE&&Hsh(0,4,1)!=EMPTY_VALUE&&Hsh(0,6,1)!=EMPTY_VALUE
&&(Hsh(0,0,2)==EMPTY_VALUE||Hsh(0,2,2)==EMPTY_VALUE| |Hsh(0,4,2)==EMPTY_VALUE||Hsh(0,6,2)==EMPTY_VALUE) )//UP ARROW

if(Hsh(0,1,1)!=EMPTY_VALUE&&Hsh(0,3,1)!=EMPTY_VALUE&&Hsh(0,5,1)!=EMPTY_VALUE&&Hsh(0,7,1)!=EMPTY_VALUE
&&(Hsh(0,1,2)==EMPTY_VALUE||Hsh(0,3,2)==EMPTY_VALUE| |Hsh(0,5,2)==EMPTY_VALUE||Hsh(0,7,2)==EMPTY_VALUE) )//DOWN ARROW

iForex
27-06-2019, 10:53 AM
السلام عليكم استاذ حسن

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

و شكرا جزيلا استاذ حسن

sal_moh85
27-06-2019, 02:21 PM
وعليكم السلام
الدالة سليمة
وشروط ظهور السهم بالفريم الحالي كالتالي:


if(Hsh(0,0,1)!=EMPTY_VALUE&&Hsh(0,2,1)!=EMPTY_VALUE&&Hsh(0,4,1)!=EMPTY_VALUE&&Hsh(0,6,1)!=EMPTY_VALUE
&&(Hsh(0,0,2)==EMPTY_VALUE||Hsh(0,2,2)==EMPTY_VALUE| |Hsh(0,4,2)==EMPTY_VALUE||Hsh(0,6,2)==EMPTY_VALUE) )//UP ARROW

if(Hsh(0,1,1)!=EMPTY_VALUE&&Hsh(0,3,1)!=EMPTY_VALUE&&Hsh(0,5,1)!=EMPTY_VALUE&&Hsh(0,7,1)!=EMPTY_VALUE
&&(Hsh(0,1,2)==EMPTY_VALUE||Hsh(0,3,2)==EMPTY_VALUE| |Hsh(0,5,2)==EMPTY_VALUE||Hsh(0,7,2)==EMPTY_VALUE) )//DOWN ARROW

مشكور اخ حسن لله يغطيك الصحه والعافيه

sosobom
27-06-2019, 02:29 PM
ممكن كود لمؤشر حتى يعمل في حساب معين فقط
يعني يتم وضع رقم الحساب في موشر إدا تم تغير الحساب لن يعمل موشر

sal_moh85
27-06-2019, 03:54 PM
سلام عليكم اخ حسن مشكور جدا على مساعدتك ولله انك انسان محترم جدا ومحترف
14624
استفسار بسيط عن موشر اatr الانحائات التي تحصل على موشر كيف تمثل برمجيا حاليا في نظر الى الموشر يمكنك ان ترى الموشر يرتفع وينخفض ماهو تمثيل برمجيا حولت انا اني قارن الشمعه 0 بي الشمعه 1 من قرائة الموشر بس ما عطاني نتيجه لانو الارقام متقاربه انت ترى في العين المجره يرتفع بس برمجيا يعطي فولز ما هو تمثيل البرمجي له وشكرا

صياد الجراح
27-06-2019, 05:42 PM
بسم الله الرحمن الرحيم

استاذ حسن .. تحية طيبة

لو سمحت عاوزصيغة الكود لجملة الشرطية التالية

اذا كان اغلاق الشمعة اكبر من نصف الفرق بين الهاى واللو (نصفها)
اذا كان اغلاق الشمعة اصغر من نصف الفرق بين الهاى واللو (نصفها)

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

sosobom
28-06-2019, 02:49 AM
Kira ممكن كود لمؤشر حتى يعمل في حساب معين فقط
يعني يتم وضع رقم الحساب في موشر إدا تم تغير الحساب لن يعمل موشر

صياد الجراح
28-06-2019, 03:09 AM
Kira ممكن كود لمؤشر حتى يعمل في حساب معين فقط
يعني يتم وضع رقم الحساب في موشر إدا تم تغير الحساب لن يعمل موشر

اتفضل اخى
ضع مكان كلمة نمبر رقم الحساب اللى عاوزه

(if(AccountNumber()==Number

او يمكن استخدام الكود التالى

(if (AccountNumber() != NNN
{
Print("Account number error");
return(0);}
مع استبدال NNN برقم الحساب المطلوب

تحياتى

kira-h
28-06-2019, 03:35 AM
Kira ممكن كود لمؤشر حتى يعمل في حساب معين فقط
يعني يتم وضع رقم الحساب في موشر إدا تم تغير الحساب لن يعمل موشر


اتفضل اخى
ضع مكان كلمة نمبر رقم الحساب اللى عاوزه

(if(AccountNumber()==Number

او يمكن استخدام الكود التالى

(if (AccountNumber() != NNN
{
Print("Account number error");
return(0);}
مع استبدال NNN برقم الحساب المطلوب

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

if(AccountNumber()!=Number)return(0);
بحيث Number رقم الحساب الذي بدونه لن يعمل البرنامج

iForex
29-06-2019, 02:13 AM
السلام عليكم استاذ حسن

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

و شكرا جزيلا استاذ حسن

أستاذ حسن كيرا

للتذكير فقط و جزاكم الله خيرا

kira-h
29-06-2019, 04:58 AM
بسم الله الرحمن الرحيم

استاذ حسن .. تحية طيبة

لو سمحت عاوزصيغة الكود لجملة الشرطية التالية

اذا كان اغلاق الشمعة اكبر من نصف الفرق بين الهاى واللو (نصفها)
اذا كان اغلاق الشمعة اصغر من نصف الفرق بين الهاى واللو (نصفها)

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

kira-h
29-06-2019, 05:02 AM
سلام عليكم اخ حسن مشكور جدا على مساعدتك ولله انك انسان محترم جدا ومحترف
14624
استفسار بسيط عن موشر اatr الانحائات التي تحصل على موشر كيف تمثل برمجيا حاليا في نظر الى الموشر يمكنك ان ترى الموشر يرتفع وينخفض ماهو تمثيل برمجيا حولت انا اني قارن الشمعه 0 بي الشمعه 1 من قرائة الموشر بس ما عطاني نتيجه لانو الارقام متقاربه انت ترى في العين المجره يرتفع بس برمجيا يعطي فولز ما هو تمثيل البرمجي له وشكرا

وعليكم السلام
والعفو اخي
ستقارن قيمة المؤشر عند الشمعة 1 مع الشمعة 2 ثم الشمعة 2 مع الشمعة 3
يعني مثلا شرط القمة سيكون قيمة المؤشر عند الشمعة 1 اقل من قيمته عند 2 و هذا الاخير اكبر من قيمته عند 3

kira-h
29-06-2019, 05:39 AM
السلام عليكم استاذ حسن

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

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

iForex
29-06-2019, 11:08 AM
وعليكم السلام
تم التصحيح بالنسخة المرفقة

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

صياد الجراح
29-06-2019, 08:12 PM
واياك
السؤال غير واضح
ما هو رقم شمعة الاغلاق ورقم شمعة الفرق بين الهاي واللو

رقم شمعة الاغلاق والفرق بين الهاى واللو نفسها ..
الشمعة رقم 1

sal_moh85
29-06-2019, 08:16 PM
وعليكم السلام
والعفو اخي
ستقارن قيمة المؤشر عند الشمعة 1 مع الشمعة 2 ثم الشمعة 2 مع الشمعة 3
يعني مثلا شرط القمة سيكون قيمة المؤشر عند الشمعة 1 اقل من قيمته عند 2 و هذا الاخير اكبر من قيمته عند 3
مشكور جدا اخ حسن قارنتون بس لا يوجد فائده من هذا الحل
لح اعطيك شو الفكره كامله واذا فيك تساعدني فيها
عم استخدام موشر atr لقياس تقلب العمله انا يدوين عم استخدمها بس لازم كون لاصق في شاشه بوضع صفقتين سيل ستوب وباي ستوب المسافه بين الصفقتان 20 نقطه لما يكون موشر atr متجه الى الاسفل هذا معنى لايوجد حركه قويه في السوق يعني بشتغل سكالبينغ الستوب لوز بوضعه 8 نقط وتك بروفت 22نقطه وتريلنغ ستوب لوز بحطه 11 نقطه هي اول خطوه بس لما شوف موشر atr عم يتجه الى اعلى يعني يوجد نشاط داخل السوق بعدل الستوب لوز بصير 16 نقطه وتك بروفت بحط 50 نقطه وتريلنغ ستوب لوز بوضع 22 نقطه نسبة الصفقات الرابحه 70 في ميه ان شاء لله يكون الشرح واضح واذا في اي معلومه ما توضحة لك اخبرني بها وشكرا جزيلا

kira-h
29-06-2019, 11:53 PM
مشكور جدا اخ حسن قارنتون بس لا يوجد فائده من هذا الحل
لح اعطيك شو الفكره كامله واذا فيك تساعدني فيها
عم استخدام موشر atr لقياس تقلب العمله انا يدوين عم استخدمها بس لازم كون لاصق في شاشه بوضع صفقتين سيل ستوب وباي ستوب المسافه بين الصفقتان 20 نقطه لما يكون موشر atr متجه الى الاسفل هذا معنى لايوجد حركه قويه في السوق يعني بشتغل سكالبينغ الستوب لوز بوضعه 8 نقط وتك بروفت 22نقطه وتريلنغ ستوب لوز بحطه 11 نقطه هي اول خطوه بس لما شوف موشر atr عم يتجه الى اعلى يعني يوجد نشاط داخل السوق بعدل الستوب لوز بصير 16 نقطه وتك بروفت بحط 50 نقطه وتريلنغ ستوب لوز بوضع 22 نقطه نسبة الصفقات الرابحه 70 في ميه ان شاء لله يكون الشرح واضح واذا في اي معلومه ما توضحة لك اخبرني بها وشكرا جزيلا
الحل المقترح هو لرصد القمة أو القاع للمؤشر
يعني برمجيا :


double atr1=iATR(Symbol(),0,14,1),
atr2=iATR(Symbol(),0,14,2),
atr3=iATR(Symbol(),0,14,3);

if(atr1>atr2&&atr2<=atr3)//Bottom Signal


أما إذا تريد فقط شرط الاتجاه ستقارن قيمة المؤشر عند الشمعة 1 مع الشمعة 2 فقط
يعني:

if(atr1>atr2)//UP Signal

sal_moh85
30-06-2019, 12:24 AM
الحل المقترح هو لرصد القمة أو القاع للمؤشر
يعني برمجيا :


double atr1=iATR(Symbol(),0,14,1),
atr2=iATR(Symbol(),0,14,2),
atr3=iATR(Symbol(),0,14,3);

if(atr1>atr2&&atr2<=atr3)//Bottom Signal


أما إذا تريد فقط شرط الاتجاه ستقارن قيمة المؤشر عند الشمعة 1 مع الشمعة 2 فقط
يعني:

if(atr1>atr2)//UP Signal
تمام مشكور اخ حسن لح جربها وخبرك شو اخير ما توصلت له

kira-h
30-06-2019, 04:38 AM
تمام مشكور اخ حسن لح جربها وخبرك شو اخير ما توصلت له
بالتوفيق إن شاء الله

sal_moh85
01-07-2019, 06:34 PM
الحل المقترح هو لرصد القمة أو القاع للمؤشر
يعني برمجيا :


double atr1=iATR(Symbol(),0,14,1),
atr2=iATR(Symbol(),0,14,2),
atr3=iATR(Symbol(),0,14,3);

if(atr1>atr2&&atr2<=atr3)//Bottom Signal


أما إذا تريد فقط شرط الاتجاه ستقارن قيمة المؤشر عند الشمعة 1 مع الشمعة 2 فقط
يعني:

if(atr1>atr2)//UP Signal
سلام عليكم اخ حسن حاليا يوجد تطوير جديد واصبح اصعب بي نسبه لي
التطوير هو قياس حجم الشمعه من هاي الى لو شمعه 0و شمعه 1 والشمعه 2و شمعه3 ومقارنتها نتائج مع موشر ATR عند شمعه 0 و 1و2و3
يعني شمعة 1 يقاس حجم الشمعه ويقارن مع موشر ATR على شمعه 1 الان اصبح لدينا خياران اما 1rangاكبر من 1atr او 1rang اصغر من ATR1
طبعا مع اربعة شموع اصبح لدينا 16 مقارنه
تفصيل 16 مقارنه 8 مقارنات لي الاتجاه الضعيف 8 مقارنات لي الاتجاه القوي حاليا انا شلون بدي اعرف هل مقارنات ان شاء لله تكون وصلتك المعلومه صح وشكرا

احمد
03-07-2019, 01:23 AM
السلام عليكم ورحمة الله
اخي حسن انا بحاجة لمعرفة سعر مستويات الفايبوناتشي غير o وغير 100 فهي مرفقه في اهم الدوال وواضحة
انا بحاجة متغير يحمل سعر خط الخمسين مثلا
مع شكري وتقديري لك

kira-h
03-07-2019, 02:03 AM
السلام عليكم ورحمة الله
اخي حسن انا بحاجة لمعرفة سعر مستويات الفايبوناتشي غير o وغير 100 فهي مرفقه في اهم الدوال وواضحة
انا بحاجة متغير يحمل سعر خط الخمسين مثلا
مع شكري وتقديري لك
وعليكم السلام

لا توجد وظيفة مباشرة لمعرفة أسعار مستويات الفيبوناتشي دون المستويين 0 و 100
ولكن إذا عرفت مبدأ عمل الفيبوناتشي فسوف تجد أن الأمر سهل رياضيا
مثال :




double f161,//لنتعرف على قيمة الفيبو 161.8
distance=MathAbs(f0-f100);//المسافة بين الفيبو 0 و الفيبو 100

if(f100<f0)f161=f0-(distance*(161.8/100));//قيمة فيبو 161.8 عند رسم الفيبو الهابط

if(f100>f0)f161=f0+(distance*(161.8/100));//قيمة فيبو 161.8 عند رسم الفيبو الصاعد

احمد
03-07-2019, 01:30 PM
وعليكم السلام

لا توجد وظيفة مباشرة لمعرفة أسعار مستويات الفيبوناتشي دون المستويين 0 و 100
ولكن إذا عرفت مبدأ عمل الفيبوناتشي فسوف تجد أن الأمر سهل رياضيا
مثال :




double f161,//لنتعرف على قيمة الفيبو 161.8
distance=MathAbs(f0-f100);//المسافة بين الفيبو 0 و الفيبو 100

if(f100<f0)f161=f0-(distance*(161.8/100));//قيمة فيبو 161.8 عند رسم الفيبو الهابط

if(Fi100>Fi0)f161=f0+(distance*(161.8/100));//قيمة فيبو 161.8 عند رسم الفيبو الصاعد





الله يعطيك العافيه

kira-h
03-07-2019, 06:50 PM
الله يعطيك العافيه
وإياك أخي الكريم

sal_moh85
04-07-2019, 11:45 PM
سلام عليكم اخ حسن حاليا يوجد تطوير جديد واصبح اصعب بي نسبه لي
التطوير هو قياس حجم الشمعه من هاي الى لو شمعه 0و شمعه 1 والشمعه 2و شمعه3 ومقارنتها نتائج مع موشر ATR عند شمعه 0 و 1و2و3
يعني شمعة 1 يقاس حجم الشمعه ويقارن مع موشر ATR على شمعه 1 الان اصبح لدينا خياران اما 1rangاكبر من 1atr او 1rang اصغر من ATR1
طبعا مع اربعة شموع اصبح لدينا 16 مقارنه
تفصيل 16 مقارنه 8 مقارنات لي الاتجاه الضعيف 8 مقارنات لي الاتجاه القوي حاليا انا شلون بدي اعرف هل مقارنات ان شاء لله تكون وصلتك المعلومه صح وشكرا
سلام عليكم اخ حسن للتذكره

kira-h
05-07-2019, 01:21 AM
سلام عليكم اخ حسن حاليا يوجد تطوير جديد واصبح اصعب بي نسبه لي
التطوير هو قياس حجم الشمعه من هاي الى لو شمعه 0و شمعه 1 والشمعه 2و شمعه3 ومقارنتها نتائج مع موشر ATR عند شمعه 0 و 1و2و3
يعني شمعة 1 يقاس حجم الشمعه ويقارن مع موشر ATR على شمعه 1 الان اصبح لدينا خياران اما 1rangاكبر من 1atr او 1rang اصغر من ATR1
طبعا مع اربعة شموع اصبح لدينا 16 مقارنه
تفصيل 16 مقارنه 8 مقارنات لي الاتجاه الضعيف 8 مقارنات لي الاتجاه القوي حاليا انا شلون بدي اعرف هل مقارنات ان شاء لله تكون وصلتك المعلومه صح وشكرا
وعليكم السلام
دالة مؤشر الـ ATR بدلالة رقم الشمعة كالتالي:


double atr(int shift)
{
return(iATR(Symbol(),0,14,shift));
}

بحيث shift رقم الشمعة
مثلا قيمة الـ atr بالشمعة 0 هي
atr(0);
وبالتالي يمكنك عمل المقارنات كما تشاء

sal_moh85
05-07-2019, 04:26 PM
وعليكم السلام
دالة مؤشر الـ ATR بدلالة رقم الشمعة كالتالي:


double atr(int shift)
{
return(iATR(Symbol(),0,14,shift));
}

بحيث shift رقم الشمعة
مثلا قيمة الـ atr بالشمعة 0 هي
atr(0);
وبالتالي يمكنك عمل المقارنات كما تشاء
تمام اخ حسن مشكور جدا بس موهاد سوالي

kira-h
05-07-2019, 06:56 PM
تمام اخ حسن مشكور جدا بس موهاد سوالي
راجع سؤالك جيدا ستد ان الجواب سليم
انت تريد عمل المقارنات بين الشموع ومؤشر atr
فكتبت لك طريقة معرفة قيمة المؤشر بدلالة رقم الشمعة وبالتالي يمكنك عمل المقارنات مثل المقارنات السابقة بين الشموع

sal_moh85
06-07-2019, 12:06 AM
راجع سؤالك جيدا ستد ان الجواب سليم
انت تريد عمل المقارنات بين الشموع ومؤشر atr
فكتبت لك طريقة معرفة قيمة المؤشر بدلالة رقم الشمعة وبالتالي يمكنك عمل المقارنات مثل المقارنات السابقة بين الشموع
اول مشكور جدا على مساعدتك في ايجاد الحلول البرمجيه ومساعدة جميع الاعضاء وراجعة سوالي حاليا في هذا الكود فقط يعطيني قيمة ATR في اي شمعه اريدها
انا اريد قياس الشمعه من الهاي الى لو ومقارنتها بي قرائة ATR
مثال هاي 1000 ولو 800 تصبح المعادله 1000 -800=200 على فرض هذه الشمعه 1 وقرائة ATR على الشمعه 1 = 250 في هذه الحاله الرنج وهو هاي -لو اصغر من قرائة ATR
حاليا ان الحل يلي حسنت ساوي ما بعرف اذا صح ولا خطاء

int atr() { bool Trend; for(int i=0;i<=3;i++) { double hi=iHigh(NULL,0,i); double lo=iLow(NULL,0,i); double ar=iATR(NULL,0,ATR,i); double ran=hi-lo; if(ran>ar) { Trend=true; } if(ran<ar) { Trend=false; } } return(Trend);

kira-h
06-07-2019, 04:18 AM
اول مشكور جدا على مساعدتك في ايجاد الحلول البرمجيه ومساعدة جميع الاعضاء وراجعة سوالي حاليا في هذا الكود فقط يعطيني قيمة ATR في اي شمعه اريدها
انا اريد قياس الشمعه من الهاي الى لو ومقارنتها بي قرائة ATR
مثال هاي 1000 ولو 800 تصبح المعادله 1000 -800=200 على فرض هذه الشمعه 1 وقرائة ATR على الشمعه 1 = 250 في هذه الحاله الرنج وهو هاي -لو اصغر من قرائة ATR
حاليا ان الحل يلي حسنت ساوي ما بعرف اذا صح ولا خطاء

int atr() { bool Trend; for(int i=0;i<=3;i++) { double hi=iHigh(NULL,0,i); double lo=iLow(NULL,0,i); double ar=iATR(NULL,0,ATR,i); double ran=hi-lo; if(ran>ar) { Trend=true; } if(ran<ar) { Trend=false; } } return(Trend);


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


bool atr(int i)
{
bool Trend;
double ar=iATR(NULL,0,ATR,i);
double ran=iHigh(NULL,0,i)-iLow(NULL,0,i);
if(ran>ar)Trend=true;
if(ran<ar)Trend=false;
return(Trend);
}

sal_moh85
06-07-2019, 04:35 PM
الصحيح كالتالي بحيث سيكون الناتج مباشرة تحقق الشرط من عدمه حسب رقم الشمعة


bool atr(int i)
{
bool Trend;
double ar=iATR(NULL,0,ATR,i);
double ran=iHigh(NULL,0,i)-iLow(NULL,0,i);
if(ran>ar)Trend=true;
if(ran<ar)Trend=false;
return(Trend);
}

مشكور اخ حسن

kira-h
06-07-2019, 09:24 PM
مشكور اخ حسن
بالتوفيق إن شاء الله

absafir
07-07-2019, 01:31 PM
السلام عليكم جميعاً
لو تكرمتم هل ممكن وضع كلمة مرور لكود تم برمجته بواسطة mql 4 ؟
وهل هناك مشكلة في حال كان الكود طويل بعض الشئ (265 سطر واكثر) وأقصد هنا هل سيكون هناك تأخير في تنفيذ الاوامر قد تسبب ابتعاد السوق عن لحظة تطابق احد الشروط في الكود التي تطلب وجود هذا السعر في هذه اللحظة؟
لكم كل الشكر

kira-h
07-07-2019, 10:42 PM
السلام عليكم جميعاً
لو تكرمتم هل ممكن وضع كلمة مرور لكود تم برمجته بواسطة mql 4 ؟
وهل هناك مشكلة في حال كان الكود طويل بعض الشئ (265 سطر واكثر) وأقصد هنا هل سيكون هناك تأخير في تنفيذ الاوامر قد تسبب ابتعاد السوق عن لحظة تطابق احد الشروط في الكود التي تطلب وجود هذا السعر في هذه اللحظة؟
لكم كل الشكر
وعليكم السلام
مثال لعمل باسوورد يكون الشرط عند بداية الدالة الرئسيسة OnTick


input int password=0;


void OnTick()
{
if(password!=1111)return;
}

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

absafir
08-07-2019, 12:01 AM
جزاك الله كل خير
لكن اخي بالنسبة للباسوورد انا اقصد حماية الكود البرمجي (فتحه ونسخه او التعديل عليه) فهل هذا ممكن ؟ وكيف ؟
ومعذرة لم اوضح هذا في المرة السابقة

kira-h
08-07-2019, 04:00 AM
جزاك الله كل خير
لكن اخي بالنسبة للباسوورد انا اقصد حماية الكود البرمجي (فتحه ونسخه او التعديل عليه) فهل هذا ممكن ؟ وكيف ؟
ومعذرة لم اوضح هذا في المرة السابقة
اقصى حماية هي بربط الاكسبيرت مع ملف dll باستخدام لغة برمجية اخرى،،،
لكن عموما نسخة الـ ex4 الحالية كافية كحماية فلم يتم كسرها بعد

absafir
08-07-2019, 11:13 AM
اقصى حماية هي بربط الاكسبيرت مع ملف dll باستخدام لغة برمجية اخرى،،،
لكن عموما نسخة الـ ex4 الحالية كافية كحماية فلم يتم كسرها بعد
دمت سالماً ولك الشكر

absafir
08-07-2019, 12:07 PM
السلام عليكم
لدي هذا الكود:
if((OrderSelect(id1,SELECT_BY_TICKET,MODE_TRADES)= =true)//اختبار وجود الصفقة الاولى بالسوق
&&(OrderSelect(id2,SELECT_BY_TICKET,MODE_TRADES)==tr ue)//اختبار وجود الصفقة الثانية بالسوق

{
bool res21=OrderModify(id1,0,0,yeni_tp1,Blue);// اسناد اخذ الربح الى الصفقة الاولى
bool res22=OrderModify(id2,0,0,yeni_tp1,Blue);// اسناد اخذ الربح الى الصفقة الثانية

Alert("تم تعديل ارباح اول صفقتين دخلتا السوق بنجاح");
}
else
Print("OrderSelect failed error code is",GetLastError());//لمعالجة الخطأ

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

bahoma31
08-07-2019, 04:43 PM
a=1.1200;//على سبيل المثالb=1.1300;//على سبيل المثال


double distance = MathAbs(a-b);

limitedUP= (distance*20)+b;
limitedDN= a-(distance*4);
double down=limitedDN;
while(limitedDN <= limitedUP)

{





limitedDN+=distance;
Hline("brahim4",c,clrRed,2);




}





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

kira-h
08-07-2019, 11:52 PM
السلام عليكم
لدي هذا الكود:
if((OrderSelect(id1,SELECT_BY_TICKET,MODE_TRADES)= =true)//اختبار وجود الصفقة الاولى بالسوق
&&(OrderSelect(id2,SELECT_BY_TICKET,MODE_TRADES)==tr ue)//اختبار وجود الصفقة الثانية بالسوق

{
bool res21=OrderModify(id1,0,0,yeni_tp1,Blue);// اسناد اخذ الربح الى الصفقة الاولى
bool res22=OrderModify(id2,0,0,yeni_tp1,Blue);// اسناد اخذ الربح الى الصفقة الثانية

Alert("تم تعديل ارباح اول صفقتين دخلتا السوق بنجاح");
}
else
Print("OrderSelect failed error code is",GetLastError());//لمعالجة الخطأ

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

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


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);
}


ثم تضع الشرط قبل دالة فتح الصفقة
مثلا شرط عدم وجود صفقة بيع مفعلة إذا تحقث يتم معالجة بقية شروط فتح الصفقة


if(Orderscnt(OP_SELL)==0)
{
/// هنا تضع بقية الشروط ودالة فتح الصفقة
}

kira-h
09-07-2019, 12:03 AM
a=1.1200;//على سبيل المثالb=1.1300;//على سبيل المثال


double distance = MathAbs(a-b);

limitedUP= (distance*20)+b;
limitedDN= a-(distance*4);
double down=limitedDN;
while(limitedDN <= limitedUP)

{





limitedDN+=distance;
Hline("brahim4",c,clrRed,2);




}





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



لنفترض لدينا 3 دعوم s1=2 ; s2=4 ; s3=9
و 3 مقاومات r1=20 ; r2=25 ; r3=31
إذا تريد اقرب دعم معناه استخراج أكبر قيمة بالدعوم وبالتالي نستخدم الوظيفة MathMax والتي تعود بأعلى قيمة للقيمتين المدخلتين بالوظيفة نفسها
حسب المثال سيكون اعلى قيمة للدعوم كالتالي:


double s,s1=2,s2=4,s3=9;
s=MathMax(s1,MathMax(s2,s3));

ستكون النتيجة s=9

نفس الشيء بالمقاومات اقرب قيمة معناه أقل قيمة للمقاومات وبالتالي سنستخدم الوظيفة MathMin والتي تعود بأقل قيمة للقيمتين المدخلتين بالوظيفة نفسها
حسب المثال سيكون أقل قيمة للمقاومات كالتالي:


double r,r1=20,r2=25,r3=31;
r=MathMin(r1,MathMin(r2,r3));

ستكون النتيجة r=20

mahmoud1111
11-07-2019, 11:36 AM
السلام عليكم
ارغب بمعرفة الفرق بين دالة close ودالة i close
شكرا لكم

kira-h
11-07-2019, 02:32 PM
السلام عليكم
ارغب بمعرفة الفرق بين دالة close ودالة i close
شكرا لكم
وعليكم السلام
الفرق واضح من خلال مدخلاته
فـ close تعمل تلقائيا على الزوج والفريم الحاليين، به مدخل وحيد تحدد فيه فقط رقم الشمعة
أما iClose به 3 مدخلات، الأول تحدد فيه اسم الزوج، والثاني تحدد فيه الفريم، والاخير رقم الشمعة
ويمكنك جعل iClose تلقائية على الزوج والفريم الحاليين بحيث تجعل المدخل ()Symbol يعني اسم الزوج الحالي، والمدخل الثاني 0 أو PERIOD_CURRENT يعني الفريم الحالي
أمثلة :


Close[0]//اغلاق الشمعة الحالية بالزوج والفريم الحاليين
iClose("EURUSD",PERIOD_D1,0)//اغلاق الشمعة الحالية بزوج اليوردولار فريم اليومي

Close[0]=iClose(Symbol(),0,0)

most
11-07-2019, 11:24 PM
السلام عليكم اشكركم على المجهود الممتاز
اريد ان اعرف كيف اضيف كود للاكسبيرت يحسب عدد الصفقات الخاسرة وعدد الصفقات الرابحة المغلقة وعدد صفقات البيع وعدد صفقات الشراء المغلقة انا حاولت عمل اكسبيرت بسيط لكن لم استطع اضافة حساب عدد الصفقات ولا اعلم من اين ابدأ بحثت كثيراً حتى فى المنتديات الاجنبية ولم اصل الى شئ الكود بالاسفل وشكراً جزيلا

double ma1,ma2,ma3;

ma1=iMA(NULL,0,15,0,MODE_SMA,PRICE_CLOSE,1);
ma2=iMA(NULL,0,15,0,MODE_SMA,PRICE_CLOSE,2);
ma3=iMA(NULL,0,30,0,MODE_SMA,PRICE_CLOSE,1);

double Speed=MathAbs(ma3-Close[1])/Point;
Comment(Speed);

double Speed2=Speed+400;

double SL,TP;

if ( ma1>ma3&&Close[2]<ma2&&Close[1]>ma1 ){

SL=NormalizeDouble(Ask-Speed2*Point,Digits);
TP=NormalizeDouble(Ask+Speed2/2*Point,Digits);



OrderSend(Symbol(),OP_BUY,NormalizeDouble(Lot,2),A sk,3,SL,TP,"klk",MagicNumber,0,Blue);

kira-h
14-07-2019, 04:28 AM
السلام عليكم اشكركم على المجهود الممتاز
اريد ان اعرف كيف اضيف كود للاكسبيرت يحسب عدد الصفقات الخاسرة وعدد الصفقات الرابحة المغلقة وعدد صفقات البيع وعدد صفقات الشراء المغلقة انا حاولت عمل اكسبيرت بسيط لكن لم استطع اضافة حساب عدد الصفقات ولا اعلم من اين ابدأ بحثت كثيراً حتى فى المنتديات الاجنبية ولم اصل الى شئ الكود بالاسفل وشكراً جزيلا

double ma1,ma2,ma3;

ma1=iMA(NULL,0,15,0,MODE_SMA,PRICE_CLOSE,1);
ma2=iMA(NULL,0,15,0,MODE_SMA,PRICE_CLOSE,2);
ma3=iMA(NULL,0,30,0,MODE_SMA,PRICE_CLOSE,1);

double Speed=MathAbs(ma3-Close[1])/Point;
Comment(Speed);

double Speed2=Speed+400;

double SL,TP;

if ( ma1>ma3&&Close[2]<ma2&&Close[1]>ma1 ){

SL=NormalizeDouble(Ask-Speed2*Point,Digits);
TP=NormalizeDouble(Ask+Speed2/2*Point,Digits);



OrderSend(Symbol(),OP_BUY,NormalizeDouble(Lot,2),A sk,3,SL,TP,"klk",MagicNumber,0,Blue);

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


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()==MagicNumber&&(OrderType()==type||type==-1))
{
cnt++;
}
}
}
return(cnt);
}


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


if(Orderscnt()==0&&ma1>ma3&&Close[2]<ma2&&Close[1]>ma1)
{
SL=NormalizeDouble(Ask-Speed2*Point,Digits);
TP=NormalizeDouble(Ask+Speed2/2*Point,Digits);
bool buy=OrderSend(Symbol(),OP_BUY,NormalizeDouble(Lot, 2),Ask,3,SL,TP,"klk",MagicNumber,0,Blue);
}

most
14-07-2019, 05:06 AM
وعليكم السلام
تقصد عدد الصفقات المفتوحة وليس المغلقة بحيث تتاكد من عدم وجود صفقة قبل فتح الصفقة
دالة عدد الصفقات المفتوحة كالتالي


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


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


if(Orderscnt()==0&&ma1>ma3&&Close[2]<ma2&&Close[1]>ma1)
{
SL=NormalizeDouble(Ask-Speed2*Point,Digits);
TP=NormalizeDouble(Ask+Speed2/2*Point,Digits);
bool buy=OrderSend(Symbol(),OP_BUY,NormalizeDouble(Lot, 2),Ask,3,SL,TP,"klk",MagicNumber,0,Blue);
}


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

kira-h
14-07-2019, 01:52 PM
شكراً جزيلاً على الرد ولكنى اقصد الصفقات المغلقة وليست المفتوحة ... الصفقات الخاسرة التى اغلقت على خسارة والتى اغلقت على ربح فى تاريخ صفقات الاكسبيرت هل يمكن ان نحسبها ام انه غير ممكن؟
دالة عدد الصفقات الخاسرة كالتالي


int LossOrders(int type=-1)
{
int cnt=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()<=OP_SELL&&OrderProfit()<0)
{
if(OrderType()==type||type==-1)cnt++;
}
}
}
return(cnt);
}


دالة عدد الصفقات الرابحة كالتالي


int ProfitOrders(int type=-1)
{
int cnt=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()<=OP_SELL&&OrderProfit()>=0)
{
if(OrderType()==type||type==-1)cnt++;
}
}
}
return(cnt);
}

احمد
15-07-2019, 12:52 AM
السلام عليكم ورحمه اللة وبركاته
اخي حسن بارك الله فيك
اريد دالة او وظيفه تمنع من تكرار الشراء او البيع في حال كانت كل الشروط محققة واريد فتح امر واحد فقط
انا لا اتكلم عن شمعة واحدة ولكن اتكلم عن تقاطعين للموفنق افرج
فمثلا اذا حدث تقاطع للموفنق تعتبر هذه بدايه الحالة وينفذ امر واحد فقط قد يكون التنفيذ في الشمعة الثالثة او الاخيرة على حسب الشروط الاخرى حتى يحدث التقاطع الثاني وهي نهاية الحاله وبداية حاله اخرى
وتسلم وبارك الله فيك

ammar
15-07-2019, 01:09 AM
السلام عليكم
اخي حسن لدية مشكلة في اكسيرت صممته عند تشغيل على شارت واحد يشتغل طبيعي اذا اكثر منشارت يصيرخربطه بشروط فتح الصفقات الشروط تعتمد بالاساس على ربح النقاط وخسارة النقاط جربت حلول كثير منها الماجك نمبر ولكن لم افلح ارجو ان تجد لي الحلى مع الشكر الجزيل

kira-h
15-07-2019, 01:57 AM
السلام عليكم
اخي حسن لدية مشكلة في اكسيرت صممته عند تشغيل على شارت واحد يشتغل طبيعي اذا اكثر منشارت يصيرخربطه بشروط فتح الصفقات الشروط تعتمد بالاساس على ربح النقاط وخسارة النقاط جربت حلول كثير منها الماجك نمبر ولكن لم افلح ارجو ان تجد لي الحلى مع الشكر الجزيل
وعليكم السلام
ارفق الاكسبيرت للتصحيح

kira-h
15-07-2019, 03:41 AM
السلام عليكم ورحمه اللة وبركاته
اخي حسن بارك الله فيك
اريد دالة او وظيفه تمنع من تكرار الشراء او البيع في حال كانت كل الشروط محققة واريد فتح امر واحد فقط
انا لا اتكلم عن شمعة واحدة ولكن اتكلم عن تقاطعين للموفنق افرج
فمثلا اذا حدث تقاطع للموفنق تعتبر هذه بدايه الحالة وينفذ امر واحد فقط قد يكون التنفيذ في الشمعة الثالثة او الاخيرة على حسب الشروط الاخرى حتى يحدث التقاطع الثاني وهي نهاية الحاله وبداية حاله اخرى
وتسلم وبارك الله فيك
وعليكم السلام
يمكنك عمل الشروط بالشمعة المحددة مع نفس الشروط بالشمعة التي قبلها
مثال


double f1=iMA(Symbol(),0,10,0,0,0,1);
double s1=iMA(Symbol(),0,20,0,0,0,1);
double f2=iMA(Symbol(),0,10,0,0,0,2);
double s2=iMA(Symbol(),0,20,0,0,0,2);
if(f1>s1&&f2<=s2)//buy


للمزيد يمكنك مراجعة المثال الثالي
- مثال تطبيقي لعمل اكسبيرت تقاطع موفينجين مع الستوكاستيك (https://www.fxprg.com/vb/showthread.php?t=31456&page=2&p=872081&viewfull=1#post872081)

ammar
15-07-2019, 10:35 AM
السلام عليكم
اخ حسن
هذ الاكسبيرت كما طلبت ارجو ان تعتمد الملفexpointamar.rar وتهمل profammarxm1.rar و
عند تجربت الاكسبيرت ارجو ان تجربة على عدة شارتات بنفس الوقت انا جربته على eurusd و usdjpy و usdchf

absafir
15-07-2019, 11:06 AM
وعليكم السلام
تسطيع استخدام متغير وتضع قيمه اولية له ولنفرض انه = 1 وبعد تنفيذ كل المطلوب غير قيمته الى 2 فرضاً (هنا عندما يعود البرنامج لاختبار الشرط لن يجده محققاً)
مثال:
double ok1=1;
Void OnTick() {
if( ok1==1)
{
الأوامر المطلوب تنفيذها (مثلا امر شراء)
تغيير قيمة المتغير لمنع التكرار Ok1=2; //
}

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

absafir
15-07-2019, 11:54 AM
السلام عليكم
1- اعاني من مشكلة وهي انه عندما اغلق المنصة ومن ثم اعود واشغلها يفتح التشارت اللذي عليه الاكسبيرت ويعمل بشكل تلقائي (وفي حالتي يكرر وضع اوامر شراء) فما الطريقة لمنع ذلك ؟
او باختصار ما هي الدالة او الكود اللذي يغلق التشارت عندما اغلق المنصة ؟

kira-h
15-07-2019, 02:27 PM
السلام عليكم
1- اعاني من مشكلة وهي انه عندما اغلق المنصة ومن ثم اعود واشغلها يفتح التشارت اللذي عليه الاكسبيرت ويعمل بشكل تلقائي (وفي حالتي يكرر وضع اوامر شراء) فما الطريقة لمنع ذلك ؟
او باختصار ما هي الدالة او الكود اللذي يغلق التشارت عندما اغلق المنصة ؟
وعليكم السلام
عند اغلاق المنصة يتوقف التنفيذ وبالتالي لا يمكن اغلاق الشارت
عموما وظيفة اغلاق الشارت الحالي كالتالي (0)ChartClose

kira-h
15-07-2019, 04:55 PM
السلام عليكم
اخ حسن
هذ الاكسبيرت كما طلبت ارجو ان تعتمد الملفexpointamar.rar وتهمل profammarxm1.rar و
عند تجربت الاكسبيرت ارجو ان تجربة على عدة شارتات بنفس الوقت انا جربته على eurusd و usdjpy و usdchf

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

most
16-07-2019, 02:59 AM
دالة عدد الصفقات الخاسرة كالتالي


int LossOrders(int type=-1)
{
int cnt=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()<=OP_SELL&&OrderProfit()<0)
{
if(OrderType()==type||type==-1)cnt++;
}
}
}
return(cnt);
}


دالة عدد الصفقات الرابحة كالتالي


int ProfitOrders(int type=-1)
{
int cnt=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()<=OP_SELL&&OrderProfit()>=0)
{
if(OrderType()==type||type==-1)cnt++;
}
}
}
return(cnt);
}


شكراً جزيلاً اخى وجزاك الله خيراً

kira-h
16-07-2019, 10:59 AM
شكراً جزيلاً اخى وجزاك الله خيراً
واياك اخي الكريم

ammar
16-07-2019, 02:00 PM
وعليكم السلام
مرفق الاكسبيرت
شكرا جزيل استاد حسن الحمدلله الكسبيرت شغال عال العال لكن لدي سؤال لماذا عند تجربة بعض الاكسبيرتات على منصتين مختلفتين النتائج غير متطابقة والفرق كبير جدا
مع العلم نفس الفترة ونفس الزوج العملات
مرة اخرى اشكرك على التعديل والله يوفقك انشاء الله

kira-h
16-07-2019, 09:19 PM
شكرا جزيل استاد حسن الحمدلله الكسبيرت شغال عال العال لكن لدي سؤال لماذا عند تجربة بعض الاكسبيرتات على منصتين مختلفتين النتائج غير متطابقة والفرق كبير جدا
مع العلم نفس الفترة ونفس الزوج العملات
مرة اخرى اشكرك على التعديل والله يوفقك انشاء الله
يجب ان يكون الفرق السعري بسيط بسبب اختلاف مزودي الاسعار وكذا السبريد
اما اذا الفرق كبير جدا فهذا يعني ان الاسعار وهمية باحد الشركتين او معا

ammar
20-07-2019, 05:10 AM
السلام عليكم
اخ حسن لديه مشكلة في اكسبيرت المرفق وهي دالة ( الترلين ستوب) لا تعمل مع العلم تعمل جيدا في اكسبيرت اخر
مع خالص التقدير لجهودك المبذولة
15396

aut
20-07-2019, 09:31 AM
اخى حسن كنت طلبت منك من فتره كود لتحديد اقصى عدد صفقات مثلاً maxtrade = 2
اذا عكس السعر على اخر صفقه تفعلت عدد نقاط مثلاً 100 يرجع يتداول من جديد ويدخل صفقتين وكل ما عكس 100 نقطه عن اخر صفقه تفعلت يتداول من جديد صفقين صفقات البيع لوحدها وصفقات الشراء لوحدها


ده الكود اللى انت عملته من قبل



for(int i=1;i<=20;i++)
{


if((TotalOrders(OP_BUY)!=MaxTrades*i&&time!=Time[0])
||(TotalOrders(OP_BUY)==MaxTrades*i&&Ask<=LastPrice(OP_BUY)-Step*point))


if((TotalOrders(OP_SELL)!=MaxTrades*i&&time!=Time[0])
||(TotalOrders(OP_SELL)==MaxTrades*i&&Bid>=LastPrice(OP_SELL)+Step*point))

}





حاولت اضافته هنا لدالة الشراء والبيع ولا يعمل



//buy

if (Ask >= (DW1 + buyMM * GapSize * point))
{
UT1 = Fast_2;
sellMM = 2;
buyMM++;



if(CloseAtNext)CloseDeleteOrders(OP_SELL);
if(BuyingEnabled() && WithinAllowableSpread()) {
if(Orderscnt()==0&&BarTime!=Time[0])
if(StopL!=0){SL=Ask-StopL*point;}else SL=0;
if(TakeP!=0){TP=Ask+TakeP*point;}else TP=0;
if(TotalOrders(OP_BUY)<MaxTrades)
int rBuy=OrderSend(Symbol(),OP_BUY,NewLots,Ask,3*Q,SL, TP,"",MagicNumber,0,Blue);
if(rBuy>0)time=Time[0];
BarTime=Time[0];



}
}



//sell

if (Bid <= (UT1 - sellMmm * GapSize * point))
{
DW1 = Fast_1;
buyMM = 2;
sellMM++;



if(CloseAtNext)CloseDeleteOrders(OP_BUY);
if(IsSellingEnabled() && IsWithinAllowableSpread()) {
if(Orderscnt()==0&&BarTime!=Time[0])
if(StopL!=0){SL=Bid+StopL*point;}else SL=0;
if(TakeP!=0){TP=Bid-TakeP*point;}else TP=0;
if(TotalOrders(OP_SELL)<MaxTrades)
int rSell=OrderSend(Symbol(),OP_SELL,NewLots,Bid,3*Q,S L,TP,"",MagicNumber,0,Red);
if(rSell>0)time=Time[0];
BarTime=Time[0];


}
}



لو تساعدنى فى اضافة الكود بالشكل الصحيح على الدالتين وشرح ماهو حرف i ما وظيفته ؟ وشكراً اخى الكريم

kira-h
20-07-2019, 07:46 PM
السلام عليكم
اخ حسن لديه مشكلة في اكسبيرت المرفق وهي دالة ( الترلين ستوب) لا تعمل مع العلم تعمل جيدا في اكسبيرت اخر
مع خالص التقدير لجهودك المبذولة
15396

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

aut
20-07-2019, 08:22 PM
اخى حسن كنت طلبت منك من فتره كود لتحديد اقصى عدد صفقات مثلاً maxtrade = 2
اذا عكس السعر على اخر صفقه تفعلت عدد نقاط مثلاً 100 يرجع يتداول من جديد ويدخل صفقتين وكل ما عكس 100 نقطه عن اخر صفقه تفعلت يتداول من جديد صفقين صفقات البيع لوحدها وصفقات الشراء لوحدها


ده الكود اللى انت عملته من قبل



for(int i=1;i<=20;i++)
{


if((TotalOrders(OP_BUY)!=MaxTrades*i&&time!=Time[0])
||(TotalOrders(OP_BUY)==MaxTrades*i&&Ask<=LastPrice(OP_BUY)-Step*point))


if((TotalOrders(OP_SELL)!=MaxTrades*i&&time!=Time[0])
||(TotalOrders(OP_SELL)==MaxTrades*i&&Bid>=LastPrice(OP_SELL)+Step*point))

}





حاولت اضافته هنا لدالة الشراء والبيع ولا يعمل



//buy

if (Ask >= (DW1 + buyMM * GapSize * point))
{
UT1 = Fast_2;
sellMM = 2;
buyMM++;



if(CloseAtNext)CloseDeleteOrders(OP_SELL);
if(BuyingEnabled() && WithinAllowableSpread()) {
if(Orderscnt()==0&&BarTime!=Time[0])
if(StopL!=0){SL=Ask-StopL*point;}else SL=0;
if(TakeP!=0){TP=Ask+TakeP*point;}else TP=0;
if(TotalOrders(OP_BUY)<MaxTrades)
int rBuy=OrderSend(Symbol(),OP_BUY,NewLots,Ask,3*Q,SL, TP,"",MagicNumber,0,Blue);
if(rBuy>0)time=Time[0];
BarTime=Time[0];



}
}



//sell

if (Bid <= (UT1 - sellMmm * GapSize * point))
{
DW1 = Fast_1;
buyMM = 2;
sellMM++;



if(CloseAtNext)CloseDeleteOrders(OP_BUY);
if(IsSellingEnabled() && IsWithinAllowableSpread()) {
if(Orderscnt()==0&&BarTime!=Time[0])
if(StopL!=0){SL=Bid+StopL*point;}else SL=0;
if(TakeP!=0){TP=Bid-TakeP*point;}else TP=0;
if(TotalOrders(OP_SELL)<MaxTrades)
int rSell=OrderSend(Symbol(),OP_SELL,NewLots,Bid,3*Q,S L,TP,"",MagicNumber,0,Red);
if(rSell>0)time=Time[0];
BarTime=Time[0];


}
}



لو تساعدنى فى اضافة الكود بالشكل الصحيح على الدالتين وشرح ماهو حرف i ما وظيفته ؟ وشكراً اخى الكريم

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

kira-h
20-07-2019, 08:55 PM
اخى حسن كنت طلبت منك من فتره كود لتحديد اقصى عدد صفقات مثلاً maxtrade = 2
اذا عكس السعر على اخر صفقه تفعلت عدد نقاط مثلاً 100 يرجع يتداول من جديد ويدخل صفقتين وكل ما عكس 100 نقطه عن اخر صفقه تفعلت يتداول من جديد صفقين صفقات البيع لوحدها وصفقات الشراء لوحدها


ده الكود اللى انت عملته من قبل



for(int i=1;i<=20;i++)
{


if((TotalOrders(OP_BUY)!=MaxTrades*i&&time!=Time[0])
||(TotalOrders(OP_BUY)==MaxTrades*i&&Ask<=LastPrice(OP_BUY)-Step*point))


if((TotalOrders(OP_SELL)!=MaxTrades*i&&time!=Time[0])
||(TotalOrders(OP_SELL)==MaxTrades*i&&Bid>=LastPrice(OP_SELL)+Step*point))

}





حاولت اضافته هنا لدالة الشراء والبيع ولا يعمل



//buy

if (Ask >= (DW1 + buyMM * GapSize * point))
{
UT1 = Fast_2;
sellMM = 2;
buyMM++;



if(CloseAtNext)CloseDeleteOrders(OP_SELL);
if(BuyingEnabled() && WithinAllowableSpread()) {
if(Orderscnt()==0&&BarTime!=Time[0])
if(StopL!=0){SL=Ask-StopL*point;}else SL=0;
if(TakeP!=0){TP=Ask+TakeP*point;}else TP=0;
if(TotalOrders(OP_BUY)<MaxTrades)
int rBuy=OrderSend(Symbol(),OP_BUY,NewLots,Ask,3*Q,SL, TP,"",MagicNumber,0,Blue);
if(rBuy>0)time=Time[0];
BarTime=Time[0];



}
}



//sell

if (Bid <= (UT1 - sellMmm * GapSize * point))
{
DW1 = Fast_1;
buyMM = 2;
sellMM++;



if(CloseAtNext)CloseDeleteOrders(OP_BUY);
if(IsSellingEnabled() && IsWithinAllowableSpread()) {
if(Orderscnt()==0&&BarTime!=Time[0])
if(StopL!=0){SL=Bid+StopL*point;}else SL=0;
if(TakeP!=0){TP=Bid-TakeP*point;}else TP=0;
if(TotalOrders(OP_SELL)<MaxTrades)
int rSell=OrderSend(Symbol(),OP_SELL,NewLots,Bid,3*Q,S L,TP,"",MagicNumber,0,Red);
if(rSell>0)time=Time[0];
BarTime=Time[0];


}
}



لو تساعدنى فى اضافة الكود بالشكل الصحيح على الدالتين وشرح ماهو حرف i ما وظيفته ؟ وشكراً اخى الكريم

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


if(TotalOrders(OP_BUY)>0&&Ask<=LastPrice(OP_BUY)-Step*point)

aut
20-07-2019, 09:29 PM
السلام عليكم
ببساطة استخدم الشرط التالي عند كل انعكاس بمسافة ستيب يفتح عقد جديد ولكن بمضاعفة حجم العقد وليس عدد العقود!
فمثلا لو تريد صفقتين بعقد 0.01 اجعل فقط حجم العقد 0.02 ليفتح بها صفقة واحدة


if(TotalOrders(OP_BUY)>0&&Ask<=LastPrice(OP_BUY)-Step*point)


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

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

كل ما احتاجه لهذا الكود ان انا عندى maxtrade = 2 الاكسبيرت بيفتح صفقتين شراء وصفقتين بيع ومش بيفتح تانى صفقات والاكسبيرت شغال كويس على كدا

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

ammar
21-07-2019, 03:51 AM
وعليكم السلام
جرب النسخة المرفقة
السلام عليكم
اخي حسن اولا اشكرك كثيرا على التصحيح طبعا كان المفروض انتبه لهذه الملاحظة البسيطة وكان يجب ان ندخر اسئلتنا الصعبة لك حتى لا تنشغل كثيرا على العموم اشكرك للمرة الثانية

Sherry
21-07-2019, 11:12 AM
السلام عليكم و رحمة الله و بركاته

الله يعطيك العافيه يا صاحبي

بس حابب يكون الاغلاق هو الفرق بين لوت البيع و لوت الشراء

مثلا في حالة وجود صفقة شراء ب 0.3 لوت

و صفقة بيع ب 0.7

و صفقة البيع هي الرابحه و صفقة الشراء هي الخاسره

المطلوب هو اغلاق الفرق اي ( 0.7 لوت صفقة بيع - 0.3 لوت صفقة شراء )

اي مطلوب اغلاق 0.4 لوت صفقة بيع

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

Sherry
21-07-2019, 11:18 AM
وعليكم السلام
دالة اغلاق جزء من العقد عند تحقق ربح معين من النقاط كالتالي :


input double PartialProfit=20;


void OnTick()
{
if(PartialProfit>0)PartialClose();
}


void PartialClose()
{
bool close;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
bool select=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
datetime ot=OrderOpenTime();
double op=OrderOpenPrice(),
ol=OrderLots(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
int tk=OrderTicket(),
ty=OrderType(),
mn=OrderMagicNumber(),
closecount=OrderCloseCount(op,ot);
double pc=NormalizeDouble(ol/2,2);//نصف العقد
if(sy==Symbol()&&mn==MagicNo)
{
if(ty==OP_BUY)
{
if(Bid>=op+PartialProfit*point&&closecount<1)
{
close=OrderClose(tk,pc,Bid,30);
}
}
if(ty==OP_SELL)
{
if(Ask<=op-PartialProfit*point&&closecount<1)
{
close=OrderClose(tk,pc,Ask,30);
}
}
}
}
}


ودالة لحساب عدد الاغلاقات الجزئية للعقد الأساسي كالتالي:


int OrderCloseCount(double openprice,datetime opentime)
{
int closecount=0;
int i=0;
while(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
i++;
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderOpenPrice()==openprice&&OrderOpenTime()==opentime)closecount++;
}
}
return(closecount);
}


بحيث :
PartialProfit الربح الجزئي بالنقاط لاغلاق نصف العقد الأساسي


السلام عليكم و رحمة الله و بركاته

الله يعطيك العافيه يا صاحبي

بس حابب يكون الاغلاق هو الفرق بين لوت البيع و لوت الشراء

مثلا في حالة وجود صفقة شراء ب 0.3 لوت

و صفقة بيع ب 0.7

و صفقة البيع هي الرابحه و صفقة الشراء هي الخاسره

المطلوب هو اغلاق الفرق اي ( 0.7 لوت صفقة بيع - 0.3 لوت صفقة شراء )

اي مطلوب اغلاق 0.4 لوت صفقة بيع

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

saad
21-07-2019, 08:10 PM
السلام عليكم
ممكن مساعدة برمجية

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

مرفق المؤشر


وشكرا مقدما

kira-h
21-07-2019, 08:25 PM
السلام عليكم
ممكن مساعدة برمجية

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

مرفق المؤشر


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

kira-h
21-07-2019, 08:36 PM
السلام عليكم و رحمة الله و بركاته

الله يعطيك العافيه يا صاحبي

بس حابب يكون الاغلاق هو الفرق بين لوت البيع و لوت الشراء

مثلا في حالة وجود صفقة شراء ب 0.3 لوت

و صفقة بيع ب 0.7

و صفقة البيع هي الرابحه و صفقة الشراء هي الخاسره

المطلوب هو اغلاق الفرق اي ( 0.7 لوت صفقة بيع - 0.3 لوت صفقة شراء )

اي مطلوب اغلاق 0.4 لوت صفقة بيع

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

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


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 Current(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();
int ty=OrderType();
double pt=OrderProfit(),
lo=OrderLots();
if(sy==Symbol()&&(ty==type||type==-1))
{
if(info=="Profit")return(pt);
else if(info=="Lots")return(lo);
}
}
return(0);
}




void PartialClose()
{
bool close;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
bool select=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
datetime ot=OrderOpenTime();
double op=OrderOpenPrice(),
ol=OrderLots(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
int tk=OrderTicket(),
ty=OrderType(),
mn=OrderMagicNumber(),
closecount=OrderCloseCount(op,ot);
if(sy==Symbol()&&mn==MagicNo&&Orderscnt(OP_BUY)>0&&Orderscnt(OP_SELL)>0)
{
if(ty==OP_BUY)
{
if(Current("Lots",OP_BUY)>Current("Lots",OP_SELL)&&Current("Profit",OP_BUY)>0
&&Bid>=op+PartialProfit*point&&closecount<1)
{
close=OrderClose(tk,Current("Lots",OP_BUY)-Current("Lots",OP_SELL),Bid,30);
}
}
if(ty==OP_SELL)
{
if(Current("Lots",OP_SELL)>Current("Lots",OP_BUY)&&Current("Profit",OP_SELL)>0
&&Ask<=op-PartialProfit*point&&closecount<1)
{
close=OrderClose(tk,Current("Lots",OP_SELL)-Current("Lots",OP_BUY),Ask,30);
}
}
}
}
}

kira-h
21-07-2019, 09:06 PM
السلام عليكم
اخي حسن اولا اشكرك كثيرا على التصحيح طبعا كان المفروض انتبه لهذه الملاحظة البسيطة وكان يجب ان ندخر اسئلتنا الصعبة لك حتى لا تنشغل كثيرا على العموم اشكرك للمرة الثانية
وعليكم السلام
العفو والله الموفق

kira-h
21-07-2019, 09:12 PM
اخى حسن عند اضافة الشرط الاخير اللى انت قلت عليه مش بيفتح خالص صفقات

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

كل ما احتاجه لهذا الكود ان انا عندى maxtrade = 2 الاكسبيرت بيفتح صفقتين شراء وصفقتين بيع ومش بيفتح تانى صفقات والاكسبيرت شغال كويس على كدا

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

aut
21-07-2019, 11:45 PM
ذلك الشرط خاص فقط بدالة التبريد يعني بعد وجود صفقة (أو صفقات) مفتوحة من نفس النوع
وعند تحقق شرط المسافة يفتح الصفقة ولكن لا يمكن فتح العدد المتبقي لأنه تغير سعر آخر صفقة (لا تنسى انه فتح صفقة) وبالتالي شرط المسافة لم يعد محقق، لهذا استخدام حجم العقد اكثر دقة وبدون تعقيد، لماذا تريد استخدام العدد؟!
ارفق التعديل الذي قمت به للتصحيح


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

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



اذا فى كود ماكس تريد ينفذ هذه الطريقه ياريت اخى يكون فضل كبير منك

kira-h
22-07-2019, 03:33 AM
انا فاهم انت تقصد ايه بس انا شرحت اللى انا محتاجه بصوره ممكن يكون اوضح

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



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

aut
22-07-2019, 03:42 AM
اخي الكريم ردي السابق واضح جدا وقلت انه غير ممكن بشكل بسيط لان الامر معقد تحتاج لعمل مصفوفة ودوال اخرى لتقييد الستيب بالعدد هذا اذا كانت المصفوفة متوافقة مع استراتيجية الاكسبيرت يعني محتاج مراجعة للكود كاملا ....
لكن استفسرت عن اهمية العدد ولماذا ؟ حتى افهم وليس فقط مجرد سؤال برمجي دون فهم المغزى من ورائه!


لان كل صفقه عايز تكون بلوت مختلف يعنى

الصفقه 1 لها لوت خاص بها
الصفقه 2 لها لوت خاص بها
الصفقه 3 لها لوت خاص بها
الصفقه 4 لها لوت خاص بها
هكذا

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

aut
22-07-2019, 08:42 AM
لان كل صفقه عايز تكون بلوت مختلف يعنى

الصفقه 1 لها لوت خاص بها
الصفقه 2 لها لوت خاص بها
الصفقه 3 لها لوت خاص بها
الصفقه 4 لها لوت خاص بها
هكذا

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

ده الكود اخى حسن



//+------------------------------------------------------------------+
//| ScalperV1.mq4 |
//| Copyright 2005-2014, MetaQuotes Software Corp. |
//| https://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright "2005-2014, MetaQuotes Software Corp."
#property link "https://www.mql4.com"
#property description "ScalperV1 expert advisor"

enum OrdersTy
{
BuyOnly=0,
SellOnly=1,
BuySellBoth=2,
};




input string INFO="0 Buy - 1 Sell - 2 Both";
extern int OrdersT = 2;
extern double LotsBuy = 0.01;
extern double LotsSell = 0.01;
extern int MaxSpread = 4;
input bool CloseAtNext=false;
extern int MaxTrades= 2;
extern int GapSize = 0;
extern int StopLoss = 0;
extern int TakeProfit = 0;
extern int TrailingStop=0;
extern int TrailingStep=0;
extern int BreakEven=0;
input int BreakEvenPips=0;
extern int USDP=0;
extern int USDL=0;
extern int MagicNumber = 555555;


//---------


double LotsB_1=0.02,
LotsB_2=0.03,
LotsB_3=0.04,
LotsB_4=0.05,
LotsB_5=0.06,
LotsB_6=0.07,
LotsB_7=0.08,
LotsB_8=0.09,
LotsB_9=0.1,
LotsB_10=0.11,
LotsB_11=0.12,
LotsB_12=0.13,
LotsB_13=0.14,
LotsB_14=0.15,
LotsB_15=0.16,
LotsB_16=0.17,
LotsB_17=0.18,
LotsB_18=0.19,
LotsB_19=0.20,
LotsB_20=0.21;



double LotsS_1=1.1,
LotsS_2=2.0,
LotsS_3=3.0,
LotsS_4=4.0,
LotsS_5=5.0,
LotsS_6=6.0,
LotsS_7=7.0,
LotsS_8=8.0,
LotsS_9=9.0,
LotsS_10=10.0,
LotsS_11=11.0,
LotsS_12=12.0,
LotsS_13=13.0,
LotsS_14=14.0,
LotsS_15=15.0,
LotsS_16=16.0,
LotsS_17=17.0,
LotsS_18=18.0,
LotsS_19=19.0,
LotsS_20=20.0;




int CheckStep = GapSize;

int EMA1 = 50;
int EMA2 = 100;
ENUM_APPLIED_PRICE apply1 = PRICE_CLOSE;
ENUM_APPLIED_PRICE apply2 = PRICE_CLOSE;


double buyMM = 2;
double sellMM = 2;


string commentSell, commentBuy, NewLotsSell, NewLotsBuy;
double p,SL,TP,NewLots;
int LimitBuy, LimitSell;
double lotaB,lotaS,LB,LS;
double UT1, DW1,point;
int Q,digits;


datetime time=0;
datetime BarTime;

double chain[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20};
double chain2[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20};


void OnInit()
{



if(Digits==4 || Digits<=2) point=Point;
if(Digits==5 || Digits==3) point=Point*10;



}


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


if(TrailingStop>0)MoveTrailingStop();
if(BreakEven>0)MoveBreakEven();
if((USDP!=0&&Profit_By_USD()>=USDP)
||(USDL!=0&&Profit_By_USD()<=-USDL)){CloseOrders();}




if(Orderscnt(OP_BUY)>0&&Ask<=LastPrice(OP_BUY)-CheckStep*point)
if(Orderscnt(OP_SELL)>0&&Bid>=LastPrice(OP_SELL)+CheckStep*point)

if(Bars<100 || IsTradeAllowed()==false)
return;

double Fast_1=iMA(NULL,0,EMA1,50,MODE_SMMA,apply1,0);
double Fast_2=iMA(NULL,0,EMA2,200,MODE_SMMA,apply2,0);




chain[1]=LotsB_1;
chain[2]=LotsB_2;
chain[3]=LotsB_3;
chain[4]=LotsB_4;
chain[5]=LotsB_5;
chain[6]=LotsB_6;
chain[7]=LotsB_7;
chain[8]=LotsB_8;
chain[9]=LotsB_9;
chain[10]=LotsB_10;
chain[11]=LotsB_11;
chain[12]=LotsB_12;
chain[13]=LotsB_13;
chain[14]=LotsB_14;
chain[15]=LotsB_15;
chain[16]=LotsB_16;
chain[17]=LotsB_17;
chain[18]=LotsB_18;
chain[19]=LotsB_19;
chain[20]=LotsB_20;



if(LastPrice(OP_BUY)&&(Closed("Profit")<=0))
if(Closed("Profit")>=0&&(HistoryOrders()==0||(HistoryOrders()>0)))NewLots=LotsBuy;
{
NewLotsBuy=chain[LEVEL()+1];
commentBuy=DoubleToStr(LEVEL()+1,0);
}
if(LastOrder("Profit")>=0){NewLotsBuy=LotsBuy;commentBuy="0";}



chain2[1]=LotsS_1;
chain2[2]=LotsS_2;
chain2[3]=LotsS_3;
chain2[4]=LotsS_4;
chain2[5]=LotsS_5;
chain2[6]=LotsS_6;
chain2[7]=LotsS_7;
chain2[8]=LotsS_8;
chain2[9]=LotsS_9;
chain2[10]=LotsS_10;
chain2[11]=LotsS_11;
chain2[12]=LotsS_12;
chain2[13]=LotsS_13;
chain2[14]=LotsS_14;
chain2[15]=LotsS_15;
chain2[16]=LotsS_16;
chain2[17]=LotsS_17;
chain2[18]=LotsS_18;
chain2[19]=LotsS_19;
chain2[20]=LotsS_20;




if(LastPrice(OP_SELL)&&(Closed("Profit")<=0))
{
NewLotsSell=chain2[LEVEL2()+1];
commentSell=DoubleToStr(LEVEL2()+1,0);
}
if(LastOrder("Profit")>=0){NewLotsSell=LotsSell;commentSell="0";}




//buy

if (Ask >= (DW1 + buyMM * GapSize * point))
{
UT1 = Fast_2;
sellMM = 2;
buyMM++;


if(CloseAtNext)CloseDeleteOrders(OP_SELL);
if(BuyingEnabled() && WithinAllowableSpread()) {
if(Orderscnt()==0&&BarTime!=Time[0])
if(StopLoss!=0){SL=Ask-StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Ask+TakeProfit*point;}else TP=0;
if(TotalOrders(OP_BUY)<MaxTrades)
int rBuy=OrderSend(Symbol(),OP_BUY,NewLotsBuy,Normaliz eDouble(Ask,Digits),3*Q,SL,TP,commentBuy,MagicNumb er,0,Blue);
if(rBuy>0)time=Time[0];
BarTime=Time[0];



}
}



//sell

if (Bid <= (UT1 - sellMM * GapSize * point))
{
DW1 = Fast_1;
buyMM = 2;
sellMM++;


if(CloseAtNext)CloseDeleteOrders(OP_BUY);
if(SellingEnabled() && WithinAllowableSpread()) {
if(Orderscnt()==0&&BarTime!=Time[0])
if(StopLoss!=0){SL=Bid+StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Bid-TakeProfit*point;}else TP=0;
if(TotalOrders(OP_SELL)<MaxTrades)
int rSell=OrderSend(Symbol(),OP_SELL,NewLotsSell,Norma lizeDouble(Bid,Digits),3*Q,SL,TP,commentSell,Magic Number,0,Red);
if(rSell>0)time=Time[0];
BarTime=Time[0];


}
}
}




bool SellingEnabled()
{
if( (OrdersT == SellOnly) || (OrdersT == BuySellBoth) )
return true;
return false;
}

bool BuyingEnabled()
{
if( (OrdersT == BuyOnly) || (OrdersT == BuySellBoth) )
return true;
return false;
}



//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Max Spread |
//+------------------------------------------------------------------+



bool WithinAllowableSpread()
{
if(MaxSpread == 0)
return true;

if( Ask-Bid > MaxSpread * point)
return false;

return true;
}


//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS |
//+------------------------------------------------------------------+


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);
}
}



//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Trailing Stop |
//+------------------------------------------------------------------+


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*point,Digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*poin t,Digits))
{
if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-TrailingStop*point,Digits))||(OrderStopLoss()==0))
{
bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(Bid-TrailingStop*point,Digits),OrderTakeProfit(),0,Blu e);

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

}
}
}
}
}
}


//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Break Even |
//+------------------------------------------------------------------+


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*point)
{
if(NormalizeDouble((OrderStopLoss()-OrderOpenPrice()),Digits)<0||(OrderStopLoss()==0))
{
bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(OrderOpenPrice()+BreakEvenPips*point,D igits),OrderTakeProfit(),0,Blue);

}
}
}
}
else
{
if(BreakEven>0)
{
if(NormalizeDouble((OrderOpenPrice()-Ask),Digits)>BreakEven*point)
{
if(NormalizeDouble((OrderOpenPrice()-OrderStopLoss()),Digits)<0||(OrderStopLoss()==0))
{
bool nn=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(OrderOpenPrice()-BreakEvenPips*point,Digits),OrderTakeProfit(),0,Re d);

}
}
}
}
}
}
}


//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS To Know The Profit Of Open Positions |
//+------------------------------------------------------------------+


double Profit_By_USD(int type=-1)
{
double pts;
for(int i=0;i<OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ot=OrderType();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
if(sy==Symbol()&&mn==MagicNumber)
{
if(ot==type||type==-1)
{
pts+=pt+sw+cm;
}
}
}
return(pts);
}



//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Closing Trades Together |
//+------------------------------------------------------------------+


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);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==type||type==-1)
{
if(OrderType()==OP_BUY){close=OrderClose(OrderTick et(),OrderLots(),NormalizeDouble(Bid,Digits),5*Q); }
if(OrderType()==OP_SELL){close=OrderClose(OrderTic ket(),OrderLots(),NormalizeDouble(Ask,Digits),5*Q) ;}
if(OrderType()>OP_SELL){del=OrderDelete(OrderTicket());}
}
}
}
}



//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS HiddenTP |
//+------------------------------------------------------------------+



//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS ´ HiddenSL |
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS To Know Total Orders |
//+------------------------------------------------------------------+


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



//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Close Delete Orders |
//+------------------------------------------------------------------+

void CloseDeleteOrders(int type)
{
bool select,close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
if(OrderType()==type)
{
if(OrderType()==OP_BUY)
{
close=OrderClose(OrderTicket(),OrderLots(),Normali zeDouble(Bid,Digits),5*Q);
}
if(OrderType()==OP_SELL)
{
close=OrderClose(OrderTicket(),OrderLots(),Normali zeDouble(Ask,Digits),5*Q);
}
if(OrderType()>OP_SELL)
{
close=OrderDelete(OrderTicket());
}
}
}
}


//دالة تعود بسعر آخر صفقة مفتوحة بدلالة نوعها
double LastPrice(int type)
{
int cnt;
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
{
cnt++;
if(cnt>=2)
return(OrderOpenPrice());
}
}
return(0);
}



/*
//دالة اغلاق الصفقات بدلالة النوع
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(),
ot=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots();
if(tt>0&&sy==Symbol()&&mn==MagicNumber)
{
if(ot==type||type==-1)
{
if(ot==OP_BUY){close=OrderClose(tk,lo,NormalizeDou ble(Bid,Digits),5*Q);}
if(ot==OP_SELL){close=OrderClose(tk,lo,NormalizeDo uble(Ask,Digits),5*Q);}
if(ot>OP_SELL){close=OrderDelete(tk);}
}
}
}
}
*/

//دالة لمعرفة نوع آخر صفقة مغلقة
int LastType()
{
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();
if(sy==Symbol()&&mn==MagicNumber)
{
return(ty);
}
}
return(0);
}



//دالة لمعرفة توقيت اغلاق آخر صفقة بدلالة نوعها

datetime LastTime(int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();
datetime ct=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNumber&&(ty==type||type==-1))
{
return(ct);
}
}
return(0);
}



//دالة لمعرفة ربح آخر صفقة مغلقة بدلالة نوعها

double LastProfit(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();
datetime ct=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNumber&&(ty==type||type==-1))
{
if(info=="Profit")return(pt);

}
}
return(0);
}




datetime FirstClose()
{
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 lo=OrderLots();
datetime om=OrderOpenTime();
if(sy==Symbol()&&mn==MagicNumber&&lo==LotsBuy)
if(sy==Symbol()&&mn==MagicNumber&&lo==LotsSell)
{
return(om);
}
}
return(0);
}



double TotalProfit()
{
double pts=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
datetime om=OrderCloseTime();

if(sy==Symbol()&&mn==MagicNumber&&om>FirstClose())
{
pts+=pt+sw+cm;
}
}
return(pts);
}



double LastOrder(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
pt=OrderProfit(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();
datetime om=OrderOpenTime(),
cm=OrderCloseTime();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
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=="CloseTime")return(cm);
else if(info=="Comment")return(mm);
}
}
}
return(0);
}



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





double Closed(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
pt=OrderProfit(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="Profit")return(pt);
else if(info=="Type")return(ty);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
else if(info=="TP")return(tp);
else if(info=="SL")return(sl);
}
}
}
return(0);
}




double CurrentLots(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(),
ty=OrderType();
double lo=OrderLots();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
return(lo);
}
}
}
return(0);
}




int HistoryOrders(int type=-1)
{
int cnt=0;
for(int i =0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()&&(OrderType()==type||type==-1))
{
cnt++;
}
}
}
return(cnt);
}



double LastCurrent(string info,int type=-1)//دالة لمعرفة كل تفاصيل الصفقة المفعلة بدلالة النوع
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&(OrderType()==type||type==-1))
{
if(info=="Type")return(OrderType());
else if(info=="Lots")return(OrderLots());
else if(info=="Price")return(OrderOpenPrice());
else if(info=="TP")return(OrderTakeProfit());
else if(info=="SL")return(OrderStopLoss());
else if(info=="Profit")return(OrderProfit());
else if(info=="Time")return(OrderOpenTime());
}
}
return(0);
}


double LastOrderClosed(string info)//نتيجة آخر صفقة مغلقة والاكبر من حيث توقيت الفتح
{
double c=0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()<=OP_SELL)
{
if(OrderOpenTime()>c)c=OrderOpenTime();
if(OrderOpenTime()==c)
{
if(info=="Profit")return(OrderProfit());
else if(info=="Lots")return(OrderLots());
}
}
}
return(0);
}


int Orderscnt()//دالة عدد الصفقات المفتوحة
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
cnt++;//عد الصفقات
}
}
}
return(cnt);
}




void CloseAllOrders(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(),
ot=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots();
if(tt>0)
{
if(ot==type||type==-1)
{
if(ot==OP_BUY){close=OrderClose(tk,lo,MarketInfo(s y,MODE_BID),50);}
if(ot==OP_SELL){close=OrderClose(tk,lo,MarketInfo( sy,MODE_ASK),50);}
if(ot>OP_SELL){del=OrderDelete(tk);}
}
}
}
}




int LEVEL()
{
int c;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
commentBuy=OrderComment();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
StringReplace(commentBuy,"[sl]","");
c=StrToInteger(commentBuy);


return(c);
}
}
return(c);
}




int LEVEL2()
{
int c;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
commentSell=OrderComment();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
StringReplace(commentSell,"[sl]","");
c=StrToInteger(commentSell);


return(c);
}
}
return(c);
}

sabil
22-07-2019, 02:56 PM
اخي حسن
بحاول احسب المسافة بين البيع والشراء الاول وعلى اساسها تكون المسافة المعتمدة بين صفقات البيع والشراء لاحقاً
عن طريق الدوال التالية :
الاول عملت متغير يحسب المسافة


double dis_h2=(LastOrder("Price","Aymoon-h2",OP_BUY)-LastOrder("Price","Aymoon-h2",OP_SELL));

ثانيا في شروط الدخول عملت الاتي :


if(Orderscnt("Aymoon-h2")<MaxTrades) {
if(Orderscnt("Aymoon-h2",OP_BUY)>0&&Orderscnt("Aymoon-h2",OP_SELL)>0&&LastOrder("Type","Aymoon-h2")==OP_BUY)
{
if(Ask<=LastOrder("Price","Aymoon-h2",OP_SELL)-dis_h2)
{
if(Stoploss!=0)SL=Bid+Stoploss*point;else SL=0;
if(Takeprofit!=0)TP=Bid-Takeprofit*point;else TP=0;
ticket=OrderSend(Symbol(),OP_SELL,NewLots2,Normali zeDouble(Bid,Digits),3*Q,SL,TP,"Aymoon-h2",MagicNo,0,Magenta);
}
}
if(Orderscnt("Aymoon-h2",OP_BUY)>0&&Orderscnt("Aymoon-h2",OP_SELL)>0&&LastOrder("Type","Aymoon-h2")==OP_SELL)
{
if(Bid>=LastOrder("Price","Aymoon-h2",OP_BUY)+dis_h2)
{
if(Stoploss!=0)SL=Ask-Stoploss*point;else SL=0;
if(Takeprofit!=0)TP=Ask+Takeprofit*point;else TP=0;
ticket=OrderSend(Symbol(),OP_BUY,NewLots2,Normaliz eDouble(Ask,Digits),3*Q,SL,TP,"Aymoon-h2",MagicNo,0,Green);
}
}
}

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

لكن الل بيحصل انه بيفتح 3 اوردرات بعد البيع الاول (2 شراء وواحد بيع من نفس السعر ونفس اللوت) بعد توافق شروط الشراء

المشكلة فين هنا؟

Sherry
22-07-2019, 05:48 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 Current(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();
int ty=OrderType();
double pt=OrderProfit(),
lo=OrderLots();
if(sy==Symbol()&&(ty==type||type==-1))
{
if(info=="Profit")return(pt);
else if(info=="Lots")return(lo);
}
}
return(0);
}




void PartialClose()
{
bool close;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
bool select=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
datetime ot=OrderOpenTime();
double op=OrderOpenPrice(),
ol=OrderLots(),
sl=OrderStopLoss(),
tp=OrderTakeProfit();
int tk=OrderTicket(),
ty=OrderType(),
mn=OrderMagicNumber(),
closecount=OrderCloseCount(op,ot);
if(sy==Symbol()&&mn==MagicNo&&Orderscnt(OP_BUY)>0&&Orderscnt(OP_SELL)>0)
{
if(ty==OP_BUY)
{
if(Current("Lots",OP_BUY)>Current("Lots",OP_SELL)&&Current("Profit",OP_BUY)>0
&&Bid>=op+PartialProfit*point&&closecount<1)
{
close=OrderClose(tk,Current("Lots",OP_BUY)-Current("Lots",OP_SELL),Bid,30);
}
}
if(ty==OP_SELL)
{
if(Current("Lots",OP_SELL)>Current("Lots",OP_BUY)&&Current("Profit",OP_SELL)>0
&&Ask<=op-PartialProfit*point&&closecount<1)
{
close=OrderClose(tk,Current("Lots",OP_SELL)-Current("Lots",OP_BUY),Ask,30);
}
}
}
}
}



الله يعطيك العافيه

هنا ظهر خطا ؟؟؟ closecount=OrderCloseCount(op,ot);

kira-h
23-07-2019, 12:45 AM
الله يعطيك العافيه

هنا ظهر خطا ؟؟؟ closecount=OrderCloseCount(op,ot);



هذه الدالة موجودة سلفا بالحل السابق وهي كالتالي:


int OrderCloseCount(double openprice,datetime opentime)
{
int closecount=0;
int i=0;
while(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
i++;
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
{
if(OrderOpenPrice()==openprice&&OrderOpenTime()==opentime)closecount++;
}
}
return(closecount);
}

kira-h
23-07-2019, 01:16 AM
لان كل صفقه عايز تكون بلوت مختلف يعنى

الصفقه 1 لها لوت خاص بها
الصفقه 2 لها لوت خاص بها
الصفقه 3 لها لوت خاص بها
الصفقه 4 لها لوت خاص بها
هكذا

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


في هذه الحالة يكفي استخدام عقد واحد عند كل مستوى، سيكون اكثر دقة في التنفيذ وسهل برمجيا
اما إذا تريد مضاعفات التبريد فهذا موضوع آخر!


ده الكود اخى حسن



//+------------------------------------------------------------------+
//| ScalperV1.mq4 |
//| Copyright 2005-2014, MetaQuotes Software Corp. |
//| https://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright "2005-2014, MetaQuotes Software Corp."
#property link "https://www.mql4.com"
#property description "ScalperV1 expert advisor"

enum OrdersTy
{
BuyOnly=0,
SellOnly=1,
BuySellBoth=2,
};




input string INFO="0 Buy - 1 Sell - 2 Both";
extern int OrdersT = 2;
extern double LotsBuy = 0.01;
extern double LotsSell = 0.01;
extern int MaxSpread = 4;
input bool CloseAtNext=false;
extern int MaxTrades= 2;
extern int GapSize = 0;
extern int StopLoss = 0;
extern int TakeProfit = 0;
extern int TrailingStop=0;
extern int TrailingStep=0;
extern int BreakEven=0;
input int BreakEvenPips=0;
extern int USDP=0;
extern int USDL=0;
extern int MagicNumber = 555555;


//---------


double LotsB_1=0.02,
LotsB_2=0.03,
LotsB_3=0.04,
LotsB_4=0.05,
LotsB_5=0.06,
LotsB_6=0.07,
LotsB_7=0.08,
LotsB_8=0.09,
LotsB_9=0.1,
LotsB_10=0.11,
LotsB_11=0.12,
LotsB_12=0.13,
LotsB_13=0.14,
LotsB_14=0.15,
LotsB_15=0.16,
LotsB_16=0.17,
LotsB_17=0.18,
LotsB_18=0.19,
LotsB_19=0.20,
LotsB_20=0.21;



double LotsS_1=1.1,
LotsS_2=2.0,
LotsS_3=3.0,
LotsS_4=4.0,
LotsS_5=5.0,
LotsS_6=6.0,
LotsS_7=7.0,
LotsS_8=8.0,
LotsS_9=9.0,
LotsS_10=10.0,
LotsS_11=11.0,
LotsS_12=12.0,
LotsS_13=13.0,
LotsS_14=14.0,
LotsS_15=15.0,
LotsS_16=16.0,
LotsS_17=17.0,
LotsS_18=18.0,
LotsS_19=19.0,
LotsS_20=20.0;




int CheckStep = GapSize;

int EMA1 = 50;
int EMA2 = 100;
ENUM_APPLIED_PRICE apply1 = PRICE_CLOSE;
ENUM_APPLIED_PRICE apply2 = PRICE_CLOSE;


double buyMM = 2;
double sellMM = 2;


string commentSell, commentBuy, NewLotsSell, NewLotsBuy;
double p,SL,TP,NewLots;
int LimitBuy, LimitSell;
double lotaB,lotaS,LB,LS;
double UT1, DW1,point;
int Q,digits;


datetime time=0;
datetime BarTime;

double chain[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20};
double chain2[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20};


void OnInit()
{



if(Digits==4 || Digits<=2) point=Point;
if(Digits==5 || Digits==3) point=Point*10;



}


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


if(TrailingStop>0)MoveTrailingStop();
if(BreakEven>0)MoveBreakEven();
if((USDP!=0&&Profit_By_USD()>=USDP)
||(USDL!=0&&Profit_By_USD()<=-USDL)){CloseOrders();}




if(Orderscnt(OP_BUY)>0&&Ask<=LastPrice(OP_BUY)-CheckStep*point)
if(Orderscnt(OP_SELL)>0&&Bid>=LastPrice(OP_SELL)+CheckStep*point)

if(Bars<100 || IsTradeAllowed()==false)
return;

double Fast_1=iMA(NULL,0,EMA1,50,MODE_SMMA,apply1,0);
double Fast_2=iMA(NULL,0,EMA2,200,MODE_SMMA,apply2,0);




chain[1]=LotsB_1;
chain[2]=LotsB_2;
chain[3]=LotsB_3;
chain[4]=LotsB_4;
chain[5]=LotsB_5;
chain[6]=LotsB_6;
chain[7]=LotsB_7;
chain[8]=LotsB_8;
chain[9]=LotsB_9;
chain[10]=LotsB_10;
chain[11]=LotsB_11;
chain[12]=LotsB_12;
chain[13]=LotsB_13;
chain[14]=LotsB_14;
chain[15]=LotsB_15;
chain[16]=LotsB_16;
chain[17]=LotsB_17;
chain[18]=LotsB_18;
chain[19]=LotsB_19;
chain[20]=LotsB_20;



if(LastPrice(OP_BUY)&&(Closed("Profit")<=0))
if(Closed("Profit")>=0&&(HistoryOrders()==0||(HistoryOrders()>0)))NewLots=LotsBuy;
{
NewLotsBuy=chain[LEVEL()+1];
commentBuy=DoubleToStr(LEVEL()+1,0);
}
if(LastOrder("Profit")>=0){NewLotsBuy=LotsBuy;commentBuy="0";}



chain2[1]=LotsS_1;
chain2[2]=LotsS_2;
chain2[3]=LotsS_3;
chain2[4]=LotsS_4;
chain2[5]=LotsS_5;
chain2[6]=LotsS_6;
chain2[7]=LotsS_7;
chain2[8]=LotsS_8;
chain2[9]=LotsS_9;
chain2[10]=LotsS_10;
chain2[11]=LotsS_11;
chain2[12]=LotsS_12;
chain2[13]=LotsS_13;
chain2[14]=LotsS_14;
chain2[15]=LotsS_15;
chain2[16]=LotsS_16;
chain2[17]=LotsS_17;
chain2[18]=LotsS_18;
chain2[19]=LotsS_19;
chain2[20]=LotsS_20;




if(LastPrice(OP_SELL)&&(Closed("Profit")<=0))
{
NewLotsSell=chain2[LEVEL2()+1];
commentSell=DoubleToStr(LEVEL2()+1,0);
}
if(LastOrder("Profit")>=0){NewLotsSell=LotsSell;commentSell="0";}




//buy

if (Ask >= (DW1 + buyMM * GapSize * point))
{
UT1 = Fast_2;
sellMM = 2;
buyMM++;


if(CloseAtNext)CloseDeleteOrders(OP_SELL);
if(BuyingEnabled() && WithinAllowableSpread()) {
if(Orderscnt()==0&&BarTime!=Time[0])
if(StopLoss!=0){SL=Ask-StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Ask+TakeProfit*point;}else TP=0;
if(TotalOrders(OP_BUY)<MaxTrades)
int rBuy=OrderSend(Symbol(),OP_BUY,NewLotsBuy,Normaliz eDouble(Ask,Digits),3*Q,SL,TP,commentBuy,MagicNumb er,0,Blue);
if(rBuy>0)time=Time[0];
BarTime=Time[0];



}
}



//sell

if (Bid <= (UT1 - sellMM * GapSize * point))
{
DW1 = Fast_1;
buyMM = 2;
sellMM++;


if(CloseAtNext)CloseDeleteOrders(OP_BUY);
if(SellingEnabled() && WithinAllowableSpread()) {
if(Orderscnt()==0&&BarTime!=Time[0])
if(StopLoss!=0){SL=Bid+StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Bid-TakeProfit*point;}else TP=0;
if(TotalOrders(OP_SELL)<MaxTrades)
int rSell=OrderSend(Symbol(),OP_SELL,NewLotsSell,Norma lizeDouble(Bid,Digits),3*Q,SL,TP,commentSell,Magic Number,0,Red);
if(rSell>0)time=Time[0];
BarTime=Time[0];


}
}
}




bool SellingEnabled()
{
if( (OrdersT == SellOnly) || (OrdersT == BuySellBoth) )
return true;
return false;
}

bool BuyingEnabled()
{
if( (OrdersT == BuyOnly) || (OrdersT == BuySellBoth) )
return true;
return false;
}



//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Max Spread |
//+------------------------------------------------------------------+



bool WithinAllowableSpread()
{
if(MaxSpread == 0)
return true;

if( Ask-Bid > MaxSpread * point)
return false;

return true;
}


//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS |
//+------------------------------------------------------------------+


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);
}
}



//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Trailing Stop |
//+------------------------------------------------------------------+


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*point,Digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*poin t,Digits))
{
if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-TrailingStop*point,Digits))||(OrderStopLoss()==0))
{
bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(Bid-TrailingStop*point,Digits),OrderTakeProfit(),0,Blu e);

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

}
}
}
}
}
}


//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Break Even |
//+------------------------------------------------------------------+


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*point)
{
if(NormalizeDouble((OrderStopLoss()-OrderOpenPrice()),Digits)<0||(OrderStopLoss()==0))
{
bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(OrderOpenPrice()+BreakEvenPips*point,D igits),OrderTakeProfit(),0,Blue);

}
}
}
}
else
{
if(BreakEven>0)
{
if(NormalizeDouble((OrderOpenPrice()-Ask),Digits)>BreakEven*point)
{
if(NormalizeDouble((OrderOpenPrice()-OrderStopLoss()),Digits)<0||(OrderStopLoss()==0))
{
bool nn=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(OrderOpenPrice()-BreakEvenPips*point,Digits),OrderTakeProfit(),0,Re d);

}
}
}
}
}
}
}


//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS To Know The Profit Of Open Positions |
//+------------------------------------------------------------------+


double Profit_By_USD(int type=-1)
{
double pts;
for(int i=0;i<OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ot=OrderType();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
if(sy==Symbol()&&mn==MagicNumber)
{
if(ot==type||type==-1)
{
pts+=pt+sw+cm;
}
}
}
return(pts);
}



//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Closing Trades Together |
//+------------------------------------------------------------------+


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);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==type||type==-1)
{
if(OrderType()==OP_BUY){close=OrderClose(OrderTick et(),OrderLots(),NormalizeDouble(Bid,Digits),5*Q); }
if(OrderType()==OP_SELL){close=OrderClose(OrderTic ket(),OrderLots(),NormalizeDouble(Ask,Digits),5*Q) ;}
if(OrderType()>OP_SELL){del=OrderDelete(OrderTicket());}
}
}
}
}



//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS HiddenTP |
//+------------------------------------------------------------------+



//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS ´ HiddenSL |
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS To Know Total Orders |
//+------------------------------------------------------------------+


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



//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Close Delete Orders |
//+------------------------------------------------------------------+

void CloseDeleteOrders(int type)
{
bool select,close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
if(OrderType()==type)
{
if(OrderType()==OP_BUY)
{
close=OrderClose(OrderTicket(),OrderLots(),Normali zeDouble(Bid,Digits),5*Q);
}
if(OrderType()==OP_SELL)
{
close=OrderClose(OrderTicket(),OrderLots(),Normali zeDouble(Ask,Digits),5*Q);
}
if(OrderType()>OP_SELL)
{
close=OrderDelete(OrderTicket());
}
}
}
}


//دالة تعود بسعر آخر صفقة مفتوحة بدلالة نوعها
double LastPrice(int type)
{
int cnt;
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
{
cnt++;
if(cnt>=2)
return(OrderOpenPrice());
}
}
return(0);
}



/*
//دالة اغلاق الصفقات بدلالة النوع
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(),
ot=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots();
if(tt>0&&sy==Symbol()&&mn==MagicNumber)
{
if(ot==type||type==-1)
{
if(ot==OP_BUY){close=OrderClose(tk,lo,NormalizeDou ble(Bid,Digits),5*Q);}
if(ot==OP_SELL){close=OrderClose(tk,lo,NormalizeDo uble(Ask,Digits),5*Q);}
if(ot>OP_SELL){close=OrderDelete(tk);}
}
}
}
}
*/

//دالة لمعرفة نوع آخر صفقة مغلقة
int LastType()
{
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();
if(sy==Symbol()&&mn==MagicNumber)
{
return(ty);
}
}
return(0);
}



//دالة لمعرفة توقيت اغلاق آخر صفقة بدلالة نوعها

datetime LastTime(int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();
datetime ct=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNumber&&(ty==type||type==-1))
{
return(ct);
}
}
return(0);
}



//دالة لمعرفة ربح آخر صفقة مغلقة بدلالة نوعها

double LastProfit(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();
datetime ct=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNumber&&(ty==type||type==-1))
{
if(info=="Profit")return(pt);

}
}
return(0);
}




datetime FirstClose()
{
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 lo=OrderLots();
datetime om=OrderOpenTime();
if(sy==Symbol()&&mn==MagicNumber&&lo==LotsBuy)
if(sy==Symbol()&&mn==MagicNumber&&lo==LotsSell)
{
return(om);
}
}
return(0);
}



double TotalProfit()
{
double pts=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
datetime om=OrderCloseTime();

if(sy==Symbol()&&mn==MagicNumber&&om>FirstClose())
{
pts+=pt+sw+cm;
}
}
return(pts);
}



double LastOrder(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
pt=OrderProfit(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();
datetime om=OrderOpenTime(),
cm=OrderCloseTime();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
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=="CloseTime")return(cm);
else if(info=="Comment")return(mm);
}
}
}
return(0);
}



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





double Closed(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
pt=OrderProfit(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="Profit")return(pt);
else if(info=="Type")return(ty);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
else if(info=="TP")return(tp);
else if(info=="SL")return(sl);
}
}
}
return(0);
}




double CurrentLots(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(),
ty=OrderType();
double lo=OrderLots();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
return(lo);
}
}
}
return(0);
}




int HistoryOrders(int type=-1)
{
int cnt=0;
for(int i =0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()&&(OrderType()==type||type==-1))
{
cnt++;
}
}
}
return(cnt);
}



double LastCurrent(string info,int type=-1)//دالة لمعرفة كل تفاصيل الصفقة المفعلة بدلالة النوع
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&(OrderType()==type||type==-1))
{
if(info=="Type")return(OrderType());
else if(info=="Lots")return(OrderLots());
else if(info=="Price")return(OrderOpenPrice());
else if(info=="TP")return(OrderTakeProfit());
else if(info=="SL")return(OrderStopLoss());
else if(info=="Profit")return(OrderProfit());
else if(info=="Time")return(OrderOpenTime());
}
}
return(0);
}


double LastOrderClosed(string info)//نتيجة آخر صفقة مغلقة والاكبر من حيث توقيت الفتح
{
double c=0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()<=OP_SELL)
{
if(OrderOpenTime()>c)c=OrderOpenTime();
if(OrderOpenTime()==c)
{
if(info=="Profit")return(OrderProfit());
else if(info=="Lots")return(OrderLots());
}
}
}
return(0);
}


int Orderscnt()//دالة عدد الصفقات المفتوحة
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
cnt++;//عد الصفقات
}
}
}
return(cnt);
}




void CloseAllOrders(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(),
ot=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots();
if(tt>0)
{
if(ot==type||type==-1)
{
if(ot==OP_BUY){close=OrderClose(tk,lo,MarketInfo(s y,MODE_BID),50);}
if(ot==OP_SELL){close=OrderClose(tk,lo,MarketInfo( sy,MODE_ASK),50);}
if(ot>OP_SELL){del=OrderDelete(tk);}
}
}
}
}




int LEVEL()
{
int c;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
commentBuy=OrderComment();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
StringReplace(commentBuy,"[sl]","");
c=StrToInteger(commentBuy);


return(c);
}
}
return(c);
}




int LEVEL2()
{
int c;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
commentSell=OrderComment();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
StringReplace(commentSell,"[sl]","");
c=StrToInteger(commentSell);


return(c);
}
}
return(c);
}





حاولت تصحيح الأخطاء ومعظمها غير واضحة منطقيا لأني لا اعلم ما تريده من الاكسبيرت
الكود مع بعض التعليقات


//+------------------------------------------------------------------+
//| ScalperV1.mq4 |
//| Copyright 2005-2014, MetaQuotes Software Corp. |
//| https://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright "2005-2014, MetaQuotes Software Corp."
#property link "https://www.mql4.com"
#property description "ScalperV1 expert advisor"


enum OrdersTy
{
BuyOnly=0,
SellOnly=1,
BuySellBoth=2,
};


input OrdersTy OrdersT = 2;
extern double LotsBuy = 0.01;
extern double LotsSell = 0.01;
extern int MaxSpread = 4;
input bool CloseAtNext=false;
extern int MaxTrades= 2;
extern int GapSize = 0;
extern int StopLoss = 0;
extern int TakeProfit = 0;
extern int TrailingStop=0;
extern int TrailingStep=0;
extern int BreakEven=0;
input int BreakEvenPips=0;
extern int USDP=0;
extern int USDL=0;
extern int MagicNumber = 555555;




//---------




double LotsB_1=0.02,
LotsB_2=0.03,
LotsB_3=0.04,
LotsB_4=0.05,
LotsB_5=0.06,
LotsB_6=0.07,
LotsB_7=0.08,
LotsB_8=0.09,
LotsB_9=0.1,
LotsB_10=0.11,
LotsB_11=0.12,
LotsB_12=0.13,
LotsB_13=0.14,
LotsB_14=0.15,
LotsB_15=0.16,
LotsB_16=0.17,
LotsB_17=0.18,
LotsB_18=0.19,
LotsB_19=0.20,
LotsB_20=0.21;



double LotsS_1=1.1,
LotsS_2=2.0,
LotsS_3=3.0,
LotsS_4=4.0,
LotsS_5=5.0,
LotsS_6=6.0,
LotsS_7=7.0,
LotsS_8=8.0,
LotsS_9=9.0,
LotsS_10=10.0,
LotsS_11=11.0,
LotsS_12=12.0,
LotsS_13=13.0,
LotsS_14=14.0,
LotsS_15=15.0,
LotsS_16=16.0,
LotsS_17=17.0,
LotsS_18=18.0,
LotsS_19=19.0,
LotsS_20=20.0;







int CheckStep = GapSize;

int EMA1 = 50;
int EMA2 = 100;
ENUM_APPLIED_PRICE apply1 = PRICE_CLOSE;
ENUM_APPLIED_PRICE apply2 = PRICE_CLOSE;




double buyMM = 2;
double sellMM = 2;




string commentSell, commentBuy, NewLotsSell, NewLotsBuy;
double p,SL,TP,NewLots;
int LimitBuy, LimitSell;
double lotaB,lotaS,LB,LS;
double UT1, DW1,point;
int Q,digits;




datetime time=0;
datetime BarTime;


double chain[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20};
double chain2[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20};



void OnInit()
{



if(Digits==4 || Digits<=2) point=Point;
if(Digits==5 || Digits==3) point=Point*10;




}




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



if(TrailingStop>0)MoveTrailingStop();
if(BreakEven>0)MoveBreakEven();
if((USDP!=0&&Profit_By_USD()>=USDP)
||(USDL!=0&&Profit_By_USD()<=-USDL)){CloseOrders();}



if(Bars<100 || IsTradeAllowed()==false) return;

double Fast_1=iMA(NULL,0,EMA1,50,MODE_SMMA,apply1,0);
double Fast_2=iMA(NULL,0,EMA2,200,MODE_SMMA,apply2,0);


chain[1]=LotsB_1;
chain[2]=LotsB_2;
chain[3]=LotsB_3;
chain[4]=LotsB_4;
chain[5]=LotsB_5;
chain[6]=LotsB_6;
chain[7]=LotsB_7;
chain[8]=LotsB_8;
chain[9]=LotsB_9;
chain[10]=LotsB_10;
chain[11]=LotsB_11;
chain[12]=LotsB_12;
chain[13]=LotsB_13;
chain[14]=LotsB_14;
chain[15]=LotsB_15;
chain[16]=LotsB_16;
chain[17]=LotsB_17;
chain[18]=LotsB_18;
chain[19]=LotsB_19;
chain[20]=LotsB_20;


chain2[1]=LotsS_1;
chain2[2]=LotsS_2;
chain2[3]=LotsS_3;
chain2[4]=LotsS_4;
chain2[5]=LotsS_5;
chain2[6]=LotsS_6;
chain2[7]=LotsS_7;
chain2[8]=LotsS_8;
chain2[9]=LotsS_9;
chain2[10]=LotsS_10;
chain2[11]=LotsS_11;
chain2[12]=LotsS_12;
chain2[13]=LotsS_13;
chain2[14]=LotsS_14;
chain2[15]=LotsS_15;
chain2[16]=LotsS_16;
chain2[17]=LotsS_17;
chain2[18]=LotsS_18;
chain2[19]=LotsS_19;
chain2[20]=LotsS_20;

if(Orderscnt(OP_BUY)>0&&Ask<=LastPrice(OP_BUY)-CheckStep*point)
if(Orderscnt(OP_SELL)>0&&Bid>=LastPrice(OP_SELL)+CheckStep*point)


/// كل شروط المضاعفات خاطئة تماما ليس لها منطق
//لأنك تستخدم التبريدات وهنا مضاعفات الصفقة المغلقة!!!

if(LastPrice(OP_BUY)/*<==شرط ليس له معنى*/&&(Closed("Profit")<=0))
if(Closed("Profit")>=0&&(HistoryOrders()==0||(HistoryOrders()>0)))NewLots=LotsBuy;///<==?? جواب الشرط يليه جواب اخر بالاسفل لن يعمل بهذه الطريقة
{
NewLotsBuy=chain[LEVEL()+1];
commentBuy=DoubleToStr(LEVEL()+1,0);
}
if(LastOrder("Profit")>=0){NewLotsBuy=LotsBuy;commentBuy="0";}




if(LastPrice(OP_SELL)/*<==شرط ليس له معنى*/&&(Closed("Profit")<=0))
{
NewLotsSell=chain2[LEVEL2()+1];
commentSell=DoubleToStr(LEVEL2()+1,0);
}
if(LastOrder("Profit")>=0){NewLotsSell=LotsSell;commentSell="0";}


//شروط التبريد

if((OrdersT==BuyOnly||OrdersT==BuySellBoth)&&TotalOrders(OP_BUY)<MaxTrades
&&Orderscnt(OP_BUY)>0&&Ask<=LastPrice(OP_BUY)-CheckStep*point)
{
if(StopLoss!=0){SL=Ask-StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Ask+TakeProfit*point;}else TP=0;
int rBuy2=OrderSend(Symbol(),OP_BUY,LotsBuy/*استخدمت اللوت الأساسي لأن شروط المضاعفات خاطئة*/,Ask,3*Q,SL,TP,commentBuy,MagicNumber,0,Blue);
}


if((OrdersT==SellOnly||OrdersT==BuySellBoth)&&TotalOrders(OP_SELL)<MaxTrades
&&Orderscnt(OP_SELL)>0&&Bid>=LastPrice(OP_SELL)+CheckStep*point)
{
if(StopLoss!=0){SL=Bid+StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Bid-TakeProfit*point;}else TP=0;
int rSell2=OrderSend(Symbol(),OP_SELL,LotsSell,Bid,3*Q ,SL,TP,commentSell,MagicNumber,0,Red);
}

//buy

if(Ask >= (DW1 + buyMM * GapSize * point))
{
UT1 = Fast_2;
sellMM = 2;
buyMM++;
if(CloseAtNext)CloseDeleteOrders(OP_SELL);

if((OrdersT==BuyOnly||OrdersT==BuySellBoth)
&&(Ask-Bid)<=MaxSpread*point&&Orderscnt(OP_BUY)==0&&time!=Time[0])
{
if(StopLoss!=0){SL=Ask-StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Ask+TakeProfit*point;}else TP=0;
int rBuy1=OrderSend(Symbol(),OP_BUY,LotsBuy/*استخدمت اللوت الأساسي لأن شروط المضاعفات خاطئة*/,Ask,3*Q,SL,TP,commentBuy,MagicNumber,0,Blue);
if(rBuy1>0)time=Time[0];
}
}




//sell

if (Bid <= (UT1 - sellMM * GapSize * point))
{
DW1 = Fast_1;
buyMM = 2;
sellMM++;



if((OrdersT==SellOnly||OrdersT==BuySellBoth)&&TotalOrders(OP_SELL)<MaxTrades
&&(Ask-Bid)<=MaxSpread*point&&Orderscnt(OP_SELL)==0&&time!=Time[0])
{
if(StopLoss!=0){SL=Bid+StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Bid-TakeProfit*point;}else TP=0;
int rSell1=OrderSend(Symbol(),OP_SELL,LotsSell,Bid,3*Q ,SL,TP,commentSell,MagicNumber,0,Red);
if(rSell1>0)time=Time[0];
}
}


}


//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS |
//+------------------------------------------------------------------+




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);
}
}






//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Trailing Stop |
//+------------------------------------------------------------------+




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*point,Digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*poin t,Digits))
{
if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-TrailingStop*point,Digits))||(OrderStopLoss()==0))
{
bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(Bid-TrailingStop*point,Digits),OrderTakeProfit(),0,Blu e);

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

}
}
}
}
}
}




//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Break Even |
//+------------------------------------------------------------------+




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*point)
{
if(NormalizeDouble((OrderStopLoss()-OrderOpenPrice()),Digits)<0||(OrderStopLoss()==0))
{
bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(OrderOpenPrice()+BreakEvenPips*point,D igits),OrderTakeProfit(),0,Blue);

}
}
}
}
else
{
if(BreakEven>0)
{
if(NormalizeDouble((OrderOpenPrice()-Ask),Digits)>BreakEven*point)
{
if(NormalizeDouble((OrderOpenPrice()-OrderStopLoss()),Digits)<0||(OrderStopLoss()==0))
{
bool nn=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(OrderOpenPrice()-BreakEvenPips*point,Digits),OrderTakeProfit(),0,Re d);

}
}
}
}
}
}
}




//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS To Know The Profit Of Open Positions |
//+------------------------------------------------------------------+




double Profit_By_USD(int type=-1)
{
double pts;
for(int i=0;i<OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ot=OrderType();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
if(sy==Symbol()&&mn==MagicNumber)
{
if(ot==type||type==-1)
{
pts+=pt+sw+cm;
}
}
}
return(pts);
}





//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Closing Trades Together |
//+------------------------------------------------------------------+




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);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==type||type==-1)
{
if(OrderType()==OP_BUY){close=OrderClose(OrderTick et(),OrderLots(),NormalizeDouble(Bid,Digits),5*Q); }
if(OrderType()==OP_SELL){close=OrderClose(OrderTic ket(),OrderLots(),NormalizeDouble(Ask,Digits),5*Q) ;}
if(OrderType()>OP_SELL){del=OrderDelete(OrderTicket());}
}
}
}
}






//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS To Know Total Orders |
//+------------------------------------------------------------------+


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






//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Close Delete Orders |
//+------------------------------------------------------------------+


void CloseDeleteOrders(int type)
{
bool select,close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
if(OrderType()==type)
{
if(OrderType()==OP_BUY)
{
close=OrderClose(OrderTicket(),OrderLots(),Normali zeDouble(Bid,Digits),5*Q);
}
if(OrderType()==OP_SELL)
{
close=OrderClose(OrderTicket(),OrderLots(),Normali zeDouble(Ask,Digits),5*Q);
}
if(OrderType()>OP_SELL)
{
close=OrderDelete(OrderTicket());
}
}
}
}




//دالة تعود بسعر آخر صفقة مفتوحة بدلالة نوعها
double LastPrice(int type)
{
int cnt;
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
{
cnt++;
if(cnt>=2)
return(OrderOpenPrice());
}
}
return(0);
}






/*
//دالة اغلاق الصفقات بدلالة النوع
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(),
ot=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots();
if(tt>0&&sy==Symbol()&&mn==MagicNumber)
{
if(ot==type||type==-1)
{
if(ot==OP_BUY){close=OrderClose(tk,lo,NormalizeDou ble(Bid,Digits),5*Q);}
if(ot==OP_SELL){close=OrderClose(tk,lo,NormalizeDo uble(Ask,Digits),5*Q);}
if(ot>OP_SELL){close=OrderDelete(tk);}
}
}
}
}
*/


//دالة لمعرفة نوع آخر صفقة مغلقة
int LastType()
{
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();
if(sy==Symbol()&&mn==MagicNumber)
{
return(ty);
}
}
return(0);
}






//دالة لمعرفة توقيت اغلاق آخر صفقة بدلالة نوعها


datetime LastTime(int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();
datetime ct=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNumber&&(ty==type||type==-1))
{
return(ct);
}
}
return(0);
}






//دالة لمعرفة ربح آخر صفقة مغلقة بدلالة نوعها


double LastProfit(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();
datetime ct=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNumber&&(ty==type||type==-1))
{
if(info=="Profit")return(pt);

}
}
return(0);
}








datetime FirstClose()
{
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 lo=OrderLots();
datetime om=OrderOpenTime();
if(sy==Symbol()&&mn==MagicNumber&&lo==LotsBuy)
if(sy==Symbol()&&mn==MagicNumber&&lo==LotsSell)
{
return(om);
}
}
return(0);
}






double TotalProfit()
{
double pts=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
datetime om=OrderCloseTime();

if(sy==Symbol()&&mn==MagicNumber&&om>FirstClose())
{
pts+=pt+sw+cm;
}
}
return(pts);
}






double LastOrder(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
pt=OrderProfit(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();
datetime om=OrderOpenTime(),
cm=OrderCloseTime();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
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=="CloseTime")return(cm);
else if(info=="Comment")return(mm);
}
}
}
return(0);
}




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







double Closed(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
pt=OrderProfit(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="Profit")return(pt);
else if(info=="Type")return(ty);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
else if(info=="TP")return(tp);
else if(info=="SL")return(sl);
}
}
}
return(0);
}








double CurrentLots(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(),
ty=OrderType();
double lo=OrderLots();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
return(lo);
}
}
}
return(0);
}








int HistoryOrders(int type=-1)
{
int cnt=0;
for(int i =0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()&&(OrderType()==type||type==-1))
{
cnt++;
}
}
}
return(cnt);
}






double LastCurrent(string info,int type=-1)//دالة لمعرفة كل تفاصيل الصفقة المفعلة بدلالة النوع
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&(OrderType()==type||type==-1))
{
if(info=="Type")return(OrderType());
else if(info=="Lots")return(OrderLots());
else if(info=="Price")return(OrderOpenPrice());
else if(info=="TP")return(OrderTakeProfit());
else if(info=="SL")return(OrderStopLoss());
else if(info=="Profit")return(OrderProfit());
else if(info=="Time")return(OrderOpenTime());
}
}
return(0);
}




double LastOrderClosed(string info)//نتيجة آخر صفقة مغلقة والاكبر من حيث توقيت الفتح
{
double c=0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()<=OP_SELL)
{
if(OrderOpenTime()>c)c=OrderOpenTime();
if(OrderOpenTime()==c)
{
if(info=="Profit")return(OrderProfit());
else if(info=="Lots")return(OrderLots());
}
}
}
return(0);
}




int Orderscnt()//دالة عدد الصفقات المفتوحة
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
cnt++;//عد الصفقات
}
}
}
return(cnt);
}








void CloseAllOrders(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(),
ot=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots();
if(tt>0)
{
if(ot==type||type==-1)
{
if(ot==OP_BUY){close=OrderClose(tk,lo,MarketInfo(s y,MODE_BID),50);}
if(ot==OP_SELL){close=OrderClose(tk,lo,MarketInfo( sy,MODE_ASK),50);}
if(ot>OP_SELL){del=OrderDelete(tk);}
}
}
}
}








int LEVEL()
{
int c;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
commentBuy=OrderComment();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
StringReplace(commentBuy,"[sl]","");
c=StrToInteger(commentBuy);


return(c);
}
}
return(c);
}








int LEVEL2()
{
int c;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
commentSell=OrderComment();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
StringReplace(commentSell,"[sl]","");
c=StrToInteger(commentSell);


return(c);
}
}
return(c);
}

kira-h
23-07-2019, 01:34 AM
اخي حسن
بحاول احسب المسافة بين البيع والشراء الاول وعلى اساسها تكون المسافة المعتمدة بين صفقات البيع والشراء لاحقاً
عن طريق الدوال التالية :
الاول عملت متغير يحسب المسافة


double dis_h2=(LastOrder("Price","Aymoon-h2",OP_BUY)-LastOrder("Price","Aymoon-h2",OP_SELL));

ثانيا في شروط الدخول عملت الاتي :


if(Orderscnt("Aymoon-h2")<MaxTrades) {
if(Orderscnt("Aymoon-h2",OP_BUY)>0&&Orderscnt("Aymoon-h2",OP_SELL)>0&&LastOrder("Type","Aymoon-h2")==OP_BUY)
{
if(Ask<=LastOrder("Price","Aymoon-h2",OP_SELL)-dis_h2)
{
if(Stoploss!=0)SL=Bid+Stoploss*point;else SL=0;
if(Takeprofit!=0)TP=Bid-Takeprofit*point;else TP=0;
ticket=OrderSend(Symbol(),OP_SELL,NewLots2,Normali zeDouble(Bid,Digits),3*Q,SL,TP,"Aymoon-h2",MagicNo,0,Magenta);
}
}
if(Orderscnt("Aymoon-h2",OP_BUY)>0&&Orderscnt("Aymoon-h2",OP_SELL)>0&&LastOrder("Type","Aymoon-h2")==OP_SELL)
{
if(Bid>=LastOrder("Price","Aymoon-h2",OP_BUY)+dis_h2)
{
if(Stoploss!=0)SL=Ask-Stoploss*point;else SL=0;
if(Takeprofit!=0)TP=Ask+Takeprofit*point;else TP=0;
ticket=OrderSend(Symbol(),OP_BUY,NewLots2,Normaliz eDouble(Ask,Digits),3*Q,SL,TP,"Aymoon-h2",MagicNo,0,Green);
}
}
}

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

لكن الل بيحصل انه بيفتح 3 اوردرات بعد البيع الاول (2 شراء وواحد بيع من نفس السعر ونفس اللوت) بعد توافق شروط الشراء

المشكلة فين هنا؟
السلام عليكم
الصحيح كالتالي:


double dis_h2=MathAbs(FirstPrice("Aymoon-h2",OP_BUY)-FirstPrice("Aymoon-h2",OP_SELL));

if(MaxTrades>0&&Orderscnt("Aymoon-h2")<MaxTrades&&Orderscnt("Aymoon-h2",OP_BUY)>0&&Orderscnt("Aymoon-h2",OP_SELL)>0)
{
if(LastOrder("Type","Aymoon-h2")==OP_BUY&&Ask<=LastOrder("Price","Aymoon-h2",OP_BUY)-dis_h2)
{
if(Stoploss!=0)SL=Bid+Stoploss*point;else SL=0;
if(Takeprofit!=0)TP=Bid-Takeprofit*point;else TP=0;
ticket=OrderSend(Symbol(),OP_SELL,NewLots2,Bid,3*Q ,SL,TP,"Aymoon-h2",MagicNo,0,Magenta);
}
if(LastOrder("Type","Aymoon-h2")==OP_SELL&&Bid>=LastOrder("Price","Aymoon-h2",OP_SELL)+dis_h2)
{
if(Stoploss!=0)SL=Ask-Stoploss*point;else SL=0;
if(Takeprofit!=0)TP=Ask+Takeprofit*point;else TP=0;
ticket=OrderSend(Symbol(),OP_BUY,NewLots2,Ask,3*Q, SL,TP,"Aymoon-h2",MagicNo,0,Green);
}
}

double FirstPrice(string comment,int type)
{
for(int i=0;i<OrdersTotal();i++)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol(),
cm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double op=OrderOpenPrice();
if(sy==Symbol()&&mn==MagicNo&&cm==comment)
{
if(ty==type)return(op);
}
}
return(0);
}

aut
23-07-2019, 03:05 AM
في هذه الحالة يكفي استخدام عقد واحد عند كل مستوى، سيكون اكثر دقة في التنفيذ وسهل برمجيا
اما إذا تريد مضاعفات التبريد فهذا موضوع آخر!



حاولت تصحيح الأخطاء ومعظمها غير واضحة منطقيا لأني لا اعلم ما تريده من الاكسبيرت
الكود مع بعض التعليقات


//+------------------------------------------------------------------+
//| ScalperV1.mq4 |
//| Copyright 2005-2014, MetaQuotes Software Corp. |
//| https://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright "2005-2014, MetaQuotes Software Corp."
#property link "https://www.mql4.com"
#property description "ScalperV1 expert advisor"


enum OrdersTy
{
BuyOnly=0,
SellOnly=1,
BuySellBoth=2,
};


input OrdersTy OrdersT = 2;
extern double LotsBuy = 0.01;
extern double LotsSell = 0.01;
extern int MaxSpread = 4;
input bool CloseAtNext=false;
extern int MaxTrades= 2;
extern int GapSize = 0;
extern int StopLoss = 0;
extern int TakeProfit = 0;
extern int TrailingStop=0;
extern int TrailingStep=0;
extern int BreakEven=0;
input int BreakEvenPips=0;
extern int USDP=0;
extern int USDL=0;
extern int MagicNumber = 555555;




//---------




double LotsB_1=0.02,
LotsB_2=0.03,
LotsB_3=0.04,
LotsB_4=0.05,
LotsB_5=0.06,
LotsB_6=0.07,
LotsB_7=0.08,
LotsB_8=0.09,
LotsB_9=0.1,
LotsB_10=0.11,
LotsB_11=0.12,
LotsB_12=0.13,
LotsB_13=0.14,
LotsB_14=0.15,
LotsB_15=0.16,
LotsB_16=0.17,
LotsB_17=0.18,
LotsB_18=0.19,
LotsB_19=0.20,
LotsB_20=0.21;



double LotsS_1=1.1,
LotsS_2=2.0,
LotsS_3=3.0,
LotsS_4=4.0,
LotsS_5=5.0,
LotsS_6=6.0,
LotsS_7=7.0,
LotsS_8=8.0,
LotsS_9=9.0,
LotsS_10=10.0,
LotsS_11=11.0,
LotsS_12=12.0,
LotsS_13=13.0,
LotsS_14=14.0,
LotsS_15=15.0,
LotsS_16=16.0,
LotsS_17=17.0,
LotsS_18=18.0,
LotsS_19=19.0,
LotsS_20=20.0;







int CheckStep = GapSize;

int EMA1 = 50;
int EMA2 = 100;
ENUM_APPLIED_PRICE apply1 = PRICE_CLOSE;
ENUM_APPLIED_PRICE apply2 = PRICE_CLOSE;




double buyMM = 2;
double sellMM = 2;




string commentSell, commentBuy, NewLotsSell, NewLotsBuy;
double p,SL,TP,NewLots;
int LimitBuy, LimitSell;
double lotaB,lotaS,LB,LS;
double UT1, DW1,point;
int Q,digits;




datetime time=0;
datetime BarTime;


double chain[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20};
double chain2[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20};



void OnInit()
{



if(Digits==4 || Digits<=2) point=Point;
if(Digits==5 || Digits==3) point=Point*10;




}




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



if(TrailingStop>0)MoveTrailingStop();
if(BreakEven>0)MoveBreakEven();
if((USDP!=0&&Profit_By_USD()>=USDP)
||(USDL!=0&&Profit_By_USD()<=-USDL)){CloseOrders();}



if(Bars<100 || IsTradeAllowed()==false) return;

double Fast_1=iMA(NULL,0,EMA1,50,MODE_SMMA,apply1,0);
double Fast_2=iMA(NULL,0,EMA2,200,MODE_SMMA,apply2,0);


chain[1]=LotsB_1;
chain[2]=LotsB_2;
chain[3]=LotsB_3;
chain[4]=LotsB_4;
chain[5]=LotsB_5;
chain[6]=LotsB_6;
chain[7]=LotsB_7;
chain[8]=LotsB_8;
chain[9]=LotsB_9;
chain[10]=LotsB_10;
chain[11]=LotsB_11;
chain[12]=LotsB_12;
chain[13]=LotsB_13;
chain[14]=LotsB_14;
chain[15]=LotsB_15;
chain[16]=LotsB_16;
chain[17]=LotsB_17;
chain[18]=LotsB_18;
chain[19]=LotsB_19;
chain[20]=LotsB_20;


chain2[1]=LotsS_1;
chain2[2]=LotsS_2;
chain2[3]=LotsS_3;
chain2[4]=LotsS_4;
chain2[5]=LotsS_5;
chain2[6]=LotsS_6;
chain2[7]=LotsS_7;
chain2[8]=LotsS_8;
chain2[9]=LotsS_9;
chain2[10]=LotsS_10;
chain2[11]=LotsS_11;
chain2[12]=LotsS_12;
chain2[13]=LotsS_13;
chain2[14]=LotsS_14;
chain2[15]=LotsS_15;
chain2[16]=LotsS_16;
chain2[17]=LotsS_17;
chain2[18]=LotsS_18;
chain2[19]=LotsS_19;
chain2[20]=LotsS_20;

if(Orderscnt(OP_BUY)>0&&Ask<=LastPrice(OP_BUY)-CheckStep*point)
if(Orderscnt(OP_SELL)>0&&Bid>=LastPrice(OP_SELL)+CheckStep*point)


/// كل شروط المضاعفات خاطئة تماما ليس لها منطق
//لأنك تستخدم التبريدات وهنا مضاعفات الصفقة المغلقة!!!

if(LastPrice(OP_BUY)/*<==شرط ليس له معنى*/&&(Closed("Profit")<=0))
if(Closed("Profit")>=0&&(HistoryOrders()==0||(HistoryOrders()>0)))NewLots=LotsBuy;///<==?? جواب الشرط يليه جواب اخر بالاسفل لن يعمل بهذه الطريقة
{
NewLotsBuy=chain[LEVEL()+1];
commentBuy=DoubleToStr(LEVEL()+1,0);
}
if(LastOrder("Profit")>=0){NewLotsBuy=LotsBuy;commentBuy="0";}




if(LastPrice(OP_SELL)/*<==شرط ليس له معنى*/&&(Closed("Profit")<=0))
{
NewLotsSell=chain2[LEVEL2()+1];
commentSell=DoubleToStr(LEVEL2()+1,0);
}
if(LastOrder("Profit")>=0){NewLotsSell=LotsSell;commentSell="0";}


//شروط التبريد

if((OrdersT==BuyOnly||OrdersT==BuySellBoth)&&TotalOrders(OP_BUY)<MaxTrades
&&Orderscnt(OP_BUY)>0&&Ask<=LastPrice(OP_BUY)-CheckStep*point)
{
if(StopLoss!=0){SL=Ask-StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Ask+TakeProfit*point;}else TP=0;
int rBuy2=OrderSend(Symbol(),OP_BUY,LotsBuy/*استخدمت اللوت الأساسي لأن شروط المضاعفات خاطئة*/,Ask,3*Q,SL,TP,commentBuy,MagicNumber,0,Blue);
}


if((OrdersT==SellOnly||OrdersT==BuySellBoth)&&TotalOrders(OP_SELL)<MaxTrades
&&Orderscnt(OP_SELL)>0&&Bid>=LastPrice(OP_SELL)+CheckStep*point)
{
if(StopLoss!=0){SL=Bid+StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Bid-TakeProfit*point;}else TP=0;
int rSell2=OrderSend(Symbol(),OP_SELL,LotsSell,Bid,3*Q ,SL,TP,commentSell,MagicNumber,0,Red);
}

//buy

if(Ask >= (DW1 + buyMM * GapSize * point))
{
UT1 = Fast_2;
sellMM = 2;
buyMM++;
if(CloseAtNext)CloseDeleteOrders(OP_SELL);

if((OrdersT==BuyOnly||OrdersT==BuySellBoth)
&&(Ask-Bid)<=MaxSpread*point&&Orderscnt(OP_BUY)==0&&time!=Time[0])
{
if(StopLoss!=0){SL=Ask-StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Ask+TakeProfit*point;}else TP=0;
int rBuy1=OrderSend(Symbol(),OP_BUY,LotsBuy/*استخدمت اللوت الأساسي لأن شروط المضاعفات خاطئة*/,Ask,3*Q,SL,TP,commentBuy,MagicNumber,0,Blue);
if(rBuy1>0)time=Time[0];
}
}




//sell

if (Bid <= (UT1 - sellMM * GapSize * point))
{
DW1 = Fast_1;
buyMM = 2;
sellMM++;



if((OrdersT==SellOnly||OrdersT==BuySellBoth)&&TotalOrders(OP_SELL)<MaxTrades
&&(Ask-Bid)<=MaxSpread*point&&Orderscnt(OP_SELL)==0&&time!=Time[0])
{
if(StopLoss!=0){SL=Bid+StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Bid-TakeProfit*point;}else TP=0;
int rSell1=OrderSend(Symbol(),OP_SELL,LotsSell,Bid,3*Q ,SL,TP,commentSell,MagicNumber,0,Red);
if(rSell1>0)time=Time[0];
}
}


}


//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS |
//+------------------------------------------------------------------+




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);
}
}






//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Trailing Stop |
//+------------------------------------------------------------------+




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*point,Digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*poin t,Digits))
{
if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-TrailingStop*point,Digits))||(OrderStopLoss()==0))
{
bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(Bid-TrailingStop*point,Digits),OrderTakeProfit(),0,Blu e);

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

}
}
}
}
}
}




//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Break Even |
//+------------------------------------------------------------------+




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*point)
{
if(NormalizeDouble((OrderStopLoss()-OrderOpenPrice()),Digits)<0||(OrderStopLoss()==0))
{
bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(OrderOpenPrice()+BreakEvenPips*point,D igits),OrderTakeProfit(),0,Blue);

}
}
}
}
else
{
if(BreakEven>0)
{
if(NormalizeDouble((OrderOpenPrice()-Ask),Digits)>BreakEven*point)
{
if(NormalizeDouble((OrderOpenPrice()-OrderStopLoss()),Digits)<0||(OrderStopLoss()==0))
{
bool nn=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(OrderOpenPrice()-BreakEvenPips*point,Digits),OrderTakeProfit(),0,Re d);

}
}
}
}
}
}
}




//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS To Know The Profit Of Open Positions |
//+------------------------------------------------------------------+




double Profit_By_USD(int type=-1)
{
double pts;
for(int i=0;i<OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ot=OrderType();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
if(sy==Symbol()&&mn==MagicNumber)
{
if(ot==type||type==-1)
{
pts+=pt+sw+cm;
}
}
}
return(pts);
}





//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Closing Trades Together |
//+------------------------------------------------------------------+




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);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==type||type==-1)
{
if(OrderType()==OP_BUY){close=OrderClose(OrderTick et(),OrderLots(),NormalizeDouble(Bid,Digits),5*Q); }
if(OrderType()==OP_SELL){close=OrderClose(OrderTic ket(),OrderLots(),NormalizeDouble(Ask,Digits),5*Q) ;}
if(OrderType()>OP_SELL){del=OrderDelete(OrderTicket());}
}
}
}
}






//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS To Know Total Orders |
//+------------------------------------------------------------------+


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






//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Close Delete Orders |
//+------------------------------------------------------------------+


void CloseDeleteOrders(int type)
{
bool select,close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
if(OrderType()==type)
{
if(OrderType()==OP_BUY)
{
close=OrderClose(OrderTicket(),OrderLots(),Normali zeDouble(Bid,Digits),5*Q);
}
if(OrderType()==OP_SELL)
{
close=OrderClose(OrderTicket(),OrderLots(),Normali zeDouble(Ask,Digits),5*Q);
}
if(OrderType()>OP_SELL)
{
close=OrderDelete(OrderTicket());
}
}
}
}




//دالة تعود بسعر آخر صفقة مفتوحة بدلالة نوعها
double LastPrice(int type)
{
int cnt;
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
{
cnt++;
if(cnt>=2)
return(OrderOpenPrice());
}
}
return(0);
}






/*
//دالة اغلاق الصفقات بدلالة النوع
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(),
ot=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots();
if(tt>0&&sy==Symbol()&&mn==MagicNumber)
{
if(ot==type||type==-1)
{
if(ot==OP_BUY){close=OrderClose(tk,lo,NormalizeDou ble(Bid,Digits),5*Q);}
if(ot==OP_SELL){close=OrderClose(tk,lo,NormalizeDo uble(Ask,Digits),5*Q);}
if(ot>OP_SELL){close=OrderDelete(tk);}
}
}
}
}
*/


//دالة لمعرفة نوع آخر صفقة مغلقة
int LastType()
{
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();
if(sy==Symbol()&&mn==MagicNumber)
{
return(ty);
}
}
return(0);
}






//دالة لمعرفة توقيت اغلاق آخر صفقة بدلالة نوعها


datetime LastTime(int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();
datetime ct=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNumber&&(ty==type||type==-1))
{
return(ct);
}
}
return(0);
}






//دالة لمعرفة ربح آخر صفقة مغلقة بدلالة نوعها


double LastProfit(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();
datetime ct=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNumber&&(ty==type||type==-1))
{
if(info=="Profit")return(pt);

}
}
return(0);
}








datetime FirstClose()
{
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 lo=OrderLots();
datetime om=OrderOpenTime();
if(sy==Symbol()&&mn==MagicNumber&&lo==LotsBuy)
if(sy==Symbol()&&mn==MagicNumber&&lo==LotsSell)
{
return(om);
}
}
return(0);
}






double TotalProfit()
{
double pts=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
datetime om=OrderCloseTime();

if(sy==Symbol()&&mn==MagicNumber&&om>FirstClose())
{
pts+=pt+sw+cm;
}
}
return(pts);
}






double LastOrder(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
pt=OrderProfit(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();
datetime om=OrderOpenTime(),
cm=OrderCloseTime();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
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=="CloseTime")return(cm);
else if(info=="Comment")return(mm);
}
}
}
return(0);
}




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







double Closed(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
pt=OrderProfit(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="Profit")return(pt);
else if(info=="Type")return(ty);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
else if(info=="TP")return(tp);
else if(info=="SL")return(sl);
}
}
}
return(0);
}








double CurrentLots(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(),
ty=OrderType();
double lo=OrderLots();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
return(lo);
}
}
}
return(0);
}








int HistoryOrders(int type=-1)
{
int cnt=0;
for(int i =0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()&&(OrderType()==type||type==-1))
{
cnt++;
}
}
}
return(cnt);
}






double LastCurrent(string info,int type=-1)//دالة لمعرفة كل تفاصيل الصفقة المفعلة بدلالة النوع
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&(OrderType()==type||type==-1))
{
if(info=="Type")return(OrderType());
else if(info=="Lots")return(OrderLots());
else if(info=="Price")return(OrderOpenPrice());
else if(info=="TP")return(OrderTakeProfit());
else if(info=="SL")return(OrderStopLoss());
else if(info=="Profit")return(OrderProfit());
else if(info=="Time")return(OrderOpenTime());
}
}
return(0);
}




double LastOrderClosed(string info)//نتيجة آخر صفقة مغلقة والاكبر من حيث توقيت الفتح
{
double c=0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()<=OP_SELL)
{
if(OrderOpenTime()>c)c=OrderOpenTime();
if(OrderOpenTime()==c)
{
if(info=="Profit")return(OrderProfit());
else if(info=="Lots")return(OrderLots());
}
}
}
return(0);
}




int Orderscnt()//دالة عدد الصفقات المفتوحة
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
cnt++;//عد الصفقات
}
}
}
return(cnt);
}








void CloseAllOrders(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(),
ot=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots();
if(tt>0)
{
if(ot==type||type==-1)
{
if(ot==OP_BUY){close=OrderClose(tk,lo,MarketInfo(s y,MODE_BID),50);}
if(ot==OP_SELL){close=OrderClose(tk,lo,MarketInfo( sy,MODE_ASK),50);}
if(ot>OP_SELL){del=OrderDelete(tk);}
}
}
}
}








int LEVEL()
{
int c;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
commentBuy=OrderComment();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
StringReplace(commentBuy,"[sl]","");
c=StrToInteger(commentBuy);


return(c);
}
}
return(c);
}








int LEVEL2()
{
int c;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
commentSell=OrderComment();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
StringReplace(commentSell,"[sl]","");
c=StrToInteger(commentSell);


return(c);
}
}
return(c);
}



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



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




//+------------------------------------------------------------------+
//| ScalperV1.mq4 |
//| Copyright 2005-2014, MetaQuotes Software Corp. |
//| https://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright "2005-2014, MetaQuotes Software Corp."
#property link "https://www.mql4.com"
#property description "ScalperV1 expert advisor"


enum OrdersTy
{
BuyOnly=0,
SellOnly=1,
BuySellBoth=2,
};


input OrdersTy OrdersT = 2;
extern double LotsBuy = 0.01;
extern double LotsSell = 0.01;
extern int MaxSpread = 4;
input bool CloseAtNext=false;
extern int MaxTrades= 2;
extern int GapSize = 0;
extern int StopLoss = 0;
extern int TakeProfit = 0;
extern int TrailingStop=0;
extern int TrailingStep=0;
extern int BreakEven=0;
input int BreakEvenPips=0;
extern int USDP=0;
extern int USDL=0;
extern int MagicNumber = 555555;




//---------




int CheckStep = GapSize;

int EMA1 = 50;
int EMA2 = 100;
ENUM_APPLIED_PRICE apply1 = PRICE_CLOSE;
ENUM_APPLIED_PRICE apply2 = PRICE_CLOSE;




double buyMM = 2;
double sellMM = 2;




string commentSell, commentBuy, NewLotsSell, NewLotsBuy;
double p,SL,TP,NewLots;
int LimitBuy, LimitSell;
double lotaB,lotaS,LB,LS;
double UT1, DW1,point;
int Q,digits;




datetime time=0;
datetime BarTime;


double chain[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20};
double chain2[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20};



void OnInit()
{



if(Digits==4 || Digits<=2) point=Point;
if(Digits==5 || Digits==3) point=Point*10;




}




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



if(TrailingStop>0)MoveTrailingStop();
if(BreakEven>0)MoveBreakEven();
if((USDP!=0&&Profit_By_USD()>=USDP)
||(USDL!=0&&Profit_By_USD()<=-USDL)){CloseOrders();}



if(Bars<100 || IsTradeAllowed()==false) return;

double Fast_1=iMA(NULL,0,EMA1,50,MODE_SMMA,apply1,0);
double Fast_2=iMA(NULL,0,EMA2,200,MODE_SMMA,apply2,0);


if(Orderscnt(OP_BUY)>0&&Ask<=LastPrice(OP_BUY)-CheckStep*point)
if(Orderscnt(OP_SELL)>0&&Bid>=LastPrice(OP_SELL)+CheckStep*point)


//شروط التبريد

if((OrdersT==BuyOnly||OrdersT==BuySellBoth)&&TotalOrders(OP_BUY)<MaxTrades
&&Orderscnt(OP_BUY)>0&&Ask<=LastPrice(OP_BUY)-CheckStep*point)
{
if(StopLoss!=0){SL=Ask-StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Ask+TakeProfit*point;}else TP=0;
int rBuy2=OrderSend(Symbol(),OP_BUY,LotsBuy,Ask,3*Q,SL ,TP,commentBuy,MagicNumber,0,Blue);
}


if((OrdersT==SellOnly||OrdersT==BuySellBoth)&&TotalOrders(OP_SELL)<MaxTrades
&&Orderscnt(OP_SELL)>0&&Bid>=LastPrice(OP_SELL)+CheckStep*point)
{
if(StopLoss!=0){SL=Bid+StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Bid-TakeProfit*point;}else TP=0;
int rSell2=OrderSend(Symbol(),OP_SELL,LotsSell,Bid,3*Q ,SL,TP,"",MagicNumber,0,Red);
}

//buy

if(Ask >= (DW1 + buyMM * GapSize * point))
{
UT1 = Fast_2;
sellMM = 2;
buyMM++;
if(CloseAtNext)CloseDeleteOrders(OP_SELL);

if((OrdersT==BuyOnly||OrdersT==BuySellBoth)
&&(Ask-Bid)<=MaxSpread*point&&Orderscnt(OP_BUY)==0&&time!=Time[0])
{
if(StopLoss!=0){SL=Ask-StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Ask+TakeProfit*point;}else TP=0;
int rBuy1=OrderSend(Symbol(),OP_BUY,LotsBuy,Ask,3*Q,SL ,TP,"",MagicNumber,0,Blue);
if(rBuy1>0)time=Time[0];
}
}




//sell

if (Bid <= (UT1 - sellMM * GapSize * point))
{
DW1 = Fast_1;
buyMM = 2;
sellMM++;



if((OrdersT==SellOnly||OrdersT==BuySellBoth)&&TotalOrders(OP_SELL)<MaxTrades
&&(Ask-Bid)<=MaxSpread*point&&Orderscnt(OP_SELL)==0&&time!=Time[0])
{
if(StopLoss!=0){SL=Bid+StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Bid-TakeProfit*point;}else TP=0;
int rSell1=OrderSend(Symbol(),OP_SELL,LotsSell,Bid,3*Q ,SL,TP,"",MagicNumber,0,Red);
if(rSell1>0)time=Time[0];
}
}


}


//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS |
//+------------------------------------------------------------------+




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);
}
}






//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Trailing Stop |
//+------------------------------------------------------------------+




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*point,Digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*poin t,Digits))
{
if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-TrailingStop*point,Digits))||(OrderStopLoss()==0))
{
bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(Bid-TrailingStop*point,Digits),OrderTakeProfit(),0,Blu e);

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

}
}
}
}
}
}




//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Break Even |
//+------------------------------------------------------------------+




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*point)
{
if(NormalizeDouble((OrderStopLoss()-OrderOpenPrice()),Digits)<0||(OrderStopLoss()==0))
{
bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(OrderOpenPrice()+BreakEvenPips*point,D igits),OrderTakeProfit(),0,Blue);

}
}
}
}
else
{
if(BreakEven>0)
{
if(NormalizeDouble((OrderOpenPrice()-Ask),Digits)>BreakEven*point)
{
if(NormalizeDouble((OrderOpenPrice()-OrderStopLoss()),Digits)<0||(OrderStopLoss()==0))
{
bool nn=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(OrderOpenPrice()-BreakEvenPips*point,Digits),OrderTakeProfit(),0,Re d);

}
}
}
}
}
}
}




//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS To Know The Profit Of Open Positions |
//+------------------------------------------------------------------+




double Profit_By_USD(int type=-1)
{
double pts;
for(int i=0;i<OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ot=OrderType();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
if(sy==Symbol()&&mn==MagicNumber)
{
if(ot==type||type==-1)
{
pts+=pt+sw+cm;
}
}
}
return(pts);
}





//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Closing Trades Together |
//+------------------------------------------------------------------+




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);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==type||type==-1)
{
if(OrderType()==OP_BUY){close=OrderClose(OrderTick et(),OrderLots(),NormalizeDouble(Bid,Digits),5*Q); }
if(OrderType()==OP_SELL){close=OrderClose(OrderTic ket(),OrderLots(),NormalizeDouble(Ask,Digits),5*Q) ;}
if(OrderType()>OP_SELL){del=OrderDelete(OrderTicket());}
}
}
}
}






//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS To Know Total Orders |
//+------------------------------------------------------------------+


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






//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Close Delete Orders |
//+------------------------------------------------------------------+


void CloseDeleteOrders(int type)
{
bool select,close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
if(OrderType()==type)
{
if(OrderType()==OP_BUY)
{
close=OrderClose(OrderTicket(),OrderLots(),Normali zeDouble(Bid,Digits),5*Q);
}
if(OrderType()==OP_SELL)
{
close=OrderClose(OrderTicket(),OrderLots(),Normali zeDouble(Ask,Digits),5*Q);
}
if(OrderType()>OP_SELL)
{
close=OrderDelete(OrderTicket());
}
}
}
}




//دالة تعود بسعر آخر صفقة مفتوحة بدلالة نوعها
double LastPrice(int type)
{
int cnt;
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
{
cnt++;
if(cnt>=2)
return(OrderOpenPrice());
}
}
return(0);
}






/*
//دالة اغلاق الصفقات بدلالة النوع
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(),
ot=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots();
if(tt>0&&sy==Symbol()&&mn==MagicNumber)
{
if(ot==type||type==-1)
{
if(ot==OP_BUY){close=OrderClose(tk,lo,NormalizeDou ble(Bid,Digits),5*Q);}
if(ot==OP_SELL){close=OrderClose(tk,lo,NormalizeDo uble(Ask,Digits),5*Q);}
if(ot>OP_SELL){close=OrderDelete(tk);}
}
}
}
}
*/


//دالة لمعرفة نوع آخر صفقة مغلقة
int LastType()
{
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();
if(sy==Symbol()&&mn==MagicNumber)
{
return(ty);
}
}
return(0);
}






//دالة لمعرفة توقيت اغلاق آخر صفقة بدلالة نوعها


datetime LastTime(int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();
datetime ct=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNumber&&(ty==type||type==-1))
{
return(ct);
}
}
return(0);
}






//دالة لمعرفة ربح آخر صفقة مغلقة بدلالة نوعها


double LastProfit(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();
datetime ct=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNumber&&(ty==type||type==-1))
{
if(info=="Profit")return(pt);

}
}
return(0);
}








datetime FirstClose()
{
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 lo=OrderLots();
datetime om=OrderOpenTime();
if(sy==Symbol()&&mn==MagicNumber&&lo==LotsBuy)
if(sy==Symbol()&&mn==MagicNumber&&lo==LotsSell)
{
return(om);
}
}
return(0);
}






double TotalProfit()
{
double pts=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
datetime om=OrderCloseTime();

if(sy==Symbol()&&mn==MagicNumber&&om>FirstClose())
{
pts+=pt+sw+cm;
}
}
return(pts);
}






double LastOrder(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
pt=OrderProfit(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();
datetime om=OrderOpenTime(),
cm=OrderCloseTime();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
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=="CloseTime")return(cm);
else if(info=="Comment")return(mm);
}
}
}
return(0);
}




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







double Closed(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
pt=OrderProfit(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="Profit")return(pt);
else if(info=="Type")return(ty);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
else if(info=="TP")return(tp);
else if(info=="SL")return(sl);
}
}
}
return(0);
}








double CurrentLots(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(),
ty=OrderType();
double lo=OrderLots();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
return(lo);
}
}
}
return(0);
}








int HistoryOrders(int type=-1)
{
int cnt=0;
for(int i =0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()&&(OrderType()==type||type==-1))
{
cnt++;
}
}
}
return(cnt);
}






double LastCurrent(string info,int type=-1)//دالة لمعرفة كل تفاصيل الصفقة المفعلة بدلالة النوع
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&(OrderType()==type||type==-1))
{
if(info=="Type")return(OrderType());
else if(info=="Lots")return(OrderLots());
else if(info=="Price")return(OrderOpenPrice());
else if(info=="TP")return(OrderTakeProfit());
else if(info=="SL")return(OrderStopLoss());
else if(info=="Profit")return(OrderProfit());
else if(info=="Time")return(OrderOpenTime());
}
}
return(0);
}




double LastOrderClosed(string info)//نتيجة آخر صفقة مغلقة والاكبر من حيث توقيت الفتح
{
double c=0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()<=OP_SELL)
{
if(OrderOpenTime()>c)c=OrderOpenTime();
if(OrderOpenTime()==c)
{
if(info=="Profit")return(OrderProfit());
else if(info=="Lots")return(OrderLots());
}
}
}
return(0);
}




int Orderscnt()//دالة عدد الصفقات المفتوحة
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
cnt++;//عد الصفقات
}
}
}
return(cnt);
}








void CloseAllOrders(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(),
ot=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots();
if(tt>0)
{
if(ot==type||type==-1)
{
if(ot==OP_BUY){close=OrderClose(tk,lo,MarketInfo(s y,MODE_BID),50);}
if(ot==OP_SELL){close=OrderClose(tk,lo,MarketInfo( sy,MODE_ASK),50);}
if(ot>OP_SELL){del=OrderDelete(tk);}
}
}
}
}

sabil
23-07-2019, 03:24 AM
السلام عليكم
الصحيح كالتالي:


double dis_h2=MathAbs(FirstPrice("Aymoon-h2",OP_BUY)-FirstPrice("Aymoon-h2",OP_SELL));

if(MaxTrades>0&&Orderscnt("Aymoon-h2")<MaxTrades&&Orderscnt("Aymoon-h2",OP_BUY)>0&&Orderscnt("Aymoon-h2",OP_SELL)>0)
{
if(LastOrder("Type","Aymoon-h2")==OP_BUY&&Ask<=LastOrder("Price","Aymoon-h2",OP_BUY)-dis_h2)
{
if(Stoploss!=0)SL=Bid+Stoploss*point;else SL=0;
if(Takeprofit!=0)TP=Bid-Takeprofit*point;else TP=0;
ticket=OrderSend(Symbol(),OP_SELL,NewLots2,Bid,3*Q ,SL,TP,"Aymoon-h2",MagicNo,0,Magenta);
}
if(LastOrder("Type","Aymoon-h2")==OP_SELL&&Bid>=LastOrder("Price","Aymoon-h2",OP_SELL)+dis_h2)
{
if(Stoploss!=0)SL=Ask-Stoploss*point;else SL=0;
if(Takeprofit!=0)TP=Ask+Takeprofit*point;else TP=0;
ticket=OrderSend(Symbol(),OP_BUY,NewLots2,Ask,3*Q, SL,TP,"Aymoon-h2",MagicNo,0,Green);
}
}

double FirstPrice(string comment,int type)
{
for(int i=0;i<OrdersTotal();i++)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol(),
cm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double op=OrderOpenPrice();
if(sy==Symbol()&&mn==MagicNo&&cm==comment)
{
if(ty==type)return(op);
}
}
return(0);
}


يا اخي والله عايز ابوس راسك
مش عارف من غيرك كنا عملنا ايه

جربته تيست ومبدئيا شغال مظبوط
جاري التجربة لايف

شكرا جدا ياغالي ومنتحرمش منك

kira-h
23-07-2019, 06:48 PM
طيب انا مسحت المضاعفات وبردو الاكسبيرت مش بيشتغل على الطريقه المطلوبه ؟



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




//+------------------------------------------------------------------+
//| ScalperV1.mq4 |
//| Copyright 2005-2014, MetaQuotes Software Corp. |
//| https://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright "2005-2014, MetaQuotes Software Corp."
#property link "https://www.mql4.com"
#property description "ScalperV1 expert advisor"


enum OrdersTy
{
BuyOnly=0,
SellOnly=1,
BuySellBoth=2,
};


input OrdersTy OrdersT = 2;
extern double LotsBuy = 0.01;
extern double LotsSell = 0.01;
extern int MaxSpread = 4;
input bool CloseAtNext=false;
extern int MaxTrades= 2;
extern int GapSize = 0;
extern int StopLoss = 0;
extern int TakeProfit = 0;
extern int TrailingStop=0;
extern int TrailingStep=0;
extern int BreakEven=0;
input int BreakEvenPips=0;
extern int USDP=0;
extern int USDL=0;
extern int MagicNumber = 555555;




//---------




int CheckStep = GapSize;

int EMA1 = 50;
int EMA2 = 100;
ENUM_APPLIED_PRICE apply1 = PRICE_CLOSE;
ENUM_APPLIED_PRICE apply2 = PRICE_CLOSE;




double buyMM = 2;
double sellMM = 2;




string commentSell, commentBuy, NewLotsSell, NewLotsBuy;
double p,SL,TP,NewLots;
int LimitBuy, LimitSell;
double lotaB,lotaS,LB,LS;
double UT1, DW1,point;
int Q,digits;




datetime time=0;
datetime BarTime;


double chain[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20};
double chain2[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20};



void OnInit()
{



if(Digits==4 || Digits<=2) point=Point;
if(Digits==5 || Digits==3) point=Point*10;




}




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



if(TrailingStop>0)MoveTrailingStop();
if(BreakEven>0)MoveBreakEven();
if((USDP!=0&&Profit_By_USD()>=USDP)
||(USDL!=0&&Profit_By_USD()<=-USDL)){CloseOrders();}



if(Bars<100 || IsTradeAllowed()==false) return;

double Fast_1=iMA(NULL,0,EMA1,50,MODE_SMMA,apply1,0);
double Fast_2=iMA(NULL,0,EMA2,200,MODE_SMMA,apply2,0);


if(Orderscnt(OP_BUY)>0&&Ask<=LastPrice(OP_BUY)-CheckStep*point)
if(Orderscnt(OP_SELL)>0&&Bid>=LastPrice(OP_SELL)+CheckStep*point)


//شروط التبريد

if((OrdersT==BuyOnly||OrdersT==BuySellBoth)&&TotalOrders(OP_BUY)<MaxTrades
&&Orderscnt(OP_BUY)>0&&Ask<=LastPrice(OP_BUY)-CheckStep*point)
{
if(StopLoss!=0){SL=Ask-StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Ask+TakeProfit*point;}else TP=0;
int rBuy2=OrderSend(Symbol(),OP_BUY,LotsBuy,Ask,3*Q,SL ,TP,commentBuy,MagicNumber,0,Blue);
}


if((OrdersT==SellOnly||OrdersT==BuySellBoth)&&TotalOrders(OP_SELL)<MaxTrades
&&Orderscnt(OP_SELL)>0&&Bid>=LastPrice(OP_SELL)+CheckStep*point)
{
if(StopLoss!=0){SL=Bid+StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Bid-TakeProfit*point;}else TP=0;
int rSell2=OrderSend(Symbol(),OP_SELL,LotsSell,Bid,3*Q ,SL,TP,"",MagicNumber,0,Red);
}

//buy

if(Ask >= (DW1 + buyMM * GapSize * point))
{
UT1 = Fast_2;
sellMM = 2;
buyMM++;
if(CloseAtNext)CloseDeleteOrders(OP_SELL);

if((OrdersT==BuyOnly||OrdersT==BuySellBoth)
&&(Ask-Bid)<=MaxSpread*point&&Orderscnt(OP_BUY)==0&&time!=Time[0])
{
if(StopLoss!=0){SL=Ask-StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Ask+TakeProfit*point;}else TP=0;
int rBuy1=OrderSend(Symbol(),OP_BUY,LotsBuy,Ask,3*Q,SL ,TP,"",MagicNumber,0,Blue);
if(rBuy1>0)time=Time[0];
}
}




//sell

if (Bid <= (UT1 - sellMM * GapSize * point))
{
DW1 = Fast_1;
buyMM = 2;
sellMM++;



if((OrdersT==SellOnly||OrdersT==BuySellBoth)&&TotalOrders(OP_SELL)<MaxTrades
&&(Ask-Bid)<=MaxSpread*point&&Orderscnt(OP_SELL)==0&&time!=Time[0])
{
if(StopLoss!=0){SL=Bid+StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Bid-TakeProfit*point;}else TP=0;
int rSell1=OrderSend(Symbol(),OP_SELL,LotsSell,Bid,3*Q ,SL,TP,"",MagicNumber,0,Red);
if(rSell1>0)time=Time[0];
}
}


}


//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS |
//+------------------------------------------------------------------+




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);
}
}






//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Trailing Stop |
//+------------------------------------------------------------------+




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*point,Digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*poin t,Digits))
{
if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-TrailingStop*point,Digits))||(OrderStopLoss()==0))
{
bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(Bid-TrailingStop*point,Digits),OrderTakeProfit(),0,Blu e);

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

}
}
}
}
}
}




//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Break Even |
//+------------------------------------------------------------------+




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*point)
{
if(NormalizeDouble((OrderStopLoss()-OrderOpenPrice()),Digits)<0||(OrderStopLoss()==0))
{
bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(OrderOpenPrice()+BreakEvenPips*point,D igits),OrderTakeProfit(),0,Blue);

}
}
}
}
else
{
if(BreakEven>0)
{
if(NormalizeDouble((OrderOpenPrice()-Ask),Digits)>BreakEven*point)
{
if(NormalizeDouble((OrderOpenPrice()-OrderStopLoss()),Digits)<0||(OrderStopLoss()==0))
{
bool nn=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(OrderOpenPrice()-BreakEvenPips*point,Digits),OrderTakeProfit(),0,Re d);

}
}
}
}
}
}
}




//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS To Know The Profit Of Open Positions |
//+------------------------------------------------------------------+




double Profit_By_USD(int type=-1)
{
double pts;
for(int i=0;i<OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ot=OrderType();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
if(sy==Symbol()&&mn==MagicNumber)
{
if(ot==type||type==-1)
{
pts+=pt+sw+cm;
}
}
}
return(pts);
}





//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Closing Trades Together |
//+------------------------------------------------------------------+




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);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==type||type==-1)
{
if(OrderType()==OP_BUY){close=OrderClose(OrderTick et(),OrderLots(),NormalizeDouble(Bid,Digits),5*Q); }
if(OrderType()==OP_SELL){close=OrderClose(OrderTic ket(),OrderLots(),NormalizeDouble(Ask,Digits),5*Q) ;}
if(OrderType()>OP_SELL){del=OrderDelete(OrderTicket());}
}
}
}
}






//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS To Know Total Orders |
//+------------------------------------------------------------------+


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






//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Close Delete Orders |
//+------------------------------------------------------------------+


void CloseDeleteOrders(int type)
{
bool select,close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
if(OrderType()==type)
{
if(OrderType()==OP_BUY)
{
close=OrderClose(OrderTicket(),OrderLots(),Normali zeDouble(Bid,Digits),5*Q);
}
if(OrderType()==OP_SELL)
{
close=OrderClose(OrderTicket(),OrderLots(),Normali zeDouble(Ask,Digits),5*Q);
}
if(OrderType()>OP_SELL)
{
close=OrderDelete(OrderTicket());
}
}
}
}




//دالة تعود بسعر آخر صفقة مفتوحة بدلالة نوعها
double LastPrice(int type)
{
int cnt;
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
{
cnt++;
if(cnt>=2)
return(OrderOpenPrice());
}
}
return(0);
}






/*
//دالة اغلاق الصفقات بدلالة النوع
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(),
ot=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots();
if(tt>0&&sy==Symbol()&&mn==MagicNumber)
{
if(ot==type||type==-1)
{
if(ot==OP_BUY){close=OrderClose(tk,lo,NormalizeDou ble(Bid,Digits),5*Q);}
if(ot==OP_SELL){close=OrderClose(tk,lo,NormalizeDo uble(Ask,Digits),5*Q);}
if(ot>OP_SELL){close=OrderDelete(tk);}
}
}
}
}
*/


//دالة لمعرفة نوع آخر صفقة مغلقة
int LastType()
{
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();
if(sy==Symbol()&&mn==MagicNumber)
{
return(ty);
}
}
return(0);
}






//دالة لمعرفة توقيت اغلاق آخر صفقة بدلالة نوعها


datetime LastTime(int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();
datetime ct=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNumber&&(ty==type||type==-1))
{
return(ct);
}
}
return(0);
}






//دالة لمعرفة ربح آخر صفقة مغلقة بدلالة نوعها


double LastProfit(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();
datetime ct=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNumber&&(ty==type||type==-1))
{
if(info=="Profit")return(pt);

}
}
return(0);
}








datetime FirstClose()
{
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 lo=OrderLots();
datetime om=OrderOpenTime();
if(sy==Symbol()&&mn==MagicNumber&&lo==LotsBuy)
if(sy==Symbol()&&mn==MagicNumber&&lo==LotsSell)
{
return(om);
}
}
return(0);
}






double TotalProfit()
{
double pts=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
datetime om=OrderCloseTime();

if(sy==Symbol()&&mn==MagicNumber&&om>FirstClose())
{
pts+=pt+sw+cm;
}
}
return(pts);
}






double LastOrder(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
pt=OrderProfit(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();
datetime om=OrderOpenTime(),
cm=OrderCloseTime();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
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=="CloseTime")return(cm);
else if(info=="Comment")return(mm);
}
}
}
return(0);
}




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







double Closed(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
pt=OrderProfit(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="Profit")return(pt);
else if(info=="Type")return(ty);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
else if(info=="TP")return(tp);
else if(info=="SL")return(sl);
}
}
}
return(0);
}








double CurrentLots(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(),
ty=OrderType();
double lo=OrderLots();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
return(lo);
}
}
}
return(0);
}








int HistoryOrders(int type=-1)
{
int cnt=0;
for(int i =0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()&&(OrderType()==type||type==-1))
{
cnt++;
}
}
}
return(cnt);
}






double LastCurrent(string info,int type=-1)//دالة لمعرفة كل تفاصيل الصفقة المفعلة بدلالة النوع
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&(OrderType()==type||type==-1))
{
if(info=="Type")return(OrderType());
else if(info=="Lots")return(OrderLots());
else if(info=="Price")return(OrderOpenPrice());
else if(info=="TP")return(OrderTakeProfit());
else if(info=="SL")return(OrderStopLoss());
else if(info=="Profit")return(OrderProfit());
else if(info=="Time")return(OrderOpenTime());
}
}
return(0);
}




double LastOrderClosed(string info)//نتيجة آخر صفقة مغلقة والاكبر من حيث توقيت الفتح
{
double c=0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()<=OP_SELL)
{
if(OrderOpenTime()>c)c=OrderOpenTime();
if(OrderOpenTime()==c)
{
if(info=="Profit")return(OrderProfit());
else if(info=="Lots")return(OrderLots());
}
}
}
return(0);
}




int Orderscnt()//دالة عدد الصفقات المفتوحة
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
cnt++;//عد الصفقات
}
}
}
return(cnt);
}








void CloseAllOrders(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(),
ot=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots();
if(tt>0)
{
if(ot==type||type==-1)
{
if(ot==OP_BUY){close=OrderClose(tk,lo,MarketInfo(s y,MODE_BID),50);}
if(ot==OP_SELL){close=OrderClose(tk,lo,MarketInfo( sy,MODE_ASK),50);}
if(ot>OP_SELL){del=OrderDelete(tk);}
}
}
}
}





لديك خطأ في الدالة LastPrice
والصحيح كالتالي:


//+------------------------------------------------------------------+
//| ScalperV1.mq4 |
//| Copyright 2005-2014, MetaQuotes Software Corp. |
//| https://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright "2005-2014, MetaQuotes Software Corp."
#property link "https://www.mql4.com"
#property description "ScalperV1 expert advisor"




enum OrdersTy
{
BuyOnly=0,
SellOnly=1,
BuySellBoth=2,
};




input OrdersTy OrdersT = 2;
extern double LotsBuy = 0.01;
extern double LotsSell = 0.01;
extern int MaxSpread = 4;
input bool CloseAtNext=false;
extern int MaxTrades= 2;
extern int GapSize = 0;
extern int StopLoss = 0;
extern int TakeProfit = 0;
extern int TrailingStop=0;
extern int TrailingStep=0;
extern int BreakEven=0;
input int BreakEvenPips=0;
extern int USDP=0;
extern int USDL=0;
extern int MagicNumber = 555555;








//---------
int EMA1 = 50;
int EMA2 = 100;
ENUM_APPLIED_PRICE apply1 = PRICE_CLOSE;
ENUM_APPLIED_PRICE apply2 = PRICE_CLOSE;








double buyMM = 2;
double sellMM = 2;








string commentSell, commentBuy, NewLotsSell, NewLotsBuy;
double p,SL,TP,NewLots;
int LimitBuy, LimitSell;
double lotaB,lotaS,LB,LS;
double UT1, DW1,point;
int Q,digits;








datetime time=0;
datetime BarTime;




double chain[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20};
double chain2[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20};





void OnInit()
{



if(Digits==4 || Digits<=2) point=Point;
if(Digits==5 || Digits==3) point=Point*10;






}








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





if(TrailingStop>0)MoveTrailingStop();
if(BreakEven>0)MoveBreakEven();
if((USDP!=0&&Profit_By_USD()>=USDP)
||(USDL!=0&&Profit_By_USD()<=-USDL)){CloseOrders();}





if(Bars<100 || IsTradeAllowed()==false) return;

double Fast_1=iMA(NULL,0,EMA1,50,MODE_SMMA,apply1,0);
double Fast_2=iMA(NULL,0,EMA2,200,MODE_SMMA,apply2,0);



//شروط التبريد

if(((MaxTrades>0&&TotalOrders(OP_BUY)<MaxTrades)||MaxTrades==0)
&&Orderscnt(OP_BUY)>0&&Ask<=LastPrice(OP_BUY)-GapSize*point)
{
if(StopLoss!=0){SL=Ask-StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Ask+TakeProfit*point;}else TP=0;
int rBuy2=OrderSend(Symbol(),OP_BUY,LotsBuy,Ask,3*Q,SL ,TP,"",MagicNumber,0,Blue);
}


if(((MaxTrades>0&&TotalOrders(OP_SELL)<MaxTrades)||MaxTrades==0)
&&Orderscnt(OP_SELL)>0&&Bid>=LastPrice(OP_SELL)+GapSize*point)
{
if(StopLoss!=0){SL=Bid+StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Bid-TakeProfit*point;}else TP=0;
int rSell2=OrderSend(Symbol(),OP_SELL,LotsSell,Bid,3*Q ,SL,TP,"",MagicNumber,0,Red);
}

//buy

if(Ask >= (DW1 + buyMM * GapSize * point))
{
UT1 = Fast_2;
sellMM = 2;
buyMM++;

if(CloseAtNext)CloseDeleteOrders(OP_SELL);

if((OrdersT==BuyOnly||OrdersT==BuySellBoth)
&&(Ask-Bid)<=MaxSpread*point&&Orderscnt(OP_BUY)==0&&time!=Time[0])
{
if(StopLoss!=0){SL=Ask-StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Ask+TakeProfit*point;}else TP=0;
int rBuy1=OrderSend(Symbol(),OP_BUY,LotsBuy,Ask,3*Q,SL ,TP,"",MagicNumber,0,Blue);
if(rBuy1>0)time=Time[0];
}
}




//sell

if(Bid <= (UT1 - sellMM * GapSize * point))
{
DW1 = Fast_1;
buyMM = 2;
sellMM++;

if(CloseAtNext)CloseDeleteOrders(OP_BUY);

if((OrdersT==SellOnly||OrdersT==BuySellBoth)&&TotalOrders(OP_SELL)<MaxTrades
&&(Ask-Bid)<=MaxSpread*point&&Orderscnt(OP_SELL)==0&&time!=Time[0])
{
if(StopLoss!=0){SL=Bid+StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Bid-TakeProfit*point;}else TP=0;
int rSell1=OrderSend(Symbol(),OP_SELL,LotsSell,Bid,3*Q ,SL,TP,"",MagicNumber,0,Red);
if(rSell1>0)time=Time[0];
}
}




}




//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS |
//+------------------------------------------------------------------+








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);
}
}












//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Trailing Stop |
//+------------------------------------------------------------------+








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*point,Digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*poin t,Digits))
{
if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-TrailingStop*point,Digits))||(OrderStopLoss()==0))
{
bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(Bid-TrailingStop*point,Digits),OrderTakeProfit(),0,Blu e);

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

}
}
}
}
}
}








//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Break Even |
//+------------------------------------------------------------------+








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*point)
{
if(NormalizeDouble((OrderStopLoss()-OrderOpenPrice()),Digits)<0||(OrderStopLoss()==0))
{
bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(OrderOpenPrice()+BreakEvenPips*point,D igits),OrderTakeProfit(),0,Blue);

}
}
}
}
else
{
if(BreakEven>0)
{
if(NormalizeDouble((OrderOpenPrice()-Ask),Digits)>BreakEven*point)
{
if(NormalizeDouble((OrderOpenPrice()-OrderStopLoss()),Digits)<0||(OrderStopLoss()==0))
{
bool nn=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(OrderOpenPrice()-BreakEvenPips*point,Digits),OrderTakeProfit(),0,Re d);

}
}
}
}
}
}
}








//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS To Know The Profit Of Open Positions |
//+------------------------------------------------------------------+








double Profit_By_USD(int type=-1)
{
double pts;
for(int i=0;i<OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ot=OrderType();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
if(sy==Symbol()&&mn==MagicNumber)
{
if(ot==type||type==-1)
{
pts+=pt+sw+cm;
}
}
}
return(pts);
}









//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Closing Trades Together |
//+------------------------------------------------------------------+








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);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==type||type==-1)
{
if(OrderType()==OP_BUY){close=OrderClose(OrderTick et(),OrderLots(),NormalizeDouble(Bid,Digits),5*Q); }
if(OrderType()==OP_SELL){close=OrderClose(OrderTic ket(),OrderLots(),NormalizeDouble(Ask,Digits),5*Q) ;}
if(OrderType()>OP_SELL){del=OrderDelete(OrderTicket());}
}
}
}
}












//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS To Know Total Orders |
//+------------------------------------------------------------------+


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












//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Close Delete Orders |
//+------------------------------------------------------------------+




void CloseDeleteOrders(int type)
{
bool select,close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
if(OrderType()==type)
{
if(OrderType()==OP_BUY)
{
close=OrderClose(OrderTicket(),OrderLots(),Normali zeDouble(Bid,Digits),5*Q);
}
if(OrderType()==OP_SELL)
{
close=OrderClose(OrderTicket(),OrderLots(),Normali zeDouble(Ask,Digits),5*Q);
}
if(OrderType()>OP_SELL)
{
close=OrderDelete(OrderTicket());
}
}
}
}








//دالة تعود بسعر آخر صفقة مفتوحة بدلالة نوعها
double LastPrice(int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
{
return(OrderOpenPrice());
}
}
return(0);
}












/*
//دالة اغلاق الصفقات بدلالة النوع
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(),
ot=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots();
if(tt>0&&sy==Symbol()&&mn==MagicNumber)
{
if(ot==type||type==-1)
{
if(ot==OP_BUY){close=OrderClose(tk,lo,NormalizeDou ble(Bid,Digits),5*Q);}
if(ot==OP_SELL){close=OrderClose(tk,lo,NormalizeDo uble(Ask,Digits),5*Q);}
if(ot>OP_SELL){close=OrderDelete(tk);}
}
}
}
}
*/




//دالة لمعرفة نوع آخر صفقة مغلقة
int LastType()
{
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();
if(sy==Symbol()&&mn==MagicNumber)
{
return(ty);
}
}
return(0);
}












//دالة لمعرفة توقيت اغلاق آخر صفقة بدلالة نوعها




datetime LastTime(int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();
datetime ct=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNumber&&(ty==type||type==-1))
{
return(ct);
}
}
return(0);
}












//دالة لمعرفة ربح آخر صفقة مغلقة بدلالة نوعها




double LastProfit(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();
datetime ct=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNumber&&(ty==type||type==-1))
{
if(info=="Profit")return(pt);

}
}
return(0);
}
















datetime FirstClose()
{
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 lo=OrderLots();
datetime om=OrderOpenTime();
if(sy==Symbol()&&mn==MagicNumber&&lo==LotsBuy)
if(sy==Symbol()&&mn==MagicNumber&&lo==LotsSell)
{
return(om);
}
}
return(0);
}












double TotalProfit()
{
double pts=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
datetime om=OrderCloseTime();

if(sy==Symbol()&&mn==MagicNumber&&om>FirstClose())
{
pts+=pt+sw+cm;
}
}
return(pts);
}












double LastOrder(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
pt=OrderProfit(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();
datetime om=OrderOpenTime(),
cm=OrderCloseTime();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
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=="CloseTime")return(cm);
else if(info=="Comment")return(mm);
}
}
}
return(0);
}






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











double Closed(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
pt=OrderProfit(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="Profit")return(pt);
else if(info=="Type")return(ty);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
else if(info=="TP")return(tp);
else if(info=="SL")return(sl);
}
}
}
return(0);
}
















double CurrentLots(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(),
ty=OrderType();
double lo=OrderLots();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
return(lo);
}
}
}
return(0);
}
















int HistoryOrders(int type=-1)
{
int cnt=0;
for(int i =0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()&&(OrderType()==type||type==-1))
{
cnt++;
}
}
}
return(cnt);
}












double LastCurrent(string info,int type=-1)//دالة لمعرفة كل تفاصيل الصفقة المفعلة بدلالة النوع
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&(OrderType()==type||type==-1))
{
if(info=="Type")return(OrderType());
else if(info=="Lots")return(OrderLots());
else if(info=="Price")return(OrderOpenPrice());
else if(info=="TP")return(OrderTakeProfit());
else if(info=="SL")return(OrderStopLoss());
else if(info=="Profit")return(OrderProfit());
else if(info=="Time")return(OrderOpenTime());
}
}
return(0);
}








double LastOrderClosed(string info)//نتيجة آخر صفقة مغلقة والاكبر من حيث توقيت الفتح
{
double c=0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()<=OP_SELL)
{
if(OrderOpenTime()>c)c=OrderOpenTime();
if(OrderOpenTime()==c)
{
if(info=="Profit")return(OrderProfit());
else if(info=="Lots")return(OrderLots());
}
}
}
return(0);
}








int Orderscnt()//دالة عدد الصفقات المفتوحة
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
cnt++;//عد الصفقات
}
}
}
return(cnt);
}
















void CloseAllOrders(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(),
ot=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots();
if(tt>0)
{
if(ot==type||type==-1)
{
if(ot==OP_BUY){close=OrderClose(tk,lo,MarketInfo(s y,MODE_BID),50);}
if(ot==OP_SELL){close=OrderClose(tk,lo,MarketInfo( sy,MODE_ASK),50);}
if(ot>OP_SELL){del=OrderDelete(tk);}
}
}
}
}

kira-h
23-07-2019, 06:51 PM
يا اخي والله عايز ابوس راسك
مش عارف من غيرك كنا عملنا ايه

جربته تيست ومبدئيا شغال مظبوط
جاري التجربة لايف

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

aut
24-07-2019, 01:13 AM
لديك خطأ في الدالة LastPrice
والصحيح كالتالي:


//+------------------------------------------------------------------+
//| ScalperV1.mq4 |
//| Copyright 2005-2014, MetaQuotes Software Corp. |
//| https://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright "2005-2014, MetaQuotes Software Corp."
#property link "https://www.mql4.com"
#property description "ScalperV1 expert advisor"




enum OrdersTy
{
BuyOnly=0,
SellOnly=1,
BuySellBoth=2,
};




input OrdersTy OrdersT = 2;
extern double LotsBuy = 0.01;
extern double LotsSell = 0.01;
extern int MaxSpread = 4;
input bool CloseAtNext=false;
extern int MaxTrades= 2;
extern int GapSize = 0;
extern int StopLoss = 0;
extern int TakeProfit = 0;
extern int TrailingStop=0;
extern int TrailingStep=0;
extern int BreakEven=0;
input int BreakEvenPips=0;
extern int USDP=0;
extern int USDL=0;
extern int MagicNumber = 555555;








//---------
int EMA1 = 50;
int EMA2 = 100;
ENUM_APPLIED_PRICE apply1 = PRICE_CLOSE;
ENUM_APPLIED_PRICE apply2 = PRICE_CLOSE;








double buyMM = 2;
double sellMM = 2;








string commentSell, commentBuy, NewLotsSell, NewLotsBuy;
double p,SL,TP,NewLots;
int LimitBuy, LimitSell;
double lotaB,lotaS,LB,LS;
double UT1, DW1,point;
int Q,digits;








datetime time=0;
datetime BarTime;




double chain[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20};
double chain2[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20};





void OnInit()
{



if(Digits==4 || Digits<=2) point=Point;
if(Digits==5 || Digits==3) point=Point*10;






}








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





if(TrailingStop>0)MoveTrailingStop();
if(BreakEven>0)MoveBreakEven();
if((USDP!=0&&Profit_By_USD()>=USDP)
||(USDL!=0&&Profit_By_USD()<=-USDL)){CloseOrders();}





if(Bars<100 || IsTradeAllowed()==false) return;

double Fast_1=iMA(NULL,0,EMA1,50,MODE_SMMA,apply1,0);
double Fast_2=iMA(NULL,0,EMA2,200,MODE_SMMA,apply2,0);



//شروط التبريد

if(((MaxTrades>0&&TotalOrders(OP_BUY)<MaxTrades)||MaxTrades==0)
&&Orderscnt(OP_BUY)>0&&Ask<=LastPrice(OP_BUY)-GapSize*point)
{
if(StopLoss!=0){SL=Ask-StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Ask+TakeProfit*point;}else TP=0;
int rBuy2=OrderSend(Symbol(),OP_BUY,LotsBuy,Ask,3*Q,SL ,TP,"",MagicNumber,0,Blue);
}


if(((MaxTrades>0&&TotalOrders(OP_SELL)<MaxTrades)||MaxTrades==0)
&&Orderscnt(OP_SELL)>0&&Bid>=LastPrice(OP_SELL)+GapSize*point)
{
if(StopLoss!=0){SL=Bid+StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Bid-TakeProfit*point;}else TP=0;
int rSell2=OrderSend(Symbol(),OP_SELL,LotsSell,Bid,3*Q ,SL,TP,"",MagicNumber,0,Red);
}

//buy

if(Ask >= (DW1 + buyMM * GapSize * point))
{
UT1 = Fast_2;
sellMM = 2;
buyMM++;

if(CloseAtNext)CloseDeleteOrders(OP_SELL);

if((OrdersT==BuyOnly||OrdersT==BuySellBoth)
&&(Ask-Bid)<=MaxSpread*point&&Orderscnt(OP_BUY)==0&&time!=Time[0])
{
if(StopLoss!=0){SL=Ask-StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Ask+TakeProfit*point;}else TP=0;
int rBuy1=OrderSend(Symbol(),OP_BUY,LotsBuy,Ask,3*Q,SL ,TP,"",MagicNumber,0,Blue);
if(rBuy1>0)time=Time[0];
}
}




//sell

if(Bid <= (UT1 - sellMM * GapSize * point))
{
DW1 = Fast_1;
buyMM = 2;
sellMM++;

if(CloseAtNext)CloseDeleteOrders(OP_BUY);

if((OrdersT==SellOnly||OrdersT==BuySellBoth)&&TotalOrders(OP_SELL)<MaxTrades
&&(Ask-Bid)<=MaxSpread*point&&Orderscnt(OP_SELL)==0&&time!=Time[0])
{
if(StopLoss!=0){SL=Bid+StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Bid-TakeProfit*point;}else TP=0;
int rSell1=OrderSend(Symbol(),OP_SELL,LotsSell,Bid,3*Q ,SL,TP,"",MagicNumber,0,Red);
if(rSell1>0)time=Time[0];
}
}




}




//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS |
//+------------------------------------------------------------------+








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);
}
}












//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Trailing Stop |
//+------------------------------------------------------------------+








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*point,Digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*poin t,Digits))
{
if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-TrailingStop*point,Digits))||(OrderStopLoss()==0))
{
bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(Bid-TrailingStop*point,Digits),OrderTakeProfit(),0,Blu e);

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

}
}
}
}
}
}








//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Break Even |
//+------------------------------------------------------------------+








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*point)
{
if(NormalizeDouble((OrderStopLoss()-OrderOpenPrice()),Digits)<0||(OrderStopLoss()==0))
{
bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(OrderOpenPrice()+BreakEvenPips*point,D igits),OrderTakeProfit(),0,Blue);

}
}
}
}
else
{
if(BreakEven>0)
{
if(NormalizeDouble((OrderOpenPrice()-Ask),Digits)>BreakEven*point)
{
if(NormalizeDouble((OrderOpenPrice()-OrderStopLoss()),Digits)<0||(OrderStopLoss()==0))
{
bool nn=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(OrderOpenPrice()-BreakEvenPips*point,Digits),OrderTakeProfit(),0,Re d);

}
}
}
}
}
}
}








//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS To Know The Profit Of Open Positions |
//+------------------------------------------------------------------+








double Profit_By_USD(int type=-1)
{
double pts;
for(int i=0;i<OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ot=OrderType();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
if(sy==Symbol()&&mn==MagicNumber)
{
if(ot==type||type==-1)
{
pts+=pt+sw+cm;
}
}
}
return(pts);
}









//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Closing Trades Together |
//+------------------------------------------------------------------+








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);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==type||type==-1)
{
if(OrderType()==OP_BUY){close=OrderClose(OrderTick et(),OrderLots(),NormalizeDouble(Bid,Digits),5*Q); }
if(OrderType()==OP_SELL){close=OrderClose(OrderTic ket(),OrderLots(),NormalizeDouble(Ask,Digits),5*Q) ;}
if(OrderType()>OP_SELL){del=OrderDelete(OrderTicket());}
}
}
}
}












//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS To Know Total Orders |
//+------------------------------------------------------------------+


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












//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Close Delete Orders |
//+------------------------------------------------------------------+




void CloseDeleteOrders(int type)
{
bool select,close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
if(OrderType()==type)
{
if(OrderType()==OP_BUY)
{
close=OrderClose(OrderTicket(),OrderLots(),Normali zeDouble(Bid,Digits),5*Q);
}
if(OrderType()==OP_SELL)
{
close=OrderClose(OrderTicket(),OrderLots(),Normali zeDouble(Ask,Digits),5*Q);
}
if(OrderType()>OP_SELL)
{
close=OrderDelete(OrderTicket());
}
}
}
}








//دالة تعود بسعر آخر صفقة مفتوحة بدلالة نوعها
double LastPrice(int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
{
return(OrderOpenPrice());
}
}
return(0);
}












/*
//دالة اغلاق الصفقات بدلالة النوع
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(),
ot=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots();
if(tt>0&&sy==Symbol()&&mn==MagicNumber)
{
if(ot==type||type==-1)
{
if(ot==OP_BUY){close=OrderClose(tk,lo,NormalizeDou ble(Bid,Digits),5*Q);}
if(ot==OP_SELL){close=OrderClose(tk,lo,NormalizeDo uble(Ask,Digits),5*Q);}
if(ot>OP_SELL){close=OrderDelete(tk);}
}
}
}
}
*/




//دالة لمعرفة نوع آخر صفقة مغلقة
int LastType()
{
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();
if(sy==Symbol()&&mn==MagicNumber)
{
return(ty);
}
}
return(0);
}












//دالة لمعرفة توقيت اغلاق آخر صفقة بدلالة نوعها




datetime LastTime(int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();
datetime ct=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNumber&&(ty==type||type==-1))
{
return(ct);
}
}
return(0);
}












//دالة لمعرفة ربح آخر صفقة مغلقة بدلالة نوعها




double LastProfit(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();
datetime ct=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNumber&&(ty==type||type==-1))
{
if(info=="Profit")return(pt);

}
}
return(0);
}
















datetime FirstClose()
{
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 lo=OrderLots();
datetime om=OrderOpenTime();
if(sy==Symbol()&&mn==MagicNumber&&lo==LotsBuy)
if(sy==Symbol()&&mn==MagicNumber&&lo==LotsSell)
{
return(om);
}
}
return(0);
}












double TotalProfit()
{
double pts=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
datetime om=OrderCloseTime();

if(sy==Symbol()&&mn==MagicNumber&&om>FirstClose())
{
pts+=pt+sw+cm;
}
}
return(pts);
}












double LastOrder(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
pt=OrderProfit(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();
datetime om=OrderOpenTime(),
cm=OrderCloseTime();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
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=="CloseTime")return(cm);
else if(info=="Comment")return(mm);
}
}
}
return(0);
}






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











double Closed(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
pt=OrderProfit(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="Profit")return(pt);
else if(info=="Type")return(ty);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
else if(info=="TP")return(tp);
else if(info=="SL")return(sl);
}
}
}
return(0);
}
















double CurrentLots(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(),
ty=OrderType();
double lo=OrderLots();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
return(lo);
}
}
}
return(0);
}
















int HistoryOrders(int type=-1)
{
int cnt=0;
for(int i =0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()&&(OrderType()==type||type==-1))
{
cnt++;
}
}
}
return(cnt);
}












double LastCurrent(string info,int type=-1)//دالة لمعرفة كل تفاصيل الصفقة المفعلة بدلالة النوع
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&(OrderType()==type||type==-1))
{
if(info=="Type")return(OrderType());
else if(info=="Lots")return(OrderLots());
else if(info=="Price")return(OrderOpenPrice());
else if(info=="TP")return(OrderTakeProfit());
else if(info=="SL")return(OrderStopLoss());
else if(info=="Profit")return(OrderProfit());
else if(info=="Time")return(OrderOpenTime());
}
}
return(0);
}








double LastOrderClosed(string info)//نتيجة آخر صفقة مغلقة والاكبر من حيث توقيت الفتح
{
double c=0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()<=OP_SELL)
{
if(OrderOpenTime()>c)c=OrderOpenTime();
if(OrderOpenTime()==c)
{
if(info=="Profit")return(OrderProfit());
else if(info=="Lots")return(OrderLots());
}
}
}
return(0);
}








int Orderscnt()//دالة عدد الصفقات المفتوحة
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
cnt++;//عد الصفقات
}
}
}
return(cnt);
}
















void CloseAllOrders(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(),
ot=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots();
if(tt>0)
{
if(ot==type||type==-1)
{
if(ot==OP_BUY){close=OrderClose(tk,lo,MarketInfo(s y,MODE_BID),50);}
if(ot==OP_SELL){close=OrderClose(tk,lo,MarketInfo( sy,MODE_ASK),50);}
if(ot>OP_SELL){del=OrderDelete(tk);}
}
}
}
}




اخى حسن صفقات التبريد شغاله بس اذا ماكس تريد = 5

والاكسبيرت فتح صفقه شراء وعكس بيفتح تبريد بس المشكله ان لو انا عامل ماكس تريد = 1
التبريد مش هيشتغل

وانا عايز ان اعمل ماكس تريد لكل استيب يعنى ماكس تريد = 1 واتفتح صفقه يبقا الاكسبيرت ينتظر انعكاس السعر وتحقيق مسافة الاستيب واثناء الانتظار اى فرصه شراء هتتحق الاكسبيرت ميدخلهاش

يعنى كل 100 نقطه انعكاس على صفقه شراء اذا تحقق شروط شراء يشترى
كل 100 نقطه انعكاس على صفقه بيع اذا تحقق شروط بيع يبيع

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


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



لان الوقتى لازم يكون عندى ماكس تريد = 5 او 10 وبيأخد اى فرصه بتظهر التبريد او الفرص الرئيسية اللى الاكسبيرت بيشتغل عليها وانا عايز اعمل حد لعدد الصفقات للسبب ده

kira-h
24-07-2019, 04:40 AM
اخى حسن صفقات التبريد شغاله بس اذا ماكس تريد = 5

والاكسبيرت فتح صفقه شراء وعكس بيفتح تبريد بس المشكله ان لو انا عامل ماكس تريد = 1
التبريد مش هيشتغل

وانا عايز ان اعمل ماكس تريد لكل استيب يعنى ماكس تريد = 1 واتفتح صفقه يبقا الاكسبيرت ينتظر انعكاس السعر وتحقيق مسافة الاستيب واثناء الانتظار اى فرصه شراء هتتحق الاكسبيرت ميدخلهاش

يعنى كل 100 نقطه انعكاس على صفقه شراء اذا تحقق شروط شراء يشترى
كل 100 نقطه انعكاس على صفقه بيع اذا تحقق شروط بيع يبيع

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


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

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

aut
24-07-2019, 05:27 AM
اخي الكريم هذه شروطك ولا اعلم شيء عن الاستراتيحية واقوم فقط بتصحيح الاخطاء البرمجية هنا
عموما لا يمكن للاكسبيرت فتح اكثر من صفقة رئيسية من نفس النوع يعني لن تجد اكثر من شراء رئيسي او بيع رئيسي
اما الماكس تريد مرتبط فقط بالتبريدات بحيث البيع منفصل عن الشراء



طيب اتحملنى بس اخى حسن

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


مفيش اي حل برمجى مثلاً
اذا ماكس تريد = 2 واذا فى صفقين شراء مفتوحين والسعر عكس عليهم 100 نقطه = ماكس تريد متاح من جديد لصفقتين واذا تحقق شروط الشراء يشترى

البيع لوحده والشراء لوحده

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

kira-h
24-07-2019, 02:12 PM
طيب اتحملنى بس اخى حسن

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


مفيش اي حل برمجى مثلاً
اذا ماكس تريد = 2 واذا فى صفقين شراء مفتوحين والسعر عكس عليهم 100 نقطه = ماكس تريد متاح من جديد لصفقتين واذا تحقق شروط الشراء يشترى

البيع لوحده والشراء لوحده

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

aut
24-07-2019, 05:15 PM
اشرح الاستراتيجية كاملة حتى افهم المطلوب فالشروط الخاصة بالصفقة الرئيسية غير واضحة برمجيا
اما مسالة فتح عدد معين من الصفقات كل ستيب قلنا انها مسالة معقدة برمجيا فيها مصفوفات ودوال في غنا عنها لانه يمكنك بدل هذا التعقيد فتح صفقة واحدة كل ستيب بعقد موحد

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

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

والبيع والشراء كل نوعه لوحده

kira-h
24-07-2019, 05:21 PM
الاكسبيرت بيشترى او يبيع كل استيب محدد كل ما تحقق بيشترى او يبيع دى الاستراتيجية اللى بيشتغل عليها

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

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

aut
25-07-2019, 03:02 AM
هذه شروط التبريد
ما هي شروط الصفقة الأساسية أو الصفقة الأولى ؟

اذا السعر اعلى الموفينج 50 اتحرك مسافة الجاب = شراء
اذا السعر اسفل الموفينج 100 اتحرك مسافة الجاب = بيع

kira-h
25-07-2019, 10:18 PM
اذا السعر اعلى الموفينج 50 اتحرك مسافة الجاب = شراء
اذا السعر اسفل الموفينج 100 اتحرك مسافة الجاب = بيع

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



//+------------------------------------------------------------------+
//| ScalperV1.mq4 |
//| Copyright 2005-2014, MetaQuotes Software Corp. |
//| https://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright "2005-2014, MetaQuotes Software Corp."
#property link "https://www.mql4.com"
#property description "ScalperV1 expert advisor"








enum OrdersTy
{
BuyOnly=0,
SellOnly=1,
BuySellBoth=2,
};








input OrdersTy OrdersT = 2;
extern double LotsBuy = 0.01;
extern double LotsSell = 0.01;
extern int MaxSpread = 4;
input bool CloseAtNext=false;
extern int MaxOrders = 0,
MaxTrades = 2;
extern int GapSize = 0;
extern int StopLoss = 0;
extern int TakeProfit = 0;
extern int TrailingStop=0;
extern int TrailingStep=0;
extern int BreakEven=0;
input int BreakEvenPips=0;
extern int USDP=0;
extern int USDL=0;
extern int MagicNumber = 555555;


//---------
int EMA1 = 50;
int EMA2 = 100;
ENUM_APPLIED_PRICE apply1 = PRICE_CLOSE;
ENUM_APPLIED_PRICE apply2 = PRICE_CLOSE;
double buyMM = 2;
double sellMM = 2;
string commentSell, commentBuy, NewLotsSell, NewLotsBuy;
double p,SL,TP,NewLots;
int LimitBuy, LimitSell;
double lotaB,lotaS,LB,LS;
double UT1, DW1,point;
int Q,digits;
datetime time=0;
datetime BarTime;
static datetime timeS=0,timeB=0;
static int rBuy1=0,rSell1=0,rBuy2=0,rSell2=0;


double chain[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20};
double chain2[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20};

void OnInit()
{
if(Digits==4 || Digits<=2) point=Point;
if(Digits==5 || Digits==3) point=Point*10;
}




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


if(TrailingStop>0)MoveTrailingStop();
if(BreakEven>0)MoveBreakEven();
if((USDP!=0&&Profit_By_USD()>=USDP)
||(USDL!=0&&Profit_By_USD()<=-USDL)){CloseOrders();}

if(Bars<100 || IsTradeAllowed()==false) return;

double Fast_1=iMA(NULL,0,EMA1,50,MODE_SMMA,apply1,0);
double Fast_2=iMA(NULL,0,EMA2,100,MODE_SMMA,apply2,0);

//شروط التبريد
//------------------BUY
if(((MaxOrders>0&&TotalOrders(OP_BUY)<MaxOrders)||MaxOrders==0)
&&Orderscnt(OP_BUY)>0&&Ask<=LastPrice(OP_BUY)-GapSize*point)
{
if(StopLoss!=0){SL=Ask-StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Ask+TakeProfit*point;}else TP=0;
rBuy1=OrderSend(Symbol(),OP_BUY,LotsBuy,Ask,3*Q,SL ,TP,"",MagicNumber,0,Blue);
if(rBuy1>0)timeB=Time[0];
}
if(MaxTrades>0&&rBuy1>0&&timeB>0&&Orders(timeB,OP_BUY)<MaxTrades)
{
rBuy2=OrderSend(Symbol(),OP_BUY,LotsBuy,Ask,3*Q,SL ,TP,"",MagicNumber,0,Blue);
if(rBuy2>0&&Orders(timeB,OP_BUY)>=MaxTrades){rBuy1=0;rBuy2=0;timeB=0;return;}
}
//------------------SELL
if(((MaxOrders>0&&TotalOrders(OP_SELL)<MaxOrders)||MaxOrders==0)
&&Orderscnt(OP_SELL)>0&&Bid>=LastPrice(OP_SELL)+GapSize*point)
{
if(StopLoss!=0){SL=Bid+StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Bid-TakeProfit*point;}else TP=0;
rSell1=OrderSend(Symbol(),OP_SELL,LotsSell,Bid,3*Q ,SL,TP,"",MagicNumber,0,Red);
if(rSell1>0)timeS=Time[0];
}
if(MaxTrades>0&&rSell1>0&&timeS>0&&Orders(timeS,OP_SELL)<MaxTrades)
{
rSell2=OrderSend(Symbol(),OP_SELL,LotsSell,Bid,3*Q ,SL,TP,"",MagicNumber,0,Red);
if(rSell2>0&&Orders(timeS,OP_SELL)>=MaxTrades){rSell1=0;rSell2=0;timeS=0;return;}
}

//buy
if(Ask>=Fast_1+GapSize*point)
{
if(CloseAtNext)CloseDeleteOrders(OP_SELL);

if((OrdersT==BuyOnly||OrdersT==BuySellBoth)
&&(Ask-Bid)<=MaxSpread*point&&Orderscnt(OP_BUY)==0&&time!=Time[0])
{
if(StopLoss!=0){SL=Ask-StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Ask+TakeProfit*point;}else TP=0;
rBuy1=OrderSend(Symbol(),OP_BUY,LotsBuy,Ask,3*Q,SL ,TP,"",MagicNumber,0,Blue);
if(rBuy1>0){time=Time[0];timeB=Time[0];return;}
}
}

//sell
if(Bid<=Fast_2-GapSize*point)
{
if(CloseAtNext)CloseDeleteOrders(OP_BUY);

if((OrdersT==SellOnly||OrdersT==BuySellBoth)&&(Ask-Bid)<=MaxSpread*point&&Orderscnt(OP_SELL)==0&&time!=Time[0])
{
if(StopLoss!=0){SL=Bid+StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Bid-TakeProfit*point;}else TP=0;
rSell1=OrderSend(Symbol(),OP_SELL,LotsSell,Bid,3*Q ,SL,TP,"",MagicNumber,0,Red);
if(rSell1>0){time=Time[0];timeS=Time[0];return;}
}
}

}


//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS |
//+------------------------------------------------------------------+


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);
}
}












//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Trailing Stop |
//+------------------------------------------------------------------+




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*point,Digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*poin t,Digits))
{
if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-TrailingStop*point,Digits))||(OrderStopLoss()==0))
{
bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(Bid-TrailingStop*point,Digits),OrderTakeProfit(),0,Blu e);

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

}
}
}
}
}
}




//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Break Even |
//+------------------------------------------------------------------+


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*point)
{
if(NormalizeDouble((OrderStopLoss()-OrderOpenPrice()),Digits)<0||(OrderStopLoss()==0))
{
bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(OrderOpenPrice()+BreakEvenPips*point,D igits),OrderTakeProfit(),0,Blue);

}
}
}
}
else
{
if(BreakEven>0)
{
if(NormalizeDouble((OrderOpenPrice()-Ask),Digits)>BreakEven*point)
{
if(NormalizeDouble((OrderOpenPrice()-OrderStopLoss()),Digits)<0||(OrderStopLoss()==0))
{
bool nn=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(OrderOpenPrice()-BreakEvenPips*point,Digits),OrderTakeProfit(),0,Re d);

}
}
}
}
}
}
}




//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS To Know The Profit Of Open Positions |
//+------------------------------------------------------------------+


double Profit_By_USD(int type=-1)
{
double pts;
for(int i=0;i<OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ot=OrderType();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
if(sy==Symbol()&&mn==MagicNumber)
{
if(ot==type||type==-1)
{
pts+=pt+sw+cm;
}
}
}
return(pts);
}


//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Closing Trades Together |
//+------------------------------------------------------------------+




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);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==type||type==-1)
{
if(OrderType()==OP_BUY){close=OrderClose(OrderTick et(),OrderLots(),NormalizeDouble(Bid,Digits),5*Q); }
if(OrderType()==OP_SELL){close=OrderClose(OrderTic ket(),OrderLots(),NormalizeDouble(Ask,Digits),5*Q) ;}
if(OrderType()>OP_SELL){del=OrderDelete(OrderTicket());}
}
}
}
}


//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS To Know Total Orders |
//+------------------------------------------------------------------+


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


int Orders(datetime Timee,int type)//Orders by Open Time
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()&&OrderType()==type)
{
if(OrderOpenTime()>=Timee)cnt++;
}
}
}
return(cnt);
}




















//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Close Delete Orders |
//+------------------------------------------------------------------+








void CloseDeleteOrders(int type)
{
bool select,close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
if(OrderType()==type)
{
if(OrderType()==OP_BUY)
{
close=OrderClose(OrderTicket(),OrderLots(),Normali zeDouble(Bid,Digits),5*Q);
}
if(OrderType()==OP_SELL)
{
close=OrderClose(OrderTicket(),OrderLots(),Normali zeDouble(Ask,Digits),5*Q);
}
if(OrderType()>OP_SELL)
{
close=OrderDelete(OrderTicket());
}
}
}
}




//دالة تعود بسعر آخر صفقة مفتوحة بدلالة نوعها
double LastPrice(int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
{
return(OrderOpenPrice());
}
}
return(0);
}


/*
//دالة اغلاق الصفقات بدلالة النوع
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(),
ot=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots();
if(tt>0&&sy==Symbol()&&mn==MagicNumber)
{
if(ot==type||type==-1)
{
if(ot==OP_BUY){close=OrderClose(tk,lo,NormalizeDou ble(Bid,Digits),5*Q);}
if(ot==OP_SELL){close=OrderClose(tk,lo,NormalizeDo uble(Ask,Digits),5*Q);}
if(ot>OP_SELL){close=OrderDelete(tk);}
}
}
}
}
*/


//دالة لمعرفة نوع آخر صفقة مغلقة
int LastType()
{
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();
if(sy==Symbol()&&mn==MagicNumber)
{
return(ty);
}
}
return(0);
}


//دالة لمعرفة توقيت اغلاق آخر صفقة بدلالة نوعها
datetime LastTime(int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();
datetime ct=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNumber&&(ty==type||type==-1))
{
return(ct);
}
}
return(0);
}


//دالة لمعرفة ربح آخر صفقة مغلقة بدلالة نوعها
double LastProfit(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();
datetime ct=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNumber&&(ty==type||type==-1))
{
if(info=="Profit")return(pt);

}
}
return(0);
}


datetime FirstClose()
{
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 lo=OrderLots();
datetime om=OrderOpenTime();
if(sy==Symbol()&&mn==MagicNumber&&lo==LotsBuy)
if(sy==Symbol()&&mn==MagicNumber&&lo==LotsSell)
{
return(om);
}
}
return(0);
}


double TotalProfit()
{
double pts=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
datetime om=OrderCloseTime();

if(sy==Symbol()&&mn==MagicNumber&&om>FirstClose())
{
pts+=pt+sw+cm;
}
}
return(pts);
}


double LastOrder(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
pt=OrderProfit(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();
datetime om=OrderOpenTime(),
cm=OrderCloseTime();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
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=="CloseTime")return(cm);
else if(info=="Comment")return(mm);
}
}
}
return(0);
}


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


double Closed(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
pt=OrderProfit(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="Profit")return(pt);
else if(info=="Type")return(ty);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
else if(info=="TP")return(tp);
else if(info=="SL")return(sl);
}
}
}
return(0);
}


double CurrentLots(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(),
ty=OrderType();
double lo=OrderLots();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
return(lo);
}
}
}
return(0);
}


int HistoryOrders(int type=-1)
{
int cnt=0;
for(int i =0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()&&(OrderType()==type||type==-1))
{
cnt++;
}
}
}
return(cnt);
}


double LastCurrent(string info,int type=-1)//دالة لمعرفة كل تفاصيل الصفقة المفعلة بدلالة النوع
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&(OrderType()==type||type==-1))
{
if(info=="Type")return(OrderType());
else if(info=="Lots")return(OrderLots());
else if(info=="Price")return(OrderOpenPrice());
else if(info=="TP")return(OrderTakeProfit());
else if(info=="SL")return(OrderStopLoss());
else if(info=="Profit")return(OrderProfit());
else if(info=="Time")return(OrderOpenTime());
}
}
return(0);
}


double LastOrderClosed(string info)//نتيجة آخر صفقة مغلقة والاكبر من حيث توقيت الفتح
{
double c=0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()<=OP_SELL)
{
if(OrderOpenTime()>c)c=OrderOpenTime();
if(OrderOpenTime()==c)
{
if(info=="Profit")return(OrderProfit());
else if(info=="Lots")return(OrderLots());
}
}
}
return(0);
}


int Orderscnt()//دالة عدد الصفقات المفتوحة
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
cnt++;//عد الصفقات
}
}
}
return(cnt);
}




void CloseAllOrders(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(),
ot=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots();
if(tt>0)
{
if(ot==type||type==-1)
{
if(ot==OP_BUY){close=OrderClose(tk,lo,MarketInfo(s y,MODE_BID),50);}
if(ot==OP_SELL){close=OrderClose(tk,lo,MarketInfo( sy,MODE_ASK),50);}
if(ot>OP_SELL){del=OrderDelete(tk);}
}
}
}
}

aut
26-07-2019, 10:03 AM
مرفق الكود بحيث :
MaxOrders اقصى عدد الصفقات الكلية لكل نوع
MaxTrades عدد الصفقات بكل مستوى ستيب لكل نوع



//+------------------------------------------------------------------+
//| ScalperV1.mq4 |
//| Copyright 2005-2014, MetaQuotes Software Corp. |
//| https://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright "2005-2014, MetaQuotes Software Corp."
#property link "https://www.mql4.com"
#property description "ScalperV1 expert advisor"








enum OrdersTy
{
BuyOnly=0,
SellOnly=1,
BuySellBoth=2,
};








input OrdersTy OrdersT = 2;
extern double LotsBuy = 0.01;
extern double LotsSell = 0.01;
extern int MaxSpread = 4;
input bool CloseAtNext=false;
extern int MaxOrders = 0,
MaxTrades = 2;
extern int GapSize = 0;
extern int StopLoss = 0;
extern int TakeProfit = 0;
extern int TrailingStop=0;
extern int TrailingStep=0;
extern int BreakEven=0;
input int BreakEvenPips=0;
extern int USDP=0;
extern int USDL=0;
extern int MagicNumber = 555555;


//---------
int EMA1 = 50;
int EMA2 = 100;
ENUM_APPLIED_PRICE apply1 = PRICE_CLOSE;
ENUM_APPLIED_PRICE apply2 = PRICE_CLOSE;
double buyMM = 2;
double sellMM = 2;
string commentSell, commentBuy, NewLotsSell, NewLotsBuy;
double p,SL,TP,NewLots;
int LimitBuy, LimitSell;
double lotaB,lotaS,LB,LS;
double UT1, DW1,point;
int Q,digits;
datetime time=0;
datetime BarTime;
static datetime timeS=0,timeB=0;
static int rBuy1=0,rSell1=0,rBuy2=0,rSell2=0;


double chain[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20};
double chain2[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20};

void OnInit()
{
if(Digits==4 || Digits<=2) point=Point;
if(Digits==5 || Digits==3) point=Point*10;
}




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


if(TrailingStop>0)MoveTrailingStop();
if(BreakEven>0)MoveBreakEven();
if((USDP!=0&&Profit_By_USD()>=USDP)
||(USDL!=0&&Profit_By_USD()<=-USDL)){CloseOrders();}

if(Bars<100 || IsTradeAllowed()==false) return;

double Fast_1=iMA(NULL,0,EMA1,50,MODE_SMMA,apply1,0);
double Fast_2=iMA(NULL,0,EMA2,100,MODE_SMMA,apply2,0);

//شروط التبريد
//------------------BUY
if(((MaxOrders>0&&TotalOrders(OP_BUY)<MaxOrders)||MaxOrders==0)
&&Orderscnt(OP_BUY)>0&&Ask<=LastPrice(OP_BUY)-GapSize*point)
{
if(StopLoss!=0){SL=Ask-StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Ask+TakeProfit*point;}else TP=0;
rBuy1=OrderSend(Symbol(),OP_BUY,LotsBuy,Ask,3*Q,SL ,TP,"",MagicNumber,0,Blue);
if(rBuy1>0)timeB=Time[0];
}
if(MaxTrades>0&&rBuy1>0&&timeB>0&&Orders(timeB,OP_BUY)<MaxTrades)
{
rBuy2=OrderSend(Symbol(),OP_BUY,LotsBuy,Ask,3*Q,SL ,TP,"",MagicNumber,0,Blue);
if(rBuy2>0&&Orders(timeB,OP_BUY)>=MaxTrades){rBuy1=0;rBuy2=0;timeB=0;return;}
}
//------------------SELL
if(((MaxOrders>0&&TotalOrders(OP_SELL)<MaxOrders)||MaxOrders==0)
&&Orderscnt(OP_SELL)>0&&Bid>=LastPrice(OP_SELL)+GapSize*point)
{
if(StopLoss!=0){SL=Bid+StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Bid-TakeProfit*point;}else TP=0;
rSell1=OrderSend(Symbol(),OP_SELL,LotsSell,Bid,3*Q ,SL,TP,"",MagicNumber,0,Red);
if(rSell1>0)timeS=Time[0];
}
if(MaxTrades>0&&rSell1>0&&timeS>0&&Orders(timeS,OP_SELL)<MaxTrades)
{
rSell2=OrderSend(Symbol(),OP_SELL,LotsSell,Bid,3*Q ,SL,TP,"",MagicNumber,0,Red);
if(rSell2>0&&Orders(timeS,OP_SELL)>=MaxTrades){rSell1=0;rSell2=0;timeS=0;return;}
}

//buy
if(Ask>=Fast_1+GapSize*point)
{
if(CloseAtNext)CloseDeleteOrders(OP_SELL);

if((OrdersT==BuyOnly||OrdersT==BuySellBoth)
&&(Ask-Bid)<=MaxSpread*point&&Orderscnt(OP_BUY)==0&&time!=Time[0])
{
if(StopLoss!=0){SL=Ask-StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Ask+TakeProfit*point;}else TP=0;
rBuy1=OrderSend(Symbol(),OP_BUY,LotsBuy,Ask,3*Q,SL ,TP,"",MagicNumber,0,Blue);
if(rBuy1>0){time=Time[0];timeB=Time[0];return;}
}
}

//sell
if(Bid<=Fast_2-GapSize*point)
{
if(CloseAtNext)CloseDeleteOrders(OP_BUY);

if((OrdersT==SellOnly||OrdersT==BuySellBoth)&&(Ask-Bid)<=MaxSpread*point&&Orderscnt(OP_SELL)==0&&time!=Time[0])
{
if(StopLoss!=0){SL=Bid+StopLoss*point;}else SL=0;
if(TakeProfit!=0){TP=Bid-TakeProfit*point;}else TP=0;
rSell1=OrderSend(Symbol(),OP_SELL,LotsSell,Bid,3*Q ,SL,TP,"",MagicNumber,0,Red);
if(rSell1>0){time=Time[0];timeS=Time[0];return;}
}
}

}


//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS |
//+------------------------------------------------------------------+


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);
}
}












//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Trailing Stop |
//+------------------------------------------------------------------+




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*point,Digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*poin t,Digits))
{
if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-TrailingStop*point,Digits))||(OrderStopLoss()==0))
{
bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(Bid-TrailingStop*point,Digits),OrderTakeProfit(),0,Blu e);

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

}
}
}
}
}
}




//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Break Even |
//+------------------------------------------------------------------+


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*point)
{
if(NormalizeDouble((OrderStopLoss()-OrderOpenPrice()),Digits)<0||(OrderStopLoss()==0))
{
bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(OrderOpenPrice()+BreakEvenPips*point,D igits),OrderTakeProfit(),0,Blue);

}
}
}
}
else
{
if(BreakEven>0)
{
if(NormalizeDouble((OrderOpenPrice()-Ask),Digits)>BreakEven*point)
{
if(NormalizeDouble((OrderOpenPrice()-OrderStopLoss()),Digits)<0||(OrderStopLoss()==0))
{
bool nn=OrderModify(OrderTicket(),OrderOpenPrice(),Norm alizeDouble(OrderOpenPrice()-BreakEvenPips*point,Digits),OrderTakeProfit(),0,Re d);

}
}
}
}
}
}
}




//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS To Know The Profit Of Open Positions |
//+------------------------------------------------------------------+


double Profit_By_USD(int type=-1)
{
double pts;
for(int i=0;i<OrdersTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ot=OrderType();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
if(sy==Symbol()&&mn==MagicNumber)
{
if(ot==type||type==-1)
{
pts+=pt+sw+cm;
}
}
}
return(pts);
}


//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Closing Trades Together |
//+------------------------------------------------------------------+




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);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==type||type==-1)
{
if(OrderType()==OP_BUY){close=OrderClose(OrderTick et(),OrderLots(),NormalizeDouble(Bid,Digits),5*Q); }
if(OrderType()==OP_SELL){close=OrderClose(OrderTic ket(),OrderLots(),NormalizeDouble(Ask,Digits),5*Q) ;}
if(OrderType()>OP_SELL){del=OrderDelete(OrderTicket());}
}
}
}
}


//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS To Know Total Orders |
//+------------------------------------------------------------------+


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


int Orders(datetime Timee,int type)//Orders by Open Time
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()&&OrderType()==type)
{
if(OrderOpenTime()>=Timee)cnt++;
}
}
}
return(cnt);
}




















//+------------------------------------------------------------------+
//| FUNCTION DEFINITIONS Close Delete Orders |
//+------------------------------------------------------------------+








void CloseDeleteOrders(int type)
{
bool select,close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
if(OrderType()==type)
{
if(OrderType()==OP_BUY)
{
close=OrderClose(OrderTicket(),OrderLots(),Normali zeDouble(Bid,Digits),5*Q);
}
if(OrderType()==OP_SELL)
{
close=OrderClose(OrderTicket(),OrderLots(),Normali zeDouble(Ask,Digits),5*Q);
}
if(OrderType()>OP_SELL)
{
close=OrderDelete(OrderTicket());
}
}
}
}




//دالة تعود بسعر آخر صفقة مفتوحة بدلالة نوعها
double LastPrice(int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
{
return(OrderOpenPrice());
}
}
return(0);
}


/*
//دالة اغلاق الصفقات بدلالة النوع
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(),
ot=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots();
if(tt>0&&sy==Symbol()&&mn==MagicNumber)
{
if(ot==type||type==-1)
{
if(ot==OP_BUY){close=OrderClose(tk,lo,NormalizeDou ble(Bid,Digits),5*Q);}
if(ot==OP_SELL){close=OrderClose(tk,lo,NormalizeDo uble(Ask,Digits),5*Q);}
if(ot>OP_SELL){close=OrderDelete(tk);}
}
}
}
}
*/


//دالة لمعرفة نوع آخر صفقة مغلقة
int LastType()
{
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();
if(sy==Symbol()&&mn==MagicNumber)
{
return(ty);
}
}
return(0);
}


//دالة لمعرفة توقيت اغلاق آخر صفقة بدلالة نوعها
datetime LastTime(int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();
datetime ct=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNumber&&(ty==type||type==-1))
{
return(ct);
}
}
return(0);
}


//دالة لمعرفة ربح آخر صفقة مغلقة بدلالة نوعها
double LastProfit(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double pt=OrderProfit();
datetime ct=OrderCloseTime();
if(sy==Symbol()&&mn==MagicNumber&&(ty==type||type==-1))
{
if(info=="Profit")return(pt);

}
}
return(0);
}


datetime FirstClose()
{
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 lo=OrderLots();
datetime om=OrderOpenTime();
if(sy==Symbol()&&mn==MagicNumber&&lo==LotsBuy)
if(sy==Symbol()&&mn==MagicNumber&&lo==LotsSell)
{
return(om);
}
}
return(0);
}


double TotalProfit()
{
double pts=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
datetime om=OrderCloseTime();

if(sy==Symbol()&&mn==MagicNumber&&om>FirstClose())
{
pts+=pt+sw+cm;
}
}
return(pts);
}


double LastOrder(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
pt=OrderProfit(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();
datetime om=OrderOpenTime(),
cm=OrderCloseTime();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
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=="CloseTime")return(cm);
else if(info=="Comment")return(mm);
}
}
}
return(0);
}


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


double Closed(string info,int type=-1)
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol(),
mm=OrderComment();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots(),
pt=OrderProfit(),
op=OrderOpenPrice(),
cp=OrderClosePrice(),
tp=OrderTakeProfit(),
sl=OrderStopLoss();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
if(info=="Lots")return(lo);
else if(info=="Profit")return(pt);
else if(info=="Type")return(ty);
else if(info=="OpenPrice")return(op);
else if(info=="ClosePrice")return(cp);
else if(info=="TP")return(tp);
else if(info=="SL")return(sl);
}
}
}
return(0);
}


double CurrentLots(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(),
ty=OrderType();
double lo=OrderLots();

if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
return(lo);
}
}
}
return(0);
}


int HistoryOrders(int type=-1)
{
int cnt=0;
for(int i =0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&MagicNumber==OrderMagicNumber()&&(OrderType()==type||type==-1))
{
cnt++;
}
}
}
return(cnt);
}


double LastCurrent(string info,int type=-1)//دالة لمعرفة كل تفاصيل الصفقة المفعلة بدلالة النوع
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&(OrderType()==type||type==-1))
{
if(info=="Type")return(OrderType());
else if(info=="Lots")return(OrderLots());
else if(info=="Price")return(OrderOpenPrice());
else if(info=="TP")return(OrderTakeProfit());
else if(info=="SL")return(OrderStopLoss());
else if(info=="Profit")return(OrderProfit());
else if(info=="Time")return(OrderOpenTime());
}
}
return(0);
}


double LastOrderClosed(string info)//نتيجة آخر صفقة مغلقة والاكبر من حيث توقيت الفتح
{
double c=0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()<=OP_SELL)
{
if(OrderOpenTime()>c)c=OrderOpenTime();
if(OrderOpenTime()==c)
{
if(info=="Profit")return(OrderProfit());
else if(info=="Lots")return(OrderLots());
}
}
}
return(0);
}


int Orderscnt()//دالة عدد الصفقات المفتوحة
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
cnt++;//عد الصفقات
}
}
}
return(cnt);
}




void CloseAllOrders(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(),
ot=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots();
if(tt>0)
{
if(ot==type||type==-1)
{
if(ot==OP_BUY){close=OrderClose(tk,lo,MarketInfo(s y,MODE_BID),50);}
if(ot==OP_SELL){close=OrderClose(tk,lo,MarketInfo( sy,MODE_ASK),50);}
if(ot>OP_SELL){del=OrderDelete(tk);}
}
}
}
}


السلام عليكم اخى حسن

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


فى مشكله فى عدد الصفقات بيفتح صفقه واحده اساسيه حتى لو ماكس تريد = 5
وعند فتح صفقات تبريد بيفتح حوالى 7 او 8 صفقه مره ( بيخزن الفرص اللى تجاهلها اثناء مسافة الاستيب ويفتحهم مع التبريد بعتقد كده ! ) والمطلوب انه ميكررش صفقات التبريد اذا اغلقت متتكررش من نفس المكان تانى

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

kira-h
26-07-2019, 05:40 PM
السلام عليكم اخى حسن

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


فى مشكله فى عدد الصفقات بيفتح صفقه واحده اساسيه حتى لو ماكس تريد = 5
وعند فتح صفقات تبريد بيفتح حوالى 7 او 8 صفقه مره ( بيخزن الفرص اللى تجاهلها اثناء مسافة الاستيب ويفتحهم مع التبريد بعتقد كده ! ) والمطلوب انه ميكررش صفقات التبريد اذا اغلقت متتكررش من نفس المكان تانى

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

aut
26-07-2019, 07:56 PM
وعليكم السلام
شرحك غير واضح كما ان هذا الموضوع مخصص فقط للاسئلة البرمجية وليس للطلبات!
يعني وضعت لك مثال لطريقة برمجية حاول بدورك حل أو برمجة ما تريد بناءا عليه
عموم التعديل الذي قمت به يجعل الاكسبيرت يفتح صفقات اساسية من نفس السعر بعدد MaxOrders، وعند الانعكاس بمسافة ستيب يفتح تبريدات بعدد MaxOrders وهكذا كل انعكاس ستيب

شكراً اخى حسن وفقك الله لما يحب ويرضى

kira-h
27-07-2019, 02:26 AM
شكراً اخى حسن وفقك الله لما يحب ويرضى

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

samizhraldeen
28-07-2019, 01:41 AM
السلام عليكم اخي كيرا

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

فاتى في بالي ان اسالك وان شالله يكون الجواب عندك

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

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

سعر اغلاق الشمعة واسم الزوج (واذا حدث سعر جديد يرسله ايضا ) ​يعني كل تحديث يرسله لنا

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

كيف يمكننا فعل ذلك

وفقك الله واحسن لوالديك

kira-h
28-07-2019, 04:55 PM
السلام عليكم اخي كيرا

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

فاتى في بالي ان اسالك وان شالله يكون الجواب عندك

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

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

سعر اغلاق الشمعة واسم الزوج (واذا حدث سعر جديد يرسله ايضا ) ​يعني كل تحديث يرسله لنا

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

كيف يمكننا فعل ذلك

وفقك الله واحسن لوالديك


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

samizhraldeen
28-07-2019, 06:21 PM
اشكرك اخي كيرا

kira-h
30-07-2019, 04:48 AM
اشكرك اخي كيرا
العفو أخي

ابراهيم
02-08-2019, 03:40 PM
السلام عليكم اخوانى
انا بدأت اتعلم برمجة وقابلنى هذا الخطأ فما هو حل المشكلة ؟
وشكرا جزيلا15883

kira-h
02-08-2019, 05:37 PM
السلام عليكم اخوانى
انا بدأت اتعلم برمجة وقابلنى هذا الخطأ فما هو حل المشكلة ؟
وشكرا جزيلا15883
وعليكم السلام
الخطأ واضح من معناه،
معناه ان الدالة start سبق استخدامها أي انها مكررة وهذا لا يجوز يجب استخدامها مرة واحدة فقط

ابراهيم
02-08-2019, 06:55 PM
وعليكم السلام
الخطأ واضح من معناه،
معناه ان الدالة start سبق استخدامها أي انها مكررة وهذا لا يجوز يجسب استخدامها مرة واحدة فقط

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

kira-h
03-08-2019, 01:52 AM
الف شكر ليك اخى حسن
معلش انا لسة مبتدأ
وبارك الله فيك
العفو، هذا واجب
والله الموفق

ammar
04-08-2019, 02:27 AM
السلام عليكم
اخي حسن لديه مشكلة في اكسبيرت المطلوب تغير الستوب لوز عند تحقق الشرط ولكن لا ينفذ الشرط الا بعد ان يغلق buy وكذلك sell وعند فتح اوردر جديد يبدأ تطبيق الشرط سوف ارفق الاكسبيرت اورجو ان تحلها مع الشكر الجزيل
15909

kira-h
04-08-2019, 06:29 PM
السلام عليكم
اخي حسن لديه مشكلة في اكسبيرت المطلوب تغير الستوب لوز عند تحقق الشرط ولكن لا ينفذ الشرط الا بعد ان يغلق buy وكذلك sell وعند فتح اوردر جديد يبدأ تطبيق الشرط سوف ارفق الاكسبيرت اورجو ان تحلها مع الشكر الجزيل
15909

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

ammar
06-08-2019, 01:14 AM
وعليكم السلام
مرفق الاكسبيرت
اخ حسن عاشت الايادي شغل راقي الله يوفقك والله يعجز اللسان عن الشكر وسوف ادعو لك في صلاتي

kira-h
06-08-2019, 07:01 AM
اخ حسن عاشت الايادي شغل راقي الله يوفقك والله يعجز اللسان عن الشكر وسوف ادعو لك في صلاتي
العفو اخي الكريم وجزاك الله خيرا

absafir
07-08-2019, 10:47 AM
السلام عليكم
كيف استطيع ان احفظ قيمة في متغير اثناء العمل ومن ثم الاحتفاظ بهذه القيمة حتى لو اقفلت المنصة ومن ثم فتحتها بعد ساعة او يوم ....الخ
مثلا اريد حفظ سعراليورو : 1.1225 في متغير وان اغلقت المنصة تبقى هذه القيمة محفوظة
ولكم مني الدعاء

ammar
07-08-2019, 03:22 PM
السلام عليكم
اخ حسن لديه اكسبيرت يعمل بصورة طبيعيه فيه دوال لغلق جميع اوامر الشراء او البيع المشكلة عند تجربته على اكثر من عمله يغلق الصفقات لجميع العملات والمطلوب ان يكون لكل عمله غلق اوامر الخاصة بعملة معينه مع الشكرللجهد الرائع المبذول وارفق لك الاكسبيرت
15997

kira-h
07-08-2019, 07:04 PM
السلام عليكم
كيف استطيع ان احفظ قيمة في متغير اثناء العمل ومن ثم الاحتفاظ بهذه القيمة حتى لو اقفلت المنصة ومن ثم فتحتها بعد ساعة او يوم ....الخ
مثلا اريد حفظ سعراليورو : 1.1225 في متغير وان اغلقت المنصة تبقى هذه القيمة محفوظة
ولكم مني الدعاء

وعليكم السلام
راجع المشاركة التالية Global Variables (https://www.fxprg.com/vb/showthread.php?t=31457&page=9&p=846193&viewfull=1#post846193)

mahmoud1111
07-08-2019, 08:01 PM
السلام عليكم
لو سمحت استاذي الفاضل

ممكن طريقة كتابة الدالة

انه تم فتح صفقة بهدف 50 نقطة وستوب 20 نقطة وتريلنج ستوب 10 نقاط

انه في حالة تحقيق 20 نقطة ربح من 50 نقطة هدف يكون ترينج ستوب 5 نقاط فقط
وشكرا

kira-h
07-08-2019, 11:30 PM
السلام عليكم
لو سمحت استاذي الفاضل

ممكن طريقة كتابة الدالة

انه تم فتح صفقة بهدف 50 نقطة وستوب 20 نقطة وتريلنج ستوب 10 نقاط

انه في حالة تحقيق 20 نقطة ربح من 50 نقطة هدف يكون ترينج ستوب 5 نقاط فقط
وشكرا
وعليكم السلام
راجع الموضوع التالي:
أهم الدوال البرمجية وتطبيقات لغة mql4 (https://www.fxprg.com/vb/showthread.php?t=31456)

mahmoud1111
14-08-2019, 08:03 AM
السلام عليكم استاذي الفاضل
المقصود انه في بداية الصفقة يكون الهدف 50 نقطة والتريلنج ستوب 15 نقطة
وعند الوصول لربح 20 نقطة يتحول التريلنج من 15 نقطة الي 5 نقاط فقط

حاولت ولكن في الكود خطا ممكن حل هذا الخطا

for(int cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL &&
OrderSymbol()==Symbol() &&
OrderMagicNumber()==MagicNumber
)

{
if(OrderType()==OP_BUY)
{
{
}
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
{
if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else
{
{
}
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
{
if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyP oint*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}

}
//
//
if(OrderType()==OP_BUY)
{

if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>MyPoint*Trailingprofit)
{
if(OrderStopLoss()<Bid-MyPoint*Trailingprofit)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Trailing*MyPoint,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}



//
else
if(OrderType()==OP_SELL)
{

if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(MyPoint*Trailingprofit))
{
if((OrderStopLoss()>(Ask+MyPoint*Trailingprofit)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyP oint*Trailing,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}

kira-h
15-08-2019, 04:01 AM
السلام عليكم استاذي الفاضل
المقصود انه في بداية الصفقة يكون الهدف 50 نقطة والتريلنج ستوب 15 نقطة
وعند الوصول لربح 20 نقطة يتحول التريلنج من 15 نقطة الي 5 نقاط فقط

حاولت ولكن في الكود خطا ممكن حل هذا الخطا


وعليكم السلام
جرب الكود التالي:


void OnTick()
{
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
bool mod;
bool select=OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(TrailingStop>0 && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
if((Bid-OrderOpenPrice())>(MyPoint*TrailingStop)&&(Bid-OrderOpenPrice())<(MyPoint*Trailingprofit))
{
if(OrderStopLoss()<(Bid-MyPoint*TrailingStop))
{
mod=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
return;
}
}
if((Bid-OrderOpenPrice())>(MyPoint*Trailingprofit))
{
if(OrderStopLoss()<(Bid-MyPoint*Trailingprofit))
{
mod=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Trailing*MyPoint,OrderTakeProfit(),0,Green);
return;
}
}
}
else if(OrderType()==OP_SELL)
{
if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop)&&(OrderOpenPrice()-Ask)<(MyPoint*Trailingprofit))
{
if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
{
mod=OrderModify(OrderTicket(),OrderOpenPrice(),Ask +MyPoint*TrailingStop,OrderTakeProfit(),0,Red);
return;
}
}
if((OrderOpenPrice()-Ask)>(MyPoint*Trailingprofit))
{
if((OrderStopLoss()>(Ask+MyPoint*Trailingprofit)) || (OrderStopLoss()==0))
{
mod=OrderModify(OrderTicket(),OrderOpenPrice(),Ask +MyPoint*Trailing,OrderTakeProfit(),0,Red);
return;
}
}
}
}
}
}

mahmoud1111
15-08-2019, 11:19 AM
الف شكر استاذي
جاري التجريب

kira-h
15-08-2019, 02:54 PM
الف شكر استاذي
جاري التجريب
بالتوفيق إن شاء الله

mahmoud1111
15-08-2019, 06:43 PM
السلام عليكم

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

بارك الله فيك

kira-h
16-08-2019, 02:50 AM
السلام عليكم

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

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

mahmoud1111
16-08-2019, 12:04 PM
الف شكر أستاذي
لكنها نفس المشكلة
للعلم انا أضع الهدف 50 نقطة
ترينج ستوب 15 نقطة
والترينج الثاني 5 نقاط
محدد الربح 20 نقطة

ammar
17-08-2019, 05:54 AM
السلام عليكم
سؤالى للاخ حسن او من لديه معلومه هل هناك طريقة او برنامج لتجربة اكسبيرت على عدة ازوج في وقت واحد والتجربة على حساب ديمو يعني انتظار شهر او شهرين
بمعنى اخر ماذا لو كان هناك اكسبيرت وتريد تجربته وهذ الاكسبيرت يعتمد على فتح الصفقات على عدة عملات في وقت واحد لكي يعمل الاكسبيرت بصورة صحيحة ولا ينفع زوج واحد كما هو الحال في الباك تيست في المنصة مع الشكر الجزيل

kira-h
17-08-2019, 11:53 PM
الف شكر أستاذي
لكنها نفس المشكلة
للعلم انا أضع الهدف 50 نقطة
ترينج ستوب 15 نقطة
والترينج الثاني 5 نقاط
محدد الربح 20 نقطة
جربته يعمل وفق المطلوب
تأكد من تحقق الشروط على الشارت

احمد
24-08-2019, 07:29 AM
السلام عليكم ورحمة الله وبركاته
أخي حسن بارك الله فيك أنا استخدم الدالة التالية لرسم التريند

void Draw_Trend(string name,double Price1,datetime Time1,double Price2,datetime Time2,color Color)
{
if(ObjectFind(name)==-1)
{
ObjectCreate(name,OBJ_TREND,0,Time1 ,Price1,Time2 ,Price2);
ObjectSet(name,OBJPROP_WIDTH,1);
ObjectSet(name,OBJPROP_COLOR, Color);
ObjectSet(name,OBJPROP_RAY,false);
}
else if(ObjectGet(name,OBJPROP_PRICE1)!=Price1)
{
ObjectDelete(name);
Draw_Trend(name,Price1,Time1,Price2,Time2,Color);
}
}

والدالة تعمل والتريند مرسوم وأحاول الحصول على زاوية التريند ولم أستطع حيت أستخدمت المكود التالي ولكن النتيجه التي تضهر صفر
void OnTick()
{
T0=iTime(NULL,0,0);
T1=iTime(NULL,0,7);
C0=iClose(NULL,0,0);
C1=iClose(NULL,0,7);
Draw_Trend("Trend",C1,T1,C0,T0,Blue);
DT=ObjectGet("Trend",OBJPROP_ANGLE);
Comment(DT);
}

فما هي الطريقة الصحيحة للحصول على الزاوية أو درجة ميول التريند
مع الشكر الجزيل

kira-h
24-08-2019, 03:52 PM
السلام عليكم ورحمة الله وبركاته
أخي حسن بارك الله فيك أنا استخدم الدالة التالية لرسم التريند

void Draw_Trend(string name,double Price1,datetime Time1,double Price2,datetime Time2,color Color)
{
if(ObjectFind(name)==-1)
{
ObjectCreate(name,OBJ_TREND,0,Time1 ,Price1,Time2 ,Price2);
ObjectSet(name,OBJPROP_WIDTH,1);
ObjectSet(name,OBJPROP_COLOR, Color);
ObjectSet(name,OBJPROP_RAY,false);
}
else if(ObjectGet(name,OBJPROP_PRICE1)!=Price1)
{
ObjectDelete(name);
Draw_Trend(name,Price1,Time1,Price2,Time2,Color);
}
}

والدالة تعمل والتريند مرسوم وأحاول الحصول على زاوية التريند ولم أستطع حيت أستخدمت المكود التالي ولكن النتيجه التي تضهر صفر
void OnTick()
{
T0=iTime(NULL,0,0);
T1=iTime(NULL,0,7);
C0=iClose(NULL,0,0);
C1=iClose(NULL,0,7);
Draw_Trend("Trend",C1,T1,C0,T0,Blue);
DT=ObjectGet("Trend",OBJPROP_ANGLE);
Comment(DT);
}

فما هي الطريقة الصحيحة للحصول على الزاوية أو درجة ميول التريند
مع الشكر الجزيل
وعليكم السلام
راجع المشاركة التالية :
https://www.fxprg.com/vb/showthread.php?t=31457&page=56&p=872517&viewfull=1#post872517



حسب ما أذكر النتيجة تكون بالـ radian وليس degré
عموما يمكنك مراجعة للوظائف الرياضية بلغة الـ MQL4 من هنا :
Math Functions (https://docs.mql4.com/math/mathtan)
ذات صلة:
الدوال المثلثية العكسية
(https://en.wikipedia.org/wiki/Inverse_trigonometric_functions)
ويمكن معرفة زاوية الترند باستخدام معادلة الميل كالتالي :


double price1=ObjectGet("Trend",OBJPROP_PRICE1);
double price2=ObjectGet("Trend",OBJPROP_PRICE2);
double Time1=iBarShift(Symbol(),0,ObjectGet("Trend",OBJPROP_TIME1),false);
double Time2=iBarShift(Symbol(),0,ObjectGet("Trend",OBJPROP_TIME2),false);

double price_diff=((price2-price1)/point);
double time_diff=(Time2-Time1);
double angle=MathArctan(price_diff/time_diff);
لكن في كل الحالات خاطئ حساب زاوية لمقياس رسم غير ثابت، فالنتائج لن تكون ثابته أبدا
يمكن التأكد من ذلك بتكبير الشارت وتصغيره سوف نجد أن الزاويه تتغير لنفس الترند

Waddah
28-08-2019, 02:55 PM
السلام عليكم أستاذ حسن
المؤشر المرفق تتغير إشاراته بطريقة خبيثة (مفتوح الكود ) لوسمحت ممكن نظرة للكود وبيان هل يمكن تثبيت الإشارة مع الشكر الجزيل

kira-h
28-08-2019, 07:32 PM
السلام عليكم أستاذ حسن
المؤشر المرفق تتغير إشاراته بطريقة خبيثة (مفتوح الكود ) لوسمحت ممكن نظرة للكود وبيان هل يمكن تثبيت الإشارة مع الشكر الجزيل
وعليكم السلام
هذا الموضوع مخصص فقط للأسئلة البرمجية

Waddah
29-08-2019, 09:56 AM
وعليكم السلام
هذا الموضوع مخصص فقط للأسئلة البرمجية

وضعته هنا لأني لم أفهم الكود - أو إشارة السهم لا علاقة لها بالكود .....سأنقل الطلب للموضوع المناسب مع الشكر

Waddah
29-08-2019, 01:52 PM
هل هناك طريقة لمشاهدة تنفيذ كود برمجي لمؤشر أو إكسبرت Step by step مثل لغات البرمجة الأخرى ؟

kira-h
29-08-2019, 04:49 PM
هل هناك طريقة لمشاهدة تنفيذ كود برمجي لمؤشر أو إكسبرت Step by step مثل لغات البرمجة الأخرى ؟
يوجد موضوع أهم الدوال البرمجية وتطبيقات لغة mql4 (https://www.fxprg.com/vb/showthread.php?t=31456)

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