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

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



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

احمد
09-08-2018, 08:39 PM
مساء النور
استخدم الوظيفة

ObjectGetValueByShift(trend name, bar shift)
بحيث trend name اسم الترند
bar shift رقم الشمعة التي تريد عندها قيمة الترند


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


:(ObjectGetValueByTime(chart_id,trend name,time,line_id

ولكن لم أستطيع إكمال الوظيفة بطريقة صحيحة
ماذا أضع بدل كلا من
chart_id
time
line_id

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


:(ObjectGetValueByTime(chart_id,trend name,time,line_id

ولكن لم أستطيع إكمال الوظيفة بطريقة صحيحة
ماذا أضع بدل كلا من
chart_id
time
line_id
لا أخي تعطي قيمة الترند عند كل تكة سعرية وليس فقط لحظة الرسم، لكن طبعا على حسب الشروط
استخدم الوظيفة بالدالة الرئيسية OnTick

احمد
10-08-2018, 12:20 AM
بالفعل أخوي
وضعتها
بالدالة الرئيسية OnTick واشتغلت معي
الله يعطيك العافية

kira-h
10-08-2018, 05:44 PM
بالفعل أخوي
وضعتها
بالدالة الرئيسية OnTick
واشتغلت معي
الله يعطيك العافية
بالتوفيق إن شاء الله

mahmoud1111
10-08-2018, 08:51 PM
السلام عليكم استاذي الحبيب
ارغب من حضراتكم افادتني بالدالة الاتية
لدي صفقة علي عملة مثلا اليورو ين والهدف 3 نقاط
لكن الصفقة عكست وفتحت تبريد ثم تبريد ثم تبريد
ارغب بدالة كي اغلق كل صفقات العملة مرة واحدة بالرغم من الانعكاس القائم علي ربح مثلا 5 نقاط
شكرا لكم

احمد
10-08-2018, 11:50 PM
أخوي محمد
أنا طبعا لا أستطيع اجابتك على سؤالك وإنشاء الله يفيدك فيه الأستاذ حسن
ولكن عندي استفسار بسيط كلمة تبريد تتكرر كثيرا وانا لا أعرف ما المقصود بها
فماذا تعني بها ؟؟
مع شكري لك مقدما

kira-h
11-08-2018, 06:15 PM
السلام عليكم استاذي الحبيب
ارغب من حضراتكم افادتني بالدالة الاتية
لدي صفقة علي عملة مثلا اليورو ين والهدف 3 نقاط
لكن الصفقة عكست وفتحت تبريد ثم تبريد ثم تبريد
ارغب بدالة كي اغلق كل صفقات العملة مرة واحدة بالرغم من الانعكاس القائم علي ربح مثلا 5 نقاط
شكرا لكم
وعليكم السلام
ستحتاج إلى دالة إجمالي النقاط المحققة كالتالي :


double Profit_By_PIPS()
{
double pipsB,pipsS,pips;
for(int i=0;i<OrdersTotal();i++)
{
bool c=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ot=OrderType();
double pt=OrderProfit();
if(sy==Symbol()&&mn==MagicNo)
{
if(ot==OP_BUY)
{
pipsB+=(Ask-OrderOpenPrice())/point;
}
if(ot==OP_SELL)
{
pipsS+=(OrderOpenPrice()-Bid)/point;
}
}
pips=pipsB+pipsS;
}
return(pips);
}


ودالة اغلاق الصفقات كالتالي:


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


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


if(Profit_By_PIPS()>=5)CloseOrders();

kira-h
11-08-2018, 07:01 PM
أخوي محمد
أنا طبعا لا أستطيع اجابتك على سؤالك وإنشاء الله يفيدك فيه الأستاذ حسن
ولكن عندي استفسار بسيط كلمة تبريد تتكرر كثيرا وانا لا أعرف ما المقصود بها
فماذا تعني بها ؟؟
مع شكري لك مقدما
فتح صفقة تبريد معناه فتح صفقة من نفس النوع في اتجاه خسارة الصفقة السابقة
مثلا لدينا مسافة التبريد 10 نقاط ولدينا صفقة شراء خاسرة 10 نقاط إذن نفتح صفقة تبريد من نوع شراء
يوجد أيضا التعزيز وهو عكس التبريد أي فتح صفقة من نفس النوع في اتجاه ربح الصفقة السابقة
ثم يوجد الهيدج وهو فتح صفقة عكس نوع الصفقة السابقة بنفس حجم العقد

benaissa
11-08-2018, 10:14 PM
السلام عليكم اخواني الاعزاء.
انا مبتدأ في مجال البرمجة , وعندي اسئلة بسيطة و كثيرة , أرجو مساعدتكم .
ماذا يعني هذا الكود : ( ; double MyPoint=Point )
ما المقصود ب : MyPoint و كذلك : Point
وكذلك : ;if(Digits==3 || Digits==5) MyPoint=Point*10
أشكر لكم صبركم علي,

mahmoud1111
12-08-2018, 08:17 AM
بارك الله فيكم وعليكم والهمكم السكينة والوقار والرزق الوفير

mahmoud1111
12-08-2018, 08:21 AM
أخي الكريم أرغب بداية فتح الصفقات كالتالي فتح الصفقة بلوت 0.01تعكس الصفقة 20 نقطة يفتح تبريد 0.02تعكس الصفقة 20 نقطة من الصفقة السابقة يفتح تبريد 0.03وهكذا بحيث كل صفقة مفتوحة لو ت مختلف عن سابقية واكون انا المتحكم بحجم اللوت في كل الصفقاتشكرا لك اخي الحبيب

احمد
12-08-2018, 01:49 PM
مشكور أخوي حسن
ياليت إ
إذا فيه دوال جاهزه لها تزودنا فيها

kira-h
12-08-2018, 03:38 PM
السلام عليكم اخواني الاعزاء.
انا مبتدأ في مجال البرمجة , وعندي اسئلة بسيطة و كثيرة , أرجو مساعدتكم .
ماذا يعني هذا الكود : ( ; double MyPoint=Point )
ما المقصود ب : MyPoint و كذلك : Point
وكذلك : ;if(Digits==3 || Digits==5) MyPoint=Point*10
أشكر لكم صبركم علي,
وعليكم السلام
هي عبارة عن شروط لضبط قيمة النقطة حسب الزوج ونوع المنصة
لأن منصة المتاتريدر4 نوعين، نوع 4 أرقام و نوع 5 أرقام (Digits)
ولان الوظيفة Point لا يمكنها تمييز نوع المنصة، وبالتالي يلزم عمل تلك الشروط لبناء قمية النقطة (نسميها مثلا
MyPoint) تكون صحيحة تلقائية عوض القيمة الافتراضية Point

benaissa
12-08-2018, 06:02 PM
شكرا اخي حسن .
اذا كان من الممكن ان تكتب لي كود لاكسبيرت بسيط , و يكون فيه شرح لكل كود في التعليقات.
مثال : يفتح صفقة بيع و أخرى شراء مع افتتاح كل شمعة و يكون استوب 10 نقاط لكل منهما و 12 نقطة تيك بروفيت لكل من منهما ايضا, على أن لا تتعدى عدد الصفقات 10.
جزاك الله كل خير و وفقك .

morad
13-08-2018, 01:07 PM
السلام عليكم ,
اخي المهندس حسن, ما هي الطريقة لتخزين الدالات في خزانة المحرر حتى يمكنني استدعاؤها عند احتياجها ؟
شكرا على كل ما تقدم من مساعدات من اجل الشباب العربي.

احمد
13-08-2018, 06:34 PM
السلام عليكم ورحمة الله وبركاته
مساء الخير لكم جميعا
أخوي حسن ما المقصود بأخفاء بعض الأوامر
مثل
ستوبلوز مخفي
أو تيك بروفت مخفي
أو تريلنق مخفي

kira-h
14-08-2018, 05:03 AM
السلام عليكم ,
اخي المهندس حسن, ما هي الطريقة لتخزين الدالات في خزانة المحرر حتى يمكنني استدعاؤها عند احتياجها ؟
شكرا على كل ما تقدم من مساعدات من اجل الشباب العربي.
وعليكم السلام
يمكن فقط تخزين الدوال والمعادلات بالمحرر ثم تحفظ، وعند الحاجة تفتح الملف المحفوظ وتنسخ ما تريد

kira-h
14-08-2018, 05:05 AM
السلام عليكم ورحمة الله وبركاته
مساء الخير لكم جميعا
أخوي حسن ما المقصود بأخفاء بعض الأوامر
مثل
ستوبلوز مخفي
أو تيك بروفت مخفي
أو تريلنق مخفي
وعليكم السلام
معناه ان الاكسبيرت هو من يقوم بمراقبة الاسعار وتتبعها حتى الاغلاق
ليست كالاوامر الجاهزة بسيرفر الشركة

kira-h
14-08-2018, 05:21 AM
شكرا اخي حسن .
اذا كان من الممكن ان تكتب لي كود لاكسبيرت بسيط , و يكون فيه شرح لكل كود في التعليقات.
مثال : يفتح صفقة بيع و أخرى شراء مع افتتاح كل شمعة و يكون استوب 10 نقاط لكل منهما و 12 نقطة تيك بروفيت لكل من منهما ايضا, على أن لا تتعدى عدد الصفقات 10.
جزاك الله كل خير و وفقك .
السلام عليكم
اخي الكريم هذا الموضوع مخصص فقط للأسئلة البرمجية
عموما مرفق الاكسبيرت مع الشرح

kira-h
14-08-2018, 05:24 AM
مشكور أخوي حسن
ياليت إ
إذا فيه دوال جاهزه لها تزودنا فيها

يمكنك مراجعة هذا الموضوع التعليمي
أهم الدوال البرمجية وتطبيقات لغة mql4 (https://www.fxprg.com/vb/showthread.php?t=31456)

kira-h
14-08-2018, 05:26 AM
أخي الكريم أرغب بداية فتح الصفقات كالتالي فتح الصفقة بلوت 0.01تعكس الصفقة 20 نقطة يفتح تبريد 0.02تعكس الصفقة 20 نقطة من الصفقة السابقة يفتح تبريد 0.03وهكذا بحيث كل صفقة مفتوحة لو ت مختلف عن سابقية واكون انا المتحكم بحجم اللوت في كل الصفقاتشكرا لك اخي الحبيب
راجع المثال التالي يعمل تقريبا بنفس المبدأ بالمعكوس
شرح طريقة عمل اكسبيرت سوبلكس (https://www.fxprg.com/vb/showthread.php?t=31456&page=6&p=874924&viewfull=1#post874924)يمكنك التعديل عليه

benaissa
14-08-2018, 11:06 AM
و الله يعجز المرء عن شكرك , الله ينور لك طريقك و يرزقك من رزقه الواسع.

kira-h
14-08-2018, 06:12 PM
و الله يعجز المرء عن شكرك , الله ينور لك طريقك و يرزقك من رزقه الواسع.
وإياك أخي الكريم
والله الموفق

shivaa
15-08-2018, 11:13 AM
السلام عليكم
ممكن شرح التعامل مع ملفات فى mql4
كيف احدد اخر سطر فى ملف اكسيل واخزن منه خانه معينه فى متغير

benaissa
17-08-2018, 01:58 PM
السلام عليكم الاخ حسن , جزاك الله كل خير لِما تبدل من جهد لمساعدتنا.
ممكن اخي تنصحني لكي ابدأ بشكل صحيح في تعلم البرمجة بلغة mql4 . بماذا ابدأ و ما هي الاشياء التي يجب علي حفظها و الاشياء التي يكفي فهمها, (اعطيني من فضلك المراحل التي يمكنني امر منها حتى يكون شغلي ممنهج و فعال) .
شيء ثاني: راسلتك على الخاص في الشهر الماضي , لكن لم تقرأ الرسلة حتى الان, وعاودت مراسلتك منذ ثلاثة ايام لكن تحدف الرسئل لا ادري لماذا!!!
جزاك الله خير و أدام عليك نعمه.

kira-h
17-08-2018, 09:22 PM
السلام عليكم
ممكن شرح التعامل مع ملفات فى mql4
كيف احدد اخر سطر فى ملف اكسيل واخزن منه خانه معينه فى متغير
وعليكم السلام
ليست لدي خبرة كبيرة في هذا الأمر، ولكن أعتقد ستحتاج إلى استخدام الوظيفة FileIsEnding
مثال :


int file=FileOpen(FileName,FILE_READ|FILE_WRITE|FILE_C SV);
if(file!=INVALID_HANDLE)
{
double price=0;
while(!FileIsEnding(file))
{
price=FileReadDouble(file);
}
Comment("Price: " + DoubleToStr(price));
FileClose(file);
}

kira-h
17-08-2018, 09:28 PM
السلام عليكم الاخ حسن , جزاك الله كل خير لِما تبدل من جهد لمساعدتنا.
ممكن اخي تنصحني لكي ابدأ بشكل صحيح في تعلم البرمجة بلغة mql4 . بماذا ابدأ و ما هي الاشياء التي يجب علي حفظها و الاشياء التي يكفي فهمها, (اعطيني من فضلك المراحل التي يمكنني امر منها حتى يكون شغلي ممنهج و فعال) .
شيء ثاني: راسلتك على الخاص في الشهر الماضي , لكن لم تقرأ الرسلة حتى الان, وعاودت مراسلتك منذ ثلاثة ايام لكن تحدف الرسئل لا ادري لماذا!!!
جزاك الله خير و أدام عليك نعمه.
وعليكم السلام
راجع الموضوع التعليمي التالي :
المرجع الكامل في تعليم لغة mql4 (https://www.fxprg.com/vb/showthread.php?t=31458)

ثم راجع الموضوع التطبيقي التالي :
أهم الدوال البرمجية وتطبيقات لغة mql4 (https://www.fxprg.com/vb/showthread.php?t=31456)

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

shivaa
18-08-2018, 02:41 AM
وعليكم السلام
ليست لدي خبرة كبيرة في هذا الأمر، ولكن أعتقد ستحتاج إلى استخدام الوظيفة FileIsEnding
مثال :


int file=FileOpen(FileName,FILE_READ|FILE_WRITE|FILE_C SV);
if(file!=INVALID_HANDLE)
{
double price=0;
while(!FileIsEnding(file))
{
price=FileReadDouble(file);
}
Comment("Price: " + DoubleToStr(price));
FileClose(file);
}


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

benaissa
18-08-2018, 06:37 PM
جزاك الله خيرا .

kira-h
19-08-2018, 01:04 AM
جزاك الله خيرااااااااااااااا


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

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

احمد
20-08-2018, 12:23 AM
السلام عليكم ورحمة الله وبركاته
أخي حسن
أنا عندي مؤشر يعمل بشكل ممتاز مع الشارت ومع الاختبار
ولكن المشكة إذا استدعيته مع أكسبيرت
حيث أن الاكسبيرت في الختبار يكون بطيء قليلا وفي كل تكة يفتح نافذة جديدة للمؤشر
أفدني بارك الله فيك ما السبب
كما هو واضح في الصورة المرفقة
8608

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

kira-h
20-08-2018, 06:53 PM
السلام عليكم ورحمة الله وبركاته
أخي حسن
أنا عندي مؤشر يعمل بشكل ممتاز مع الشارت ومع الاختبار
ولكن المشكة إذا استدعيته مع أكسبيرت
حيث أن الاكسبيرت في الختبار يكون بطيء قليلا وفي كل تكة يفتح نافذة جديدة للمؤشر
أفدني بارك الله فيك ما السبب
كما هو واضح في الصورة المرفقة
أرفقت المؤشر إذا هناك تعديلات علية أو إذا حابب تراجع برمجته
وعليكم السلام
ارفق الاكسبيرت لمراجعته

احمد
20-08-2018, 08:33 PM
هذا الاكسبيرت

kira-h
21-08-2018, 07:48 PM
هذا الاكسبيرت

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

احمد
22-08-2018, 12:47 AM
بارك الله فيك استاذ حسن
وأشكرك جزيل الشكر على ما تقدم لنا

بعد مراجعتي للإكسبيرت المعدل فهمت أن الخطأ كان في طريقة استدعاء المؤشر
أو المعلمات في iCustom لم تكن مرتبة الترتيب الصحيح
هل هذا صحيح !!!
تكرماً منك شرح ما الخطأ البرمجي سابقا ولو شرح موجز
وأيضا ألفت أنتباهك أن التريندات بعد توقف الاختبار لم تعد تظهر وتظهر الاسهم فقط

Amr
22-08-2018, 12:49 AM
السلام عليكم ورحمة الله

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

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

وشكرا

kira-h
22-08-2018, 10:33 PM
بارك الله فيك استاذ حسن
وأشكرك جزيل الشكر على ما تقدم لنا

بعد مراجعتي للإكسبيرت المعدل فهمت أن الخطأ كان في طريقة استدعاء المؤشر
أو المعلمات في iCustom لم تكن مرتبة الترتيب الصحيح
هل هذا صحيح !!!
تكرماً منك شرح ما الخطأ البرمجي سابقا ولو شرح موجز
وأيضا ألفت أنتباهك أن التريندات بعد توقف الاختبار لم تعد تظهر وتظهر الاسهم فقط
نعم الخطأ كان لديك بدالة الاستدعاء
بالنسبة لعدم ظهور الخطوط وحتى التنبيهات لأني قمت بالغائها بدالة الاستدعاء (false) وذلك حتى يكون المؤشر خفيف بالباكتيست، يمكنك تفعيلها (true)

kira-h
22-08-2018, 10:38 PM
السلام عليكم ورحمة الله

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

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

وشكرا

وعليكم السلام
نعم ممكن
مثال لموفينج فريم الأربع ساعات ويمكن استدعاؤه بأي فريم آخر

double ma=iMA(Symbol(),PERIOD_H4,20,0,0,0,1);

Amr
22-08-2018, 10:43 PM
وعليكم السلام
نعم ممكن
مثال لموفينج فريم الأربع ساعات ويمكن استدعاؤه بأي فريم آخر

double ma=iMA(Symbol(),PERIOD_H4,20,0,0,0,1);

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

kira-h
23-08-2018, 04:19 PM
شكرا جزيلا استاذ حسن
وكل عام وانت بخير
العفو اخي الكريم
وكل عام وأنتم بخير

احمد
23-08-2018, 05:26 PM
شكرا لك استاذ حسن
وكل عام وانتم بخير

Amr
23-08-2018, 06:36 PM
السلام عليكم

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

وشكرا

kira-h
23-08-2018, 08:57 PM
شكرا لك استاذ حسن
وكل عام وانتم بخير
العفو أخي الكريم
وكل عام وأنتم بخير


السلام عليكم

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

وشكرا
وعليكم السلام
نعم ممكن باستخدام الوظيفة SendNotification للموبايل، والوظيفة SendMail للأيميل
مثال :

SendNotification("UP signal at Price: "+DoubleToStr(Bid,4)+" Symbol: "+Symbol());
SendMail("UP signal","UP signal at Price: "+DoubleToStr(Bid,4)+" Symbol="+Symbol());

Amr
24-08-2018, 07:11 PM
وعليكم السلام
نعم ممكن باستخدام الوظيفة SendNotification للموبايل، والوظيفة SendMail للأيميل
مثال :

SendNotification("UP signal at Price: "+DoubleToStr(Bid,4)+" Symbol: "+Symbol());
SendMail("UP signal","UP signal at Price: "+DoubleToStr(Bid,4)+" Symbol="+Symbol());


جزاك الله خيرا اخي حسن

kira-h
24-08-2018, 09:12 PM
جزاك الله خيرا اخي حسن
بالتوفيق إن شاء الله

sal_moh85
25-08-2018, 05:39 PM
سلام عليكم اخ حسن استفسار عن continue; break;
شو فائده فيهون داخل الحلقات وشكرا

kira-h
25-08-2018, 09:45 PM
سلام عليكم اخ حسن استفسار عن continue; break;
شو فائده فيهون داخل الحلقات وشكرا
وعليكم السلام
break يعني "كسر"
مثال :

for(int i=1;i<=10;i++){
if(i==4)break;
}

هنا الناتج من المفروض أن يكون من 1 إلى 10 ولكن اضفنا شرط الكسر break عندما يصبح i==4 وبالتالي الناتج هو من 1 إلى 4

continue يعني "تجاوز"
مثال :

for(int i=1;i<=10;i++){
if(i==4)continue;
}

هنا الناتج من المفروض أن يكون من 1 إلى 10 ولكن اضفنا شرط التجاوز continue عندما يصبح i==4 وبالتالي الناتج هو من 1 إلى 3 و من 5 إلى 10

يعني يتجاوز الرقم 4

sal_moh85
28-08-2018, 06:07 PM
وعليكم السلام
break يعني "كسر"
مثال :

for(int i=1;i<=10;i++){
if(i==4)break;
}

هنا الناتج من المفروض أن يكون من 1 إلى 10 ولكن اضفنا شرط الكسر break عندما يصبح i==4 وبالتالي الناتج هو من 1 إلى 4

continue يعني "تجاوز"
مثال :

for(int i=1;i<=10;i++){
if(i==4)continue;
}

هنا الناتج من المفروض أن يكون من 1 إلى 10 ولكن اضفنا شرط التجاوز continue عندما يصبح i==4 وبالتالي الناتج هو من 1 إلى 3 و من 5 إلى 10

يعني يتجاوز الرقم 4

مشكور جدا اخ حسن

kira-h
28-08-2018, 08:37 PM
مشكور جدا اخ حسن
العفو اخي الكريم

احمد
29-08-2018, 08:14 PM
السلام عليكم ورحمة الله وبركاته
أخي حسن أنا حابب أفهم طريقة تركيب هذة الوظيقة ووضعت لك الاسئلة داخل الكود ليتضح المطلوب





bool IsIndicatorPeak(int shift) // هذه الوظيفة ناتجها إما صح أو خطأ بناء على قيمة شفت
{
// macd[shift] ما المقصود بشفت في السطر التالي هل المقصود بها قيمة الماكد في الفترة الزمنية رقم صفر
// macd[shift+1] وهنا تعني قيمة الماكد في الفترة الزمنية رقم صفر زائد قيمة الماكد في الفترة الزمنية رقم واحد
if(macd[shift]>=macd[shift+1]&&macd[shift]>macd[shift+2]&&macd[shift]>macd[shift-1])
return(true);
else
return(false);
}

kira-h
29-08-2018, 08:30 PM
السلام عليكم ورحمة الله وبركاته
أخي حسن أنا حابب أفهم طريقة تركيب هذة الوظيقة ووضعت لك الاسئلة داخل الكود ليتضح المطلوب





bool IsIndicatorPeak(int shift) // هذه الوظيفة ناتجها إما صح أو خطأ بناء على قيمة شفت
{
// macd[shift] ما المقصود بشفت في السطر التالي هل المقصود بها قيمة الماكد في الفترة الزمنية رقم صفر
// macd[shift+1] وهنا تعني قيمة الماكد في الفترة الزمنية رقم صفر زائد قيمة الماكد في الفترة الزمنية رقم واحد
if(macd[shift]>=macd[shift+1]&&macd[shift]>macd[shift+2]&&macd[shift]>macd[shift-1])
return(true);
else
return(false);
}

وعليكم السلام
shift بتلك الدالة هو رقم الشمعة، أي قيمة الماكد عند الشمعة رقم "شيفت"

احمد
29-08-2018, 08:55 PM
تسلم والله يطول بعمرك
وماذا تعني [shift+1] هل الواحد يعني رقم الشمعة السابقه أم ماذا ؟

kira-h
31-08-2018, 01:35 AM
تسلم والله يطول بعمرك
وماذا تعني [shift+1] هل الواحد يعني رقم الشمعة السابقه أم ماذا ؟
وإياك أخي الكريم
نعم تعني الشمعة السابقة

احمد
31-08-2018, 07:53 PM
وإياك أخي الكريم
نعم تعني الشمعة السابقة
تسلم وبارك الله فيك

mohcine
01-09-2018, 01:10 AM
عندي سؤال برمجي بسيط ؟
هل يمكن برمجه إكسبيرت للاخبار يأخد اوقات الاخبار الهامه من المدكره الاقتصادديه مباشره؟

kira-h
01-09-2018, 02:09 AM
تسلم وبارك الله فيك
وإياك أخي الكريم

kira-h
01-09-2018, 02:09 AM
عندي سؤال برمجي بسيط ؟
هل يمكن برمجه إكسبيرت للاخبار يأخد اوقات الاخبار الهامه من المدكره الاقتصادديه مباشره؟
نعم ممكن ولكن يحتاج إلى برمجة متقدمة بلغة أخرى مثل ++c

mohcine
01-09-2018, 07:09 AM
نعم ممكن ولكن يحتاج إلى برمجة متقدمة بلغة أخرى مثل ++c
هل انت قادر على برمجتها؟
طبعا نتكلم هنا عن البرمجه الخاصة المدفوعة.

sal_moh85
01-09-2018, 04:37 PM
سلام عليكم اخ حسن سوال برمجي عشان كود بيحسب زمن
مثال لوضحلك الفكره
على فرض انا عم استخدم موشر استوكاستك على فريم الساعه وربع ساعه واريد حساب الفتره زمنيه بي ميل سكند من عند حصول التقاطع الى انتهائه عند ساعه وربع ساعه
توضيح اكثر على فرض حصل تقاطع بيعي على الساعه من من منطق ان يحدث تقاطعات بيعيه على ربع ساعه عدة مرات اريد حساب مدة هذه التقاطعات لكي احدد الخساره وربح عن طريق الوقث وليس نقاط ان شائ لله تكون وصلت الفكره وشكرا

kira-h
01-09-2018, 07:59 PM
هل انت قادر على برمجتها؟
طبعا نتكلم هنا عن البرمجه الخاصة المدفوعة.
اسأل بقسم البرمجة الخاصة ربما تجد من يلبي طلبك

kira-h
01-09-2018, 08:10 PM
سلام عليكم اخ حسن سوال برمجي عشان كود بيحسب زمن
مثال لوضحلك الفكره
على فرض انا عم استخدم موشر استوكاستك على فريم الساعه وربع ساعه واريد حساب الفتره زمنيه بي ميل سكند من عند حصول التقاطع الى انتهائه عند ساعه وربع ساعه
توضيح اكثر على فرض حصل تقاطع بيعي على الساعه من من منطق ان يحدث تقاطعات بيعيه على ربع ساعه عدة مرات اريد حساب مدة هذه التقاطعات لكي احدد الخساره وربح عن طريق الوقث وليس نقاط ان شائ لله تكون وصلت الفكره وشكرا

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


datetime LastCrossTime(int TimeFrame)
{
for(int i=1;i<Bars;i++)
{
double f=iMA(Symbol(),TimeFrame,5,0,0,0,1),
s=iMA(Symbol(),TimeFrame,10,0,0,0,1),
f1=iMA(Symbol(),TimeFrame,5,0,0,0,i),
s1=iMA(Symbol(),TimeFrame,10,0,0,0,i),
f2=iMA(Symbol(),TimeFrame,5,0,0,0,i+1),
s2=iMA(Symbol(),TimeFrame,10,0,0,0,i+1);
if(f>s&&f1>s1&&f2<=s2)return(iTime(Symbol(),TimeFrame,i));
if(f<s&&f1<s1&&f2>=s2)return(iTime(Symbol(),TimeFrame,i));
else return(0);
}
return(0);
}


ثم فرق التوقيت كالتالي :


datetime Diff=LastCrossTime(15)-LastCrossTime(60);

hre007
01-09-2018, 09:56 PM
السلام عليكم اخي حسن
كنت عاوز اعرف اذاي اضييف مؤشر خارجي الي الاكسبيرت بعد التحديثات الاخيرة .. لأني لما جيت اضيف مؤشر عن طريق الالوان لم يعمل ؟؟
وهل هناك طرق اخري لإضافة مؤشر غير استخدام الوان الخطوط الموجودة بالمؤشر ؟؟
وسؤال اخير استاذ حسن كيف اقوم بتغيير مدخلاته الافتراضية ؟؟
ولك جزيل الشكر

mohamedfx
01-09-2018, 10:11 PM
السلام عليكم اخي حسن
شكرا علي مجهودك الكبير في مساعدتنا في مجال البرمجة
عاوز اعرف هل ممكن اعمل اكسبيرت يعتمد علي مناطق العرض و الطلب
بيتم تحديد المناطق مثلا بطريقة معينة...يعني في قاعدة ثابتة لتحديد هذة المناطق
هل يمكن تحديدها و التداول عليها و تحديد امتي ادخل و امتي اخرج مناطق زي في الشارت هكذا
بسألك علي المبدأ نفسه بما ان المناطق تاريخية (يعني تكونت سابقا منذ فترة ) زي اللي معمول عليها دائرة
https://d.top4top.net/p_9745on221.png (https://up.top4top.net/)

target
01-09-2018, 11:03 PM
سلام عليكم فضلا وليس امرا اريد دالة حتى يعمل الاكسبيريت على الحسابات الديمو فقط ولا يعمل على الحسابات الحقيقية اطلاقا

brahimooo
02-09-2018, 01:46 AM
اخي الفاضل ارجو المساعدة
ابحث عن كود يعرف الاكسبرت , من خلاله الصفقة رابحة او خاسرة

mohcine
02-09-2018, 06:53 AM
اسأل بقسم البرمجة الخاصة ربما تجد من يلبي طلبك
بغض النضر على البرمجه الخاصه هل تستطيع برمجتها ؟
انا قصدت بالبرمجه الخاصه هو صعوبه برمجتها و الوقت التي ستاخده و بالتالي قد يرفض طلب البرمجه في القسم العام على هدا الاساس ليس إلا٠

benaissa
02-09-2018, 06:57 PM
السلام اخي الكريم حسن ,
اعرف اخي ان هذا الموضوع مخصص للاسئلة البرمجية ,هذا الاكسبيرت المرفق ,فقط اتدرب عليه لا غير .
اولا اريد ان اعرف ,اذا سمحت, الفرق بين input و extern . لاني استعين بموقع للبرمجة , ولاحظت ان الكود مختلف شيئا ما عن ما تكتبه انت.
ثانيا لم اتوفق في اضافة دالة المضاعفة حيث لم اعرف المكان الذي يجب علي وضعها فيه و كذلك الشروط .
اذا تكرمت اخي ان تصحح لي الاخطاء , لانه فيه 6 انظارات ثم تضيف اليه دالة المضعفات بالضرب . و الشروط كالتالي : اذا اغلقة الصفقة على ربح , تفتح الصفقة الموالية بنفس اللوت , اما اذا اغلقت على خسارة فتضاعف حتى تربح او يصل عدد الصفقات الخاسرة على التوالي (5) فتعود للوت الاول .

شكرا اخي الكريم.

kira-h
03-09-2018, 01:03 AM
بغض النضر على البرمجه الخاصه هل تستطيع برمجتها ؟
انا قصدت بالبرمجه الخاصه هو صعوبه برمجتها و الوقت التي ستاخده و بالتالي قد يرفض طلب البرمجه في القسم العام على هدا الاساس ليس إلا٠
أعلم والرد كان واضح، اختصاصي فقط لغة mql4

kira-h
03-09-2018, 01:05 AM
سلام عليكم فضلا وليس امرا اريد دالة حتى يعمل الاكسبيريت على الحسابات الديمو فقط ولا يعمل على الحسابات الحقيقية اطلاقا
وعليكم السلام
استخدم الشرط التالي ببداية عمل الدالة الرئيسية OnTick

if(!IsDemo())return;

kira-h
03-09-2018, 01:08 AM
اخي الفاضل ارجو المساعدة
ابحث عن كود يعرف الاكسبرت , من خلاله الصفقة رابحة او خاسرة

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

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

kira-h
03-09-2018, 01:16 AM
السلام عليكم اخي حسن
شكرا علي مجهودك الكبير في مساعدتنا في مجال البرمجة
عاوز اعرف هل ممكن اعمل اكسبيرت يعتمد علي مناطق العرض و الطلب
بيتم تحديد المناطق مثلا بطريقة معينة...يعني في قاعدة ثابتة لتحديد هذة المناطق
هل يمكن تحديدها و التداول عليها و تحديد امتي ادخل و امتي اخرج مناطق زي في الشارت هكذا
بسألك علي المبدأ نفسه بما ان المناطق تاريخية (يعني تكونت سابقا منذ فترة ) زي اللي معمول عليها دائرة

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

ObjectGet(name,OBJPROP_PRICE1);

kira-h
03-09-2018, 01:18 AM
السلام عليكم اخي حسن
كنت عاوز اعرف اذاي اضييف مؤشر خارجي الي الاكسبيرت بعد التحديثات الاخيرة .. لأني لما جيت اضيف مؤشر عن طريق الالوان لم يعمل ؟؟
وهل هناك طرق اخري لإضافة مؤشر غير استخدام الوان الخطوط الموجودة بالمؤشر ؟؟
وسؤال اخير استاذ حسن كيف اقوم بتغيير مدخلاته الافتراضية ؟؟
ولك جزيل الشكر
وعليكم السلام
راجع المشاركة التالية:
https://www.fxprg.com/vb/showthread.php?t=31457&page=74&p=874388&viewfull=1#post874388

Mohamed 12
03-09-2018, 02:44 AM
السلام عليكم أخ حسن
هل الكود هذا صحيح حيث ابغى عندما يتحقق هدف الشراء يدخل شراء , وعندما يتحقق هدف البيع يدخل بيع
عندما يضرب وقف الشراء يدخل شراء, وعندما يضرب وقف البيع يدخل بيع


//دالة تستخرج تفاصيل آخر صفقة مغلقة من ربح، نوع، سعر، هدف، وقف، زمن ... بدلالة شرط معين عبارة عن كومنت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); } } } return(0); }


void OnTick(){ if(LastOrder("Type")==OP_BUY&&LastOrder("Profit",OP_BUY)>=0)Buy(); if(LastOrder("Type")==OP_BUY&&LastOrder("SL",OP_BUY)>=0)Buy(); if(LastOrder("Type")==OP_SELL&&LastOrder("Profit",OP_SELL)>=0)Sell(); if(LastOrder("Type")==OP_SELL&&LastOrder("SL",OP_SELL)>=0)Sell(); }

mohamedfx
03-09-2018, 01:31 PM
تسلم اخي حسن

hre007
03-09-2018, 02:29 PM
وعليكم السلام
راجع المشاركة التالية:
https://www.fxprg.com/vb/showthread.php?t=31457&page=74&p=874388&viewfull=1#post874388

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

benaissa
03-09-2018, 05:32 PM
السلام عليكم.
الاخوان المنخرطين في هذا المنتدى ,لماذا لا احد يشارك تجاربه البرمجية و التداولية على صفحة المنتدى في الفايس بوك؟؟؟؟؟
https://www.facebook.com/fxprg/
هكذا ستعم الفائدة اكثر و نستفيد من تجارب بعضنا البعض.
شكرا

kira-h
03-09-2018, 05:33 PM
جزاك الله كل خير .. بس كده مش هقدر اغير في متغيرات المؤشر ؟؟ يعني هعتمد على متغيراته الافتراضية والا ايه ؟؟

إذا كان المؤشر من نوع أندكس ستكتب بدالة المؤشر المتغيرات تباعا بعد اسمه
مثال نفترض انه لدينا مؤشر باسم Arrow به متغيرين period و alert، ستكون دالة أندكس الـ 0 كالتالي:


double up=iCustom(Symbol(),0,"Arrow",period,alert,0,1);


بحيث period و alert متغيرين خارجيين كالتالي :

input int period=20;
input bool alert=false;

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

kira-h
03-09-2018, 06:25 PM
تسلم اخي حسن
بالتوفيق إن شاء الله

kira-h
03-09-2018, 06:33 PM
السلام عليكم أخ حسن
هل الكود هذا صحيح حيث ابغى عندما يتحقق هدف الشراء يدخل شراء , وعندما يتحقق هدف البيع يدخل بيع
عندما يضرب وقف الشراء يدخل شراء, وعندما يضرب وقف البيع يدخل بيع


//دالة تستخرج تفاصيل آخر صفقة مغلقة من ربح، نوع، سعر، هدف، وقف، زمن ... بدلالة شرط معين عبارة عن كومنت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); } } } return(0); }


void OnTick(){ if(LastOrder("Type")==OP_BUY&&LastOrder("Profit",OP_BUY)>=0)Buy(); if(LastOrder("Type")==OP_BUY&&LastOrder("SL",OP_BUY)>=0)Buy(); if(LastOrder("Type")==OP_SELL&&LastOrder("Profit",OP_SELL)>=0)Sell(); if(LastOrder("Type")==OP_SELL&&LastOrder("SL",OP_SELL)>=0)Sell(); }

وعليكم السلام
جرب التالي:

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=="CloseTime")return(cm);
}
}
}
return(0);
}


double LastOpenTime(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();
datetime om=OrderOpenTime();
if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
return(om);
}
}
}
return(0);
}


bool LastClosed()
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if((OrderClosePrice()==OrderStopLoss())||OrderProf it()>0)return(true);
else return(false);
}
}
return(false);
}


void OnTick()
{
if(LastClosed()==true&&LastOpenTime()<LastOrder("CloseTime"))
{
if(LastOrder("Type")==OP_BUY)Buy();
if(LastOrder("Type")==OP_SELL)Sell();
}
}

Mohamed 12
03-09-2018, 08:44 PM
وعليكم السلام
جرب التالي:

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=="CloseTime")return(cm);
}
}
}
return(0);
}


double LastOpenTime(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();
datetime om=OrderOpenTime();
if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
return(om);
}
}
}
return(0);
}


bool LastClosed()
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if((OrderClosePrice()==OrderStopLoss())||OrderProf it()>0)return(true);
else return(false);
}
}
return(false);
}


void OnTick()
{
if(LastClosed()==true&&LastOpenTime()<LastOrder("CloseTime"))
{
if(LastOrder("Type")==OP_BUY)Buy();
if(LastOrder("Type")==OP_SELL)Sell();
}
}

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


//دالة حساب عدد الصفقات حسب النوع أو بدونها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)
{
if(OrderType()==type||type==-1)
{
cnt++;
}
}
}
}
return(cnt);
}
//-----------------------------------------------------------------------------------------------------------

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=="CloseTime")return(cm);
}
}
}
return(0);
}


//--------------------------------------------------------------------------------
double LastOpenTime(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();
datetime om=OrderOpenTime();
if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
return(om);
}
}
}
return(0);
}


//--------------------------------------------------------------------------
bool LastClosed()
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if((OrderClosePrice()==OrderStopLoss())||OrderProf it()>0)return(true);
else return(false);
}
}
return(false);
}
//----------------------------------------------------------------------


//دالة تستخرج تفاصيل آخر صفقة مفعلة من ربح، نوع، سعر، هدف، وقف، زمن ... بدلالة شرط معين عبارة عن كومنت
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==MagicNumber)
{
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);

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

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(LastClosed()==true&&LastOpenTime()<LastOrder("CloseTime"))
{
if(LastOrder("Type")==OP_BUY)Buy();
if(LastOrder("Type")==OP_SELL)Sell();
}

}
void Buy(){
if(Orderscnt(OP_BUY)==0)
{
if (LastOrderCurrent("tp",OP_SELL)< Ask + TakeProfit*point && Bid - LastOrderCurrent("op",OP_SELL) > RATE &&Time0!=Time[0])
{
if(StopLoss==0){SL=0;}else{SL=Ask-StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*poi nt;}
if(ECN_Broker){SLecn=SL;TPecn=TP;SL=0;TP=0;}
ticket= OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage*Q,SL,T P,"",MagicNumber,0,Blue);
if(ECN_Broker&&(SLecn!=0||TPecn!=0))bool action=OrderModify(ticket,OrderOpenPrice(),SLecn,T Pecn,0);
if(UseSound) PlaySound("Alert.wav");
Time0=Time[0];
}
}
}


void Sell(){
if(Orderscnt(OP_SELL)==0)
{
if(LastOrderCurrent("tp",OP_BUY) > Bid - TakeProfit*point && LastOrderCurrent("op",OP_BUY) - Ask > RATE &&Time0!=Time[0])
{
if(StopLoss==0){SL=0;}else{SL=Bid+StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*point;}
if(ECN_Broker){SLecn=SL;TPecn=TP;SL=0;TP=0;}
ticket= OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage*Q,SL, TP,"",MagicNumber,0,Red);
if(ECN_Broker&&(SLecn!=0||TPecn!=0))bool action=OrderModify(ticket,OrderOpenPrice(),SLecn,T Pecn,0);
if(UseSound) PlaySound("Alert.wav");
Time0=iTime(Symbol(),0,0);
}
}
}

hre007
04-09-2018, 12:59 AM
جزاك الله خيرا عنا اخي حسن

kira-h
04-09-2018, 10:47 AM
جزاك الله خيرا عنا اخي حسن

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

kira-h
04-09-2018, 10:49 AM
مشكور جدا اخ حسن على المجهود العظيم
وبعد ان أعطيتنى هذا الكود تم اضافتة على الكسبرت أرجوا الأطلاع علية وعلى شروط( )void Buy و ()void Sell وهل هى صحيحة
وفقكم الله


//دالة حساب عدد الصفقات حسب النوع أو بدونها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)
{
if(OrderType()==type||type==-1)
{
cnt++;
}
}
}
}
return(cnt);
}
//-----------------------------------------------------------------------------------------------------------

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=="CloseTime")return(cm);
}
}
}
return(0);
}


//--------------------------------------------------------------------------------
double LastOpenTime(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();
datetime om=OrderOpenTime();
if(sy==Symbol()&&mn==MagicNumber)
{
if(ty==type||type==-1)
{
return(om);
}
}
}
return(0);
}


//--------------------------------------------------------------------------
bool LastClosed()
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if((OrderClosePrice()==OrderStopLoss())||OrderProf it()>0)return(true);
else return(false);
}
}
return(false);
}
//----------------------------------------------------------------------


//دالة تستخرج تفاصيل آخر صفقة مفعلة من ربح، نوع، سعر، هدف، وقف، زمن ... بدلالة شرط معين عبارة عن كومنت
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==MagicNumber)
{
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);

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

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(LastClosed()==true&&LastOpenTime()<LastOrder("CloseTime"))
{
if(LastOrder("Type")==OP_BUY)Buy();
if(LastOrder("Type")==OP_SELL)Sell();
}

}
void Buy(){
if(Orderscnt(OP_BUY)==0)
{
if (LastOrderCurrent("tp",OP_SELL)< Ask + TakeProfit*point && Bid - LastOrderCurrent("op",OP_SELL) > RATE &&Time0!=Time[0])
{
if(StopLoss==0){SL=0;}else{SL=Ask-StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*poi nt;}
if(ECN_Broker){SLecn=SL;TPecn=TP;SL=0;TP=0;}
ticket= OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage*Q,SL,T P,"",MagicNumber,0,Blue);
if(ECN_Broker&&(SLecn!=0||TPecn!=0))bool action=OrderModify(ticket,OrderOpenPrice(),SLecn,T Pecn,0);
if(UseSound) PlaySound("Alert.wav");
Time0=Time[0];
}
}
}


void Sell(){
if(Orderscnt(OP_SELL)==0)
{
if(LastOrderCurrent("tp",OP_BUY) > Bid - TakeProfit*point && LastOrderCurrent("op",OP_BUY) - Ask > RATE &&Time0!=Time[0])
{
if(StopLoss==0){SL=0;}else{SL=Bid+StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*point;}
if(ECN_Broker){SLecn=SL;TPecn=TP;SL=0;TP=0;}
ticket= OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage*Q,SL, TP,"",MagicNumber,0,Red);
if(ECN_Broker&&(SLecn!=0||TPecn!=0))bool action=OrderModify(ticket,OrderOpenPrice(),SLecn,T Pecn,0);
if(UseSound) PlaySound("Alert.wav");
Time0=iTime(Symbol(),0,0);
}
}
}

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

hre007
04-09-2018, 07:23 PM
السلام عليكم استاذي
كنت عاوز اسأل حضرتك .. هل لو عملت اكسبيرت يشتغل حسب افتتاح واغلاق الشموع ممكن يشتغل علي شارت الرينكو .. والا شموع الرينكو لها برمجة مختلفة ؟؟؟ خاصة وان الشارت بيكون اوف لاين
ولك جزيل الشكر

kira-h
04-09-2018, 08:48 PM
السلام عليكم استاذي
كنت عاوز اسأل حضرتك .. هل لو عملت اكسبيرت يشتغل حسب افتتاح واغلاق الشموع ممكن يشتغل علي شارت الرينكو .. والا شموع الرينكو لها برمجة مختلفة ؟؟؟ خاصة وان الشارت بيكون اوف لاين
ولك جزيل الشكر
وعليكم السلام
نعم ممكن، فلا يوجد اختلاف بينهما

احمد
05-09-2018, 10:28 AM
السلام عليكم ورحمة الله وبركاته
أخي حسن
إذا أردنا معرفة أعلا سعر في عدد من الشموع فأننا نستخدم iHighest
ولكن أنا أريد معرفة أعلا إفتتاح أو إغلاق في مجموعة شموع فما هي الدالة المناسبه لذلك ؟

kira-h
06-09-2018, 03:25 AM
السلام عليكم ورحمة الله وبركاته
أخي حسن
إذا أردنا معرفة أعلا سعر في عدد من الشموع فأننا نستخدم iHighest
ولكن أنا أريد معرفة أعلا إفتتاح أو إغلاق في مجموعة شموع فما هي الدالة المناسبه لذلك ؟

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


double CloseHigh=Close[iHighest(Symbol(),0,MODE_HIGH,24,1)];//سعر اغلاق شمعة اعلى هاي ضمن الفترة
double OpenHigh=Open[iHighest(Symbol(),0,MODE_HIGH,24,1)];//سعر افتتاح شمعة أعلى هاي ضمن الفترة

double CloseLow=Close[iLowest(Symbol(),0,MODE_LOW,24,1)];//سعر اغلاق شمعة اقل لو ضمن الفترة
double OpenLow=Open[iLowest(Symbol(),0,MODE_LOW,24,1)];//سعر افتتاح شمعة أقل لو ضمن الفترة

احمد
06-09-2018, 08:52 AM
وعليكم السلام
كالتالي:


double CloseHigh=Close[iHighest(Symbol(),0,MODE_HIGH,24,1)];//سعر اغلاق شمعة اعلى هاي ضمن الفترة
double OpenHigh=Open[iHighest(Symbol(),0,MODE_HIGH,24,1)];//سعر افتتاح شمعة أعلى هاي ضمن الفترة

double CloseLow=Close[iLowest(Symbol(),0,MODE_LOW,24,1)];//سعر اغلاق شمعة اقل لو ضمن الفترة
double OpenLow=Open[iLowest(Symbol(),0,MODE_LOW,24,1)];//سعر افتتاح شمعة أقل لو ضمن الفترة



تسلم والله يعطيك العافية

Tarek987
06-09-2018, 12:44 PM
السلام عليكم,
أنا عم حاول اعمل اكسبيرت مبدؤه انو لما يفتح صفقات لازم يتم يزيد على اللوت لحتى يكون مجموع كل الصفقات المغلقة على ربح اعلى من ال AccountBalance يلي بلشنا فيه قبل فتح الصفقات, و بس يكون حاصل الصفقات المغلقة صار رابح , بدي الاكسبيرت يبلش من اول و جديد باللوت الاساسي المحدد له.

مثال:
حساب فيه 100 دولار قبل فتح اي صفقة,
الصفقة الاولى شراء بلوت 0.01 اغلقة على خسارة 1 دولار,
الصفقة الثانية بيع بلوت 0.02 اغلقة على خسارة 2 دولار,
الصفقة الثالثة شراء بلوت 0.03 اغلقة على ربح 5 دولار,
الحساب صار رابح و فيه الان 102 دولار و الصفقة الرابعة لازم تفتح بلوت 0.01

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


double Profit_Total(int type=-1)
{
double pts;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ot=OrderType();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
if(sy==Symbol()&&mn==MagicNo)
{
if(ot==type||type==-1)
{
pts+=pt+sw+cm;
}
}
}
return(pts);
}

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


if ( Profit_Total() > 0 )
{
Lot = Lot;
}

if ( Profit_Total() < 0 )
{
Lot = Lot + LotsHistory() ;
}



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

kira-h
07-09-2018, 03:53 AM
تسلم والله يعطيك العافية
وإياك أخي الكريم

kira-h
07-09-2018, 04:12 AM
السلام عليكم,
أنا عم حاول اعمل اكسبيرت مبدؤه انو لما يفتح صفقات لازم يتم يزيد على اللوت لحتى يكون مجموع كل الصفقات المغلقة على ربح اعلى من ال AccountBalance يلي بلشنا فيه قبل فتح الصفقات, و بس يكون حاصل الصفقات المغلقة صار رابح , بدي الاكسبيرت يبلش من اول و جديد باللوت الاساسي المحدد له.

مثال:
حساب فيه 100 دولار قبل فتح اي صفقة,
الصفقة الاولى شراء بلوت 0.01 اغلقة على خسارة 1 دولار,
الصفقة الثانية بيع بلوت 0.02 اغلقة على خسارة 2 دولار,
الصفقة الثالثة شراء بلوت 0.03 اغلقة على ربح 5 دولار,
الحساب صار رابح و فيه الان 102 دولار و الصفقة الرابعة لازم تفتح بلوت 0.01

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


double Profit_Total(int type=-1)
{
double pts;
for(int i=0;i<OrdersHistoryTotal();i++)
{
bool s=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ot=OrderType();
double pt=OrderProfit(),
sw=OrderSwap(),
cm=OrderCommission();
if(sy==Symbol()&&mn==MagicNo)
{
if(ot==type||type==-1)
{
pts+=pt+sw+cm;
}
}
}
return(pts);
}

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


if ( Profit_Total() > 0 )
{
Lot = Lot;
}

if ( Profit_Total() < 0 )
{
Lot = Lot + LotsHistory() ;
}



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

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


input int profit=5;//هامش الربح بالبالنس


double NewLots;//حجم عقد الصفقة الحسابي ستضعه بدالة فتح الصفقة


if(OrdersTotal()==0)//شرط عدم وجود صفقة مفتوحة
{
if(GlobalVariableGet("BalanceProfit")==0)GlobalVariableSet("BalanceProfit",AccountBalance()+profit);//حفظ قيمة البالنس مضاف اليه الربح
if(GlobalVariableGet("BalanceProfit")>0)//إذا كانت تلك القيمة المحفوظة أكبر من الصفر
{
if(AccountBalance()<GlobalVariableGet("BalanceProfit"))NewLots=LotsHistory();//إذا كان البالنس أقل من البالنس المحفوظ يتم فتح مضاعف
if(AccountBalance()<GlobalVariableGet("BalanceProfit"))//إذا كان العكس
{
NewLots=Lot;//يعود إلى العقد الأساسي
GlobalVariableSet("BalanceProfit",AccountBalance()+profit);//وحفظ قيمة البالنس الجديد مضاف اليه هامش الربح
}
}
//وهكذا تتم دورة الحفظ وإعادة الحفظ للبالنس مع العقد الحسابي
}


يمكنك مراجعة شرح حول دوال الجلوبال على الرابط التالي :
Global Variables (https://www.fxprg.com/vb/showthread.php?t=31457&page=9&p=846193&viewfull=1#post846193)

Tarek987
07-09-2018, 01:50 PM
شكرا حسن ،،، و لا تؤاخذني على الشرح باللغة العربية العامية (معنى بلش = بداء )....

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

kira-h
07-09-2018, 06:06 PM
شكرا حسن ،،، و لا تؤاخذني على الشرح باللغة العربية العامية (معنى بلش = بداء )....

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

benaissa
08-09-2018, 01:07 PM
السلام اخي الكريم حسن ,


حاولت لكن لم اتوفق في اضافة دالة المضاعفة حيث لم اعرف المكان الذي يجب علي وضعها فيه و كذلك الشروط .
اذا تكرمت اخي ان تصحح لي الاخطاء , لانه فيه 6 انذارات ثم تضيف اليه دالة المضعفات بالضرب . و الشروط كالتالي : اذا اغلقة الصفقة على ربح , تفتح الصفقة الموالية بنفس اللوت , اما اذا اغلقت على خسارة فتضاعف حتى تربح او يصل عدد الصفقات الخاسرة على التوالي (5) فتعود للوت الاول .

شكرا اخي الكريم.

benaissa
08-09-2018, 01:08 PM
extern int MagicNumber=1;
extern double Lots =0.01;
extern double StopLoss=20;
extern double TakeProfit=20;
extern int TrailingStop=0;
extern int Slippage=3;
//+------------------------------------------------------------------+
// expert start function
//+------------------------------------------------------------------+
int start()
{
double MyPoint=Point;
if(Digits==3 || Digits==5) MyPoint=Point*10;

double TheStopLoss=0;
double TheTakeProfit=0;
if( TotalOrdersCount()==0 )
{
int result=0;
if((Open[0]<Close[1])) // Here is your open buy rule
{
result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage ,0,0,"essai1",MagicNumber,0,Blue);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
OrderSelect(result,SELECT_BY_TICKET);
OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(TheStopLoss,Digits),NormalizeDouble(TheTa keProfit,Digits),0,Green);
}
return(0);
}
}

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);
}
}
}
}
}
}
return(0);
}


int TotalOrdersCount()
{
int result=0;
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
if (OrderMagicNumber()==MagicNumber) result++;


}
return (result);
}

benaissa
08-09-2018, 01:56 PM
معذرة ,لم اعرف كيفية كتابة الكود بالشكل الصحيح , رغم اني اعمل نسخ ولسق , لكن يطبع بذاك الشكل!!!!!!؟

Ahmed
08-09-2018, 02:37 PM
السلام عليكم استاذ حسن
كيف اجعل الاكسبيرت يدخل باكبر لوت يسمح به الرصيد

sal_moh85
08-09-2018, 06:48 PM
وعليكم السلام
يمكنك معرفة توقيت اخر تقاطع للموفينجين متوافق مع شرط الموفيج بآخر شمعة مغلقة حسب الفريم كالتالي:
مثال :


datetime LastCrossTime(int TimeFrame)
{
for(int i=1;i<Bars;i++)
{
double f=iMA(Symbol(),TimeFrame,5,0,0,0,1),
s=iMA(Symbol(),TimeFrame,10,0,0,0,1),
f1=iMA(Symbol(),TimeFrame,5,0,0,0,i),
s1=iMA(Symbol(),TimeFrame,10,0,0,0,i),
f2=iMA(Symbol(),TimeFrame,5,0,0,0,i+1),
s2=iMA(Symbol(),TimeFrame,10,0,0,0,i+1);
if(f>s&&f1>s1&&f2<=s2)return(iTime(Symbol(),TimeFrame,i));
if(f<s&&f1<s1&&f2>=s2)return(iTime(Symbol(),TimeFrame,i));
else return(0);
}
return(0);
}


ثم فرق التوقيت كالتالي :


datetime Diff=LastCrossTime(15)-LastCrossTime(60);

مشكور جدا اخ حسن

sal_moh85
08-09-2018, 07:35 PM
سلام عليكم اخ حسن
كيف اعرف قيمة اخير تقاطع لي استوكاستك في حال تقاطع كان شراء ام بيع وشكرا

sal_moh85
08-09-2018, 07:38 PM
اي السعر عندتقاطع في شمعه 1

hre007
09-09-2018, 01:14 AM
السلام عليكم اخي حسن
بعد اذنك تعلمني اذاي ممكن اكتب دالة لأرسال الايميل بحيث اذا فتحت صفقة تخبرني بنوع العملة وسعر الفتح واجمالي الحساب والهامش واي معلومات تخص الصفقة مثل الكومنت في الاكسبيرت ان امكن .. ورسالة اذا اغلت الصفقة تخبرني بنوع العملة للصفقة المغلقة والربح او الخسارة وهكذا...وامر استدعاء الدالة ؟؟
ولك جزيل الشكر

Tarek987
09-09-2018, 08:06 AM
بالتوفيق إن شاء الله

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

Ahmed
09-09-2018, 09:26 AM
السلام عليكم استاذ حسن
ما معنى هذا الكود وفيما يستخدم

StringSubstr(_Symbol,3,3);

Tarek987
09-09-2018, 11:57 AM
السلام عيكم حسن
بمشاركتي الأخيرة ذكرت لك اني رح احاول بس دائما عم افشل.
لذلك ارفقت لك الاكسبيرت مع شرح داخل الاكسبيرت.
الرجاء الاطلاع و شكرا حسن

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

kira-h
09-09-2018, 11:59 PM
السلام عليكم استاذ حسن
ما معنى هذا الكود وفيما يستخدم

StringSubstr(_Symbol,3,3);

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

string Name=StringSubstr("_Symbol",0,3);
0 بداية العد
3 عدد الحروف التي سيتم قطعها، وباقي الحروف التالية سوف تحذف

kira-h
10-09-2018, 01:19 AM
السلام عليكم اخي حسن
بعد اذنك تعلمني اذاي ممكن اكتب دالة لأرسال الايميل بحيث اذا فتحت صفقة تخبرني بنوع العملة وسعر الفتح واجمالي الحساب والهامش واي معلومات تخص الصفقة مثل الكومنت في الاكسبيرت ان امكن .. ورسالة اذا اغلت الصفقة تخبرني بنوع العملة للصفقة المغلقة والربح او الخسارة وهكذا...وامر استدعاء الدالة ؟؟
ولك جزيل الشكر
وعليكم السلام
ستستخدم الوظيفة SendMail بعد دالة فتح أو اغلاق الصفقة

kira-h
10-09-2018, 01:23 AM
معذرة ,لم اعرف كيفية كتابة الكود بالشكل الصحيح , رغم اني اعمل نسخ ولسق , لكن يطبع بذاك الشكل!!!!!!؟
استخدم الانتقال للوضع المتطور للمشاركة واستخدم الكود ضمن خاصية الكود
8929

kira-h
10-09-2018, 01:25 AM
السلام عليكم استاذ حسن
كيف اجعل الاكسبيرت يدخل باكبر لوت يسمح به الرصيد
وعليكم السلام
كالتالي :


MarketInfo(Symbol(),MODE_MAXLOT)

kira-h
10-09-2018, 01:30 AM
مشكور جدا اخ حسن
العفو أخي الكريم


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


اي السعر عندتقاطع في شمعه 1

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


int LastCross()
{
for(int i=1;i<1000;i++)
{
double m1=iStochastic(Symbol(),0,5,3,3,0,0,MODE_MAIN,i),
m2=iStochastic(Symbol(),0,5,3,3,0,0,MODE_MAIN,i+1) ,
s1=iStochastic(Symbol(),0,5,3,3,0,0,MODE_SIGNAL,i) ,
s2=iStochastic(Symbol(),0,5,3,3,0,0,MODE_SIGNAL,i+ 1);
if(m1>s1&&m2<=s2)return(1);
if(m1<s1&&m2>=s2)return(-1);
}
return(0);
}


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


if(LastCross()==1)//إذاكان آخر تقاطع صاعد


if(LastCross()==-1)//إذاكان آخر تقاطع هابط

kira-h
10-09-2018, 01:40 AM
لا تؤاخذني حسن,, الاكسبيرت المرفق بالمشاركة السابقة لا يضيف على اللوت
بهذه المشاركة ارفقت الكسبيرت الصحيح...
تم التصحيح بالنسخة المرفقة

benaissa
10-09-2018, 09:49 AM
شكرا اخي حسن ,تحياتي
استخدم الانتقال للوضع المتطور للمشاركة واستخدم الكود ضمن خاصية الكود
8929

sal_moh85
10-09-2018, 12:36 PM
العفو أخي الكريم
مشكور اخ حسن طيب السعر عند هاد التقاطع شلون بدي اعرفه
يعني عتد شراء سعر السك ايدش بكون
وهند بيع سعر بيد اديش بكون





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


int LastCross()
{
for(int i=1;i<1000;i++)
{
double m1=iStochastic(Symbol(),0,5,3,3,0,0,MODE_MAIN,i),
m2=iStochastic(Symbol(),0,5,3,3,0,0,MODE_MAIN,i+1) ,
s1=iStochastic(Symbol(),0,5,3,3,0,0,MODE_SIGNAL,i) ,
s2=iStochastic(Symbol(),0,5,3,3,0,0,MODE_SIGNAL,i+ 1);
if(m1>s1&&m2<=s2)return(1);
if(m1<s1&&m2>=s2)return(-1);
}
return(0);
}


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


if(LastCross()==1)//إذاكان آخر تقاطع صاعد


if(LastCross()==-1)//إذاكان آخر تقاطع هابط

sal_moh85
10-09-2018, 01:07 PM
مشكور اخ حسن طيب السعر عند هاد التقاطع شلون بدي اعرفه
يعني عند شراء سعر السك ايدش بكون
وعند بيع سعر بيد اديش بكون

benaissa
10-09-2018, 05:55 PM
السلام عليكم اخي حسن.
اولا ارجوك اخي اِن ارتكبت أي تجاوز على قانون المنتدى أن تنبهني حتى لا أكرره عن غير قصد .لاني طلبت مساعدة قبل الان ولم تجبني, اتفهم ان الطلبات كثيرة ,كان الله في عونك.
الموضوع: اِني اتمرن على اكسبيرت سبق و برمجته لي انت , حاولت ان أضيف له دالة مضاعفة الضرب لكن يظهرلي 8 انذارات لم استطيع معرفة اصلاحها.
اطلب منك اخي ان تساعدني في اصلاحها,ولك جزيل الشكر.

hre007
10-09-2018, 06:09 PM
وعليكم السلام
ستستخدم الوظيفة SendMail بعد دالة فتح أو اغلاق الصفقة

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

SendMail("CLOSE pr: "+DoubleToStr(OrderProfit(),2)+", bal: "+DoubleToStr(AccountBalance(),2)+", eq: "+DoubleToStr(AccountEquity(),2)+"",
"Symbol: "+Symbol()+" "+ordertyp+" "+OrderMagicNumber()+" \n"+
"Comment: "+OrderComment()+" \n"+
"Ticket#: "+OrderTicket()+" \n"+
"Size: "+DoubleToStr(OrderLots(),2)+" \n"+
"OpenTime: "+TimeToStr(OrderOpenTime())+" \n"+
"Close Time: "+TimeToStr(OrderCloseTime())+" \n"+
"Open: "+DoubleToStr(OrderOpenPrice(),5)+" \n"+
"Close: "+DoubleToStr(OrderClosePrice(),5)+" \n"+
"Profit: "+DoubleToStr(OrderProfit(),2)+" \n"+
"Pips: "+DoubleToStr(pips,1)+" \n\n"+
"Balance: "+DoubleToStr(AccountBalance(),2)+" \n"+
"Used Margin: "+DoubleToStr(AccountMargin(),2)+" \n"+
"Free Margin: "+DoubleToStr(AccountFreeMargin(),2)+" \n"+
"Equity: "+DoubleToStr(AccountEquity(),2)+" \n"+
"Open Orders: "+DoubleToStr(OrdersTotal(),0)+" \n\n"+
"Broker: "+AccountCompany()+" \n"+
"Leverage: "+AccountLeverage()+"" ); k++; } return;}


لكن طبعا بعد التحديث بتعطي خطأ .. ارجوك تصحح لي الكود وجزاك الله كل خير

kira-h
10-09-2018, 06:34 PM
مشكور اخ حسن طيب السعر عند هاد التقاطع شلون بدي اعرفه
يعني عند شراء سعر السك ايدش بكون
وعند بيع سعر بيد اديش بكون

لا يمكن معرفة سعر الأسك او البيد بالتقاطع الماضي لكن يمكن معرفة سعر إغلاق شمعة التقاطع بالدالة التالية :



double LastCrossPrice()
{
for(int i=1;i<1000;i++)
{
double m1=iStochastic(Symbol(),0,5,3,3,0,0,MODE_MAIN,i),
m2=iStochastic(Symbol(),0,5,3,3,0,0,MODE_MAIN,i+1) ,
s1=iStochastic(Symbol(),0,5,3,3,0,0,MODE_SIGNAL,i) ,
s2=iStochastic(Symbol(),0,5,3,3,0,0,MODE_SIGNAL,i+ 1);
if(m1>s1&&m2<=s2)return(Close[i]);
if(m1<s1&&m2>=s2)return(Close[i]);
}
return(0);
}

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

SendMail("CLOSE pr: "+DoubleToStr(OrderProfit(),2)+", bal: "+DoubleToStr(AccountBalance(),2)+", eq: "+DoubleToStr(AccountEquity(),2)+"",
"Symbol: "+Symbol()+" "+ordertyp+" "+OrderMagicNumber()+" \n"+
"Comment: "+OrderComment()+" \n"+
"Ticket#: "+OrderTicket()+" \n"+
"Size: "+DoubleToStr(OrderLots(),2)+" \n"+
"OpenTime: "+TimeToStr(OrderOpenTime())+" \n"+
"Close Time: "+TimeToStr(OrderCloseTime())+" \n"+
"Open: "+DoubleToStr(OrderOpenPrice(),5)+" \n"+
"Close: "+DoubleToStr(OrderClosePrice(),5)+" \n"+
"Profit: "+DoubleToStr(OrderProfit(),2)+" \n"+
"Pips: "+DoubleToStr(pips,1)+" \n\n"+
"Balance: "+DoubleToStr(AccountBalance(),2)+" \n"+
"Used Margin: "+DoubleToStr(AccountMargin(),2)+" \n"+
"Free Margin: "+DoubleToStr(AccountFreeMargin(),2)+" \n"+
"Equity: "+DoubleToStr(AccountEquity(),2)+" \n"+
"Open Orders: "+DoubleToStr(OrdersTotal(),0)+" \n\n"+
"Broker: "+AccountCompany()+" \n"+
"Leverage: "+AccountLeverage()+"" ); k++; } return;}


لكن طبعا بعد التحديث بتعطي خطأ .. ارجوك تصحح لي الكود وجزاك الله كل خير
جرب التالي :

SendMail("Info Chart ", " CLOSE pr: "+DoubleToStr(OrderProfit(),2)+" \n"+
" Symbol: "+Symbol()+" \n"+
" Type: "+OrderType()+" \n"+
" MagicNumber: "+OrderMagicNumber()+" \n"+
" Comment: "+OrderComment()+" \n"+
" Ticket#: "+OrderTicket()+" \n"+
" Size: "+DoubleToStr(OrderLots(),2)+" \n"+
" OpenTime: "+TimeToStr(OrderOpenTime())+" \n"+
" Close Time: "+TimeToStr(OrderCloseTime())+" \n"+
" Open: "+DoubleToStr(OrderOpenPrice(),5)+" \n"+
" Close: "+DoubleToStr(OrderClosePrice(),5)+" \n"+
" Profit: "+DoubleToStr(OrderProfit(),2)+" \n"+
" Pips: "+DoubleToStr(pips,1)+" \n\n"+
" Balance: "+DoubleToStr(AccountBalance(),2)+" \n"+
" Used Margin: "+DoubleToStr(AccountMargin(),2)+" \n"+
" Free Margin: "+DoubleToStr(AccountFreeMargin(),2)+" \n"+
" Equity: "+DoubleToStr(AccountEquity(),2)+" \n"+
" Open Orders: "+DoubleToStr(OrdersTotal(),0)+" \n\n"+
" Broker: "+AccountCompany()+" \n"+
" Leverage: "+AccountLeverage()+"");

kira-h
10-09-2018, 06:45 PM
السلام عليكم اخي حسن.
اولا ارجوك اخي اِن ارتكبت أي تجاوز على قانون المنتدى أن تنبهني حتى لا أكرره عن غير قصد .لاني طلبت مساعدة قبل الان ولم تجبني, اتفهم ان الطلبات كثيرة ,كان الله في عونك.
الموضوع: اِني اتمرن على اكسبيرت سبق و برمجته لي انت , حاولت ان أضيف له دالة مضاعفة الضرب لكن يظهرلي 8 انذارات لم استطيع معرفة اصلاحها.
اطلب منك اخي ان تساعدني في اصلاحها,ولك جزيل الشكر.
وعليكم السلام
مرفق الاكسبيرت المعدل

hre007
10-09-2018, 08:51 PM
جرب التالي :

SendMail("Info Chart ", " CLOSE pr: "+DoubleToStr(OrderProfit(),2)+" \n"+
" Symbol: "+Symbol()+" \n"+
" Type: "+OrderType()+" \n"+
" MagicNumber: "+OrderMagicNumber()+" \n"+
" Comment: "+OrderComment()+" \n"+
" Ticket#: "+OrderTicket()+" \n"+
" Size: "+DoubleToStr(OrderLots(),2)+" \n"+
" OpenTime: "+TimeToStr(OrderOpenTime())+" \n"+
" Close Time: "+TimeToStr(OrderCloseTime())+" \n"+
" Open: "+DoubleToStr(OrderOpenPrice(),5)+" \n"+
" Close: "+DoubleToStr(OrderClosePrice(),5)+" \n"+
" Profit: "+DoubleToStr(OrderProfit(),2)+" \n"+
" Pips: "+DoubleToStr(pips,1)+" \n\n"+
" Balance: "+DoubleToStr(AccountBalance(),2)+" \n"+
" Used Margin: "+DoubleToStr(AccountMargin(),2)+" \n"+
" Free Margin: "+DoubleToStr(AccountFreeMargin(),2)+" \n"+
" Equity: "+DoubleToStr(AccountEquity(),2)+" \n"+
" Open Orders: "+DoubleToStr(OrdersTotal(),0)+" \n\n"+
" Broker: "+AccountCompany()+" \n"+
" Leverage: "+AccountLeverage()+"");

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

benaissa
11-09-2018, 02:24 PM
السلام عليكم اخي.
أشكرك على اِصلاح الاخطاء . لكن المضاعفات لا تعمل, أظن أني أغفلت شيئا ما.

sal_moh85
11-09-2018, 03:54 PM
لا يمكن معرفة سعر الأسك او البيد بالتقاطع الماضي لكن يمكن معرفة سعر إغلاق شمعة التقاطع بالدالة التالية :



double LastCrossPrice()
{
for(int i=1;i<1000;i++)
{
double m1=iStochastic(Symbol(),0,5,3,3,0,0,MODE_MAIN,i),
m2=iStochastic(Symbol(),0,5,3,3,0,0,MODE_MAIN,i+1) ,
s1=iStochastic(Symbol(),0,5,3,3,0,0,MODE_SIGNAL,i) ,
s2=iStochastic(Symbol(),0,5,3,3,0,0,MODE_SIGNAL,i+ 1);
if(m1>s1&&m2<=s2)return(Close[i]);
if(m1<s1&&m2>=s2)return(Close[i]);
}
return(0);
}

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

Tarek987
11-09-2018, 05:16 PM
تم

التصحيح بالنسخة المرفقة

مشكور اخي حسن

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

Ahmed
11-09-2018, 07:46 PM
وعليكم السلام
كالتالي :


MarketInfo(Symbol(),MODE_MAXLOT)


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

kira-h
11-09-2018, 10:13 PM
بارك اللله فيك اخي حسن
هل هذا الكود يصلح لاكبر لوت تسمح به المنصة وكذلك اكبر لوت يسمح به الرصيد الموجود في الحساب
بارك الله فيك وجزاك الله خيرا
وإياك
يصلح لاكبر لوت تسمح به بالمنصة

Ahmed
12-09-2018, 12:48 AM
السلام عليكم استاذ حسن
كيف اجعل الاكسبيرت يدخل باكبر لوت يسمح به الرصيد

kira-h
12-09-2018, 02:15 AM
اكبر لوت يسمح به الرصيد الموجود في الحساب

كالتالي :

double MaxLotsRequired=AccountEquity()/MarketInfo(Symbol(),MODE_MARGINREQUIRED));

Ahmed
12-09-2018, 06:30 AM
كالتالي :

double MaxLotsRequired=AccountEquity()/MarketInfo(Symbol(),MODE_MARGINREQUIRED));

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

hre007
12-09-2018, 02:33 PM
جربت اخي حسن ولكن به خطأ وعدة تحذيرات !! مش عارف انا كاتب الامر صح والا خطأ ؟؟

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

احمد
12-09-2018, 08:12 PM
9004
مساء الخير لكم جميعا
أخي حسن أنا بحاجة دالة تعطيني عدد الشموع من تقاطع الموفيق أفرج الاول إلى التقاطع الثاني

kira-h
13-09-2018, 02:03 AM
جربت اخي حسن ولكن به خطأ وعدة تحذيرات !! مش عارف انا كاتب الامر صح والا خطأ ؟؟
جرب النسخة المرفقة

kira-h
13-09-2018, 02:59 AM
مساء الخير لكم جميعا
أخي حسن أنا بحاجة دالة تعطيني عدد الشموع من تقاطع الموفيق أفرج الاول إلى التقاطع الثاني

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


int barscount()
{
int bars=0;
datetime time0=0,time1=0;
for(int i=Bars-1;i>0;i--)
{
double slow1=iMA(Symbol(),0,20,0,0,0,i),
slow2=iMA(Symbol(),0,20,0,0,0,i+1),
fast1=iMA(Symbol(),0,10,0,0,0,i),
fast2=iMA(Symbol(),0,10,0,0,0,i+1);
if(fast1>slow1&&fast2<=slow2)time0=Time[i];
if(fast1<slow1&&fast2>=slow2)time1=Time[i];
if(time0<time1)bars=Bars(Symbol(),0,time0,time1);
else if(time0>time1)bars=Bars(Symbol(),0,time1,time0);
}
return(bars);
}

احمد
13-09-2018, 05:32 AM
الله يعطيك العافية ويبارك فيك

kira-h
13-09-2018, 05:10 PM
الله يعطيك العافية ويبارك فيك
وإياك أخي الكريم

sal_moh85
13-09-2018, 06:51 PM
مشكور جدا اخ حسن
عندي فكره بس ما حسنت طبقها على الواقع شرح الفكره فائمه على موشر استوكاستك
من شروط اساسيه فحص التقاطعات مثال توضيحي عن حالة البيع
تقاطع بيعي لي موشر الاستوكاستك من اي مجال اي ربما عند 20 او 80 او 50
حدث تقاطع بيعي من سعر 1.2200 ننظر الى التقاطع بيعي سابق (هنا ما هو الكود الذي ينظر فقط الى تقاطع البيعي السابق)
اذا كان سعر تقاطع بيعي سابق اكبر من التقاطع الحالي وهو 1.2200 هن عملية بيع صحيحه وعكس في الشراء
وشكر
سلام عليكم اخ حسن بس بشان تذكره

naseem2468
15-09-2018, 12:13 AM
عندي سؤال من فضلكم . أنا أحتاج شرح لخانة ال input الموجوده في أي سكريبت .. وكيفية التعامل معها . لاني حملت اكثر من اسكريبت في المنتدى لكني لا أعرف كيف اتعامل معه . أحيانا المبرمج يطل مني ان اجعا الماجيك نمبر 0 حتى يعمل على الصفقات المفتوحه بشكل يدوي . وأقوم فعلا بعمل ذلك لكن الاسكريبت لا يستجيب ويقوم بفتح صفقات عشوائيه .
باتصار ... عنديمشكله في فهم الطريقة التي اتعامل بها مع الاريبت حتى يملبشكل جد

kira-h
15-09-2018, 01:35 AM
عندي سؤال من فضلكم . أنا أحتاج شرح لخانة ال input الموجوده في أي سكريبت .. وكيفية التعامل معها . لاني حملت اكثر من اسكريبت في المنتدى لكني لا أعرف كيف اتعامل معه . أحيانا المبرمج يطل مني ان اجعا الماجيك نمبر 0 حتى يعمل على الصفقات المفتوحه بشكل يدوي . وأقوم فعلا بعمل ذلك لكن الاسكريبت لا يستجيب ويقوم بفتح صفقات عشوائيه .
باتصار ... عنديمشكله في فهم الطريقة التي اتعامل بها مع الاريبت حتى يملبشكل جد
السلام عليكم
input هي الاعدادات الخارجية للاكسبيرت أو المؤشر
ونعم الماجك نمبر 0 (يعني لا يوجد ترميز خاص بالصفقات يعني الغاء الماجك نمبر) وبهذا يستطيع الاكسبيرت التعامل مع الصفقة اليدوية

hre007
15-09-2018, 08:20 AM
جرب النسخة المرفقة

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

benaissa
15-09-2018, 08:57 AM
وعليكم السلام
مرفق الاكسبيرت المعدل

السلام عليكم اخي.
أشكرك على اِصلاح الاخطاء . لكن المضاعفات لا تعمل, أظن أني أغفلت شيئا ما.

naseem2468
15-09-2018, 12:59 PM
السلام عليكم
input هي الاعدادات الخارجية للاكسبيرت أو المؤشر
ونعم الماجك نمبر 0 (يعني لا يوجد ترميز خاص بالصفقات يعني الغاء الماجك نمبر) وبهذا يستطيع الاكسبيرت التعامل مع الصفقة اليدوية

لا انا لا اقصد معنى كلمة مinputة ان اقصد معانيالخانات المدرجه في ال input كلها

hre007
15-09-2018, 04:37 PM
اخي حسن .. سؤال سريع بعد اذنك
لو حسابي 1000 دولار .. وعاوز اضع امر كي يعمل علي نسبة مخصصة من رأس المال مثلا 100 دولار
يعني في المتغيرات مثلا يكون عندنا متغير " العمل على نسبة مخصصة من رأس المال " فإن كانت true يقرأ القيمة من المتغير الذي يليه " المال المخصص للمتاجرة"
وإن كانت false يعمل علي الحساب كاملا ..
فكيف يمكنني عمل هذا
وتقبل تحياتي

kira-h
15-09-2018, 06:47 PM
اخي حسن .. سؤال سريع بعد اذنك
لو حسابي 1000 دولار .. وعاوز اضع امر كي يعمل علي نسبة مخصصة من رأس المال مثلا 100 دولار
يعني في المتغيرات مثلا يكون عندنا متغير " العمل على نسبة مخصصة من رأس المال " فإن كانت true يقرأ القيمة من المتغير الذي يليه " المال المخصص للمتاجرة"
وإن كانت false يعمل علي الحساب كاملا ..
فكيف يمكنني عمل هذا
وتقبل تحياتي

السلام عليكم
مثال :


//المتغيرات الخارجية
input bool Use_MyAccount=true;//تفعيل او تعطيل الحساب الجزئي
input double MyAccount=100;//قيمة الحساب الجزئي بالدولار

//المتغيرات الداخلية
double account=0;

//الشروط
if(Use_MyAccount)account=MyAccount;else account=AccountEquity();

kira-h
15-09-2018, 06:53 PM
السلام عليكم اخي.
أشكرك على اِصلاح الاخطاء . لكن المضاعفات لا تعمل, أظن أني أغفلت شيئا ما.

وعليكم السلام
لم تستخدم دالتي البيع والشراء التي بها المضاعفات ضمن الدالة الرئيسية OnTick
مرفق الاكسبيرت

kira-h
15-09-2018, 06:57 PM
لا انا لا اقصد معنى كلمة مinputة ان اقصد معانيالخانات المدرجه في ال input كلها
معاني الاعدادات الخارجية تختلف من اكسبيرت لاخر حسب ما قام به المبرمج
لكن هناك اعدادات معروفة كالهدف TakeProfit ,الوقف Stoploss، التريلينغ Trailing، البريك ايفن BreakEven
حجم العقد Lots، الماجك نمبر MagicNumber، السليباج وهو عدد النقاط المسموح به باعادة التسعير Slippage
MaxTrades او MaxOrders أقصى عدد الصفقات المفتوحة
CLoseAtNext أو CloseInReverse وهو تفعيل او تعطيل اغلاق الصفقة الحالية عند تحقق الاشارة العكسية لشروط فتح الصفقة
USD_Profit أو Win_USD الربح بالدولار
USD_Loss أو Loss_USD الخسارة بالدولار

benaissa
15-09-2018, 08:14 PM
وعليكم السلام
لم تستخدم دالتي البيع والشراء التي بها المضاعفات ضمن الدالة الرئيسية OnTick
مرفق الاكسبيرت
جزاك الله كل خير أخي .

hre007
16-09-2018, 01:34 AM
السلام عليكم
مثال :


//المتغيرات الخارجية
input bool Use_MyAccount=true;//تفعيل او تعطيل الحساب الجزئي
input double MyAccount=100;//قيمة الحساب الجزئي بالدولار

//المتغيرات الداخلية
double account=0;

//الشروط
if(Use_MyAccount)account=MyAccount;else account=AccountEquity();


ما شاء الله تسلم يا اخ حسن ..
بس اكيد في شئ ناقص عشان هو بيشتغل على الحساب كله سواء true or false

kira-h
16-09-2018, 02:29 AM
ما شاء الله تسلم يا اخ حسن ..
بس اكيد في شئ ناقص عشان هو بيشتغل على الحساب كله سواء true or false
الشروط سليمة لكن طريقتك في استخدامه بالكود قد تكون خاطئة
ستستخدم المتغير account مكان الرصيد بدالة راس المال تبعك
أو ارفق الكود للتعديل عليه

kira-h
16-09-2018, 02:30 AM
جزاك الله كل خير أخي .
وإياك اخي الكريم

mokhtar
16-09-2018, 09:15 AM
السلام عليكم
اخي كيرا وددت ان اطرح هذا السؤال المهم حول البرمجة او بالاحرى حول عمل اي اكسبريت على الميتاترادر
جل الاكسبريتات في لغة mq4حسب علمي تعمل في حد داتها عند كل تيكة اي عند تحرك السعر
سؤالي هو هل بالامكان عمل اكسبريت يعمل كل ميلي ثانية milli second بدلا من التيكة هل هذا ممكن برمجيا ،طبعا نحن نعرف ان هناك برمجيات فائقة السرعة يعمل بها كبار السوق
و حسب خبرتي في السوق ارى ان لغة mq4 بطيئة جدا عند الانفجارات السعرية التي تحدث و هي بالفعل تحدث اقل من ثانية فتسبق التيكة التي يعمل بها الاكسبريت او يحدث خلل لحظي له فيصبح مثلا الستوب لوز او الهدف اكبر مما حددناه
هل بالامكان جعل لغة mq4 سريعة لحد الميلي ثانية
ودي لك اخي الكريم

Waddah
16-09-2018, 09:53 AM
السلام عليكم أستاذ
أعمل على مؤشر يرسم مستويات فيبوناتشي لكن فيه تاريخي لسبعة أيام سابقة - بحيث يرسم المستويات إعتمادا على هاي ولو اليوم السابق - ليوم واحد الأمر بسيط لكن كيف تتم العملية لعدة أيام ؟ ننفذها بحلقة for أم كل يوم لوحده ؟ أرجو المساعدة بمثال بسيط

mokhtar
16-09-2018, 11:48 AM
السلام عليكم
اخي كيرا وددت ان اطرح هذا السؤال المهم حول البرمجة او بالاحرى حول عمل اي اكسبريت على الميتاترادر
جل الاكسبريتات في لغة mq4حسب علمي تعمل في حد داتها عند كل تيكة اي عند تحرك السعر
سؤالي هو هل بالامكان عمل اكسبريت يعمل كل ميلي ثانية milli second بدلا من التيكة هل هذا ممكن برمجيا ،طبعا نحن نعرف ان هناك برمجيات فائقة السرعة يعمل بها كبار السوق
و حسب خبرتي في السوق ارى ان لغة mq4 بطيئة جدا عند الانفجارات السعرية التي تحدث و هي بالفعل تحدث اقل من ثانية فتسبق التيكة التي يعمل بها الاكسبريت او يحدث خلل لحظي له فيصبح مثلا الستوب لوز او الهدف اكبر مما حددناه
هل بالامكان جعل لغة mq4 سريعة لحد الميلي ثانية
ودي لك اخي الكريم
الهدف و الستوب لوز الذي اتحدث عنه هو المخفي على البروكر طبعا

hre007
16-09-2018, 01:45 PM
الشروط سليمة لكن طريقتك في استخدامه بالكود قد تكون خاطئة
ستستخدم المتغير account مكان الرصيد بدالة راس المال تبعك
أو ارفق الكود للتعديل عليه

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

kira-h
16-09-2018, 05:15 PM
طاب شوف الكود كده يا استاذ حسن .. طبعا المفروض اني لو شغلت ادارة راس المال برده تلتزم براس المال المحدد
مرفق الاكسبيرت

kira-h
16-09-2018, 05:50 PM
السلام عليكم
اخي كيرا وددت ان اطرح هذا السؤال المهم حول البرمجة او بالاحرى حول عمل اي اكسبريت على الميتاترادر
جل الاكسبريتات في لغة mq4حسب علمي تعمل في حد داتها عند كل تيكة اي عند تحرك السعر
سؤالي هو هل بالامكان عمل اكسبريت يعمل كل ميلي ثانية milli second بدلا من التيكة هل هذا ممكن برمجيا ،طبعا نحن نعرف ان هناك برمجيات فائقة السرعة يعمل بها كبار السوق
و حسب خبرتي في السوق ارى ان لغة mq4 بطيئة جدا عند الانفجارات السعرية التي تحدث و هي بالفعل تحدث اقل من ثانية فتسبق التيكة التي يعمل بها الاكسبريت او يحدث خلل لحظي له فيصبح مثلا الستوب لوز او الهدف اكبر مما حددناه
هل بالامكان جعل لغة mq4 سريعة لحد الميلي ثانية
ودي لك اخي الكريم


الهدف و الستوب لوز الذي اتحدث عنه هو المخفي على البروكر طبعا
وعليكم السلام
راجع المشاركة التالية:
OnTimer (https://www.fxprg.com/vb/showthread.php?t=31457&page=28&p=869586&viewfull=1#post869586)
ولكن رغم استخدام المعالجة الزمنية فلن يتم التنفيذ إلا إذا تحرك السعر على الأقل تكة

mokhtar
16-09-2018, 06:25 PM
وعليكم السلام
راجع المشاركة التالية:
OnTimer (https://www.fxprg.com/vb/showthread.php?t=31457&page=28&p=869586&viewfull=1#post869586)
ولكن رغم استخدام المعالجة الزمنية فلن يتم التنفيذ إلا إذا تحرك السعر على الأقل تكة
اهلا اخي
لم اكن اعلم وجود دالة للتنفيذ اقل من ثانية شكرا لهذه المعلومة

hre007
16-09-2018, 08:32 PM
مرفق الاكسبيرت

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

kira-h
16-09-2018, 09:03 PM
بس بالشكل ده لو كانت القيمة true وحددنا الحساب الجزئي ب 100 دولار مثلا نكون لغينا الادارة المالية
وهيلتزم بلوت محدد لن يتغير لأنه في كل بداية عملية سيري قيمة الحساب المحددة
لكن المفروض طول ما الاكسيرت شغال يحفظ القيمة المضافة مكسب او خسارة لقيمة الحساب الجزئي عشان تقدر الادارة المالية على العمل
بس ده برمجيا مش عارف ممكن والا لا ؟؟؟؟
إذن سنجعل تحديد القيمة كنسبة مئوية من الحساب
مرفق الاكسبيرت
القيمة 10 يعني 10 في المئة

mokhtar
17-09-2018, 11:31 AM
وعليكم السلام
راجع المشاركة التالية:
OnTimer (https://www.fxprg.com/vb/showthread.php?t=31457&page=28&p=869586&viewfull=1#post869586)
ولكن رغم استخدام المعالجة الزمنية فلن يتم التنفيذ إلا إذا تحرك السعر على الأقل تكة
السلام عليكم
اخي كيرا هل ممكن عمل اكسبريت خدمي اخر يقوم بالريفريش كل ميلي ثانية للاكسبريتات الموجودة على الشارت
هل هذا ممكن برمجيا ؟!

kira-h
17-09-2018, 10:01 PM
السلام عليكم
اخي كيرا هل ممكن عمل اكسبريت خدمي اخر يقوم بالريفريش كل ميلي ثانية للاكسبريتات الموجودة على الشارت
هل هذا ممكن برمجيا ؟!
وعليكم السلام
جرب المؤشر المرفق

mokhtar
18-09-2018, 02:22 AM
وعليكم السلام
جرب المؤشر المرفق
ساجربه حالا

mokhtar
18-09-2018, 03:23 AM
وعليكم السلام
جرب المؤشر المرفق
المؤشر لا يظهر على الشارت عند وضعه هل هذا شيء طبيعي ؟

kira-h
18-09-2018, 03:35 PM
المؤشر لا يظهر على الشارت عند وضعه هل هذا شيء طبيعي ؟
المؤشر مهمته فقط عمل ريفريش للشارت
وطبعا لن يظهر شيء على الشارت

hre007
18-09-2018, 08:44 PM
إذن سنجعل تحديد القيمة كنسبة مئوية من الحساب
مرفق الاكسبيرت
القيمة 10 يعني 10 في المئة

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

mokhtar
19-09-2018, 12:21 AM
المؤشر مهمته فقط عمل ريفريش للشارت
وطبعا لن يظهر شيء على الشارت
اوكي فهمت ذلك اخي كيرا فقط هل يؤثر ذلك على سيرفر البروكر و يزعجه اذا تركته يعمل 24/24 ساعة 5ايام على 5ايام و كم هو الزمن بين الريفريش و الاخر ?

Amr
19-09-2018, 10:46 AM
السلام عليكم ورحمة الله وبركاته

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

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

وشكرا جزيلا

kira-h
19-09-2018, 06:42 PM
اوكي فهمت ذلك اخي كيرا فقط هل يؤثر ذلك على سيرفر البروكر و يزعجه اذا تركته يعمل 24/24 ساعة 5ايام على 5ايام و كم هو الزمن بين الريفريش و الاخر ?
لا يوجد أي ازعاج للسيرفر، ويتم عمله كل ميلي ثانية لأننا استخدمنا الوظيفة :
EventSetMillisecondTimer(1);

وإذا تريده كل ثانية استخدم الوظيفة التالية مكان السابقة :
EventSetTimer(1);

kira-h
19-09-2018, 06:46 PM
السلام عليكم ورحمة الله وبركاته

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

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

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

mokhtar
19-09-2018, 08:08 PM
لا يوجد أي ازعاج للسيرفر، ويتم عمله كل ميلي ثانية لأننا استخدمنا الوظيفة :
EventSetMillisecondTimer(1);

وإذا تريده كل ثانية استخدم الوظيفة التالية مكان السابقة :
EventSetTimer(1);
رائع سازيده في الترسانة الموجودة عندي
ارجو ان تنصحني باكسبريت خدمي من صنعك يفي لي بهذا الغرض ،اذا اردت ملاحقة الربح بعد ربح و حجز عدد معين من النقاط مثلا 20 نقطة و من تم يقوم بملاحقة الربح كل عدد معين من النقاط مثلا نقطتين او ثلاثة
المهم انه يحجز ربح العشرين نقطة و من تم يبدأ بملاحقة الربح كل نقطتين او اكثر عند الانفجارات السعرية

hre007
20-09-2018, 04:19 AM
اخي حسن السلام عليكم
حاولت ان استعمل متغير static لتخزين القيمة الجديدة للحساب الجزئي


static double The_value_of_the_partial_account=(Partial_calculat ion+LastOrderProf());

وجعلت الشرط كالتالي


if(Use_Partial_calculation)account= The_value_of_the_partial_accoun ;else account=AccountBalance();


لكن يأتي خطأ undeclared identifier
صراحة لا اعرف السبب او ان كتابتي للمتغير صحيحة ام لا ؟؟

kira-h
20-09-2018, 05:12 AM
اخي حسن السلام عليكم
حاولت ان استعمل متغير static لتخزين القيمة الجديدة للحساب الجزئي


static double The_value_of_the_partial_account=(Partial_calculat ion+LastOrderProf());

وجعلت الشرط كالتالي


if(Use_Partial_calculation)account= The_value_of_the_partial_accoun ;else account=AccountBalance();


لكن يأتي خطأ undeclared identifier
صراحة لا اعرف السبب او ان كتابتي للمتغير صحيحة ام لا ؟؟
وعليكم السلام
نسيت حرف t والصحيح

account= The_value_of_the_partial_account ;
ويجب تعريف المتغير خارج الدوال

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

kira-h
20-09-2018, 05:22 AM
رائع سازيده في الترسانة الموجودة عندي
ارجو ان تنصحني باكسبريت خدمي من صنعك يفي لي بهذا الغرض ،اذا اردت ملاحقة الربح بعد ربح و حجز عدد معين من النقاط مثلا 20 نقطة و من تم يقوم بملاحقة الربح كل عدد معين من النقاط مثلا نقطتين او ثلاثة
المهم انه يحجز ربح العشرين نقطة و من تم يبدأ بملاحقة الربح كل نقطتين او اكثر عند الانفجارات السعرية
بالمرفق

hre007
20-09-2018, 06:01 AM
وعليكم السلام
نسيت حرف t والصحيح

account= The_value_of_the_partial_account ;
ويجب تعريف المتغير خارج الدوال

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

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

hre007
20-09-2018, 06:40 AM
سؤال اخي الكريم
هل فعلا بهذا الشكل سيلتزم الاكسبيرت بقيمة ال 100 دولار ام سيجعلها قيمة ثابته يمكن ان يتخطاها ؟؟
انا جعلت الاكسبيرت يخسر ووجته يتعدي القيمة المحددة ويكمل خسارة للحساب !!
وكذلك في حال المكسب لا يفعل الادارة المالية ويلتزم بلوت ثابت حسب القيمة المحددة للحساب الجزئي
ومش عارف ايه السبب ؟؟ :cower:

mokhtar
20-09-2018, 12:49 PM
بالمرفق
شكرا جزيلا اخي حسن لكني لا اعرف كيف استعمله و ادخل الاعدادات الصحيحة لربح 20 نقطة و ملاحقة الربح بالنقطة او اثنتين

kira-h
20-09-2018, 06:04 PM
شكرا جزيلا اخي حسن لكني لا اعرف كيف استعمله و ادخل الاعدادات الصحيحة لربح 20 نقطة و ملاحقة الربح بالنقطة او اثنتين
بالنسبة لملاحقة الربح اي التريلينغ

إذا كان مثلا TrailingStop=20 فبعد ربح 20 نقطه يتم نقل الأستوب لوز إلى نقطه الدخول ثم كل ربح نقطه يتم رفع الاستوب بمقدار +1

فإذا جعلت مثلا TrailingStop =10 و TrailingStep =20
فعندما يربح الإكسبيرت 10 نقاط سوف يجعل الإكسبرت الأستوب الفرق بينه وبين السعر الحالي 20 نقطه
ولن ينتظر إلى أن يصبح الربح 20 نقطه حتى ينقل الأستوب إلى نقطة الدخول

مثلا عملت 20=TrailingStop و 10=TrailingStep بعد 30 نقطة سيضع الإكسبريت الاستوب بعد نقطة الدخول ب 10 نقاط و سيطارد السعر بفارق 20 نقطة

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

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

benaissa
20-09-2018, 06:50 PM
السلام عليكم الاخ حسن .
في ايطار التمرين حاولت مع اكسبيرت بسيط ان اضع دالة المضاعفات ِالا أني لم أعرف كيف اجعله يفتح صفقة واحدة فقط ولم يفتح اي صفقة حتى تغلق السابقة(لانه الان يفتح مئات الصفقات في نفس الوقت).
ارجوك ايضا ان تلقي نظر على الكود بأكمله , ِاذا كانت اي ملاحظات ممكن تفيدني بها ,جزاك الله بالخير

mokhtar
20-09-2018, 09:14 PM
بالنسبة لملاحقة الربح اي التريلينغ

إذا كان مثلا TrailingStop=20 فبعد ربح 20 نقطه يتم نقل الأستوب لوز إلى نقطه الدخول ثم كل ربح نقطه يتم رفع الاستوب بمقدار +1

فإذا جعلت مثلا TrailingStop =10 و TrailingStep =20
فعندما يربح الإكسبيرت 10 نقاط سوف يجعل الإكسبرت الأستوب الفرق بينه وبين السعر الحالي 20 نقطه
ولن ينتظر إلى أن يصبح الربح 20 نقطه حتى ينقل الأستوب إلى نقطة الدخول

مثلا عملت 20=TrailingStop و 10=TrailingStep بعد 30 نقطة سيضع الإكسبريت الاستوب بعد نقطة الدخول ب 10 نقاط و سيطارد السعر بفارق 20 نقطة

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

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

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

احمد
21-09-2018, 06:00 PM
السلام عليكم ورحمة الله بركاته
أخي حسن ممكن تزودني بدالة تعطيني أعلا سعر وأدنى سعر بين تقاطعين للموفينق

احمد
22-09-2018, 02:04 AM
اخي حسن بلاش الموفنق في الرسالة السابقة
عندي مؤشر على الماكد حاولت إضافة الهاي واللو بين تقاطعي الماكد من خلال iHighest وiLowest يظهر معي ولكن بشكل خاطئ
تكرما منك تشوف المؤشر المرفق وتجري عليه التعديلات اللازمة

mohamed atch
22-09-2018, 11:16 PM
اخواني سؤال اين يتم وضع هذا الكود في كود الاكسبرت


//+------------------------------------------------------------------+
//| Check the correctness of the order volume |
//+------------------------------------------------------------------+
bool CheckVolumeValue(double volume,string &description)
{
//--- minimal allowed volume for trade operations
double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME _MIN);
if(volume<min_volume)
{
description=StringFormat("Volume is less than the minimal allowed SYMBOL_VOLUME_MIN=%.2f",min_volume);
return(false);
}

//--- maximal allowed volume of trade operations
double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME _MAX);
if(volume>max_volume)
{
description=StringFormat("Volume is greater than the maximal allowed SYMBOL_VOLUME_MAX=%.2f",max_volume);
return(false);
}

//--- get minimal step of volume changing
double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUM E_STEP);

int ratio=(int)MathRound(volume/volume_step);
if(MathAbs(ratio*volume_step-volume)>0.0000001)
{
description=StringFormat("Volume is not a multiple of the minimal step SYMBOL_VOLUME_STEP=%.2f, the closest correct volume is %.2f",
volume_step,ratio*volume_step);
return(false);
}
description="Correct volume value";
return(true);
}

kira-h
24-09-2018, 04:23 AM
اخي حسن بلاش الموفنق في الرسالة السابقة
عندي مؤشر على الماكد حاولت إضافة الهاي واللو بين تقاطعي الماكد من خلال iHighest وiLowest يظهر معي ولكن بشكل خاطئ
تكرما منك تشوف المؤشر المرفق وتجري عليه التعديلات اللازمة

السلام عليكم
مرفق المؤشر

احمد
24-09-2018, 07:31 AM
السلام عليكم
مرفق المؤشر

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

kira-h
24-09-2018, 08:09 AM
أخي حسن بارك الله فيك وأشكرك على إهتمامك والإجابه على استفساراتنا
شغلت المؤشر ولكن نفس الشي تظهر iHighest و iLowest ولكن على تقاطعات سابقة وأنا أريدها على التقاطعين الأخيرين
وهي الان عندما تظهر على تقاطعات سابقة ليس صحيحة بقصد أنها ليست من بداية التقاطع إلى نهايته فقد تجدها بدأت في وسط تقاطعين وانتهت في وسط تقاطعين آخرين
وهي متحركة الان وليست ثابته ومن المفترض أن تكون ثابته على التقاطعين الاخيرين حتى يتم التقاطع الجديد ثم تنتقل إلية مع التقاطع اللذي قبله
هذا ما يقوم به المؤشر ولكن يعتمد في حساباته على فريم الساعة فقط لانك استخدمت القيمة 60، يمكنك تغييرها الى 0 ليعمل على الفريم الحالي

احمد
24-09-2018, 01:01 PM
هذا ما يقوم به المؤشر ولكن يعتمد في حساباته على فريم الساعة فقط لانك استخدمت القيمة 60، يمكنك تغييرها الى 0 ليعمل على الفريم الحالي

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

kira-h
24-09-2018, 05:30 PM
انا اعتذر منك وصحيح المؤشر يعمل بالشكل الصحيح وأنا كنت أطبقه على فريم أقل من الساعة ولم انتبه للفريم واعداداته في البرمجة
اكرر شكري وتقديري لك
لم الاعتذار أخي ! فهذه امور عادية
بالتوفيق إن شاء الله

احمد
24-09-2018, 10:47 PM
أستاذي هل بالإمكان أن تكون الخطوط على شكل مصفوفة أي تظهر لي رسوم التقاطعات السابقة على الشارت ؟
الآن تظهر رسوم التقاطعين الآخيرين

kira-h
25-09-2018, 04:23 PM
أستاذي هل بالإمكان أن تكون الخطوط على شكل مصفوفة أي تظهر لي رسوم التقاطعات السابقة على الشارت ؟
الآن تظهر رسوم التقاطعين الآخيرين
نعم ممكن

احمد
26-09-2018, 09:21 AM
أخي حسن حاولت أن تظهر ولكن لم أستطع حيث حولت المتغيرات إلى مصفوفات ولكن الرسوم لم تظهر
إذا أمكن تحولها

Ahmed
26-09-2018, 10:54 AM
وعليكم السلام
راجع المشاركة التالية:
OnTimer (https://www.fxprg.com/vb/showthread.php?t=31457&page=28&p=869586&viewfull=1#post869586)
ولكن رغم استخدام المعالجة الزمنية فلن يتم التنفيذ إلا إذا تحرك السعر على الأقل تكة
السلام عليكم استاذ حسن ما فائدة دالة OnTimer (https://www.fxprg.com/vb/showthread.php?t=31457&page=28&p=869586&viewfull=1#post869586) مادام ان الوظيفة ستنتظر حدوث تكة

mohamed atch
26-09-2018, 11:44 AM
void DoAlert(string UD)
{
if (!NewBar() || !Use_Sound)
return;
PlaySound ("Alert2");
Alert (Symbol()," ",Period(),"m Boll Touch at ",UD);
}




bool NewBar()
{
static datetime dt = 0;
if (dt != Time[0])
{
dt = Time[0];
return(true);
}
}




يظهر الخطا التالي
"Not all control paths return a value" error

ما هو الحل

kira-h
26-09-2018, 05:20 PM
void DoAlert(string UD)
{
if (!NewBar() || !Use_Sound)
return;
PlaySound ("Alert2");
Alert (Symbol()," ",Period(),"m Boll Touch at ",UD);
}




bool NewBar()
{
static datetime dt = 0;
if (dt != Time[0])
{
dt = Time[0];
return(true);
}
}




يظهر الخطا التالي
"Not all control paths return a value" error



ما هو الحل

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

bool NewBar(){
static datetime dt = 0;
if (dt != Time[0])
{
dt = Time[0];
return(true);
}
return(false);
}

kira-h
26-09-2018, 05:21 PM
السلام عليكم استاذ حسن ما فائدة دالة OnTimer (https://www.fxprg.com/vb/showthread.php?t=31457&page=28&p=869586&viewfull=1#post869586) مادام ان الوظيفة ستنتظر حدوث تكة
وعليكم السلام
مثل المؤشرات التي لا تتطلب بالضرورة حركة السعر
أو أي فكرة لا تحتاح إلى أوامر للسيرفر، مثل الرسم ، الكومنت، الاحصائيات...
وليس أوامر وضع، فتح، موديفاي، وإغلاق الصفقة والتي تتطلب حركة السعر مع موافقة السيرفر للأمر

احمد
27-09-2018, 10:22 AM
أخي حسن حاولت أن تظهر ولكن لم أستطع حيث حولت المتغيرات إلى مصفوفات ولكن الرسوم لم تظهر
إذا أمكن تحولها

9297

Ahmed
27-09-2018, 06:01 PM
وعليكم السلام
مثل المؤشرات التي لا تتطلب بالضرورة حركة السعر
أو أي فكرة لا تحتاح إلى أوامر للسيرفر، مثل الرسم ، الكومنت، الاحصائيات...
وليس أوامر وضع، فتح، موديفاي، وإغلاق الصفقة والتي تتطلب حركة السعر مع موافقة السيرفر للأمر
بارك الله فيك اخي حسن

benaissa
29-09-2018, 10:15 AM
السلام عليكم الاخ حسن .
في ايطار التمرين حاولت مع اكسبيرت بسيط ان اضع دالة المضاعفات ِالا أني لم أعرف كيف اجعله يفتح صفقة واحدة فقط ولم يفتح اي صفقة حتى تغلق السابقة(لانه الان يفتح مئات الصفقات في نفس الوقت).
ارجوك ايضا ان تلقي نظر على الكود بأكمله , ِاذا كانت اي ملاحظات ممكن تفيدني بها ,جزاك الله بالخير
اخي حسن . دائما في الانتظار . الله يفتح عليك ابواب رزقه.

Amr
29-09-2018, 03:32 PM
السلام عليكم

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

وشكرا جزيلا

Tarek987
29-09-2018, 05:14 PM
السلام عليكم

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

وشكرا جزيلا

نعم ممكن.

kira-h
30-09-2018, 12:47 AM
السلام عليكم الاخ حسن .
في ايطار التمرين حاولت مع اكسبيرت بسيط ان اضع دالة المضاعفات ِالا أني لم أعرف كيف اجعله يفتح صفقة واحدة فقط ولم يفتح اي صفقة حتى تغلق السابقة(لانه الان يفتح مئات الصفقات في نفس الوقت).
ارجوك ايضا ان تلقي نظر على الكود بأكمله , ِاذا كانت اي ملاحظات ممكن تفيدني بها ,جزاك الله بالخير

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

Amr
30-09-2018, 11:44 AM
نعم ممكن.

شكرا جزيلا أخي طارق

benaissa
30-09-2018, 04:52 PM
وعليكم السلام
مرفق الاكسبيرت
الله يفتح لك أبواب رزقه .

kira-h
30-09-2018, 08:27 PM
الله يفتح لك أبواب رزقه .
آمين وإياك أخي الكريم

mokhtar
02-10-2018, 12:46 AM
مشكور اخي حسن لكني اظن اما انه فاتني شيء لم افهمه ام اني لم اشرح لك جيدا ما الذي اقصد
ما اردته هو عند ربح 10 نقاط يتم رفع الستوب عند ذلك الربح اي اذا ربحت 11 نقطة يتم تثبيت الربح بستوب عند 10 نقاط ربح و ليس عند نقطة الدخول و من تم يقوم الاكسبريت بمطاردة الربح و رفع الستوب مثلا كل نقطة او نقطتين
يعني ينقل الستوب على مرتين المرة الاولى عند ربح 10 نقاط و المرة الثانية عند ربح كل نقطة او نقطتين
و انا آسف ان لم استوعب ما شرحته من قبل
أخي كيرا السلام عليكم
هل هدا ممكن و كيف ذلك

kira-h
02-10-2018, 04:01 AM
أخي كيرا السلام عليكم
هل هدا ممكن و كيف ذلك
وعليكم السلام
نعم ممكن ويمكنك تجربة إعدادات مختلفة بالباكتيست وتراجعها

mokhtar
04-10-2018, 12:51 PM
وعليكم السلام
نعم ممكن ويمكنك تجربة إعدادات مختلفة بالباكتيست وتراجعها

أوكي راح أجرب إنشاء الله

benaissa
04-10-2018, 10:55 PM
السلام اخي الكريم ,
في ايطار التمرين دائما ,حاولت تغيير دالة مضاعفات الضرب بدالة الجمع لكن يعطيني خطأين و 5 انذارات لم استطع اصلاحهم . المرجو المساعة جزاك الله كل خير.

basel_99
04-10-2018, 10:57 PM
مساء الخير، تحياتي استاذنا العزيز لو سمحت اريد ان اعرف ماهي داله فتح الصفقات بلغه mql5 و من بعد امرك يا ريت تعطيني مثال عن اكسبيرت بلغة mql5 مع جزيل الشكر والتقدير والاحترام لكرمك و جهدك

kira-h
05-10-2018, 02:08 AM
مساء الخير، تحياتي استاذنا العزيز لو سمحت اريد ان اعرف ماهي داله فتح الصفقات بلغه mql5 و من بعد امرك يا ريت تعطيني مثال عن اكسبيرت بلغة mql5 مع جزيل الشكر والتقدير والاحترام لكرمك و جهدك
السلام عليكم
أخي الكريم يمكنك مراجعة الاكسبيرتات الافتراضية بمنصة mt5 فهي مفتوحة المصدر

basel_99
05-10-2018, 05:50 PM
شكرا استاذ ح اتبع نصيحتك

احمد
06-10-2018, 12:45 AM
السلام عليكم ورحمة الله وبركاته
أخي حسن هل هناك دوال لنفيذ أوامر op_buylimit أو op_selllimit
أو اكسبيرت فيه هذه الاوامر كمثال

kira-h
06-10-2018, 09:35 PM
السلام عليكم ورحمة الله وبركاته
أخي حسن هل هناك دوال لنفيذ أوامر op_buylimit أو op_selllimit
أو اكسبيرت فيه هذه الاوامر كمثال
وعليكم السلام
يمكن ذلك من خلال نفس الوظيفة OrderSend وعند تحديد نوع الأمر ستضع OP_BUYLIMIT أو OP_SELLLIMIT أو....
طبعا مع مراعاة اسعار الدخول والهدف والوقف
مثال :


int tk=OrderSend(Symbol(),OP_BUYSTOP,0.1,Ask+500*Point ,5,0,0,"",0,0,Blue);

احمد
07-10-2018, 08:35 AM
وعليكم السلام
يمكن ذلك من خلال نفس الوظيفة OrderSend وعند تحديد نوع الأمر ستضع OP_BUYLIMIT أو OP_SELLLIMIT أو....
طبعا مع مراعاة اسعار الدخول والهدف والوقف
مثال :


int tk=OrderSend(Symbol(),OP_BUYSTOP,0.1,Ask+500*Point ,5,0,0,"",0,0,Blue);

يعطيك العافية جربتها وزبطت

احمد
07-10-2018, 08:46 AM
أخي حسن أريد أن أضع شرط للبيع أو الشراء في فتح صفقة جديدة اذا أغلقت الصفقه الحاليه بضرب الاستوب أو التيك برفت
طبعا لا أريد استخدام OrderProfit انا أريد عند تحقق الاستوب لوز لأنه قد تكون أغلقت الصفقة بواسطة كلوز أردر

احمد
08-10-2018, 10:18 AM
وعليكم السلام
يمكن ذلك من خلال نفس الوظيفة OrderSend وعند تحديد نوع الأمر ستضع OP_BUYLIMIT أو OP_SELLLIMIT أو....
طبعا مع مراعاة اسعار الدخول والهدف والوقف
مثال :


int tk=OrderSend(Symbol(),OP_BUYSTOP,0.1,Ask+500*Point ,5,0,0,"",0,0,Blue);

تسلم والله يعطيك العافية

احمد
08-10-2018, 06:58 PM
أخي حسن بالفعل الأمر تنفذ ولكن إذا أرددت أن أحذفة لا يتنفذ أمر الحذف أنا وضعت أمر الحذف إذا ربحت الصفقة كما يلي
فما هي الصيغة الصحيحة لحذفة في حين أن الصفقة التي فتح حققت الهدف ورابحة


int Order=OrderSend(Symbol(),OP_BUYSTOP,0.1,Ask+500*Po int,5,0,0,"",0,0,Green);
if((LastOrder("Profit")>0)&&OrderType()==OP_BUYSTOP) Order= OrderDelete(OrderTicket(),Black); // حذف أمر معلق بيع

basel_99
09-10-2018, 10:04 PM
مساء الخير، تحياتي استاذنا العزيز عندي سؤال لو سمحت، ممكن نشغل داله تريلينج ستوب للاوامر المعلقة و اذا كان ممكن يا ريت تقلي كيف مع جزيل الشكر

kira-h
11-10-2018, 04:33 AM
مساء الخير، تحياتي استاذنا العزيز عندي سؤال لو سمحت، ممكن نشغل داله تريلينج ستوب للاوامر المعلقة و اذا كان ممكن يا ريت تقلي كيف مع جزيل الشكر
مساء النور
كيف تريلينغ ستوب لأوامر معلقة؟! فهي لم تتفعل بعد ليتم التريلينغ

kira-h
11-10-2018, 04:37 AM
أخي حسن بالفعل الأمر تنفذ ولكن إذا أرددت أن أحذفة لا يتنفذ أمر الحذف أنا وضعت أمر الحذف إذا ربحت الصفقة كما يلي
فما هي الصيغة الصحيحة لحذفة في حين أن الصفقة التي فتح حققت الهدف ورابحة


int Order=OrderSend(Symbol(),OP_BUYSTOP,0.1,Ask+500*Po int,5,0,0,"",0,0,Green);
if((LastOrder("Profit")>0)&&OrderType()==OP_BUYSTOP) Order= OrderDelete(OrderTicket(),Black); // حذف أمر معلق بيع
لأن الشروط لا يمكن أن تتحقق بهذه الطريقة
استخدم دالة خارجية تستخرج نوع الأمر مثل الربح المستخدم بالشروط
ودالة الاغلاق حسب النوع

ارفق الكود لمراجعته

احمد
11-10-2018, 08:49 AM
أنا جربت بشروط مختلفة وبسيطة وواضحة وأيضا جربت بدوال لحذف أمر op_buystop ولم ينفذ حذف الأمر
إليك أخي حسن إكسبيرت بسيط على مؤشر rsi
طبعا أمر باي ستوب يوضع إذا تنفذ أمر op_sell ويوضع على الاستوب لوز أنا أريد حذف op_buystop في حال تم أغلق أمر op_sell بواسطة تيك بروفت أو كان رابحا

benaissa
11-10-2018, 12:48 PM
السلام اخي الكريم ,
في ايطار التمرين دائما ,حاولت تغيير دالة مضاعفات الضرب بدالة الجمع لكن يعطيني خطأين و 5 انذارات لم استطع اصلاحهم . المرجو المساعة جزاك الله كل خير.
اخي العزيز اذا سمح لك وقتك لا تنساني . حفظك الله و حباك بنعمه.

Tarek987
11-10-2018, 01:06 PM
السلام عليكم
ما هي افضل طرق لتشفير الاكسبيرت ؟
بحيث لا احد يستطيع رؤية الكود و حفظه بأمان.

kira-h
11-10-2018, 05:36 PM
اخي العزيز اذا سمح لك وقتك لا تنساني . حفظك الله و حباك بنعمه.
لم أرى مشاركتك ...
تم التصحيح بالنسخة المرفقة

kira-h
11-10-2018, 05:41 PM
السلام عليكم
ما هي افضل طرق لتشفير الاكسبيرت ؟
بحيث لا احد يستطيع رؤية الكود و حفظه بأمان.
وعليكم السلام
أفضل الطرق حتى الان باستخدام ملفات الـ DLL بحيث تضع بداخلها بعض الشروط والتي بدونها لن يعمل الاكسبيرت، طبعا هذا صعب إلا إذا كنت تتقن لغة السي
لكن حتى الان ex4 حماية جيدة فلم يتم كسره منذ التحديث الأخير للغة والمنصة بشكل عام

احمد
11-10-2018, 09:39 PM
أنا جربت بشروط مختلفة وبسيطة وواضحة وأيضا جربت بدوال لحذف أمر op_buystop ولم ينفذ حذف الأمر
إليك أخي حسن إكسبيرت بسيط على مؤشر rsi
طبعا أمر باي ستوب يوضع إذا تنفذ أمر op_sell ويوضع على الاستوب لوز أنا أريد حذف op_buystop في حال تم أغلق أمر op_sell بواسطة تيك بروفت أو كان رابحا

benaissa
11-10-2018, 09:40 PM
لم أرى مشاركتك ...
تم التصحيح بالنسخة المرفقة

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

kira-h
12-10-2018, 12:14 AM
أنا جربت بشروط مختلفة وبسيطة وواضحة وأيضا جربت بدوال لحذف أمر op_buystop ولم ينفذ حذف الأمر
إليك أخي حسن إكسبيرت بسيط على مؤشر rsi
طبعا أمر باي ستوب يوضع إذا تنفذ أمر op_sell ويوضع على الاستوب لوز أنا أريد حذف op_buystop في حال تم أغلق أمر op_sell بواسطة تيك بروفت أو كان رابحا

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

احمد
12-10-2018, 12:36 AM
مرفق الاكسبيرت
تسلم والله يوسع لك في رزقك

احمد
12-10-2018, 04:16 PM
مرفق الاكسبيرت

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

kira-h
12-10-2018, 05:29 PM
اخي حسن انا جربت الاكسبيرت المرفق ونفس المشكلة موجودة حيث انه يقفل اوامر البيع والشراء على الشرط ولكن لا يحذف الاوامر المعلقة ارجوا منك تجربته والتأكد بنفسك
قمت فقط بتصحيح الأخطاء حيث يجب استخدام دوال خارجية...
جرب النسخة المرفقة

احمد
12-10-2018, 06:29 PM
قمت فقط بتصحيح الأخطاء حيث يجب استخدام دوال خارجية...
جرب النسخة المرفقة

أرجو أن لا أكون قد أزعجتك أخي حسن ولكن حتى الآن مازالت المشكلة قائمة
الشرط هو (rsi>60) عندما يتحقق هذا الشرط يجب أن يغلق أمر الشراء op_buy ويحذف أمر البيع سلستوب op_sellstop
ولكن ما يحدث هو يغلق أمر الشراء ولا يحذف أمر السلستوب
انظر الصورة المرفقة فعلا تنفذ إغلاق أمر الشراء ولم يحذف الأمر المعلق سلستوب 9670

kira-h
12-10-2018, 07:32 PM
أرجو أن لا أكون قد أزعجتك أخي حسن ولكن حتى الآن مازالت المشكلة قائمة
الشرط هو (rsi>60) عندما يتحقق هذا الشرط يجب أن يغلق أمر الشراء op_buy ويحذف أمر البيع سلستوب op_sellstop
ولكن ما يحدث هو يغلق أمر الشراء ولا يحذف أمر السلستوب
انظر الصورة المرفقة فعلا تنفذ إغلاق أمر الشراء ولم يحذف الأمر المعلق سلستوب
الامر بسيط كان بامكانك اضافتها، فلديك كل الدوال جاهزة
مرفق الاكسبيرت

احمد
13-10-2018, 02:07 AM
الامر بسيط كان بامكانك اضافتها، فلديك كل الدوال جاهزة
مرفق الاكسبيرت

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

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

kira-h
13-10-2018, 05:46 AM
اخي حسن أقسم بالله أني خجلان منك لكثرة الأسئلة
ولكن يبدو لي أنني لم أستطع توصيل ما أريدة

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

احمد
13-10-2018, 04:52 PM
لديك خطأ بسيط في الماجك نمبر لم تستخدمه بدالة الأمر المعلق، لهذا دالة الحذف لم تتعرف عليه
تم التصحيح بالنسخة المرفقة

تسلم والله يعطيك العافيه

kira-h
13-10-2018, 05:03 PM
تسلم والله يعطيك العافيه
بالتوفيق إن شاء الله

Tarek987
15-10-2018, 01:57 AM
وعليكم السلام
أفضل الطرق حتى الان باستخدام ملفات الـ DLL بحيث تضع بداخلها بعض الشروط والتي بدونها لن يعمل الاكسبيرت، طبعا هذا صعب إلا إذا كنت تتقن لغة السي
لكن حتى الان ex4 حماية جيدة فلم يتم كسره منذ التحديث الأخير للغة والمنصة بشكل عام

شكرا كتير ،، و جزاك الله الخير يا حسن.

kira-h
16-10-2018, 12:35 AM
شكرا كتير ،، و جزاك الله الخير يا حسن.

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

elhedoudy
16-10-2018, 08:17 AM
المؤشرالمرفق يرسم نوعين من خطوط مقاومات تاريخية تتغيريوميا لكل منها لون مستقل و بادئة(prefix)مستقلة.

احاول تعديل الكود لتمييز المقاومات التى تظهرفى نفس اليوم من نوعين مختلفين[اى لونين مختلفين من المقاومات – او بادئتينprefixمختلفتين فى اسم المقاومة حيث توجد خطوط تبدابحرف(H)و خطوط تبدا بحرف(L)]والمسافة بينهم عشرة نقاط او اقل بحيث يرسم مستطيل ضلعاة الافقيان هما المقاومتين(لان تجمع اكثر من مقاومة قريبا من بعضهم يؤدى لتكون مقاومة قوية )كماهو موضح فى الرسم ادناة



مطلوب من اى اخ من الاخوة الافاضل تعديلة بحيث يرسم المستطيلات بين نوعين من الخطوط [على اساس اللون او على اساس ال(prefix)بين مجموعنى الخطوط التى تبدا اسماؤهابحرف (L)ومجموعة الخطوط التى تبدا بحرف(H) ]
اوعلى الاقل توضيح كيفية عمل ذلك اذا كان القيام بة فى استطاعة مبتدئ مثلى علماباننى حاولت كثيرا جدا عمل ذلك بنفسى بدون فائدة .



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





9736

mahmoud1111
17-10-2018, 07:52 PM
السلام عليكم
ارغب من حضراتكم تزويدي بدالة كالتالي

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

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

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

شكرا لكم مقدما

kira-h
18-10-2018, 09:20 PM
السلام عليكم
ارغب من حضراتكم تزويدي بدالة كالتالي

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

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

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

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


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


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


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


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


if(Orderscnt(OP_BUY)>0&&Ask<=LastPrice(OP_BUY)-Step*point)//Open Buy
if(Orderscnt(OP_SELL)>0&&Bid>=LastPrice(OP_SELL)+Step*point)//Open Sell


بحيث Step مسافة التبريد بالنقاط

input double Step=10;

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


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==MagicNo)
{
if(ot==type||type==-1)
{
pts+=pt+sw+cm;
}
}
}
return(pts);
}

shivaa
23-10-2018, 03:10 AM
السلام عليكم
ممكن اعرف دالة اجيب قيمه شمعه رقم 10 مثلا على جميع تيم فريم
اكون شاكر

kira-h
23-10-2018, 07:07 PM
السلام عليكم
ممكن اعرف دالة اجيب قيمه شمعه رقم 10 مثلا على جميع تيم فريم
اكون شاكر
وعليكم السلام
كالتالي:


input int bar=10;//رقم الشمعة
input ENUM_TIMEFRAMES frame=PERIOD_H1;//الفريم


void OnTick()
{
double close=iClose(Symbol(),frame,bar);//قيمة اغلاق الشمعة
}

basel_99
24-10-2018, 05:40 PM
double LotManage()
{
double lot=MathCeil(AccountFreeMargin()*Risk/1000)/100;
if(lot<MarketInfo(Symbol(),MODE_MINLOT))lot=MarketInfo(Sy mbol(),MODE_MINLOT);
if(lot>MarketInfo(Symbol(),MODE_MAXLOT))lot=MarketInfo(Sy mbol(),MODE_MAXLOT);
return(NormalizeDouble(lot,Lot_Digits));
}

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

احمد
24-10-2018, 08:05 PM
أسعد الله مسائكم بكل خير وبركة
أخي حسن أرفقت مؤشر trend-magic الشهير
وأنا أحاول أستدعائه في اكسبيرت وأريد أن أضع شرط للشراء أو البيع عند تغير لون خط التريند من الأزرق إلى الأحمر أو العكس
وشرط آخر إذا كان السعر فوق التريند أو أسفل منه ولكن لم أستطع
فما الطريقة الصحيحة لذلك
بارك الله فيك 9940

kira-h
24-10-2018, 09:34 PM
double LotManage()
{
double lot=MathCeil(AccountFreeMargin()*Risk/1000)/100;
if(lot<MarketInfo(Symbol(),MODE_MINLOT))lot=MarketInfo(Sy mbol(),MODE_MINLOT);
if(lot>MarketInfo(Symbol(),MODE_MAXLOT))lot=MarketInfo(Sy mbol(),MODE_MAXLOT);
return(NormalizeDouble(lot,Lot_Digits));
}

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

AccountFreeMargin()/MarketInfo(Symbol(),MODE_MARGINREQUIRED)
أكبر لوت مسموح بالمنصة كالتالي:

MarketInfo(Symbol(),MODE_MAXLOT)

kira-h
24-10-2018, 09:44 PM
أسعد الله مسائكم بكل خير وبركة
أخي حسن أرفقت مؤشر trend-magic الشهير
وأنا أحاول أستدعائه في اكسبيرت وأريد أن أضع شرط للشراء أو البيع عند تغير لون خط التريند من الأزرق إلى الأحمر أو العكس
وشرط آخر إذا كان السعر فوق التريند أو أسفل منه ولكن لم أستطع
فما الطريقة الصحيحة لذلك
بارك الله فيك

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


double u1=iCustom(Symbol(),0,"trend-magic",0,1),//قيمة الخط الأزرق بالشمعة1
d1=iCustom(Symbol(),0,"trend-magic",1,1),//قيمة الخط الأحمر بالشمعة 1
u2=iCustom(Symbol(),0,"trend-magic",0,2),//قيمة الخط الأزرق بالشمعة2
d2=iCustom(Symbol(),0,"trend-magic",1,2);//قيمة الخط الأحمر بالشمعة 2

if(u1!=EMPTY_VALUE&&u2==EMPTY_VALUE)//buy تغير اللون إلى الأزرق
if(d1!=EMPTY_VALUE&&d2==EMPTY_VALUE&)//sell تغير اللون إلى الأحمر

if(u1!=EMPTY_VALUE&&Close[0]>u1)//buy موقع السعر بالنسبة للأزرق
if(d1!=EMPTY_VALUE&&Close[0]<d1)//sell موقع السعر بالنسبة للأحمر

basel_99
25-10-2018, 09:13 AM
شكرا جزيلا اخي

احمد
25-10-2018, 09:48 AM
مساء الخير
الشروط كالتالي:


double u1=iCustom(Symbol(),0,"trend-magic",0,1),//قيمة الخط الأزرق بالشمعة1
d1=iCustom(Symbol(),0,"trend-magic",1,1),//قيمة الخط الأحمر بالشمعة 1
u2=iCustom(Symbol(),0,"trend-magic",0,2),//قيمة الخط الأزرق بالشمعة2
d2=iCustom(Symbol(),0,"trend-magic",1,2);//قيمة الخط الأحمر بالشمعة 2

if(u1!=EMPTY_VALUE&&u2==EMPTY_VALUE)//buy تغير اللون إلى الأزرق
if(d1!=EMPTY_VALUE&&d2==EMPTY_VALUE&)//sell تغير اللون إلى الأحمر

if(u1!=EMPTY_VALUE&&Close[0]>u1)//buy موقع السعر بالنسبة للأزرق
if(d1!=EMPTY_VALUE&&Close[0]<d1)//sell موقع السعر بالنسبة للأحمر


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

kira-h
25-10-2018, 08:24 PM
جزاك الله خير أخي حسن
بعد محاولتي تطبيق الشروط مع الاكسبيرت اتضح لي أن المؤشر عندما يتحوالخط من الازرق إلى الاحمر
فمن المفترض أن تكون قيمة الخط الازرق فارغة والاحمر يحمل قيمة
ولكن عندما وضعت أمر طباعة كومنت وجدت أن في كل الحالات جميع الخطوط تحمل قيمة عند كل شمعة
لذلك لا تنفذ الاوامر بشكل صحيح حيث تجده ينفذ أمر الشراء بعد التحول للون الازرق بعدة شموع والعكس
وأيضا عند تجربته على الفترات الصغيرة يعطي خطوط في غير مواقعها
أخي حسن هل من الممكن النظر والتأكد من المؤشر وعمل له إصلاح
مع شكري وتقديري لجهودك معنا .
وإياك اخي الكريم
الشروط سليمة ولكن المؤشر يعيد رسم نفسه (لاحظ الصورة أسفله، الصفقات تفتح في اماكنها)
لا يمكنني التعديل عليه لأنه ليس من برمجتي الخاصة، كما ان الكود مكسور به رموز غير مفهومة
9961

kira-h
25-10-2018, 08:26 PM
شكرا جزيلا اخي
العفو، والله الموفق

احمد
25-10-2018, 10:21 PM
تسلم والله يوفقك