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

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



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

m_nasseem
26-10-2018, 06:01 PM
السلام عليكم اخي حسن
ارجو المساعدة
ارغب في اسطر برمجية استطيع بها فتح شارت عملة اخري ثم تشغيل مؤشر علي هذا الشات وليكن اشيمكو ثم حفظ الشارت كا تامبلت
ولك متي جزيل الشكر

kira-h
26-10-2018, 06:45 PM
السلام عليكم اخي حسن
ارجو المساعدة
ارغب في اسطر برمجية استطيع بها فتح شارت عملة اخري ثم تشغيل مؤشر علي هذا الشات وليكن اشيمكو ثم حفظ الشارت كا تامبلت
ولك متي جزيل الشكر
وعليكم السلام
راجع الحل التالي :
https://www.fxprg.com/vb/showthread.php?t=31457&page=20&p=855396&viewfull=1#post855396

m_nasseem
26-10-2018, 08:55 PM
وعليكم السلام
راجع الحل التالي :
https://www.fxprg.com/vb/showthread.php?t=31457&page=20&p=855396&viewfull=1#post855396
شكرا اخي علي اهتمامك
الحل الموجود باللينك يتعلق بالحالة اللي يكون فيها التمبلت موجود وعليه المؤشرات
انا طلبي الاكسبيرت يقوم بفتح شارت عملة غير الشارت اللي مفعل عليه الاكسبير ثم اضافة مؤشرات علي الشارات الجديد عن طريق الاكسبيرت وليكن موفنج افرج وباربيك سار وسي سي اي ثم يقوم الاكسبيرت بحفظ النموذج عن طريق الدالة CharhSaveTamplate
الاكسبيرت خاليا بيقوم بخفظ التامبلت ولكن المشكلة المؤشرات لاتظهر يعني بيحفظ الشارت خالي من المؤشرات اللي انا عايز احفظها في القالب
لو ما في حل لطلبي ازاي اخلي الاكسبيرت عند رفعه لموقع mql5 يحمل معاه ملفات التمبلت علي غرار الملفات التنفيذية للموشرات وملفات الساوند والصور
مع جزيل الشكرا مقدما
محمد

kira-h
27-10-2018, 04:55 PM
شكرا اخي علي اهتمامك
الحل الموجود باللينك يتعلق بالحالة اللي يكون فيها التمبلت موجود وعليه المؤشرات
انا طلبي الاكسبيرت يقوم بفتح شارت عملة غير الشارت اللي مفعل عليه الاكسبير ثم اضافة مؤشرات علي الشارات الجديد عن طريق الاكسبيرت وليكن موفنج افرج وباربيك سار وسي سي اي ثم يقوم الاكسبيرت بحفظ النموذج عن طريق الدالة CharhSaveTamplate
الاكسبيرت خاليا بيقوم بخفظ التامبلت ولكن المشكلة المؤشرات لاتظهر يعني بيحفظ الشارت خالي من المؤشرات اللي انا عايز احفظها في القالب
لو ما في حل لطلبي ازاي اخلي الاكسبيرت عند رفعه لموقع mql5 يحمل معاه ملفات التمبلت علي غرار الملفات التنفيذية للموشرات وملفات الساوند والصور
مع جزيل الشكرا مقدما
محمد
يمكن حفظ التمبلت عن طريق الوظيفة
ChartSaveTemplate()
أما وضع المؤشرات على الشارت اعتقد غير ممكن لأنه لا توجد وظيفة لذلك الا بلغة mql5 عن طريق الوظيفة
ChartIndicatorAdd()
يمكنك مراجعة كل ما يتعلق بالشارت للغة mql4 على اللينك التالي Chart Operations (https://docs.mql4.com/chart_operations)
ثم للغة mql5 على اللينك التالي Chart Operations (https://www.mql5.com/en/docs/chart_operations)
أما ما يخص موقع mql يمكنك مراجعة دعم الموقع، او فتح موضوع هنا بالقسم العام لمناقشة الأمر مع الأعضاء...

Geobeshoy
02-11-2018, 02:16 AM
السلام عليكم
انا بصراحه مليش فى البرمجه نهائى و لكن عندى استفسار صغير
انا معايا اكسبرت و عايز اعرضه للبيع و الايجار على موقع mql5
بماذا تنصحونى علشان فكرة الاكسبرت متتسرقش
يعنى مثلا غلق كود الاكسبرت و هل هناك طريقه علشان الاكسبرت يشتغل على النسخه المباعه فقط
تحياتى

kira-h
02-11-2018, 05:15 PM
السلام عليكم
انا بصراحه مليش فى البرمجه نهائى و لكن عندى استفسار صغير
انا معايا اكسبرت و عايز اعرضه للبيع و الايجار على موقع mql5
بماذا تنصحونى علشان فكرة الاكسبرت متتسرقش
يعنى مثلا غلق كود الاكسبرت و هل هناك طريقه علشان الاكسبرت يشتغل على النسخه المباعه فقط
تحياتى
وعليكم السلام
هذا الموضوع مخصص فقط للأسئلة البرمجية...
افتح موضوع هنا برمجة المـؤشرات و الاكسبـيرتـات و برامـج التـداول فـي الفـوركس (https://www.fxprg.com/vb/forumdisplay.php?f=208) لمناقشته مع الأعضاء ...

elhedoudy
04-11-2018, 03:19 AM
المؤشر المرفق يرسم خطوط افقية على مسافات متساوية فوق و اسفل السعر الحالى و سؤالى هو كالتالى :
فى الدالة
deinit()


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


حاولت حلا لهذة المشكلة استبدال الدالة


(ObjectsDeleteAll(sub_window,object_type
بالدالة
(ObjectsDeleteAll(chart_id,prefix,sub_window,objec t_type
وحيث ان خطوط المؤشر تبدا ب
High او Low او CenterLine


فبفرض اننا اردنا ان نجعل المؤشر يمسح الخطوط الافقية التى تبدا ببادئة
High


(ObjectsDeleteAll(0,'H' ,0,OBJ_HLINE


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




هل يمكنك مشكورا شرح السبب وكيفية استعمال بادئة مكونة من اكثر من حرف مثل
High بدل H لحذف الكائنات حيث ان الدالة المذكورة سابقا لا تقبل اى بادئة تزيد عن حرف واحد


ملحوظة هامة : انا لا اطلب اطلاقا تعديل المؤشر فانا اعلم ضيق وقتك و كثرة طلبات اعضاء المنتدى. فقط شرح سبب عدم نجاح الحل المذكور .( و لو حتى بارشادى الى مؤشر اخر مفتوح الكود يمسح الكائنات على التشارت باستخدام البادئة – او يطبق اى دالة على الكائنات ذات بادئة محددة الموجودة على التشارت). وجزاكم اللة خيرا .

sal_moh85
04-11-2018, 10:33 AM
سلام عليكم اخ حسن عندي استفسار عن طريقه لي اختصار كود

if(a==0&&b==0&&c==0&&d==0)val=0; if(a==0&&b==0&&c==0&&d==1)val=1; if(a==0&&b==0&&c==1&&d==0)val=2; if(a==0&&b==0&&c==1&&d==1)val=3; if(a==0&&b==1&&c==0&&d==0)val=4; if(a==0&&b==1&&c==0&&d==1)val=5; if(a==0&&b==1&&c==1&&d==0)val=6; if(a==0&&b==1&&c==1&&d==1)val=7; if(a==1&&b==0&&c==0&&d==0)val=8; if(a==1&&b==0&&c==0&&d==1)val=9; if(a==1&&b==0&&c==1&&d==0)val=10; if(a==1&&b==0&&c==1&&d==1)val=11; if(a==1&&b==1&&c==0&&d==0)val=12; if(a==1&&b==1&&c==0&&d==1)val=13; if(a==1&&b==1&&c==1&&d==0)val=14; if(a==1&&b==1&&c==1&&d==1)val=15;
وظيفة هاد الكود حصر جميع الاحتمالات لي اربعة متغيرات
مثال بشان توضيح عاوز اخد اشارة موشر استوكايتك على فريم 30 و 15و 5 و1 دقيقه عن طريق هاد الكود في احصر جميع الاحتمالات يلي ممكن تصير
طيب انا عاوز 5 متغيرات الكود لح يكبر اكتير ويصير فيوه 32 احتمال هل يوجد طريقه لي عمل اختصار لهذا الكود عن طريق Bitwise Operations
وشلون طريقة كتبتها وشكرا

kira-h
04-11-2018, 05:39 PM
المؤشر المرفق يرسم خطوط افقية على مسافات متساوية فوق و اسفل السعر الحالى و سؤالى هو كالتالى :
فى الدالة
deinit()


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


حاولت حلا لهذة المشكلة استبدال الدالة


(ObjectsDeleteAll(sub_window,object_type
بالدالة
(ObjectsDeleteAll(chart_id,prefix,sub_window,objec t_type
وحيث ان خطوط المؤشر تبدا ب
High او Low او CenterLine


فبفرض اننا اردنا ان نجعل المؤشر يمسح الخطوط الافقية التى تبدا ببادئة
High


(ObjectsDeleteAll(0,'H' ,0,OBJ_HLINE


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




هل يمكنك مشكورا شرح السبب وكيفية استعمال بادئة مكونة من اكثر من حرف مثل
High بدل H لحذف الكائنات حيث ان الدالة المذكورة سابقا لا تقبل اى بادئة تزيد عن حرف واحد


ملحوظة هامة : انا لا اطلب اطلاقا تعديل المؤشر فانا اعلم ضيق وقتك و كثرة طلبات اعضاء المنتدى. فقط شرح سبب عدم نجاح الحل المذكور .( و لو حتى بارشادى الى مؤشر اخر مفتوح الكود يمسح الكائنات على التشارت باستخدام البادئة – او يطبق اى دالة على الكائنات ذات بادئة محددة الموجودة على التشارت). وجزاكم اللة خيرا .





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

for (int i=1;i<=NumberOfLines;i++)
{
ObjectDelete("High"+i);
}

elhedoudy
05-11-2018, 03:05 AM
جزاكم اللة خيرا وبارك فيكم . الف شكر

kira-h
05-11-2018, 04:36 PM
جزاكم اللة خيرا وبارك فيكم . الف شكر
وإياك أخي الكريم

kira-h
06-11-2018, 05:31 PM
سلام عليكم اخ حسن عندي استفسار عن طريقه لي اختصار كود

if(a==0&&b==0&&c==0&&d==0)val=0; if(a==0&&b==0&&c==0&&d==1)val=1; if(a==0&&b==0&&c==1&&d==0)val=2; if(a==0&&b==0&&c==1&&d==1)val=3; if(a==0&&b==1&&c==0&&d==0)val=4; if(a==0&&b==1&&c==0&&d==1)val=5; if(a==0&&b==1&&c==1&&d==0)val=6; if(a==0&&b==1&&c==1&&d==1)val=7; if(a==1&&b==0&&c==0&&d==0)val=8; if(a==1&&b==0&&c==0&&d==1)val=9; if(a==1&&b==0&&c==1&&d==0)val=10; if(a==1&&b==0&&c==1&&d==1)val=11; if(a==1&&b==1&&c==0&&d==0)val=12; if(a==1&&b==1&&c==0&&d==1)val=13; if(a==1&&b==1&&c==1&&d==0)val=14; if(a==1&&b==1&&c==1&&d==1)val=15;
وظيفة هاد الكود حصر جميع الاحتمالات لي اربعة متغيرات
مثال بشان توضيح عاوز اخد اشارة موشر استوكايتك على فريم 30 و 15و 5 و1 دقيقه عن طريق هاد الكود في احصر جميع الاحتمالات يلي ممكن تصير
طيب انا عاوز 5 متغيرات الكود لح يكبر اكتير ويصير فيوه 32 احتمال هل يوجد طريقه لي عمل اختصار لهذا الكود عن طريق Bitwise Operations
وشلون طريقة كتبتها وشكرا
وعليكم السلام
غير ممكن أخي الكريم، فاللغة mql محدودة ولا يوجد بها صيغة ما لحصر الاحتمالات
والله أعلم

sal_moh85
08-11-2018, 03:38 PM
وعليكم السلام
غير ممكن أخي الكريم، فاللغة mql محدودة ولا يوجد بها صيغة ما لحصر الاحتمالات
والله أعلم
مشكور اخ حسن

kira-h
08-11-2018, 05:53 PM
مشكور اخ حسن
العفو،
بالتوفيق إن شاء الله

alibetto
08-11-2018, 11:15 PM
السلام عليكم اخواني الكرام فضلا سؤال
كيف اضع رقم على صفقات التي تفتح يدويا لاحددها او لاميزها مثل رقم الماجك وشكرا

kira-h
08-11-2018, 11:23 PM
السلام عليكم اخواني الكرام فضلا سؤال
كيف اضع رقم على صفقات التي تفتح يدويا لاحددها او لاميزها مثل رقم الماجك وشكرا
وعليكم السلام
الصفقات اليدوية تكون ذات ماجك نمبر 0 ولا يمكن تعديلها أو تغييرها
لكن يمكنك عمل كومنت خاص بصفقاتك اليدوية للتمييز
مثلا :
10337

صياد الجراح
09-11-2018, 05:36 PM
بسم الله الرحمن الرحيم

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

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

kira-h
09-11-2018, 07:10 PM
بسم الله الرحمن الرحيم

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

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

ستقوم باضافة الشرط التالي عند بداية الدالة start أو OnTick H أو OnCalculate :

if(!IsDemo())return(0);

alibetto
09-11-2018, 07:58 PM
شكرا لك استاذ كيرا

kira-h
10-11-2018, 10:48 AM
شكرا لك استاذ كيرا
العفو اخي الكريم

basel_99
17-11-2018, 09:35 AM
صباح الخير، لو سمحت استاذ حسن احتاج داله تقوم بتعليق امر بعد 100 نقطه من بدايه الامر المفتوح على الشارت ولوت يتغير حسب لوت الصفقه المفتوحه على الشارت و شكرا جزيلا سلف

kira-h
17-11-2018, 11:20 AM
صباح الخير، لو سمحت استاذ حسن احتاج داله تقوم بتعليق امر بعد 100 نقطه من بدايه الامر المفتوح على الشارت ولوت يتغير حسب لوت الصفقه المفتوحه على الشارت و شكرا جزيلا سلف
السلام عليكم
ما هي معادلة اللوت المتغير؟
ارفق الاكسبيرت لاضافة الدوال حتى يسهل عليك معرفتها

basel_99
17-11-2018, 04:53 PM
السلام عليكم
ما هي معادلة اللوت المتغير؟
ارفق الاكسبيرت لاضافة الدوال حتى يسهل عليك معرفتها
اللوت نسبة مئوية
اتفضل اخي

kira-h
17-11-2018, 10:37 PM
اللوت نسبة مئوية
اتفضل اخي
مرفق الاكسبيرت

basel_99
17-11-2018, 11:52 PM
شكرا استاذي ابدعت، لساه بعيد عن طلبي نوعا ما ، لو سمحت احتاج ان يكون لوت المعلق نفس لوت الصفقه الحالية،و في حال ضربت ستوب ينزل لوت المعلق بحسب النسبه، و ان وصل الهدف يزيد اللوت الخاص بالمعلق، ممنون كرمك

sal_moh85
19-11-2018, 04:55 PM
سلام عليكم اخ حسن يرجى الاطلاع عل هذا الكود وتصحيح مشكلة
هذا كود موشر تظهر الاشارة فقط عند تركيبه على الشارت واذا مضى وقت وحصلة اشاره بيع او شراءلا تظهر يجب عمل رفرش لي الموشر حتى تظهر مره اخر
يمكن الغالط في حلقه تكراريه


#property indicator_chart_window#property indicator_buffers 1#property indicator_color1 Lime//----int CountedBars=0;//+------------------------------------------------------------------+//| Custom indicator initialization function |//|------------------------------------------------------------------|int init() { return(0); }//+------------------------------------------------------------------+//| Custor indicator deinitialization function |//+------------------------------------------------------------------+int deinit() { bool busy = true; int cnt = 0,total; string s; while (busy==true) { busy = false; total = ObjectsTotal(); cnt = 0; while (cnt < total) { s = ObjectName(cnt); if (StringSubstr(s,0,3) == "Txt") { ObjectDelete(s); cnt = total; busy = true; } cnt = cnt + 1; } } //---- return(0); }//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+int start() { int i,tCnt; if(Bars<=10) return(0); CountedBars=IndicatorCounted(); if (CountedBars<0) return(-1); if (CountedBars>0) CountedBars--; int pos=Bars-CountedBars-1; int pos2=pos; tCnt = 1; while(pos>=0) { if ((Close[pos+3]<Close[pos+2]) && (Close[pos+2]<Close[pos+1]) && (Close[pos+1]>=Close[pos])) { if ((Volume[pos+3] < Volume[pos+2]) && (Volume[pos+2] < Volume[pos+1]) && (Volume[pos+1] > Volume[pos])) { if (ObjectCreate("Txt" + tCnt,OBJ_TEXT,0,Time[pos+1],High[pos+1]+(15*Point))==true) { ObjectSetText("Txt" + tCnt,"S",16,"Tahoma",Red);tCnt = tCnt + 1; } } } if ((Close[pos+3]>Close[pos+2]) && (Close[pos+2]>Close[pos+1]) && (Close[pos+1]<=Close[pos])) { if ((Volume[pos+3] < Volume[pos+2]) && (Volume[pos+2] < Volume[pos+1]) && (Volume[pos+1] > Volume[pos])) { if (ObjectCreate("Txt" + tCnt,OBJ_TEXT,0,Time[pos+1],Low[pos+1]-(15*Point))==true) { ObjectSetText("Txt" + tCnt,"B",16,"Tahoma",Lime);tCnt = tCnt + 1; } } } if ((Close[pos+3]<Close[pos+2]) && (Close[pos+2]<Close[pos+1]) && (Low[pos+1]>=Close[pos])) { if ((Volume[pos+3] < Volume[pos+2]) && (Volume[pos+2] < Volume[pos+1]) && (Volume[pos+1] > Volume[pos])) { if (ObjectCreate("Txt" + tCnt,OBJ_TEXT,0,Time[pos+1],High[pos+1]+(30*Point))==true) { ObjectSetText("Txt" + tCnt,"R",16,"Tahoma",Red);tCnt = tCnt + 1; } } } if ((Close[pos+3]>Close[pos+2]) && (Close[pos+2]>Close[pos+1]) && (High[pos+1]<=Close[pos])) { if ((Volume[pos+3] < Volume[pos+2]) && (Volume[pos+2] < Volume[pos+1]) && (Volume[pos+1] > Volume[pos])) { if (ObjectCreate("Txt" + tCnt,OBJ_TEXT,0,Time[pos+1],Low[pos+1]-(30*Point))==true) { ObjectSetText("Txt" + tCnt,"R",16,"Tahoma",Lime);tCnt = tCnt + 1; } } } pos--; }//---- return(0); }//+------------------------------------------------------------------+

kira-h
20-11-2018, 07:46 PM
سلام عليكم اخ حسن يرجى الاطلاع عل هذا الكود وتصحيح مشكلة
هذا كود موشر تظهر الاشارة فقط عند تركيبه على الشارت واذا مضى وقت وحصلة اشاره بيع او شراءلا تظهر يجب عمل رفرش لي الموشر حتى تظهر مره اخر
يمكن الغالط في حلقه تكراريه


#property indicator_chart_window#property indicator_buffers 1#property indicator_color1 Lime//----int CountedBars=0;//+------------------------------------------------------------------+//| Custom indicator initialization function |//|------------------------------------------------------------------|int init() { return(0); }//+------------------------------------------------------------------+//| Custor indicator deinitialization function |//+------------------------------------------------------------------+int deinit() { bool busy = true; int cnt = 0,total; string s; while (busy==true) { busy = false; total = ObjectsTotal(); cnt = 0; while (cnt < total) { s = ObjectName(cnt); if (StringSubstr(s,0,3) == "Txt") { ObjectDelete(s); cnt = total; busy = true; } cnt = cnt + 1; } } //---- return(0); }//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+int start() { int i,tCnt; if(Bars<=10) return(0); CountedBars=IndicatorCounted(); if (CountedBars<0) return(-1); if (CountedBars>0) CountedBars--; int pos=Bars-CountedBars-1; int pos2=pos; tCnt = 1; while(pos>=0) { if ((Close[pos+3]<Close[pos+2]) && (Close[pos+2]<Close[pos+1]) && (Close[pos+1]>=Close[pos])) { if ((Volume[pos+3] < Volume[pos+2]) && (Volume[pos+2] < Volume[pos+1]) && (Volume[pos+1] > Volume[pos])) { if (ObjectCreate("Txt" + tCnt,OBJ_TEXT,0,Time[pos+1],High[pos+1]+(15*Point))==true) { ObjectSetText("Txt" + tCnt,"S",16,"Tahoma",Red);tCnt = tCnt + 1; } } } if ((Close[pos+3]>Close[pos+2]) && (Close[pos+2]>Close[pos+1]) && (Close[pos+1]<=Close[pos])) { if ((Volume[pos+3] < Volume[pos+2]) && (Volume[pos+2] < Volume[pos+1]) && (Volume[pos+1] > Volume[pos])) { if (ObjectCreate("Txt" + tCnt,OBJ_TEXT,0,Time[pos+1],Low[pos+1]-(15*Point))==true) { ObjectSetText("Txt" + tCnt,"B",16,"Tahoma",Lime);tCnt = tCnt + 1; } } } if ((Close[pos+3]<Close[pos+2]) && (Close[pos+2]<Close[pos+1]) && (Low[pos+1]>=Close[pos])) { if ((Volume[pos+3] < Volume[pos+2]) && (Volume[pos+2] < Volume[pos+1]) && (Volume[pos+1] > Volume[pos])) { if (ObjectCreate("Txt" + tCnt,OBJ_TEXT,0,Time[pos+1],High[pos+1]+(30*Point))==true) { ObjectSetText("Txt" + tCnt,"R",16,"Tahoma",Red);tCnt = tCnt + 1; } } } if ((Close[pos+3]>Close[pos+2]) && (Close[pos+2]>Close[pos+1]) && (High[pos+1]<=Close[pos])) { if ((Volume[pos+3] < Volume[pos+2]) && (Volume[pos+2] < Volume[pos+1]) && (Volume[pos+1] > Volume[pos])) { if (ObjectCreate("Txt" + tCnt,OBJ_TEXT,0,Time[pos+1],Low[pos+1]-(30*Point))==true) { ObjectSetText("Txt" + tCnt,"R",16,"Tahoma",Lime);tCnt = tCnt + 1; } } } pos--; }//---- return(0); }//+------------------------------------------------------------------+

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

sal_moh85
21-11-2018, 10:52 AM
وعليكم السلام
الكود كله بسطر واحد صعب مراجعته!
ارفق الكود كملف مفتوح
تفضل استاذ حسن هي ملف

kira-h
21-11-2018, 05:59 PM
تفضل استاذ حسن هي ملف
مرفق المؤشر

shivaa
21-11-2018, 09:42 PM
السلام عليكم
1-ممكن داله ترجع بقيم bid لعدد من الازواج بحيث كل قيمه تكون فى متغير


string Default_Symbol[28] = {
"AUDCAD","AUDCHF","AUDJPY","AUDNZD","AUDUSD","CADCHF","CADJPY",
"CHFJPY","EURAUD","EURCAD","EURCHF","EURGBP","EURJPY","EURNZD",
"EURUSD","GBPAUD","GBPCAD","GBPCHF","GBPJPY","GBPNZD","GBPUSD",
"NZDCAD","NZDCHF","NZDJPY","NZDUSD","USDCAD","USDCHF","USDJPY"};

2-عندى 8 قيم اريد ترتيبها تصاعدى كيف عمل ذلك
3-كيف اجمع بين متغيرين من نوع string
اكون شاكر

sal_moh85
22-11-2018, 01:09 PM
مرفق المؤشرمشكور استاذ حسن بس وين كان الغلط عشان اتعلم

shivaa
22-11-2018, 01:21 PM
السلام عليكم
1-ممكن داله ترجع بقيم bid لعدد من الازواج بحيث كل قيمه تكون فى متغير



string Default_Symbol[28] = {
"AUDCAD","AUDCHF","AUDJPY","AUDNZD","AUDUSD","CADCHF","CADJPY",
"CHFJPY","EURAUD","EURCAD","EURCHF","EURGBP","EURJPY","EURNZD",
"EURUSD","GBPAUD","GBPCAD","GBPCHF","GBPJPY","GBPNZD","GBPUSD",
"NZDCAD","NZDCHF","NZDJPY","NZDUSD","USDCAD","USDCHF","USDJPY"};

2-عندى 8 قيم اريد ترتيبها تصاعدى كيف عمل ذلك
3-كيف اجمع بين متغيرين من نوع string
اكون شاكر

kira-h
22-11-2018, 04:29 PM
مشكور استاذ حسن بس وين كان الغلط عشان اتعلم
الخطأ في اسم المتغير عبارة عن اسم + رقم، وهذا الأخير "الرقم" سيتكرر عند الرفريش أو اعادة تشغيل المؤشر، وبالتالي سيجد أن هناك أسهم لها نفس الاسم ولن يتم رسم الجديد منها
لهذا استبدلت الرقم (المكرر) برقم توقيت الشمعة الذي لن يتكرر وبالتالي استمرار رسم الأسهم كل شمعة جديدة يعني كل توقيت جديد أكيد مختلف عن التوقيت السابق...

kira-h
22-11-2018, 04:47 PM
السلام عليكم
1-ممكن داله ترجع بقيم bid لعدد من الازواج بحيث كل قيمه تكون فى متغير



string Default_Symbol[28] = {
"AUDCAD","AUDCHF","AUDJPY","AUDNZD","AUDUSD","CADCHF","CADJPY",
"CHFJPY","EURAUD","EURCAD","EURCHF","EURGBP","EURJPY","EURNZD",
"EURUSD","GBPAUD","GBPCAD","GBPCHF","GBPJPY","GBPNZD","GBPUSD",
"NZDCAD","NZDCHF","NZDJPY","NZDUSD","USDCAD","USDCHF","USDJPY"};

2-عندى 8 قيم اريد ترتيبها تصاعدى كيف عمل ذلك
3-كيف اجمع بين متغيرين من نوع string
اكون شاكر
وعليكم السلام
1- يمكنك عمل دالة لسعر البيد بدلالة اسم الزوج كالتالي:

double BID(string symbol){
return(MarketInfo(symbol,MODE_BID));
}

مثال سعر البيد لليورو دولار

BID("EURUSD")

2- يمكن ذلك باستخدام الوظيفة
ArraySort
https://docs.mql4.com/array/arraysort

3- بالجمع "+"
مثال:
"EUR"+"USD" = "EURUSD"

Tarek987
23-11-2018, 11:12 AM
السلام عليكم حسن و على الجميع
من فضلك حسن ممكن تساعدني بفهم طريقة تدفق الكود داخل البرنامج ل الكسبيرت,
من المعروف ان الكود بيمشي من فوق الى تحت و من اليسار الى اليمين على كل تيك جديد,
و داخل برنامج ال Meta editor
يوجد خاصية ال Debugging
و انا على حسب ما فهمت انه هذه الخاصية ممكن تفرجيك الكود كيف بيمشي خلال الاسطر بشكل دقيق
و بالتالي ممكن هذه الخاصية تساعدني على فهم الاخطاء و بأي سطر بالضبط الخطئ حدث ,,
أنا حاولت اشغل خاصية ال Debugging
عل الاكسبيرت يلي عم احاول اكتبه بس للاسف عم افشل و حاولة ابحث عن شروح و ما توفقة بالبحث.

ممكن تشرح بالتفصيل اذا في مجال ؟
للعلم أنا عم اشتغل على MT4

شكرا حسن و بارك الله بمجهودك الرائع.

sal_moh85
23-11-2018, 02:39 PM
الخطأ في اسم المتغير عبارة عن اسم + رقم، وهذا الأخير "الرقم" سيتكرر عند الرفريش أو اعادة تشغيل المؤشر، وبالتالي سيجد أن هناك أسهم لها نفس الاسم ولن يتم رسم الجديد منها
لهذا استبدلت الرقم (المكرر) برقم توقيت الشمعة الذي لن يتكرر وبالتالي استمرار رسم الأسهم كل شمعة جديدة يعني كل توقيت جديد أكيد مختلف عن التوقيت السابق...
مشكور استاذ حسن

kira-h
24-11-2018, 04:56 AM
مشكور استاذ حسن
العفو اخي الكريم

shivaa
24-11-2018, 10:54 AM
السلام عليكم
ممكن المساعده
الحمد تم عمل ملف اكسيل لقوه العمله
حولت اضمن اكسبيرت الخاص بى على المعادلات ملف اكسيل والحمد لله تم
المشكله عندى هى انا عاوز اضيف على الشرت بيان لقوه العمله يكون متحرك الاسم فقط مع المرتبه الخاص بيه
يكون الترتيب كا مثال
1 2 3 4 5 6 7 8
eur gbp aud nzd usd cad chf jpy
8 7 5 5.2 4.5 3.4 2.2 1.1
الصف ثابت من 1 الى 8
اما باقى متحرك على حسب القيمه
المطلوب طريقه ربط بين القيم المتحركه
بحيث اذا تغير القيمه تحرك اسم العمله الى مرتبه تقيم اخرى
اسف طلبى كبير شويه انا تعبت من المحاولات ولم انجح

antr
27-11-2018, 05:05 PM
السلام عليكم ورحمة الله وبركاته

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

shivaa
27-11-2018, 06:55 PM
السلام عليكم
ممكن المساعده
الحمد تم عمل ملف اكسيل لقوه العمله
حولت اضمن اكسبيرت الخاص بى على المعادلات ملف اكسيل والحمد لله تم
المشكله عندى هى انا عاوز اضيف على الشرت بيان لقوه العمله يكون متحرك الاسم فقط مع المرتبه الخاص بيه
يكون الترتيب كا مثال
1 2 3 4 5 6 7 8
eur gbp aud nzd usd cad chf jpy
8 7 5 5.2 4.5 3.4 2.2 1.1
الصف ثابت من 1 الى 8
اما باقى متحرك على حسب القيمه
المطلوب طريقه ربط بين القيم المتحركه
بحيث اذا تغير القيمه تحرك اسم العمله الى مرتبه تقيم اخرى
اسف طلبى كبير شويه انا تعبت من المحاولات ولم انجح

up

kira-h
27-11-2018, 08:39 PM
السلام عليكم
ممكن المساعده
الحمد تم عمل ملف اكسيل لقوه العمله
حولت اضمن اكسبيرت الخاص بى على المعادلات ملف اكسيل والحمد لله تم
المشكله عندى هى انا عاوز اضيف على الشرت بيان لقوه العمله يكون متحرك الاسم فقط مع المرتبه الخاص بيه
يكون الترتيب كا مثال
1 2 3 4 5 6 7 8
eur gbp aud nzd usd cad chf jpy
8 7 5 5.2 4.5 3.4 2.2 1.1
الصف ثابت من 1 الى 8
اما باقى متحرك على حسب القيمه
المطلوب طريقه ربط بين القيم المتحركه
بحيث اذا تغير القيمه تحرك اسم العمله الى مرتبه تقيم اخرى
اسف طلبى كبير شويه انا تعبت من المحاولات ولم انجح
وعليكم السلام
سبق وتم الرد على سؤالك بالمشاركة #1784 (https://www.fxprg.com/vb/showthread.php?t=31457&p=890174&viewfull=1#post890174) فيه لينك به مثال تطبيقي

kira-h
27-11-2018, 08:41 PM
السلام عليكم ورحمة الله وبركاته

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

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

aut
28-11-2018, 05:44 PM
لو الاكسبيرت يفتح شراء وبيع كما فى الشروط بالظبط ويأتي شمعه كبيره بها حركه قويه ويفتح بيع وشراء متكرر من نفس النقطه ويسبب الخساره

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

kira-h
28-11-2018, 07:43 PM
لو الاكسبيرت يفتح شراء وبيع كما فى الشروط بالظبط ويأتي شمعه كبيره بها حركه قويه ويفتح بيع وشراء متكرر من نفس النقطه ويسبب الخساره

كيف اقول او اريد كود يتم اضافته يقول للاكسبيرت لا يقوم بفتح بيع او شراء الا فى حالة تحقق الشروط بس
السلام عليكم
يمكنك إضافة شرط فوليوم الشمعة الحالية لشروط البيع والشراء
مثلا
if(Volume[0]<=20)
معناه أن يفتح الصفقة بالشمعة الحالية الفوليوم تبعها لا يتجاوز 20 تكة

aut
29-11-2018, 02:40 AM
كيف طريقة الاضافه ؟ مع عمل متغير خرجى

وشرح عن معنى لا يتجاوز 20 تكه

kira-h
29-11-2018, 08:10 PM
كيف طريقة الاضافه ؟ مع عمل متغير خرجى

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

aut
29-11-2018, 09:38 PM
اشكرك

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

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

kira-h
30-11-2018, 02:47 AM
اشكرك

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

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

aut
30-11-2018, 03:07 AM
اخى انا انتهيت من اضافة
if(Volume[0]<=20)


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

kira-h
30-11-2018, 03:29 AM
اخى انا انتهيت من اضافة
if(Volume[0]<=20)


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

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

aut
30-11-2018, 04:56 AM
اشكرك اخى
ينقص الان شرط عند اخد الربح للعقد الاول والعقد المعلق لم يتم تفعيله يتم حذفه

sabil
30-11-2018, 01:09 PM
اريد استدعاء مؤشر williams'percent rang

kira-h
30-11-2018, 07:18 PM
اريد استدعاء مؤشر williams'percent rang

double wp=iWPR(Symbol(),0,period,1);

aut
30-11-2018, 09:36 PM
اشكرك اخى
ينقص الان شرط عند اخد الربح للعقد الاول والعقد المعلق لم يتم تفعيله يتم حذفه

اخى ربما لم ترى تعليقى

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

kira-h
01-12-2018, 04:33 PM
اخى ربما لم ترى تعليقى

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


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


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


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


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


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


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


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


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


if(LastType()==OP_BUY&&LastProfit(OP_BUY)>0&&LastTime(OP_BUY)>=Time[0])CloseOrders(OP_SELLLIMIT);


if(LastType()==OP_SELL&&LastProfit(OP_SELL)>0&&LastTime(OP_SELL)>=Time[0])CloseOrders(OP_BUYLIMIT);

aut
01-12-2018, 06:09 PM
تم عمل ذلك ولم يقوم بمسح العقود المعلقه عند ضرب الهدف

هل الشروط تكون فى الدالة الرئيسية او فى دالة الشراء والبيع لان تم تجربة الاثنين ولم يعمل واريد ان اتأكد اين اضع الشروط

aut
01-12-2018, 06:23 PM
حلت المشكله بتعديل الشروط



if(LastType()==OP_BUY&&LastProfit(OP_BUY)>0&&LastTime(OP_BUY)>=Time[0])CloseOrders(OP_BUYLIMIT);


if(LastType()==OP_SELL&&LastProfit(OP_SELL)>0&&LastTime(OP_SELL)>=Time[0])CloseOrders(OP_SELLLIMIT);

تبديل مكان الباي لميت والسيل لميت
OP_BUYLIMIT

OP_SELLLIMIT

اشكرك اخى

kira-h
01-12-2018, 08:04 PM
حلت المشكله بتعديل الشروط



if(LastType()==OP_BUY&&LastProfit(OP_BUY)>0&&LastTime(OP_BUY)>=Time[0])CloseOrders(OP_BUYLIMIT);


if(LastType()==OP_SELL&&LastProfit(OP_SELL)>0&&LastTime(OP_SELL)>=Time[0])CloseOrders(OP_SELLLIMIT);

تبديل مكان الباي لميت والسيل لميت
OP_BUYLIMIT

OP_SELLLIMIT

اشكرك اخى

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

aut
02-12-2018, 05:37 AM
اخى سمحنى سئلتك كتير

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



if(LastType()==OP_SELL&&LastProfit(OP_SELL)>0&&LastTime(OP_SELL)>=Time[0])CloseOrders(OP_SELLLIMIT);

if(LastType()==OP_BUY&&LastProfit(OP_BUY)>0&&LastTime(OP_BUY)>=Time[0])CloseOrders(OP_BUYLIMIT);




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

kira-h
02-12-2018, 12:42 PM
اخى سمحنى سئلتك كتير

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



if(LastType()==OP_SELL&&LastProfit(OP_SELL)>0&&LastTime(OP_SELL)>=Time[0])CloseOrders(OP_SELLLIMIT);

if(LastType()==OP_BUY&&LastProfit(OP_BUY)>0&&LastTime(OP_BUY)>=Time[0])CloseOrders(OP_BUYLIMIT);




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

ahmed ezzat
02-12-2018, 05:25 PM
السلام عليكم استاذنا
اول مشاركه ليا في تعليم البرمجه
وراجعت الموضوع من اول صفحة للاخر
وكنت ابحت من بين الاكسبرتات علي كود التعزيز وليس التبريد ولم أجده
فاكون شاكراً لو كتبه

aut
02-12-2018, 05:55 PM
الكود اريده ان يعمل هكذا



if(LastTypeContract()==OP_SELL&&Profit(OP_SELL)>0&&LastTime(OP_SELL)>=Time[0])CloseOrders(OP_SELLLIMIT);

if(LastTypeContract()==OP_BUY&&Profit(OP_BUY)>0&&LastTime(OP_BUY)>=Time[0])CloseOrders(OP_BUYLIMIT);


دالة LastTypeContract اللى توصلت لها على النت لا تعمل بها اخطاء

اريد دالة LastTypeContract
ودالة Profit لمعرفة كل عقد يأخذ الهدف

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

kira-h
03-12-2018, 01:29 AM
السلام عليكم استاذنا
اول مشاركه ليا في تعليم البرمجه
وراجعت الموضوع من اول صفحة للاخر
وكنت ابحت من بين الاكسبرتات علي كود التعزيز وليس التبريد ولم أجده
فاكون شاكراً لو كتبه
وعليكم السلام
ستعدل فقط الكود نفسه بسطر المسافة
ارفق كود التبريد لتعديله

kira-h
03-12-2018, 01:30 AM
الكود اريده ان يعمل هكذا



if(LastTypeContract()==OP_SELL&&Profit(OP_SELL)>0&&LastTime(OP_SELL)>=Time[0])CloseOrders(OP_SELLLIMIT);

if(LastTypeContract()==OP_BUY&&Profit(OP_BUY)>0&&LastTime(OP_BUY)>=Time[0])CloseOrders(OP_BUYLIMIT);


دالة LastTypeContract اللى توصلت لها على النت لا تعمل بها اخطاء

اريد دالة LastTypeContract
ودالة Profit لمعرفة كل عقد يأخذ الهدف

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

sabil
03-12-2018, 03:52 PM
double wp=iwpr(symbol(),0,period,1);

شكرا
طيب ومؤشر ال rvi
اكتب ايه في خانة المود؟
ويفضل تكتب الاستدعاء كاملا

sabil
03-12-2018, 04:32 PM
وبالنسبة لمؤشر ال adx
عبارة عن ثلاث خطوط
+DI
-DI
تم استدعائهم
ADX
اما هذا الخط كيف يتم استدعاؤه ؟
يعني لو عايز اكتب adx اكبر من مستوى 60 مثلاً

kira-h
03-12-2018, 05:28 PM
شكرا
طيب ومؤشر ال rvi
اكتب ايه في خانة المود؟
ويفضل تكتب الاستدعاء كاملا

double green=iRVI(Symbol(),0,period,MODE_MAIN,1),
red =iRVI(Symbol(),0,period,MODE_SIGNAL,1);

sabil
03-12-2018, 11:42 PM
double green=iRVI(Symbol(),0,period,MODE_MAIN,1),
red =iRVI(Symbol(),0,period,MODE_SIGNAL,1);

شكرا يا غالي
متنساش اجابة السؤال الل فوق

kira-h
04-12-2018, 02:09 AM
وبالنسبة لمؤشر ال adx
عبارة عن ثلاث خطوط
+di
-di
تم استدعائهم
adx
اما هذا الخط كيف يتم استدعاؤه ؟
يعني لو عايز اكتب adx اكبر من مستوى 60 مثلاً

double adx=iADX(Symbol(),0,period,0,MODE_MAIN,1);

sabil
04-12-2018, 07:40 PM
double adx=iADX(Symbol(),0,period,0,MODE_MAIN,1);

شكرا ياغالي
بقولك
هو حضرتك تعرف في برمجة mq5
وايه الطريقة الاسهل لتحويل mq4 to mq5

kira-h
04-12-2018, 10:16 PM
شكرا ياغالي
بقولك
هو حضرتك تعرف في برمجة mq5
وايه الطريقة الاسهل لتحويل mq4 to mq5
معرفتي بالـ mql5 متوسطة لعدم الاستخدام والاستمرارية...
ولا يوجد طريقة للتحويل بل يجب كتابة الكود من جديد بلغة mql5

sabil
09-12-2018, 07:24 PM
عايز استدعاء مؤشر Alligator
للخطوط الثلاث

kira-h
09-12-2018, 11:36 PM
عايز استدعاء مؤشر Alligator
للخطوط الثلاث
لا يمكن استدعاء كل خط على حدى، لكن تلك الخطوط ليست سوى 3 موفينجات ذات الخاصيتين MODE_SMMA و PRICE_MEDIAN
لهذا استخدم المؤشر المرفق يعمل تماما مثل المؤشر الأساسي لكن مع امكانية استدعاء كل خط من خلال الدالة التالية :


double aligator(int index,int shift)
{
return(iCustom(Symbol(),0,"Alligator",InpJawsPeriod,InpJawsShift,InpTeethPeriod,InpTeet hShift,InpLipsPeriod,InpLipsShift,index,shift));
}


بحيث index رقم الخط حسب ترتيبه بقائمة الألوان
و shift رقم الشمعة

sabil
10-12-2018, 06:01 PM
لا يمكن استدعاء كل خط على حدى، لكن تلك الخطوط ليست سوى 3 موفينجات ذات الخاصيتين MODE_SMMA و PRICE_MEDIAN
لهذا استخدم المؤشر المرفق يعمل تماما مثل المؤشر الأساسي لكن مع امكانية استدعاء كل خط من خلال الدالة التالية :


double aligator(int index,int shift)
{
return(iCustom(Symbol(),0,"Alligator",InpJawsPeriod,InpJawsShift,InpTeethPeriod,InpTeet hShift,InpLipsPeriod,InpLipsShift,index,shift));
}


بحيث index رقم الخط حسب ترتيبه بقائمة الألوان
و shift رقم الشمعة

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

kira-h
10-12-2018, 07:14 PM
شكراً اخي
جاري التجربة
بالتوفيق إن شاء الله

Tarek987
11-12-2018, 04:09 PM
مرحبا جميعا،
انا عم احاول اعمل rsi اكسبيرت
و الفكرة كلها بتعتمد على الشمعة رقم صفر في و الشراء و البيع،،،
مثلا بس بس يتقاطع ال rsi لشمعة صفر مع خط السبعين من فوق لتحت بدي الاكسبيرت يدخل بيع فورا،،،
انا لم استطع ايجاد طريقة منطقية لحتى حقق المطلوب،،
مثلا
كيف بدي افهم الاكسبيرت انه قيمة ال rsi حاليا بالشمعة صفر هي واحد و سبعين و بس تقطع خط السبعين من فوق لتحت، ادخل بيع مباشرة و مرة واحدة فقط.
الرجاء المساعدة و شكرا

kira-h
11-12-2018, 09:25 PM
مرحبا جميعا،
انا عم احاول اعمل rsi اكسبيرت
و الفكرة كلها بتعتمد على الشمعة رقم صفر في و الشراء و البيع،،،
مثلا بس بس يتقاطع ال rsi لشمعة صفر مع خط السبعين من فوق لتحت بدي الاكسبيرت يدخل بيع فورا،،،
انا لم استطع ايجاد طريقة منطقية لحتى حقق المطلوب،،
مثلا
كيف بدي افهم الاكسبيرت انه قيمة ال rsi حاليا بالشمعة صفر هي واحد و سبعين و بس تقطع خط السبعين من فوق لتحت، ادخل بيع مباشرة و مرة واحدة فقط.
الرجاء المساعدة و شكرا
السلام عليكم
الشروط كالتالي:


double r0=iRSI(Symbol(),0,14,0,0),//قيمة المؤشر عند الشمعة0
r1=iRSI(Symbol(),0,14,0,1);//قيمة المؤشر عند الشمعة1

if(r1>70&&r0<=70)//OpenSell
if(r1<30&&r0>=30)//OpenBuy

Tarek987
12-12-2018, 11:59 AM
السلام عليكم
الشروط كالتالي:


double r0=iRSI(Symbol(),0,14,0,0),//قيمة المؤشر عند الشمعة0
r1=iRSI(Symbol(),0,14,0,1);//قيمة المؤشر عند الشمعة1

if(r1>70&&r0<=70)//OpenSell
if(r1<30&&r0>=30)//OpenBuy


شكرا حسن

kira-h
12-12-2018, 03:50 PM
شكرا حسن
العفو أخي

hre007
14-12-2018, 08:55 PM
السلام عليكم اخي حسن
لو سمحت في مؤشر بحاول اعمل اكسبيرت له .. عند ظهور الشمعة يفتح العقد وعند ظهور النقطة يقفل
لكن مش عارف اوصل لأنه ينفذ الامر علي السهم .. ولما عملت اكسبيرت يفتح على التقاطعات فشل لأن فيه تقاطعات وهمية لا يظهر عليها السهم من الاساس
مش عارف اعرف السهم اذاي ؟؟ انا كتبت الصيغة دي بس بدون طائل

double Buy_Single =iCustom(Symbol(),0,"stochastic-signals-mtf",5,1);
double Sell_Single =iCustom(Symbol(),0,"stochastic-signals-mtf",4,1);
if( Buy_Single) Buy = "OK" ; else Buy = "No" ;
if( Sell_Single) Sell = "OK" ; else Sell = "No" ;
if(dnx!=Time[0] && OrderTotalByType(OP_SELL) == 0&& Sell == "OK" ){dnx=Time[0]; Sell_Market();}
if( dnx!=Time[0] && OrderTotalByType(OP_BUY) == 0&& Buy == "OK" ){dnx=Time[0]; Buy_Market(); }
ارجو افادتي اخي حسن ولك الشكر

kira-h
15-12-2018, 06:22 PM
السلام عليكم اخي حسن
لو سمحت في مؤشر بحاول اعمل اكسبيرت له .. عند ظهور الشمعة يفتح العقد وعند ظهور النقطة يقفل
لكن مش عارف اوصل لأنه ينفذ الامر علي السهم .. ولما عملت اكسبيرت يفتح على التقاطعات فشل لأن فيه تقاطعات وهمية لا يظهر عليها السهم من الاساس
مش عارف اعرف السهم اذاي ؟؟ انا كتبت الصيغة دي بس بدون طائل

double Buy_Single =iCustom(Symbol(),0,"stochastic-signals-mtf",5,1);
double Sell_Single =iCustom(Symbol(),0,"stochastic-signals-mtf",4,1);
if( Buy_Single) Buy = "OK" ; else Buy = "No" ;
if( Sell_Single) Sell = "OK" ; else Sell = "No" ;
if(dnx!=Time[0] && OrderTotalByType(OP_SELL) == 0&& Sell == "OK" ){dnx=Time[0]; Sell_Market();}
if( dnx!=Time[0] && OrderTotalByType(OP_BUY) == 0&& Buy == "OK" ){dnx=Time[0]; Buy_Market(); }
ارجو افادتي اخي حسن ولك الشكر

وعليكم السلام
إشارات الأسهم تظهر تظهر بعد إغلاق 3 شموع وقيمتها الافتراضية EMPTY_VALUE (يمكنك معرفتها من خلال الكومنت Comment)
وبالتالي الشروط كالتالي :

double Buy=iCustom(Symbol(),0,"stochastic-signals-mtf",5,3),
Sell=iCustom(Symbol(),0,"stochastic-signals-mtf",4,3);


if(dnx!=Time[0] && OrderTotalByType(OP_SELL)==0 && Sell!=EMPTY_VALUE){dnx=Time[0];Sell_Market();}
if(dnx!=Time[0] && OrderTotalByType(OP_BUY)==0 && Buy!=EMPTY_VALUE) {dnx=Time[0]; Buy_Market();}

hre007
16-12-2018, 08:47 PM
جزاك الله كل خير اخي حسن .. وجعله الله في ميزان حسناتك

kira-h
17-12-2018, 04:59 PM
جزاك الله كل خير اخي حسن .. وجعله الله في ميزان حسناتك
وإياك أخي الكريم

sal_moh85
20-12-2018, 05:32 PM
سلام عليكم اخ حسن هل هذه داله OnTester() تفيد في تحسني وتسريع اوبتمازيشن واذا بتفيد كيف يمكن استفاده منها وشكرا

kira-h
20-12-2018, 07:25 PM
سلام عليكم اخ حسن هل هذه داله OnTester() تفيد في تحسني وتسريع اوبتمازيشن واذا بتفيد كيف يمكن استفاده منها وشكرا
وعليكم السلام
نعم عبارة عن دالة رئيسية مثل OnTick يفيد في تحسين وتسريع الأوبتيميزاين

sal_moh85
20-12-2018, 11:41 PM
وعليكم السلام
نعم عبارة عن دالة رئيسية مثل OnTick يفيد في تحسين وتسريع الأوبتيميزاين

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

kira-h
21-12-2018, 03:23 AM
مشكور اخ حسن بس شلون طريقة تشغيلها يعني شلون بكون كود تبعها
ضع فقط كل الشروط بداخلها كما تفعل بدالة OnTick

sal_moh85
21-12-2018, 06:45 PM
ضع فقط كل الشروط بداخلها كما تفعل بدالة OnTick
مشكور اخ حسن وضعت متل ما قلت لي كامل الشروط بدخلها بس ما زبطت بس بعد اذنك مثال بسيط لحتى اقدر اعرف شلون طريقة عملها

kira-h
22-12-2018, 12:26 AM
مشكور اخ حسن وضعت متل ما قلت لي كامل الشروط بدخلها بس ما زبطت بس بعد اذنك مثال بسيط لحتى اقدر اعرف شلون طريقة عملها
مثال مرفق
يمكنك مراجعة الدوال الرئيسية للغة MQL4 على الرابط التالي https://docs.mql4.com/basis/function/events

sal_moh85
23-12-2018, 12:17 PM
مثال مرفق
يمكنك مراجعة الدوال الرئيسية للغة MQL4 على الرابط التالي https://docs.mql4.com/basis/function/events
مشكور جدا اخ حسن

kira-h
23-12-2018, 05:14 PM
مشكور جدا اخ حسن
بالتوفيق إن شاء الله

Waddah
25-12-2018, 12:52 PM
السلام عليكم
عندي مجموعة صفقات بيع ومجموعة صفقات شراء ....كيف أحدد سعر التعادل BreakEven لكل مجموعة -
يعني أريد المساعدة في دالة تعطي سعر الـ BreakEven لصفقات الشراء و سعر الـ BreakEven لصفقات البيع مع جزيل الشكر

kira-h
25-12-2018, 03:33 PM
السلام عليكم
عندي مجموعة صفقات بيع ومجموعة صفقات شراء ....كيف أحدد سعر التعادل BreakEven لكل مجموعة -
يعني أريد المساعدة في دالة تعطي سعر الـ BreakEven لصفقات الشراء و سعر الـ BreakEven لصفقات البيع مع جزيل الشكر

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


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


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


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

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


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


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


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


void OnTick()
{
if(MainProfit>0)
{
if(Orderscnt(OP_BUY)>1)AvProfit(OP_BUY);
if(Orderscnt(OP_SELL)>1)AvProfit(OP_SELL);
}
}


بحيث

input double MainProfit=0;
MainProfit متغير خارجي للربح بالنقاط بعد نقطة التعادل

Tarek987
26-12-2018, 03:32 PM
السلام عليكم

انا عم احاول اعمل اكسبيرت يعمل على شموع ال Heiken Ashi
مبدئ الاكسبيرت كالتالي:
شراء:
عندما تكون الشمعة رقم صفر بيضاء && الشمعة رقم واحد حمراء
بيع:
عندما تكون الشمعة رقم صفر حمراء && الشمعة رقم واحد بيضاء.

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

الرجاء المساعدة و شكرا.

kira-h
26-12-2018, 07:07 PM
السلام عليكم

انا عم احاول اعمل اكسبيرت يعمل على شموع ال Heiken Ashi
مبدئ الاكسبيرت كالتالي:
شراء:
عندما تكون الشمعة رقم صفر بيضاء && الشمعة رقم واحد حمراء
بيع:
عندما تكون الشمعة رقم صفر حمراء && الشمعة رقم واحد بيضاء.

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

الرجاء المساعدة و شكرا.
وعليكم السلام
الشروط كالتالي :


double h01=iCustom(Symbol(),0,"Heiken Ashi",3,1),
h11=iCustom(Symbol(),0,"Heiken Ashi",2,1),
h02=iCustom(Symbol(),0,"Heiken Ashi",3,2),
h12=iCustom(Symbol(),0,"Heiken Ashi",2,2);

if(h01>h11&&h02<=h12)//Buy
if(h01<h11&&h02>=h12)//Sell

Tarek987
29-12-2018, 03:16 PM
وعليكم السلام
الشروط كالتالي :


double h01=iCustom(Symbol(),0,"Heiken Ashi",3,1),
h11=iCustom(Symbol(),0,"Heiken Ashi",2,1),
h02=iCustom(Symbol(),0,"Heiken Ashi",3,2),
h12=iCustom(Symbol(),0,"Heiken Ashi",2,2);

if(h01>h11&&h02<=h12)//Buy
if(h01<h11&&h02>=h12)//Sell


شكرا حسن و الله يعطيك العافية

kira-h
29-12-2018, 05:34 PM
شكرا حسن و الله يعطيك العافية
بالتوفيق إن شاء الله

Tarek987
01-01-2019, 06:37 PM
السلام عليكم.

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

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

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

شكرا.

rambo
02-01-2019, 08:57 PM
السلام عليكم أخي حسن
مساء الخير
أريد استدعاء مؤشر معين وحاولت عمل ذلك عن طريق الدالة iCustom ولكن لم يضبط الأمر وظهر لي الخطأ التالي في خانة Expert
(connot set millisecond timer (1000

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

double buy=ObjectGet("UP",OBJPROP_TIME1);

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

Tarek987
03-01-2019, 10:23 AM
السلام عليكم.

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

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

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

شكرا.


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

و شكرا جدا.

kira-h
03-01-2019, 04:48 PM
السلام عليكم اخ حسن الرجاء ثم الرجاء المساعدة في طلبي للضرورة.
ربما لم اكن واضح في طلبي؟
كل ما اريده طريقة كتابة الدالة و طريقة اعادة الترقيم بعد الربح.

و شكرا جدا.

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


datetime LastTime()
{
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 pt=OrderProfit();
datetime tm=OrderCloseTime();

if(sy==Symbol()&&mn==MagicNo&&ty<=OP_SELL)
{
if(pt>=0)return(tm);
}
}
return(0);
}


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


int Count()
{
int cnt=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()<=OP_SELL)
{
if(OrderCloseTime()>LastTime())cnt++;
}
}
}
return(cnt);
}


وهذا العدد هو العد الذي تحتاجه

kira-h
03-01-2019, 05:17 PM
السلام عليكم أخي حسن
مساء الخير
أريد استدعاء مؤشر معين وحاولت عمل ذلك عن طريق الدالة iCustom ولكن لم يضبط الأمر وظهر لي الخطأ التالي في خانة Expert
(connot set millisecond timer (1000

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

double buy=ObjectGet("UP",OBJPROP_TIME1);

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

rambo
04-01-2019, 06:22 AM
وعليكم السلام
لا اعلم كيف اساعدك دون وجود المؤشر
صباح الخير
بشكل عام في إستدعاء المؤشرات هل أستطيع إضافة رقم إندكس معين في الكود أعلاه
إذا كان ممكن أتوقع الحل يكمن هنا
شكرا لك أخي حسن

kira-h
04-01-2019, 07:55 PM
صباح الخير
بشكل عام في إستدعاء المؤشرات هل أستطيع إضافة رقم إندكس معين في الكود أعلاه
إذا كان ممكن أتوقع الحل يكمن هنا
شكرا لك أخي حسن
مساء النور
راجع المشاركة التالي:
https://www.fxprg.com/vb/showthread.php?t=31457&page=74&p=874388&viewfull=1#post874388

kira-h
04-01-2019, 08:03 PM
السلام عليكم يابشمهندس حسن لدي استفسار عن كود برمجي وهو اني اريد عمل اكسبيرت يعمل علي الفرق بين نقطة الارتكاز pivot point وسعر الAsk فاذا كان سعر الAsk اقل من الpivot بحوالي 15 الي 20 نقطة ندخل شراء والعكس في حالة البيع انا جربت الكود الاتي ولكنه اخطء في دخول الصفقات: if (Pivot.p-Ask=15*point) {Ticket=OrderSend(Symbol(),Bid,Slippage,Stoploss,B id+Takeprofit*point,"buy",111,green)}


if ((Bid-pivot=15*point)){
Ticket= OrderSend (Symbol(),OP_SELL,Ask,Slippage,Stoploss,Ask-Takeprofit*point,"sell",111,red)
} ارجو تصحيح الكود تحياتي

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

if(Ask<=Pivot-15*point&&OrdersTotal()==0){Ticket=OrderSend(Symbol(),OP_BUY ,Lots,Bid,Slippage,Ask-Stoploss*point,Ask+Takeprofit*point,"buy",111,Green);}

نفس الشيء ستقوم به بشرط البيع

Tarek987
04-01-2019, 10:19 PM
وعليكم السلام
سنقوم بعمل دالة تبحث بالهيستوي عن توقيت آخر صفقة رابحة كالتالي:


datetime LastTime()
{
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 pt=OrderProfit();
datetime tm=OrderCloseTime();

if(sy==Symbol()&&mn==MagicNo&&ty<=OP_SELL)
{
if(pt>=0)return(tm);
}
}
return(0);
}


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


int Count()
{
int cnt=0;
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()<=OP_SELL)
{
if(OrderCloseTime()>LastTime())cnt++;
}
}
}
return(cnt);
}


وهذا العدد هو العد الذي تحتاجه

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

rambo
05-01-2019, 06:32 AM
مساء النور
راجع المشاركة التالي:
https://www.fxprg.com/vb/showthread.php?t=31457&page=74&p=874388&viewfull=1#post874388

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


double buy=ObjectGet("UP",OBJPROP_TIME1);

if(buy>=Time[1])//شرط الشراء

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

Waddah
05-01-2019, 03:57 PM
السلام عليكم
أستاذ حسن هل يؤثر ترتيب إغلاق الصفقات على نسبة الدروداون للإكسبرت ؟ ....إن كان نعم ...ماهي دالة الإغلاق التي تغلق جميع الصفقات لكن تغلق الرابحة أولاً ثم تغلق الخاسرة
مع جزيل الشكر

kira-h
05-01-2019, 06:23 PM
السلام عليكم أخي حسن
نعم راجعت هذا الكود قبل أن أستفسر، نوع الإستدعاء الأول مفهوم إن شاء الله، والمشكلة هي في نوع الإستدعاء الثاني وفق الكود التالي


double buy=objectget("up",objprop_time1);

if(buy>=time[1])//شرط الشراء

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

وعليكم السلام
عند كتابتك للرمز _ بعد objprop (كما بالصورة) ستلاحظ تلقائيا عدد كبير من الاندكسات استخدم ما يناسبك
11392

kira-h
05-01-2019, 06:42 PM
السلام عليكم
أستاذ حسن هل يؤثر ترتيب إغلاق الصفقات على نسبة الدروداون للإكسبرت ؟ ....إن كان نعم ...ماهي دالة الإغلاق التي تغلق جميع الصفقات لكن تغلق الرابحة أولاً ثم تغلق الخاسرة
مع جزيل الشكر

نحتاج بالتفصيل إلى شروط دقيقة ليتم الاغلاق كما تريد كالتالي :
- دالة عدد الصفقات الرابحة كالتالي:


int OrdersProfit()
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo&&OrderType()<=OP_SELL)
{
if(OrderProfit()>=0)cnt++;
}
}
}
return(cnt);
}


- دالة عدد الصفقات كالتالي:


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


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


void CloseOrders()
{
bool select,close,del;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tt=OrdersTotal(),
tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots(),
pt=OrderProfit();
if(tt>0&&sy==Symbol()&&mn==MagicNo)
{
if(pt>=0)
{
if(ot==OP_BUY){close=OrderClose(tk,lo,NormalizeDou ble(Bid,Digits),5*Q);}
if(ot==OP_SELL){close=OrderClose(tk,lo,NormalizeDo uble(Ask,Digits),5*Q);}
}
if(pt<0&&OrdersProfit()==0)
{
if(ot==OP_BUY){close=OrderClose(tk,lo,NormalizeDou ble(Bid,Digits),5*Q);}
if(ot==OP_SELL){close=OrderClose(tk,lo,NormalizeDo uble(Ask,Digits),5*Q);}
}
}
}
}


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


int T=0;


void OnTick()
{
if(Orderscnt()==0)T=0;

if(("close conditions")||T>0)
{
CloseOrders();
T++;
return;
}

}

rambo
06-01-2019, 06:22 AM
وعليكم السلام
عند كتابتك للرمز _ بعد objprop (كما بالصورة) ستلاحظ تلقائيا عدد كبير من الاندكسات استخدم ما يناسبك
11392

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

mr.forex
06-01-2019, 09:22 AM
مشرفنا القدير
ما هو الكود الخاص بوضع أمر sell stop عند آخر قاع للزجزاج
وأمر buy stop عند آخر قمة للزجزاج
ونفس السؤال عند آخر قمتين وقاعين أو آخر ثلاث قمم وقيعان ....وهكذا

m_nasseem
06-01-2019, 10:25 PM
السلام عليكم اخ حسن كل عام واسرة المنتدي بخير واحسن حال
ارجو اصلاح المؤشر المرفق عند اضافة #property strict يختفي الرسم من علي الشارت وتظهر ثلاث وورنج وعند اصلاحها يختفي الرسم ايضا وعند تشغيله مع الاكسبيرت يظهر خطا ماكس اييريا

kira-h
08-01-2019, 03:00 PM
مشرفنا القدير
ما هو الكود الخاص بوضع أمر sell stop عند آخر قاع للزجزاج
وأمر buy stop عند آخر قمة للزجزاج
ونفس السؤال عند آخر قمتين وقاعين أو آخر ثلاث قمم وقيعان ....وهكذا
راجع المشاركة التالية، نفس الفكرة لرسم الترند حسب الزيجزاج تستخدمها بسعر الأمر المعلق
https://www.fxprg.com/vb/showthread.php?t=31457&page=121&p=881383&viewfull=1#post881383

kira-h
08-01-2019, 03:08 PM
السلام عليكم اخ حسن كل عام واسرة المنتدي بخير واحسن حال
ارجو اصلاح المؤشر المرفق عند اضافة #property strict يختفي الرسم من علي الشارت وتظهر ثلاث وورنج وعند اصلاحها يختفي الرسم ايضا وعند تشغيله مع الاكسبيرت يظهر خطا ماكس اييريا
وعليكم السلام
جرب النسخة المرفقة

m_nasseem
08-01-2019, 05:11 PM
شكرا علي مجهودك ولكن للاسف المؤشر لا يرسم علي الشارت في وجود
#property strictجرب بنفسك

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

kira-h
08-01-2019, 10:25 PM
شكرا علي مجهودك ولكن للاسف المؤشر لا يرسم علي الشارت في وجود
#property strictجرب بنفسك


الخطأ في طريقة حساب الشموع وعلاقته بالمصفوفات

limit=Bars-counted_bars-2;
مرفق المؤشر

m_nasseem
09-01-2019, 01:23 AM
الخطأ في طريقة حساب الشموع وعلاقته بالمصفوفات

limit=Bars-counted_bars-2;
مرفق المؤشرشكرا جزيلا اخي حسن جاري التجربة

mr.forex
09-01-2019, 10:44 AM
راجع المشاركة التالية، نفس الفكرة لرسم الترند حسب الزيجزاج تستخدمها بسعر الأمر المعلق
https://www.fxprg.com/vb/showthread.php?t=31457&page=121&p=881383&viewfull=1#post881383

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

kira-h
09-01-2019, 04:06 PM
شكرا لك أستاذ حسن
طبقت فكرة الكود واشتغل 100%
عندي فكرة بسيطة سأحاول إضافتها إلى الكود وتعديله
في حال وقوعي في أخطاء راح أراجعك ونتعلم منك ..الله يحفظك ويزيدك من علمه
شكرا لك مرة أخرى
وإياك أخي الكريم
والله الموفق

kira-h
09-01-2019, 04:06 PM
شكرا جزيلا اخي حسن جاري التجربة
بالتوفيق إن شاء الله

ahmed ezzat
11-01-2019, 08:05 PM
السلام عليكم استاذنا
كيف يمكن معرفة اخر صفقه خاسرة بدلالة زوج معين حتي يمكن مضاعفة اللوت بنسبة تحدد سابقاً في متغير ؟؟

kira-h
11-01-2019, 08:51 PM
السلام عليكم استاذنا
كيف يمكن معرفة اخر صفقه خاسرة بدلالة زوج معين حتي يمكن مضاعفة اللوت بنسبة تحدد سابقاً في متغير ؟؟
وعليكم السلام
وضح السؤال أكثر
هل تريد معرفة قيمة خسارة آخر صفقة أم خاسرة او رابحة أم توقيتها.... بدلالة الزوج ؟

nasro22
13-01-2019, 02:00 PM
11555هذه طريقة العمل اخي KIRA _h ارجو الاوامر اللازمة mql4

kira-h
13-01-2019, 03:45 PM
11555هذه طريقة العمل اخي KIRA _h ارجو الاوامر اللازمة mql4
غير واضح اخي
لماذا الفرق بين 5 و 15 ؟ ما هي معادلة المسافة؟ وكم عدد الاوامر وهل تختلف ببقية الاوامر ؟،،،
اشرح المطلوب كامل بالتفصيل مع امثلة من الشارت

nasro22
13-01-2019, 10:49 PM
اخي KIRA _h انسى موضوع الفرق بين 5 و 15 اريد كيفية فتح صفقة في البوكس 1 و صفقين في
البوكس 2 في نفس الاتجاه

kira-h
14-01-2019, 05:25 PM
اخي KIRA _h انسى موضوع الفرق بين 5 و 15 اريد كيفية فتح صفقة في البوكس 1 و صفقين في
البوكس 2 في نفس الاتجاه
جرب الكود التالي :


if(time!=Time[0]&&Volume[0]<5)//شرط التحقق لمرة واحدة مع بداية الشمعة
{
if(Close[1]>Open[1])//شرط الشراء
{
if(Orderscnt(OP_BUY)==0)//عند عدم وجود أي صفقة شراء
{
int b=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(A sk,Digits),5,0,0,"",MagicNumber,0,Blue);
if(b>0){time=Time[0];return;}
}
if(Orderscnt(OP_BUY)>0&&Orderscnt(OP_BUY)<3)//بوجود صفقة مفتوحة شراء
{
int b1=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble( Ask,Digits),5,0,0,"",MagicNumber,0,Blue);
int b2=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble( Ask,Digits),5,0,0,"",MagicNumber,0,Blue);
if(b1>0&&b2>0){time=Time[0];return;}
}
}

if(Close[1]<Open[1])//شرط البيع
{
if(Orderscnt(OP_SELL)==0)//عند عدم وجود أي صفقة بيع
{
int s=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble( Bid,Digits),5,0,0,"",MagicNumber,0,Red);
if(s>0){time=Time[0];return;}
}
if(Orderscnt(OP_SELL)>0&&Orderscnt(OP_SELL)<3)//بوجود صفقة مفتوحة بيع
{
int s1=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble (Bid,Digits),5,0,0,"",MagicNumber,0,Red);
int s2=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble (Bid,Digits),5,0,0,"",MagicNumber,0,Red);
if(s1>0&&s2>0){time=Time[0];return;}
}
}
}


مع دالة عدد الصفقات وتعريف التوقيت :


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


إذا كان غير المطلوب فيجب الشرح بالتفصيل مع الصور

Sherry
17-01-2019, 05:29 PM
السلام عليكم و رحمة الله و بركاته
كيفية منع الاكسبيرت من فتح اي صفقات على كل الازواج باضافة اختيار الي الاعدادات الخاصه بالاكسبيرت
في حالة تفعيلها على الاطسبيرت في اي زوج يتم تفعيلها تلقائيا على كل الازواج

kira-h
17-01-2019, 07:10 PM
السلام عليكم و رحمة الله و بركاته
كيفية منع الاكسبيرت من فتح اي صفقات على كل الازواج باضافة اختيار الي الاعدادات الخاصه بالاكسبيرت
في حالة تفعيلها على الاطسبيرت في اي زوج يتم تفعيلها تلقائيا على كل الازواج



وعليكم السلام
نستخدم في هذه الحالة دوال الجلوبال لكي تتواصل الاكسبيرتات فيما بينهم
راجع الشرح التالي: https://www.fxprg.com/vb/showthread.php?t=31457&page=9&p=846193&viewfull=1#post846193

sal_moh85
18-01-2019, 06:51 PM
سلام عليكم اخ حسن هل يوجد محمل لغه من c++ الى mql4

Sherry
18-01-2019, 07:08 PM
وعليكم السلام
نستخدم في هذه الحالة دوال الجلوبال لكي تتواصل الاكسبيرتات فيما بينهم
راجع الشرح التالي: https://www.fxprg.com/vb/showthread.php?t=31457&page=9&p=846193&viewfull=1#post846193

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

اولا : ان يكون هناك حساب لعدد الازواج التي يتم تركيب الاكسبيرت عليها
بحيث ان يتم حسابها في ادارة راس المال
{Lots=(AccountInfoDouble(ACCOUNT_MARGIN_FREE)/AccountInfoDouble(ACCOUNT_EQUITY)/Experts);}


ثانيا : في حالة input bool AllowOpenTrade=False;

وفقا للآتي :-
if(!AllowOpenTrade&&AccountInfoDouble(ACCOUNT_EQUITY)>AccountInfoDouble(ACCOUNT_BALANCE))
{
bool result = false;
int total = OrdersTotal();
for (int i = total-1; i >= 0; i--)
{ if(OrderSelect(i,SELECT_BY_POS))
{ result = OrderClose(OrderTicket(),OrderLots(),OrderClosePri ce(),999,clrNONE); }
if(result == false)
{ Alert("Order", OrderTicket(), " failed to close with error:", GetLastError()); }
}
}


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

شاكر لك حسن تعاونك الكريم

kira-h
18-01-2019, 10:20 PM
السلام عليكم و رحمة الله و بركاته
كيفية منع الاكسبيرت من فتح اي صفقات على كل الازواج باضافة اختيار الي الاعدادات الخاصه بالاكسبيرت
في حالة تفعيلها على الاطسبيرت في اي زوج يتم تفعيلها تلقائيا على كل الازواج



مثال مع الشرح:


input int StopEA=true;



void OnTick()
{
if(StopEA)GlobalVariableSet("StopEA",10);//عند تفعيل الايقاف نعطي قيمة لمتغير جلوبال
else GlobalVariableDel("StopEA");//عند الغاء الايقاف يتم حذف متغير الجلوبال الذي انشأناه سابقا
if(GlobalVariableGet("StopEA")==10)return;//هذه القيمة سيتم قرائتها على كل الشارتات وبالتالي يتوقف عمل الاكسبيرت

//--- بقية الشروط تبع الاكسبيرت
}

sal_moh85
19-01-2019, 01:55 PM
سلام عليكم اخ حسن هل يوجد محمل لغه من c++ الى mql4

kira-h
19-01-2019, 03:26 PM
سلام عليكم اخ حسن هل يوجد محمل لغه من c++ الى mql4



وعليكم السلام
لا اعتقد ذلك

sal_moh85
19-01-2019, 04:32 PM
مشكور اخ حسن طيب اذا عندي كود في لغة c++ فيك تساعدني فيه وتحوله الى mql4

Aminox
19-01-2019, 04:48 PM
مرحبا أخي حسن كيف الحال .. إن شاء الله بخير
برمجت إكسبيرت ( الإكسبيرت في المرفقات ) و أريد إضافة هذه العملية له :
- يقوم بفتح صفقة بلوت 1 مثلا إذا تم ضرب التيك جميل جدا
لكن إن قام بضرب الستوب في الفرصة المقبلة يقوم بفتح صفقة بلوت 2
وهكذا إلى حين ضرب صفقة التيك بروفيت ... ثم يقوم بالبداية من جديد أي
يقوم بفتح صفقة أخرى بلوت 1
تحيلتي لك أخي حسن وشكرا كثيرا على مساعدتك لنا بالتوفيق
الإكسبيرت في المرفقات

kira-h
19-01-2019, 05:26 PM
مرحبا أخي حسن كيف الحال .. إن شاء الله بخير
برمجت إكسبيرت ( الإكسبيرت في المرفقات ) و أريد إضافة هذه العملية له :
- يقوم بفتح صفقة بلوت 1 مثلا إذا تم ضرب التيك جميل جدا
لكن إن قام بضرب الستوب في الفرصة المقبلة يقوم بفتح صفقة بلوت 2
وهكذا إلى حين ضرب صفقة التيك بروفيت ... ثم يقوم بالبداية من جديد أي
يقوم بفتح صفقة أخرى بلوت 1
تحيلتي لك أخي حسن وشكرا كثيرا على مساعدتك لنا بالتوفيق
الإكسبيرت في المرفقات
مرفق الاكسبيرت

Aminox
20-01-2019, 12:40 AM
مرفق الاكسبيرت

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

Aminox
20-01-2019, 01:11 PM
مرفق الاكسبيرت

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

kira-h
20-01-2019, 01:59 PM
مرحبا أخي حسن بعد التجربة
يتضح أن الإكسبيرت لا يقوم بتتبع مناطق الدخول الصحيحة
بل يقوم بفتح صفقات عشوائية فقط - الكود صحيح عندما
تكون الصفقة خاسرة يقوم بالدخول في صفقة أخرى بلوت مضاعف
لكن أصبح لا يتبع الإستراتيجية بل صفقات عشوائية فقط
لم اضف سوى معادلة المضاعفات ليس لها تاثير على شروط الفتح والاغلاق

kira-h
20-01-2019, 07:44 PM
السلام عليكم

طلب للاخ kira

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

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


int start()
{
if(TimeCurrent()>=StrToTime("2019.02.01 00:00"))
{
Comment("Expired");
Alert("Expired");
return(0);
}
//---بقية كود المؤشر
return(0);
}

أبو أنس 1900
20-01-2019, 09:27 PM
السلام عليكم ورحمة الله
عندي اكسبرت يعمل على فتح صفقات بدون مؤشرات من برمجتك بناءا على افتراضات معينة
وفيه مضاعفات مرتبة ومبرمجة جيدا
لما تفتح الصفقة الأولى يبدأ الاكسبرت بافتراض المضاعفات لها بناء على تحقق شروط معينة وتبقى فكرة المضاعفة في ذاكرة الاكسبرت إلى أن تتحقق الشروط سواء حققت الصفقة هدفها أم لا
وألاحظ أن الصفقة لما تحقق هدفها نبقى فكرة المضاعفة قائمة في الاكسبرت ويفتحها عند تحقق الشروط

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

nasro22
20-01-2019, 11:58 PM
اخي kira_h ماذا اضيف للاكسبرت كخاصية ليفتح عدة صفقات بعد الشمعة الثانية لديااكسبرت لكن يفتح صفقة واحدة كل بوكس اريدهان يعمل مثل المثال المضح في الرسم :صفقة واحدة في البوكس الثاني و عدة صفقات فيالبوكسات الموالية 11718

kira-h
21-01-2019, 02:04 PM
اخي kira_h ماذا اضيف للاكسبرت كخاصية ليفتح عدة صفقات بعد الشمعة الثانية لديااكسبرت لكن يفتح صفقة واحدة كل بوكس اريدهان يعمل مثل المثال المضح في الرسم :صفقة واحدة في البوكس الثاني و عدة صفقات فيالبوكسات الموالية 11718
السلام عليكم
ارفق الكود أو جزء منه للمراجعة

Hussam Rahma
21-01-2019, 10:54 PM
السلام عليكم عندي سؤال بخصوص برمجة اكسبرت

nasro22
22-01-2019, 12:47 AM
السلام عليكم
ارفق الكود أو جزء منه للمراجعة

تفضل أخي kira الاكسبرت

Waddah
22-01-2019, 12:21 PM
السلام عليكم
لو سمحت أستاذ حسن كيف أستطيع أن أسجل أكبر خسارة عائمة خلال فترة عمل الإكسبرت

kira-h
22-01-2019, 03:57 PM
تفضل أخي kira الاكسبرت
التعديل على دالة حساب عدد الصفقات نجعلها كل شمعة باضافة الشرط التالي :

if(OrderOpenTime()>=Time[0])cnt++;
مرفق الاكسبيرت

nasro22
22-01-2019, 04:09 PM
هل عدلت على الاكسبرت اخي kira

kira-h
22-01-2019, 06:32 PM
هل عدلت على الاكسبرت اخي kira
نعم ويمكنك التجربة

nasro22
22-01-2019, 08:39 PM
شكرا جزيلا اخي kira_h

kira-h
23-01-2019, 02:09 PM
شكرا جزيلا اخي kira_h
العفو أخي الكريم

sal_moh85
23-01-2019, 02:57 PM
سلام عليكم اخ حسن كيفك اكتب كود يضم موشر ATR مضاف اليه Moving
مثل هذا شكل في صوره وشكرا

sal_moh85
25-01-2019, 04:02 PM
سلام عليكم اخ حسن كيفك اكتب كود يضم موشر ATR مضاف اليه Moving
مثل هذا شكل في صوره وشكرا
سلام عليكم

kira-h
26-01-2019, 06:36 PM
سلام عليكم اخ حسن كيفك اكتب كود يضم موشر ATR مضاف اليه Moving
مثل هذا شكل في صوره وشكرا
وعليكم السلام
راجع المشاركة التالية : https://www.fxprg.com/vb/showthread.php?t=31457&page=113&p=879882&viewfull=1#post879882

shivaa
31-01-2019, 02:52 AM
السلام عليكم
الحمد لله تم عمل الاكسبيرت ولكن فى عيب عاوز المساعد فيه وهو
الاستراتيجيه هى
الدخول على جميع الازواج تراقب على شروط الاستراتيجيه حتى احد الازواج يعطى نتيجه اجابيه يدخل الصفقه
انا محدد عدد الصفقات على لا يزيد عدد الصفقات عن 4
ولكن اكتشفت خطاء لا اعرف حل ليه وهو
بيكون عدد الصفقات المفعله 4 ولكن اذا قفلت اخد الصفقات وكان يوجد ازواج فى انتظار الدخول
اول ما اقفل ممكن يدخل فى نفس الوقت بالثانيه والدقيقه عدد من الصفقات وبكدا يزيد عدد الصفقات المحدد اكثر من 4
كما فى الصوره
1 - ممكن تكتب الجمله تحل المشكله دى
2 - عاوز عدم الدخول عند تفعيل الاكسبيرت
3 - الانتظار 5 دقائق بعد ظهور الاشاره الدخول الصفقه
انا لا اجيد التعامل مع الوقت
4 - ممكن شرح طريقه التعامل مع الوقت
50733211966

kira-h
31-01-2019, 03:46 PM
السلام عليكم
الحمد لله تم عمل الاكسبيرت ولكن فى عيب عاوز المساعد فيه وهو
الاستراتيجيه هى
الدخول على جميع الازواج تراقب على شروط الاستراتيجيه حتى احد الازواج يعطى نتيجه اجابيه يدخل الصفقه
انا محدد عدد الصفقات على لا يزيد عدد الصفقات عن 4
ولكن اكتشفت خطاء لا اعرف حل ليه وهو
بيكون عدد الصفقات المفعله 4 ولكن اذا قفلت اخد الصفقات وكان يوجد ازواج فى انتظار الدخول
اول ما اقفل ممكن يدخل فى نفس الوقت بالثانيه والدقيقه عدد من الصفقات وبكدا يزيد عدد الصفقات المحدد اكثر من 4
كما فى الصوره
1 - ممكن تكتب الجمله تحل المشكله دى
2 - عاوز عدم الدخول عند تفعيل الاكسبيرت
3 - الانتظار 5 دقائق بعد ظهور الاشاره الدخول الصفقه
انا لا اجيد التعامل مع الوقت
4 - ممكن شرح طريقه التعامل مع الوقت
50733211966

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

if(TimeCurrent()>Time[0]+5*60)

Sherry
01-02-2019, 02:08 AM
السلام عليكم

الله يعطيكم العافيه جميعا و الف شكر على المجهود الرائع

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

بمعنى اذا اردت ان يعمل الاكسبيرت وفقا للشروط على h2 او h8 مثلا

كيفية اعداد البرمجه لرؤية هذا الفريم الغير معتاد ؟؟؟؟

kira-h
01-02-2019, 08:33 PM
السلام عليكم

الله يعطيكم العافيه جميعا و الف شكر على المجهود الرائع

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

بمعنى اذا اردت ان يعمل الاكسبيرت وفقا للشروط على h2 او h8 مثلا

كيفية اعداد البرمجه لرؤية هذا الفريم الغير معتاد ؟؟؟؟
وعليكم السلام
المرجو التوضيح اكثر
او حسب ما فهمت تريد ان يعمل الاكسبيرت حسب الفريم المختار بالاعدادات، اذا كان كذلك فارفق الكود او مثال للتعديل عليه

shivaa
03-02-2019, 02:59 PM
السلام عليكم
ممكن مساعده عندى المؤشرين بيكون فى اشاره
مثلا شراء بيكون فى مؤشر اخر بيكون شراء
عاوز اعمل خط عمودى عند تحقق الاشاره على المؤشرين
اذا تغير احد المؤشرين يحزف الخط
واذا تحرك السعر اكثر من 10 نقطه يرسم خط اخر
على ان يكون الخط الاول اسمهline1 والثانى line2
اكون شاكر

kira-h
03-02-2019, 11:35 PM
السلام عليكم
ممكن مساعده عندى المؤشرين بيكون فى اشاره
مثلا شراء بيكون فى مؤشر اخر بيكون شراء
عاوز اعمل خط عمودى عند تحقق الاشاره على المؤشرين
اذا تغير احد المؤشرين يحزف الخط
واذا تحرك السعر اكثر من 10 نقطه يرسم خط اخر
على ان يكون الخط الاول اسمهline1 والثانى line2
اكون شاكر



وعليكم السلام
لرسم خط أفقي ستستخدم الدالة التالية :


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


مثال لرسم خط عند افتتاح اخر شمعة مغلقة :

Draw_Line("line",Close[1],Blue);

بنفس الطريقة ستستخدم الرسم عند سعر السهم
ولحذف الخط ستستخدم الوظيفة ObjectDelete
مثلا :
ObjectDelete("line");

اما لمعرفة القيمة السعرية للسهم راجع المشاركة التالية: https://www.fxprg.com/vb/showthread.php?t=31457&page=74&p=874388&viewfull=1#post874388

shivaa
04-02-2019, 12:25 AM
وعليكم السلام
لرسم خط أفقي ستستخدم الدالة التالية :


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


مثال لرسم خط عند افتتاح اخر شمعة مغلقة :

Draw_Line("line",Close[1],Blue);

بنفس الطريقة ستستخدم الرسم عند سعر السهم
ولحذف الخط ستستخدم الوظيفة ObjrctDelete
مثلا :
ObjectDelete("line");

اما لمعرفة القيمة السعرية للسهم راجع المشاركة التالية: https://www.fxprg.com/vb/showthread.php?t=31457&page=74&p=874388&viewfull=1#post874388

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

shivaa
04-02-2019, 12:44 PM
السلام عليكم
كيف معرف سعر فى وقت محدد
للعلم يوجد خط افقى على السعر
هل ممكن معرفه السعر

kira-h
04-02-2019, 09:51 PM
السلام عليكم
كيف معرف سعر فى وقت محدد
للعلم يوجد خط افقى على السعر
هل ممكن معرفه السعر
وعليكم السلام
يمكن معرفة سعر اغلاق، افتتاح، الهاي أو اللو عند توقيت محدد

مثال سعر اغلاق الساعة 8 لهذا اليوم كالتالي :

double close=iClose(Symbol(),0,iBarShift(Symbol(),0,StrTo Time("08:00")));

benaissa
05-02-2019, 02:35 PM
السلام عليكم الاخ المحترم ,الاستاذ حسن .
من فضلك ما هو الكود لفتح صفقتين بيع و شراء في الحال و صفقتين معلقتين(بيع على بعد +50نقطة و شراء على بعد-50نقطة)
لك مني جزيل الشكر.

shivaa
05-02-2019, 02:40 PM
وعليكم السلام
يمكن معرفة سعر اغلاق، افتتاح، الهاي أو اللو عند توقيت محدد

مثال سعر اغلاق الساعة 8 لهذا اليوم كالتالي :

double close=iClose(Symbol(),0,iBarShift(Symbol(),0,StrTo Time("08:00")));

السلام عليكم
الف شكر لك
كيف معرف سعر الموجود عليه خط افقى؟

kira-h
05-02-2019, 03:05 PM
السلام عليكم
الف شكر لك
كيف معرف سعر الموجود عليه خط افقى؟
وعليكم السلام
إذا كان الخط عبارة عن كائن على الشارت (أوبجكت، يعني قابل للتحريك بالفأرة على الشارت) ستستخدم الوظيفة ObjectGet لمعرفة سعره
مثال لخط كائن اسمه line:

double price=ObjectGet("line",OBJPROP_PRICE1);

أما إذا كان من نوع اندكس يعني لا يقبل التحريك ستستخدم الوظيفة iCustom وشرح هذه الوظيفة بالمشاركة التالية : https://www.fxprg.com/vb/showthread.php?t=31457&page=108&p=879390&viewfull=1#post879390

shivaa
05-02-2019, 04:04 PM
وعليكم السلام
إذا كان الخط عبارة عن كائن على الشارت (أوبجكت، يعني قابل للتحريك بالفأرة على الشارت) ستستخدم الوظيفة objectget لمعرفة سعره
مثال لخط كائن اسمه line:

double price=objectget("line",objprop_price1);

أما إذا كان من نوع اندكس يعني لا يقبل التحريك ستستخدم الوظيفة icustom وشرح هذه الوظيفة بالمشاركة التالية : https://www.fxprg.com/vb/showthread.php?t=31457&page=108&p=879390&viewfull=1#post879390

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


if(sell_power_1=="sell" && sell_power_2=="sell" && on_sell=="sell")
{
draw_line("linesell",open[i],clrred);
on_buy="buy";
on_sell="";
}
المشكله ان الخط يتحرك مع فتح كل شمعه
وانا عاوز الخط عند تحقق الشروط فقط ولا يتحرك ذلك
ممكن تعديل الكود رسم خط سعر الحالى عند تحقق الشروط فقط ولا يتحرك بعد ذلك

kira-h
05-02-2019, 08:14 PM
السلام عليكم
جزاك الله خيرااا
الكود هل بيعمل لمره واحد فقط ولا انا خطاء الرجاء التصحيح
المتغير


if(sell_power_1=="sell" && sell_power_2=="sell" && on_sell=="sell")
{
draw_line("linesell",open[i],clrred);
on_buy="buy";
on_sell="";
}
المشكله ان الخط يتحرك مع فتح كل شمعه
وانا عاوز الخط عند تحقق الشروط فقط ولا يتحرك ذلك
ممكن تعديل الكود رسم خط سعر الحالى عند تحقق الشروط فقط ولا يتحرك بعد ذلك

وعليكم السلام
هذا معناه أن الشروط لازالت محققة لهذا يتغير سعر الخط

shivaa
05-02-2019, 09:18 PM
وعليكم السلام
هذا معناه أن الشروط لازالت محققة لهذا يتغير سعر الخط

هل يوجد خطاء فى الداله السابقه فقط

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

benaissa
06-02-2019, 09:24 AM
السلام عليكم الاخ المحترم ,الاستاذ حسن .
من فضلك ما هو الكود لفتح صفقتين بيع و شراء في الحال و صفقتين معلقتين(بيع على بعد +50نقطة و شراء على بعد-50نقطة)
لك مني جزيل الشكر.

shivaa
06-02-2019, 12:26 PM
منطقيا لا يوجد
اشرح الفكرة أو ارفق الكود كاملا للتصحيح

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

shivaa
06-02-2019, 12:52 PM
السلام عليكم الاخ المحترم ,الاستاذ حسن .
من فضلك ما هو الكود لفتح صفقتين بيع و شراء في الحال و صفقتين معلقتين(بيع على بعد +50نقطة و شراء على بعد-50نقطة)
لك مني جزيل الشكر.


بعد اذن استاذى kira-h (https://www.fxprg.com/vb/member.php?u=120435)
متغير خارجى



extern double StepBUY = 5;// المسافة بالنقطه بين امر المعلق للشراء
extern double StepSELL = 5;// المسافة بالنقطه بين امر المعلق للبيع





void OrderStop()
{
bool BUY=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,0,0 ,NULL,Magicnumber,0,CLR_NONE);
bool SELL=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,0 ,0,NULL,Magicnumber,0,CLR_NONE);
bool BUYSTOP=OrderSend(Symbol(),OP_BUYSTOP,Lot,Ask+(Ste pBUY*Point),Slippage,0,0,NULL,Magicnumber,0,CLR_NO NE);
bool SELLSTOP=OrderSend(Symbol(),OP_SELLSTOP,Lot,Bid-(StepSELL*Point),Slippage,0,0,NULL,Magicnumber,0,C LR_NONE);

}

kira-h
06-02-2019, 01:16 PM
السلام عليكم
الاكسبيرت يعمل على 28 زوج يستخرج رقميا 6 توقعات للصفقات
مع اشاره مؤشراخر
إذا اجتمع مؤشر مع توقعات يحسب عدد النقط بين ظهور اشاره المؤشرين و ظهور الاشاره التوقعات
إذا كانت عدد نقاط اقل من 10 يدخل ألصفقه على حسب التوقعات الزوج الموجود عليه الاكسبيرت
المشكلة عندي هى
عدم القدره تحديد نقطه الحساب الموجود بين الإشارات
المؤشرممكن تحديد نقطه تجمع جميع الإشاره
إما التوقعات ليس ليها مكان على المنصة
فأكيف تحديد ليها سعر لحساب النقط بين ظهور اشاره المؤشر و ظهور الاشاره التوقعات
كانت فكرتي هي
استخدام الوقت ظهور التوقعات وحساب السعر في الوقت المحدد
بالطرح اشاره سعر ظهور المؤشر وسعر الناتج من وقت الظهور
ينتج عدد نقاط على أساس الدخول ولا لا
حوليت ارسم خط افقى على سعر الاشاره المؤشرين وخط أخر عامودي على الوقت وخط أخر افقى على سعر عند الوقت المحدد
معرفه عدد النقط الموجودة بين الخطين الافقيا
اذا ممكن كتابه الداله التى تساعدنى فى ذلك اكون شاكر



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

shivaa
06-02-2019, 01:28 PM
وعليكم السلام
لا يمكنني كتابة دالة او دوال وليس لي معرفة بقيم المؤشرات المستخدمة او شكلها على الشارت!
فالقيم تختلف من مؤشر لاخر
اذا لا تريد نشر فكرتك، استخدم نفس الفكرة بمؤشرات مختلفة كمثال، مع الشرح بالصور حتى استطيع المساعدة
السلام عليكم
اقسم بالله ان الفكره ليس لى وان صاحب الفكره وضعها عندى كا امانه لذلك لا استطيع وضع الاكسبيرت
كل الا انا واقف عنده هو عند ظهور التوقعات عاوز سعر عند الظهورالتوقع فقط
لحل مشكله ممكن نعمل متغير من نوع string


التوصيه دخول
string EURUSD="EURUSD"
ظهر وقت 2019.02.06 11:45

كيف تحديد السعر فى الوقت 2019.02.06 11:45

benaissa
06-02-2019, 01:52 PM
بعد اذن استاذى kira-h (https://www.fxprg.com/vb/member.php?u=120435)
متغير خارجى



extern double StepBUY = 5;// المسافة بالنقطه بين امر المعلق للشراء
extern double StepSELL = 5;// المسافة بالنقطه بين امر المعلق للبيع





void OrderStop()
{
bool BUY=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,0,0 ,NULL,Magicnumber,0,CLR_NONE);
bool SELL=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,0 ,0,NULL,Magicnumber,0,CLR_NONE);
bool BUYSTOP=OrderSend(Symbol(),OP_BUYSTOP,Lot,Ask+(Ste pBUY*Point),Slippage,0,0,NULL,Magicnumber,0,CLR_NO NE);
bool SELLSTOP=OrderSend(Symbol(),OP_SELLSTOP,Lot,Bid-(StepSELL*Point),Slippage,0,0,NULL,Magicnumber,0,C LR_NONE);

}
تسلم اخي shivaa, شكرا لك . يجب على من يستطيع الاِفادة أن يساعد الآخرين حتى نخفف الضغط على الأ ستاذ حسن.

kira-h
06-02-2019, 04:29 PM
السلام عليكم
اقسم بالله ان الفكره ليس لى وان صاحب الفكره وضعها عندى كا امانه لذلك لا استطيع وضع الاكسبيرت
كل الا انا واقف عنده هو عند ظهور التوقعات عاوز سعر عند الظهورالتوقع فقط
لحل مشكله ممكن نعمل متغير من نوع string


التوصيه دخول
string EURUSD="EURUSD"
ظهر وقت 2019.02.06 11:45

كيف تحديد السعر فى الوقت 2019.02.06 11:45

سبق وشرحت الطريقة بالاقتباس التالي :

وعليكم السلام
يمكن معرفة سعر اغلاق، افتتاح، الهاي أو اللو عند توقيت محدد

مثال سعر اغلاق الساعة 8 لهذا اليوم كالتالي :

double close=iClose(Symbol(),0,iBarShift(Symbol(),0,StrTo Time("08:00")));


ولا يوجد تحديد سعر عند توقيت محدد دون تحديد نوع السعر هل للاغلاق او الافتتاح او الهاي أو اللو
مثلا سعر الاغلاق حسب مثالك كالتالي:

double close=iClose(Symbol(),0,iBarShift(Symbol(),0,StrTo Time("2019.02.06 11:45")));

kira-h
06-02-2019, 05:35 PM
السلام عليكم ورحمة الله وبركاته بشمهندس حسن
لو عاوز اضيف في الاكسبيرت انه بدل مايفتح الصفقات بناءا علي رقم محدد اضعه في الستيب وعاوز الاكسبيرت يفتح الصفقات اتوماتيك والمسافة مابين كل صفقة والتانية تبقي اعداد فيبوناتشي
بمعني ان لو الاكسبيرت فتح 5 صفقات يبقي المسافة بين كل صفقة والتانية 1-2-3-5-8---- وهكذا
ايه الدالة اللي ممكن اضعها في الاكسبيتر وتقوم بالدور ده
وعليكم السلام
أبسط طريقة ان تستخدم شرط عدد الصفقات
فمثلا إذا كان عدد الصفقات المفتوحة 1 يفتح اول تعزيز بمسافة 1
وإذا كان عدد الصفقات المفتوحة 2 يفتح ثاني تعزيز بمسافة 2
وهكذا ...


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


void OnTick()
{
double step;
if(Orderscnt()==1)step=1;
else if(Orderscnt()==2)step=2;
else if(Orderscnt()==3)step=3;
else if(Orderscnt()==4)step=5;
else if(Orderscnt()==5)step=8;


//ثم يليه شروط فتح الصفقات


}

shivaa
06-02-2019, 06:22 PM
سبق وشرحت الطريقة بالاقتباس التالي :


ولا يوجد تحديد سعر عند توقيت محدد دون تحديد نوع السعر هل للاغلاق او الافتتاح او الهاي أو اللو
مثلا سعر الاغلاق حسب مثالك كالتالي:

double close=iClose(Symbol(),0,iBarShift(Symbol(),0,StrTo Time("2019.02.06 11:45")));


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

forex
06-02-2019, 11:50 PM
السلام عليكم
أخي حسن المرجو إضافة دوال الحماية
أولا قفل الإكسبيريت بباسوورد حساب حقيقي أو ديمو فلا يشتغل إلا على هذا الحساب
ثانيا كود تحديد تاريخ الصلاحية
ثالثا كود الحساب الذي سيشتغل عليه الباكتيست فلا يستطيع أحد أن يعمل الباكتيست إلا على رقم هذا الحساب
شكرا جزيلا واسف على تعبك معنا

forex
07-02-2019, 01:03 AM
معلومة محتاج دمج كل تلك الدوال المطلوبة كلها في الإكسبيرت وبالتالي يصبح الإكسبيرت يتوفر على ثلاث دوال حماية في اان واحد

kira-h
07-02-2019, 07:02 PM
السلام عليكم
أخي حسن المرجو إضافة دوال الحماية
أولا قفل الإكسبيريت بباسوورد حساب حقيقي أو ديمو فلا يشتغل إلا على هذا الحساب
ثانيا كود تحديد تاريخ الصلاحية
ثالثا كود الحساب الذي سيشتغل عليه الباكتيست فلا يستطيع أحد أن يعمل الباكتيست إلا على رقم هذا الحساب
شكرا جزيلا واسف على تعبك معنا
وعليكم السلام
ستضع الشروط التالية ببداية الدالة OnTick :


void OnTick()
{
if(!IsTesting()&&AccountNumber()!=123456789)//شرط رقم الحساب الديمو أو الحقيقي
{
Comment("Wrong Account Number");
Alert("Wrong Account Number");
return;
}

if(IsTesting()&&AccountNumber()!=123456789)//شرط رقم الحساب الباكتيست
{
Comment("Wrong Account Number");
Alert("Wrong Account Number");
return;
}

if(TimeCurrent()>=StrToTime("2019.03.01 00:00"))//شرط تاريخ الصلاحية
{
Comment("EA Expired");
Alert("EA Expired");
return;
}

//---بقية كود الاكسبيرت


}

kira-h
07-02-2019, 07:03 PM
جزاك الله خيراااا
وإياك أخي الكريم

ahmedsisy
08-02-2019, 03:48 PM
السلام عليكم يا استاذنا الكريم
السكربت التالي لانتاج ماجك نمبر مميز بمعرفة الزوج و التشارت
و هو يعمل كما يجب كما يبدو من دوال التحقق برنت الموضوعه علي كل خطوة كما هو مرفق حيث يظهر الرقم المطلوب في النقطه رقم ٣
ما عدا الخطوة الاخيرة عند تحويل السترنج الي انتجر ... ارجو ان توضح لي السبب في ذلك اذا تفضلت و لكم جزيل الشكر



void OnStart()
{

int MagicNo1=MAGIC_NO_Gen(); // امر استدعاء الدالة
Print("5-",MagicNo1); //أمر برنت للتحقق - 5
}


//////////////////////////////////////////////////
// MAGIC NO. Gen funct
//////////////////////////////////////////////////
int MAGIC_NO_Gen() //دعاء الدالة
{
char chararray[];
string name=Symbol();
StringToUpper(name);
Print("1-",name); //أمر برنت للتحقق - 1
StringToCharArray(name,chararray,0,6);
string MagicString;
for(int i=0;i<6;i++)
{
StringAdd(MagicString,(string)chararray[i]);
}
Print("2-",MagicString); // أمر برنت للتحقق - 2
StringAdd(MagicString,(string)ChartPeriod());
Print("3-",MagicString); // أمر برنت للتحقق - 3
int mag = StringToInteger(MagicString); //دالة تحويل سترنج الي انتجر
Print("4-",mag); // أمر برنت للتحقق - 4
return(mag);
}
//////////////////////////////////////////////////[/LEFT]

ahmedsisy
08-02-2019, 04:20 PM
مع ملاحظة انه يعمل جيدا اذا تم التحويل من سترنج الي انتجرفي الدالة الرئيسية و ليس في الدالة الفرعية كالتالي








void OnStart()
{


string MagicNo1=MAGIC_NO_Gen(); // امر استدعاء الدالة

Print("5-",StringToInteger(MagicNo1)); //أمر برنت للتحقق - 5

}



//////////////////////////////////////////////////
// MAGIC NO. Gen funct
//////////////////////////////////////////////////
string MAGIC_NO_Gen() //دعاء الدالة
{
char chararray[];
string name=Symbol();
StringToUpper(name);
Print("1-",name); //أمر برنت للتحقق - 1
StringToCharArray(name,chararray,0,6);
string MagicString;
for(int i=0;i<6;i++)
{
StringAdd(MagicString,(string)chararray[i]);
}
Print("2-",MagicString); // أمر برنت للتحقق - 2
StringAdd(MagicString,(string)ChartPeriod());
Print("3-",MagicString); // أمر برنت للتحقق - 3
//int mag = StringToInteger(MagicString); //دالة تحويل سترنج الي انتجر
//Print("4-",mag); // أمر برنت للتحقق - 4
return(MagicString);
}
//////////////////////////////////////////////////

kira-h
08-02-2019, 04:29 PM
السلام عليكم يا استاذنا الكريم
السكربت التالي لانتاج ماجك نمبر مميز بمعرفة الزوج و التشارت
و هو يعمل كما يجب كما يبدو من دوال التحقق برنت الموضوعه علي كل خطوة كما هو مرفق حيث يظهر الرقم المطلوب في النقطه رقم ٣
ما عدا الخطوة الاخيرة عند تحويل السترنج الي انتجر ... ارجو ان توضح لي السبب في ذلك اذا تفضلت و لكم جزيل الشكر



void OnStart()
{

int MagicNo1=MAGIC_NO_Gen(); // امر استدعاء الدالة
Print("5-",MagicNo1); //أمر برنت للتحقق - 5
}


//////////////////////////////////////////////////
// MAGIC NO. Gen funct
//////////////////////////////////////////////////
int MAGIC_NO_Gen() //دعاء الدالة
{
char chararray[];
string name=Symbol();
StringToUpper(name);
Print("1-",name); //أمر برنت للتحقق - 1
StringToCharArray(name,chararray,0,6);
string MagicString;
for(int i=0;i<6;i++)
{
StringAdd(MagicString,(string)chararray[i]);
}
Print("2-",MagicString); // أمر برنت للتحقق - 2
StringAdd(MagicString,(string)ChartPeriod());
Print("3-",MagicString); // أمر برنت للتحقق - 3
int mag = StringToInteger(MagicString); //دالة تحويل سترنج الي انتجر
Print("4-",mag); // أمر برنت للتحقق - 4
return(mag);
}
//////////////////////////////////////////////////


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

ahmedsisy
08-02-2019, 04:42 PM
وعليكم السلام
StringToInteger هذه الوظيفة تقوم بتحويل عدد نصي إلى عدد صحيح، وليس كلمة نصية بحيث سيقوم بتحويلها الى عدد صحيح كبير


جزاك الله خيرا يا استاذي
لكن الداله كما تري استعملت لتحويل متغير سترنج اسمه MagicString و هو متغير وليس نص تم تعريفه ك string
و لماذا يعمل نفس الكود اذا وضع في الداله الرئيسيه كالتالي ؟




void OnStart()
{


string MagicNo1=MAGIC_NO_Gen(); // امر استدعاء الدالة

Print("5-",StringToInteger(MagicNo1)); //أمر برنت للتحقق - 5

}



//////////////////////////////////////////////////
// MAGIC NO. Gen funct
//////////////////////////////////////////////////
string MAGIC_NO_Gen() //دعاء الدالة
{
char chararray[];
string name=Symbol();
StringToUpper(name);
Print("1-",name); //أمر برنت للتحقق - 1
StringToCharArray(name,chararray,0,6);
string MagicString;
for(int i=0;i<6;i++)
{
StringAdd(MagicString,(string)chararray[i]);
}
Print("2-",MagicString); // أمر برنت للتحقق - 2
StringAdd(MagicString,(string)ChartPeriod());
Print("3-",MagicString); // أمر برنت للتحقق - 3
//int mag = StringToInteger(MagicString); //دالة تحويل سترنج الي انتجر
//Print("4-",mag); // أمر برنت للتحقق - 4
return(MagicString);
}
//////////////////////////////////////////////////

kira-h
08-02-2019, 04:59 PM
جزاك الله خيرا يا استاذي
لكن الداله كما تري استعملت لتحويل متغير سترنج اسمه MagicString و هو متغير وليس نص تم تعريفه ك string
و لماذا يعمل نفس الكود اذا وضع في الداله الرئيسيه كالتالي ؟




void OnStart()
{


string MagicNo1=MAGIC_NO_Gen(); // امر استدعاء الدالة

Print("5-",StringToInteger(MagicNo1)); //أمر برنت للتحقق - 5

}



//////////////////////////////////////////////////
// MAGIC NO. Gen funct
//////////////////////////////////////////////////
string MAGIC_NO_Gen() //دعاء الدالة
{
char chararray[];
string name=Symbol();
StringToUpper(name);
Print("1-",name); //أمر برنت للتحقق - 1
StringToCharArray(name,chararray,0,6);
string MagicString;
for(int i=0;i<6;i++)
{
StringAdd(MagicString,(string)chararray[i]);
}
Print("2-",MagicString); // أمر برنت للتحقق - 2
StringAdd(MagicString,(string)ChartPeriod());
Print("3-",MagicString); // أمر برنت للتحقق - 3
//int mag = StringToInteger(MagicString); //دالة تحويل سترنج الي انتجر
//Print("4-",mag); // أمر برنت للتحقق - 4
return(MagicString);
}
//////////////////////////////////////////////////
لم افهم ما هو الاشكال ! فالكود بمشاركتك الاخيرة سليم
الدالة MAGIC_NO_Gen يجب أن تكون من نوع string لأنها تنتج لنا عدد نصي وليس صحيح
ثم تقوم بتحويلها الى عدد نصي
StringToInteger(MagicNo1) لكي تستخدمه بماجك نمبر الصفقة والذي عبارة عن عدد صحيح

kira-h
08-02-2019, 05:08 PM
جزاك الله خيرا يا استاذي
لكن الداله كما تري استعملت لتحويل متغير سترنج اسمه MagicString و هو متغير وليس نص تم تعريفه ك string
و لماذا يعمل نفس الكود اذا وضع في الداله الرئيسيه كالتالي ؟




void OnStart()
{


string MagicNo1=MAGIC_NO_Gen(); // امر استدعاء الدالة

Print("5-",StringToInteger(MagicNo1)); //أمر برنت للتحقق - 5

}



//////////////////////////////////////////////////
// MAGIC NO. Gen funct
//////////////////////////////////////////////////
string MAGIC_NO_Gen() //دعاء الدالة
{
char chararray[];
string name=Symbol();
StringToUpper(name);
Print("1-",name); //أمر برنت للتحقق - 1
StringToCharArray(name,chararray,0,6);
string MagicString;
for(int i=0;i<6;i++)
{
StringAdd(MagicString,(string)chararray);
}
Print("2-",MagicString); // أمر برنت للتحقق - 2
StringAdd(MagicString,(string)ChartPeriod());
Print("3-",MagicString); // أمر برنت للتحقق - 3
//int mag = StringToInteger(MagicString); //دالة تحويل سترنج الي انتجر
//Print("4-",mag); // أمر برنت للتحقق - 4
return(MagicString);
}
//////////////////////////////////////////////////

فهمت الاشكال أن النتيجة غير متساوية بين الصيغة الأولى والثانية للكود وهذا طبيعي
فالصحيح الصيغة الأولى للكود، لأنها تعمل ضمن مجال المصفوفة [I]chararray

ahmedsisy
08-02-2019, 05:12 PM
مشكور يا استاذي وبارك الله فيك
كنت ارغب في انتاج الرقم النهائي بعد تحويله الي رقم داخل الداله الفرعية و استخدامه مباشرة بعد ذلك و لكن لسبب اجهله يجب ان تكون الداله من نوع string و تتحول الي رقم في الدالة الرئيسية
جزاك الله خيرا وفيت و كفيت

ahmedsisy
08-02-2019, 05:23 PM
chararray وظيفتها كما افهم تنتهي عند الامر StringAdd
حيث يحصل المتغير MagicString علي مابداخل المصفوفة
الخطا يحدث بين السطرين برنت ٣ وبرنت٤ اي عند التحويل



Print("3-",MagicString); // أمر برنت للتحقق - 3
int mag = StringToInteger(MagicString); //دالة تحويل سترنج الي انتجر
Print("4-",mag); // أمر برنت للتحقق - 4


علي اي حال اشكرك جزيل الشكر

kira-h
08-02-2019, 06:19 PM
مشكور يا استاذي وبارك الله فيك
كنت ارغب في انتاج الرقم النهائي بعد تحويله الي رقم داخل الداله الفرعية و استخدامه مباشرة بعد ذلك و لكن لسبب اجهله يجب ان تكون الداله من نوع string و تتحول الي رقم في الدالة الرئيسية
جزاك الله خيرا وفيت و كفيت
الكود الصحيح كالتالي :
يكون ببداية الدالة بعدها تستخدم الـ MagicNo1 بدوال فتح الصفقة


void OnStart()
{
string MagicNo1=MAGIC_NO_Gen();
StringToInteger(MagicNo1);
Print("5-",MagicNo1); //مر برنت للتحقق - 5
}




//////////////////////////////////////////////////
// MAGIC NO. Gen funct
//////////////////////////////////////////////////
string MAGIC_NO_Gen() //دعاء الدالة
{
char chararray[];
string name=Symbol();
string MagicString="";
StringToUpper(name);
Print("1-",name); //أمر برنت للتحقق - 1
StringToCharArray(name,chararray,0,6);
for(int i=0;i<6;i++)
{
StringAdd(MagicString,(string)chararray[i]);
}
Print("2-",MagicString); // أمر برنت للتحقق - 2
StringAdd(MagicString,(string)ChartPeriod());
Print("3-",MagicString); // أمر برنت للتحقق - 3
return(MagicString);
}

benaissa
08-02-2019, 11:56 PM
السلام عليكم أخي حسن.
طلبي لحضرتك ان توجهني وتصلح لي الاخطاء, من فضلك, في برمجة اِكسبيرت .
الفكرة : فتح صفقتين الاولى بيع و الثانية شراء في نفس الوقت بلوت 0.01 مثلا.
- تيك بروفيت مثلا20 نقطة لكلتا الصفقتين , بدون ستوب لوس .
-وضع صفقتين معلقتين بلوت مضاعف, واحدة بيع وواحدة شراء ب تيك فروفيت محدد , دون ستوب لوس .
-لما واحدة من الصفقتين تضرب الهدف ,تُلغى الصفقة المعلقة من نفس النوع (اِذا صفقة التي ضربت الهدف كانت شراء فتُلغى صفقة الشراء المعلقة. والعكس) .
- بعد ذلك اِذا ضربت الصفقة الباقية الهدف , تلغى الصفقة المعلقة المتبقية. و يعاود من جديد ( فتح صفقتين و صفقتين معلقتين بيع و شراء).
-أما اِذا فُعِّلت الصفقة المعلقة الثانية , فيضع صفقة معلقة نفس النوع الصفقة المفتوحة بلوت مضاعف ,على بعد 50 نقطة .
-يستمر هكذا حتى تضرب الصفقة الهدف فتغلق جميع الصفقات المفعلة و المعلقة ,او يصل الوت الحد الاقصى المعلن عنه في الاعدادات ,فيغلق الكل.

أنا الان في البداية , أُريد من حضرتك ان تلقي نظرة على الكود هل صحيح , و اِذا كنت علي الطريق الصحيح؟
جزاك الله كل خير.


//+------------------------------------------------------------------+//| |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019,"
#property link ""
#property version "1.00"


//+------------------------------------------------------------------+
//| Exported variables |
//+------------------------------------------------------------------+
input double Lots=0.01,
LotsMP=2,
MaxLots=10;
input double TakeProfit=10;//الهدف بالنقاط
input double StopLoss=0;//الوقف بالنقاط
input int MagicNo=2019;//الماجك نمبر
input double StepBUY = 50;// المسافة بالنقطه بين امر المعلق للشراء
input double StepSELL = 50;// المسافة بالنقطه بين امر المعلق للبيع
input double Slippage = 3 ;


//+------------------------------------------------------------------+
//| Local variables |
//+------------------------------------------------------------------+
double point;
int Q;
datetime time=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
Comment("");
if(Digits==5||Digits==3)Q=10;else Q=1;
if(Digits<4)point=0.01;else point=0.0001;
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason){Comment("");}


//+------------------------------------------------------------------+
//| Expert fonctions |
//+------------------------------------------------------------------+


void OrderStop()
{
bool BUY=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0, 0,NULL,MagicNo,0,Blue);
bool SELL=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage, 0,0,NULL,MagicNo,0,Red);
bool BUYSTOP=OrderSend(Symbol(),OP_BUYSTOP,Lots*Lots,As k+(StepBUY*Point),Slippage,0,0,NULL,MagicNo,0,Blue );
bool SELLSTOP=OrderSend(Symbol(),OP_SELLSTOP,Lots*LotsM P,Bid-(StepSELL*Point),Slippage,0,0,NULL,MagicNo,0,Red);



}

ahmedsisy
09-02-2019, 12:00 AM
اشكرك جزيل الشكر يا استاذنا الكريم

ahmedsisy
09-02-2019, 11:07 AM
اخي الكريم
عرفت اين المشكلة واحببت ان اشرككم بها
وهي للاسف بلا حل في Mql4


the largest number you can have as an int is... 2147483648 which is a 10 digit number.. so anything above that is not going to work right in mt4


الكود الذي كتبته يستخرج ١٣ رقم و اكبر رقم ممكن لنوع انتجر هو ١٠ ارقام


و لقد فهمت ان هذه المشكلة تم حلها في Mql5 و لكني استخدم Mql4 حاليا


لك شكري و تحياتي

kira-h
09-02-2019, 03:40 PM
السلام عليكم أخي حسن.
طلبي لحضرتك ان توجهني وتصلح لي الاخطاء, من فضلك, في برمجة اِكسبيرت .
الفكرة : فتح صفقتين الاولى بيع و الثانية شراء في نفس الوقت بلوت 0.01 مثلا.
- تيك بروفيت مثلا20 نقطة لكلتا الصفقتين , بدون ستوب لوس .
-وضع صفقتين معلقتين بلوت مضاعف, واحدة بيع وواحدة شراء ب تيك فروفيت محدد , دون ستوب لوس .
-لما واحدة من الصفقتين تضرب الهدف ,تُلغى الصفقة المعلقة من نفس النوع (اِذا صفقة التي ضربت الهدف كانت شراء فتُلغى صفقة الشراء المعلقة. والعكس) .
- بعد ذلك اِذا ضربت الصفقة الباقية الهدف , تلغى الصفقة المعلقة المتبقية. و يعاود من جديد ( فتح صفقتين و صفقتين معلقتين بيع و شراء).
-أما اِذا فُعِّلت الصفقة المعلقة الثانية , فيضع صفقة معلقة نفس النوع الصفقة المفتوحة بلوت مضاعف ,على بعد 50 نقطة .
-يستمر هكذا حتى تضرب الصفقة الهدف فتغلق جميع الصفقات المفعلة و المعلقة ,او يصل الوت الحد الاقصى المعلن عنه في الاعدادات ,فيغلق الكل.

أنا الان في البداية , أُريد من حضرتك ان تلقي نظرة على الكود هل صحيح , و اِذا كنت علي الطريق الصحيح؟
جزاك الله كل خير.


//+------------------------------------------------------------------+//| |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019,"
#property link ""
#property version "1.00"


//+------------------------------------------------------------------+
//| Exported variables |
//+------------------------------------------------------------------+
input double Lots=0.01,
LotsMP=2,
MaxLots=10;
input double TakeProfit=10;//الهدف بالنقاط
input double StopLoss=0;//الوقف بالنقاط
input int MagicNo=2019;//الماجك نمبر
input double StepBUY = 50;// المسافة بالنقطه بين امر المعلق للشراء
input double StepSELL = 50;// المسافة بالنقطه بين امر المعلق للبيع
input double Slippage = 3 ;


//+------------------------------------------------------------------+
//| Local variables |
//+------------------------------------------------------------------+
double point;
int Q;
datetime time=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
Comment("");
if(Digits==5||Digits==3)Q=10;else Q=1;
if(Digits<4)point=0.01;else point=0.0001;
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason){Comment("");}


//+------------------------------------------------------------------+
//| Expert fonctions |
//+------------------------------------------------------------------+


void OrderStop()
{
bool BUY=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0, 0,NULL,MagicNo,0,Blue);
bool SELL=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage, 0,0,NULL,MagicNo,0,Red);
bool BUYSTOP=OrderSend(Symbol(),OP_BUYSTOP,Lots*Lots,As k+(StepBUY*Point),Slippage,0,0,NULL,MagicNo,0,Blue );
bool SELLSTOP=OrderSend(Symbol(),OP_SELLSTOP,Lots*LotsM P,Bid-(StepSELL*Point),Slippage,0,0,NULL,MagicNo,0,Red);



}




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

benaissa
10-02-2019, 02:16 PM
شكرا أخي حسن.
الفكرة بسيطة :
-فتح صفقة بيع و صفقة شراء (بلوت 0.01)في آنِِ واحد بهدف صغير (20نقطة مثلا) بدون ستوب لوس.
- وضع صفقة بيع معلقة (0.02) على بعد +50 نقطة , و صفقة معلقة شراء (0.02) على بعد -50نقطة (دائما بهدف 20 نقطة و بدون ستوب).
- لما يتحرك السعر الى اسفل , و تضرب صفقة البيع الهدف (20نقطة) ,تُلغى صفقة البيع المعلقة .
- لما ينزل السعر الى مستوى صفقة الشراء المعلقة تتفعل الصفقة و تُوضع صفقة شراء معلقة جديدة(0.04) على بعد -50 نقطة.
-تستمر العملية هكذا حتى تُحقق صفقة الهدف فتُغلق جميع الصفقات المفتوحة و المعلقة . و يبدأ الاكسبيرت من جديد .
و اذا صعد السعر يكون نفس المبدأ فقط بدل البيع يكون الشراء.
اتمنى أخي الكريم ان اكون توفقت في شرح الفكرة هذه المرة.
تحياتي لك.




12120

kira-h
11-02-2019, 08:12 PM
شكرا أخي حسن.
الفكرة بسيطة :
-فتح صفقة بيع و صفقة شراء (بلوت 0.01)في آنِِ واحد بهدف صغير (20نقطة مثلا) بدون ستوب لوس.
- وضع صفقة بيع معلقة (0.02) على بعد +50 نقطة , و صفقة معلقة شراء (0.02) على بعد -50نقطة (دائما بهدف 20 نقطة و بدون ستوب).
- لما يتحرك السعر الى اسفل , و تضرب صفقة البيع الهدف (20نقطة) ,تُلغى صفقة البيع المعلقة .
- لما ينزل السعر الى مستوى صفقة الشراء المعلقة تتفعل الصفقة و تُوضع صفقة شراء معلقة جديدة(0.04) على بعد -50 نقطة.
-تستمر العملية هكذا حتى تُحقق صفقة الهدف فتُغلق جميع الصفقات المفتوحة و المعلقة . و يبدأ الاكسبيرت من جديد .
و اذا صعد السعر يكون نفس المبدأ فقط بدل البيع يكون الشراء.
اتمنى أخي الكريم ان اكون توفقت في شرح الفكرة هذه المرة.
تحياتي لك.




12120

هذا اصبح طلب اكسبيرت وليس سؤال برمجي !
عموما الكود كالتالي مع شرح كل دالة وشرط


//+------------------------------------------------------------------+//| |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019,"
#property link ""
#property version "1.00"




//+------------------------------------------------------------------+
//| Exported variables |
//+------------------------------------------------------------------+
input double Lots=0.01;
input int LotsMP=2;
input double TakeProfit=20;//الهدف بالنقاط
input int MagicNo=2019;//الماجك نمبر
input double StepBUY = 50;// المسافة بالنقطه بين امر المعلق للشراء
input double StepSELL = 50;// المسافة بالنقطه بين امر المعلق للبيع
input int Slippage = 3 ;




//+------------------------------------------------------------------+
//| Local variables |
//+------------------------------------------------------------------+
double point;
int Q;
datetime time=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
Comment("");
if(Digits==5||Digits==3)Q=10;else Q=1;
if(Digits<4)point=0.01;else point=0.0001;
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason){Comment("");}




//+------------------------------------------------------------------+
//| Expert fonctions |
//+------------------------------------------------------------------+


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


double LastLots(int type=-1)//دالة تعود بحجم عقد آخر صفقة مفعلة حسب النوع
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double lo=OrderLots();
if(sy==Symbol()&&mn==MagicNo&&ty<=OP_SELL)
{
if(ty==type||type==-1)
{
return(lo);
}
}
}
return(0);
}


double LastPrice(int type=-1)//دالة تعود بسعر آخر صفقة مفعلة حسب النوع
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int mn=OrderMagicNumber(),
ty=OrderType();
double op=OrderOpenPrice();
if(sy==Symbol()&&mn==MagicNo&&ty<=OP_SELL)
{
if(ty==type||type==-1)
{
return(op);
}
}
}
return(0);
}


void OnTick()//الدالة الرئيسية التي تعالج الشروط كل تكة سعرية
{
double p;
int BUY,SELL,BUYLIMIT,SELLLIMIT;
//----
if(orderscnt(OP_BUY)==0)CloseOrders(OP_BUYLIMIT);//عند اغلاق الشراء يتم حذف الأمر المعلق الشراء
if(orderscnt(OP_SELL)==0)CloseOrders(OP_SELLLIMIT) ;//نفس الشيء بالبيع
//----
if(orderscnt(OP_BUY)>0&&orderscnt(OP_BUYLIMIT)==0)//إذا تفعل الشراء ولا يوجد امر معلق شراء يتم وضعه
{
p=LastPrice(OP_BUY)-StepBUY*point;
BUYLIMIT=OrderSend(Symbol(),OP_BUYLIMIT,LastLots(O P_BUY)*LotsMP,p,Slippage*Q,0,Ask+TakeProfit*point, NULL,MagicNo,0,Blue);
}
if(orderscnt(OP_SELL)>0&&orderscnt(OP_SELLLIMIT)==0)//نفس الشيء بالبيع
{
p=LastPrice(OP_SELL)+StepSELL*point;
SELLLIMIT=OrderSend(Symbol(),OP_SELLLIMIT,LastLots (OP_SELL)*LotsMP,p,Slippage*Q,0,p-TakeProfit*point,NULL,MagicNo,0,Red);
}
//----
if(orderscnt()==0)//إذا لا يوجد أي صفقة واوامر يتم فتح الهيدج والأمرين المعلقين
{
BUY=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble (Ask,Digits),Slippage*Q,0,Ask+TakeProfit*point,NUL L,MagicNo,0,Blue);
SELL=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDoub le(Bid,Digits),Slippage*Q,0,Bid-TakeProfit*point,NULL,MagicNo,0,Red);
p=Ask-StepBUY*point;
BUYLIMIT=OrderSend(Symbol(),OP_BUYLIMIT,Lots*LotsM P,p,Slippage*Q,0,p+TakeProfit*point,NULL,MagicNo,0 ,Blue);
p=Bid+StepSELL*point;
SELLLIMIT=OrderSend(Symbol(),OP_SELLLIMIT,Lots*Lot sMP,p,Slippage*Q,0,p-TakeProfit*point,NULL,MagicNo,0,Red);
}
}


void CloseOrders(int type=-1)//دالة اغلاق الصفقات حسب النوع
{
bool select,close,del;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tt=OrdersTotal(),
tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double lo=OrderLots();
if(tt>0&&sy==Symbol()&&mn==MagicNo)
{
if(ot==type||type==-1)
{
if(ot==OP_BUY){close=OrderClose(tk,lo,NormalizeDou ble(Bid,Digits),5*Q);}
if(ot==OP_SELL){close=OrderClose(tk,lo,NormalizeDo uble(Ask,Digits),5*Q);}
if(ot>OP_SELL){del=OrderDelete(tk);}
}
}
}
}

benaissa
12-02-2019, 01:02 PM
معذرة أخي حسن اِن كان بعض التجاوز في طلبي , لكن أفهم اكثر من خلال الامثلة التطبيقية اكثر , ربما عيب في طريقة عملي , أعتذر مرة أُخرى.
شكرا على كرمك اللا محدود .

kira-h
12-02-2019, 03:49 PM
معذرة أخي حسن اِن كان بعض التجاوز في طلبي , لكن أفهم اكثر من خلال الامثلة التطبيقية اكثر , ربما عيب في طريقة عملي , أعتذر مرة أُخرى.
شكرا على كرمك اللا محدود .
العفو اخي
ويمكنك مراجعة موضوع تطبيقي تعليمي على الرابط التالي
https://www.fxprg.com/vb/showthread.php?t=31456

Trader
14-02-2019, 05:15 PM
هل هناك طريقة لربط المؤشرات والاكسبرتات المبرمجة على ميتا تريدر 4 لجعلها تعمل على ميتاتريدر 5؟

لدي بعض المؤشرات والاكسبردات اريد تشغيلها على منصة احدى الشركات (ميتاتريدر 5)

kira-h
14-02-2019, 05:24 PM
هل هناك طريقة لربط المؤشرات والاكسبرتات المبرمجة على ميتا تريدر 4 لجعلها تعمل على ميتاتريدر 5؟

لدي بعض المؤشرات والاكسبردات اريد تشغيلها على منصة احدى الشركات (ميتاتريدر 5)
لا بل يجب إعادة برمجتها بلغة mql5

fxover
15-02-2019, 05:37 PM
اخي حسن كيف نجعل مؤشر يرسم خطوط افقيه تاريخي
اي يرسم لكل يوم على حده

kira-h
15-02-2019, 06:04 PM
اخي حسن كيف نجعل مؤشر يرسم خطوط افقيه تاريخي
اي يرسم لكل يوم على حده

راجع كود المؤشر المرفق

benaissa
15-02-2019, 07:12 PM
السلام عليكم أخي حسن.
كيف يمكنني كتابة كود حيث اِذا ضربت صفقة الهدف ,تُغلق كل الصفقات من نفس النوع سواء كانت مفعلة او أوامر معلقة,
مثلا اِذا ضربت صفقة البيع الهدف, تغلق جميع صفقات البيع المفعلة والمُعلقة. و اِذا ضربت صفقة الشراء الهدف تُغلق جميع صفقات الشراءالمُفعلة و المعلقة .
حاولت بهذا الكود لكنه غير صحيح .
شكرا أخي حسن .

if(orderscnt(OP_BUY)==0)CloseOrders(OP_BUYLIMIT)&&CloseOrders(OP_BUY);

kira-h
15-02-2019, 08:22 PM
السلام عليكم أخي حسن.
كيف يمكنني كتابة كود حيث اِذا ضربت صفقة الهدف ,تُغلق كل الصفقات من نفس النوع سواء كانت مفعلة او أوامر معلقة,
مثلا اِذا ضربت صفقة البيع الهدف, تغلق جميع صفقات البيع المفعلة والمُعلقة. و اِذا ضربت صفقة الشراء الهدف تُغلق جميع صفقات الشراءالمُفعلة و المعلقة .
حاولت بهذا الكود لكنه غير صحيح .
شكرا أخي حسن .

if(orderscnt(OP_BUY)==0)CloseOrders(OP_BUYLIMIT)&&CloseOrders(OP_BUY);
وعليكم السلام
الكود مع الشرح كالتالي:


double ClosedTime(int type=-1)//دالة توقيت الاغلاق لاخر صفقة مغلقة
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && (OrderType()==type || type==-1))
{
return(OrderCloseTime());
}
}
return(0);
}


double CurrentTime(int type=-1)//دالة توقيت الافتتاح لآخر صفقة مفعلة
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && (OrderType()==type || type==-1))
{
return(OrderOpenTime());
}
}
return(0);
}

void OnTick()
{
if(ClosedTime(OP_SELL)>CurrentTime()){CloseOrders(OP_SELL);CloseOrders(OP _SELLLIMIT);}

if(ClosedTime(OP_BUY)>CurrentTime()){CloseOrders(OP_BUY);CloseOrders(OP_ BUYLIMIT);}
}

benaissa
16-02-2019, 12:15 PM
شكرا أُستاذي الكريم.

kira-h
16-02-2019, 12:22 PM
شكرا أُستاذي الكريم.
بالتوفبق ان شاء الله

fxover
16-02-2019, 05:37 PM
راجع كود المؤشر المرفق
الف شكر اخي حسن لم افهم الطريقه
هذا هو الكود المطلوب جعله تاريخي

int start() {

if (Period() > PERIOD_D1) {
Print("Error - Chart period is greater than 1 day.");
return (-1);
}
ArrayCopyRates(Gda_408, Symbol(), PERIOD_MN1);
if (Gi_84 == FALSE) {
Gd_104 = Gda_408[1][4];
Gd_88 = Gda_408[1][3];
Gd_96 = Gda_408[1][2];
}
Gd_120 = Gd_88 - Gd_96;
Gd_112 = (Gd_88 + Gd_96 + Gd_104) / 3.0;
G_price_128 = Gd_120 / 50.0 + Gd_112;
G_price_136 = Gd_120 / 2.0 + Gd_112;
G_price_144 = 0.88 * Gd_120 + Gd_112;
G_price_152 = 1.37 * Gd_120 + Gd_112;
G_price_160 = Gd_112 - Gd_120 / 50.0;
G_price_168 = Gd_112 - Gd_120 / 2.0;
G_price_176 = Gd_112 - 0.84 * Gd_120;
G_price_184 = Gd_112 - 1.33 * Gd_120;
G_price_192 = Gd_112 - 0.2 * Gd_120;
G_price_200 = Gd_112 - 0.24 * Gd_120;
G_price_208 = Gd_112 - Gd_120 / 2.0;
G_price_216 = Gd_112 - 0.6 * Gd_120;
G_price_224 = Gd_112 - 0.64 * Gd_120;
G_price_232 = Gd_112 - 0.88 * Gd_120;
G_price_240 = Gd_112 - 1.08 * Gd_120;
G_price_248 = Gd_112 - 1.12 * Gd_120;
G_price_256 = Gd_112 - 1.37 * Gd_120;
G_price_264 = Gd_112 - 1.58 * Gd_120;
G_price_272 = Gd_112 - 1.62 * Gd_120;
G_price_280 = Gd_112 - 1.81 * Gd_120;
G_price_288 = 1.81 * Gd_120 + Gd_112;
G_price_296 = 1.62 * Gd_120 + Gd_112;
G_price_304 = 1.58 * Gd_120 + Gd_112;
G_price_312 = 1.33 * Gd_120 + Gd_112;
G_price_320 = 1.12 * Gd_120 + Gd_112;
G_price_328 = 1.08 * Gd_120 + Gd_112;
G_price_336 = 0.84 * Gd_120 + Gd_112;
G_price_344 = 0.64 * Gd_120 + Gd_112;
G_price_352 = 0.6 * Gd_120 + Gd_112;
G_price_360 = Gd_120 / 2.0 + Gd_112;
G_price_368 = 0.24 * Gd_120 + Gd_112;
G_price_376 = 0.2 * Gd_120 + Gd_112;
if (Gd_120 > 5.0) Gd_384 = Gd_120;
else Gd_384 = 10000.0 * Gd_120;
if (Gd_400 > 5.0) Gd_392 = Gd_400;
else Gd_392 = 10000.0 * Gd_400;

kira-h
16-02-2019, 06:36 PM
الف شكر اخي حسن لم افهم الطريقه
هذا هو الكود المطلوب جعله تاريخي

int start() {

if (Period() > PERIOD_D1) {
Print("Error - Chart period is greater than 1 day.");
return (-1);
}
ArrayCopyRates(Gda_408, Symbol(), PERIOD_MN1);
if (Gi_84 == FALSE) {
Gd_104 = Gda_408[1][4];
Gd_88 = Gda_408[1][3];
Gd_96 = Gda_408[1][2];
}
Gd_120 = Gd_88 - Gd_96;
Gd_112 = (Gd_88 + Gd_96 + Gd_104) / 3.0;
G_price_128 = Gd_120 / 50.0 + Gd_112;
G_price_136 = Gd_120 / 2.0 + Gd_112;
G_price_144 = 0.88 * Gd_120 + Gd_112;
G_price_152 = 1.37 * Gd_120 + Gd_112;
G_price_160 = Gd_112 - Gd_120 / 50.0;
G_price_168 = Gd_112 - Gd_120 / 2.0;
G_price_176 = Gd_112 - 0.84 * Gd_120;
G_price_184 = Gd_112 - 1.33 * Gd_120;
G_price_192 = Gd_112 - 0.2 * Gd_120;
G_price_200 = Gd_112 - 0.24 * Gd_120;
G_price_208 = Gd_112 - Gd_120 / 2.0;
G_price_216 = Gd_112 - 0.6 * Gd_120;
G_price_224 = Gd_112 - 0.64 * Gd_120;
G_price_232 = Gd_112 - 0.88 * Gd_120;
G_price_240 = Gd_112 - 1.08 * Gd_120;
G_price_248 = Gd_112 - 1.12 * Gd_120;
G_price_256 = Gd_112 - 1.37 * Gd_120;
G_price_264 = Gd_112 - 1.58 * Gd_120;
G_price_272 = Gd_112 - 1.62 * Gd_120;
G_price_280 = Gd_112 - 1.81 * Gd_120;
G_price_288 = 1.81 * Gd_120 + Gd_112;
G_price_296 = 1.62 * Gd_120 + Gd_112;
G_price_304 = 1.58 * Gd_120 + Gd_112;
G_price_312 = 1.33 * Gd_120 + Gd_112;
G_price_320 = 1.12 * Gd_120 + Gd_112;
G_price_328 = 1.08 * Gd_120 + Gd_112;
G_price_336 = 0.84 * Gd_120 + Gd_112;
G_price_344 = 0.64 * Gd_120 + Gd_112;
G_price_352 = 0.6 * Gd_120 + Gd_112;
G_price_360 = Gd_120 / 2.0 + Gd_112;
G_price_368 = 0.24 * Gd_120 + Gd_112;
G_price_376 = 0.2 * Gd_120 + Gd_112;
if (Gd_120 > 5.0) Gd_384 = Gd_120;
else Gd_384 = 10000.0 * Gd_120;
if (Gd_400 > 5.0) Gd_392 = Gd_400;
else Gd_392 = 10000.0 * Gd_400;
الكود غير واضح أخي
اشرح فكرة الكود لعمل مؤشر جديد

benaissa
17-02-2019, 02:18 PM
السلام عليكم أخي حسن.
أَود أَن اعرف ,كيف يمكن ان أتحكم في التيك بروفيت صفقات اِكسبيرت مضاعفات التبريد حيث يكون لكل صفقة هدف حسب حجم اللوت : مثلا اذا كان هدف الصفقة الاولى (0.01 )= 10 نقطة . فهدف الثانية مثلا (0.02)=15نقطة .فالثالثة (0.04)=25نقطة ,وهكذا. على أن اتحكم فيها ب input , أضع لكل صفقة معلقة الهدف الذي أُريد .
شكرا أستاذي

kira-h
17-02-2019, 02:52 PM
السلام عليكم أخي حسن.
أَود أَن اعرف ,كيف يمكن ان أتحكم في التيك بروفيت صفقات اِكسبيرت مضاعفات التبريد حيث يكون لكل صفقة هدف حسب حجم اللوت : مثلا اذا كان هدف الصفقة الاولى (0.01 )= 10 نقطة . فهدف الثانية مثلا (0.02)=15نقطة .فالثالثة (0.04)=25نقطة ,وهكذا. على أن اتحكم فيها ب input , أضع لكل صفقة معلقة الهدف الذي أُريد .
شكرا أستاذي
وعليكم السلام
عن طريق استخدام المصفوفة
راجع المشاركة التالية بحيث تستخدم مصفوفة اخرى للاهداف:
دالة مضاعفات اختيارية بناء على المصفوفة (https://www.fxprg.com/vb/showthread.php?t=31456&p=844598&viewfull=1#post844598)

benaissa
17-02-2019, 03:41 PM
مشكور أُستاذي , سأُحاول واِن لم أستطيع سأطلب منك النجدة ههه.

abdel3dim
18-02-2019, 06:52 PM
السلام عليكم ورحمة الله وبركاته
مساعدة جزاكم الله خير
لدي اكسبيرت لكن يفتح صفقات بيع فقط وأريده أن يفتح صفقات شراء

kira-h
18-02-2019, 08:59 PM
السلام عليكم ورحمة الله وبركاته
مساعدة جزاكم الله خير
لدي اكسبيرت لكن يفتح صفقات بيع فقط وأريده أن يفتح صفقات شراء
وعليكم السلام
راجع خانة الجورنال لمعرفة السبب
أو افتح موضوع طلب جديد وارفق الاكسبيرت مفتوح الكود مع الشرح

abdel3dim
19-02-2019, 07:53 PM
وعليكم السلام
راجع خانة الجورنال لمعرفة السبب
أو افتح موضوع طلب جديد وارفق الاكسبيرت مفتوح الكود مع الشرح

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

abdel3dim
19-02-2019, 07:56 PM
لا يوجد مشكل في خانة الجورنال

kira-h
20-02-2019, 02:27 AM
جزاك الله خير في أي جناح أقوم بفتح طلب وهل يمكن ارسل لك الاكسبرت مفتوح حتى تساعدني في اكتشاف المشكل

من هنا
https://www.fxprg.com/vb/forumdisplay.php?f=208

silver
20-02-2019, 03:53 PM
السلام عليكم

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

1- حينما أقوم بتحميل مؤشر أو إكسبيرت من أي موقع أو منتدى هل هناك طريقة لمعرفة ما إذا كان الإكسبيرت قد تم التعديل عليه من قبل أحد ما وقد تم تغيير الكود والإعدادات ، أي أنه ليست النسخة الأصلية للبرمج الأصلي
2- عند اجراء عملية الباك تست أريد معرفة سعر Ask and Bid الحالية لكل تكة سعرية واستخدمت الأوامر التالية والمشكلة هي ظهور أربع خانات فقط بعد الفاصلة وأنا أرغب أن تكون حسب المنصة وهي خمس خانات بعد الفاصلة

الأوامر التي استخدمتها لسعر Bid كما يلي


double vbid = MarketInfo(NULL,MODE_BID);
Comment(NormalizeDouble(vbid,Digits));
أيضا

Comment(NormalizeDouble(vbid,Digits));
أيضا

Comment(Bid);

جميع هذه المحاولات لم تنجح

kira-h
20-02-2019, 07:06 PM
السلام عليكم

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

1- حينما أقوم بتحميل مؤشر أو إكسبيرت من أي موقع أو منتدى هل هناك طريقة لمعرفة ما إذا كان الإكسبيرت قد تم التعديل عليه من قبل أحد ما وقد تم تغيير الكود والإعدادات ، أي أنه ليست النسخة الأصلية للبرمج الأصلي
2- عند اجراء عملية الباك تست أريد معرفة سعر Ask and Bid الحالية لكل تكة سعرية واستخدمت الأوامر التالية والمشكلة هي ظهور أربع خانات فقط بعد الفاصلة وأنا أرغب أن تكون حسب المنصة وهي خمس خانات بعد الفاصلة

الأوامر التي استخدمتها لسعر Bid كما يلي


double vbid = MarketInfo(NULL,MODE_BID);
Comment(NormalizeDouble(vbid,Digits));
أيضا

Comment(NormalizeDouble(vbid,Digits));
أيضا

Comment(Bid);

جميع هذه المحاولات لم تنجح
وعليكم السلام
1 - لا يمكن معرفة ذلك
2 - هذه الحالة فقط للأسعار الخماسية تتحول تلقائيا الى 4 خانات عشرية لتتوافق مع وظائف الشراء والبيع، ويمكن معرفة رقم الخانة الخامسة باستخدام الوظيفة
DoubleToStr(Bid,Digits) ولكن هذه الوظيفة مهمتها تحويل الرقم الى نص والنص لا يصلح للبيع والشراء...
إذا كنت تريد البيع والشراء فضع مباشرة سعر الـ Bid للبيع و الـ Ask للشراء

silver
21-02-2019, 01:38 AM
شكرا لك مشرفنا

طبقت هذه الوظيفة ونجحت والحمد لله
من باب الإطلاع أكثر ضغطت على زر F1 للبحث عن وظيفة DoubleToStr(Bid,Digits) ومازال في ذهني سؤال عنها
حسب فهمي والله أعلم هذه

الوظيفة مهمتها تحويل الرقم الى نص والمقصود بالنص هنا ليس الحروف الهجائية A, b ,c طبعا ولكنها أرقام لمجرد أن يقرئها المستخدم ويطلع عليها ولايمكن إجراء عمليات حسابية من خلالها وتستخدم فقط مع الأمرين Print And Comment

هل هذا صحيح أخي !

kira-h
21-02-2019, 02:12 AM
شكرا لك مشرفنا

طبقت هذه الوظيفة ونجحت والحمد لله
من باب الإطلاع أكثر ضغطت على زر F1 للبحث عن وظيفة DoubleToStr(Bid,Digits) ومازال في ذهني سؤال عنها
حسب فهمي والله أعلم هذه

الوظيفة مهمتها تحويل الرقم الى نص والمقصود بالنص هنا ليس الحروف الهجائية A, b ,c طبعا ولكنها أرقام لمجرد أن يقرئها المستخدم ويطلع عليها ولايمكن إجراء عمليات حسابية من خلالها وتستخدم فقط مع الأمرين Print And Comment

هل هذا صحيح أخي !




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

abdel3dim
21-02-2019, 11:19 AM
من هنا
https://www.fxprg.com/vb/forumdisplay.php?f=208

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

kira-h
21-02-2019, 02:46 PM
جزاك الله خيرا
واياك اخي الكريم

silver
21-02-2019, 05:11 PM
نعم صحيح ويمكن استخدامها ايضا في تسمية الاوبجكت ObjectSet

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

kira-h
21-02-2019, 05:41 PM
شكرا لك مشرفنا القدير حسن
جزاك الله كل خير
وإياك اخي الكريم

forex
22-02-2019, 01:47 AM
السلام عليكم
معي إكسبيرت سوبلكس بأوامر معلقة
أريد أن أضيف متغير جديد يقبل العدد العشري tp sl mp
يعني هذف ووقف الصفقة المعاكسة يكون مضروب في هذه القيمة
يعني الهذف والوقف يزداد في نظام السوبلكس
مثال
tp sl mp =2.0
فتح الإكسبيرت صفقة شراء هذف 20 وستوب 20 وسيعلق أمر معاكس لكن سيكون هذفه 40 ووقف خسارته 40
لو ضربت صفقة الشراء الستوب سيتفعل البيع وسيتم تعليق أمر معاكس لكن بهذف 80 ووقف 80
وهكذا
المطلوب أن تزودني بهذا الكود وأين سأضعه
ولكم جزيل الشكر

Geobeshoy
22-02-2019, 12:03 PM
السلام عليكم
هل يمكن برمجه اكسبرت يفتح صفقات تبريد و لكن صفقات التبريد لا تفتح بلوت ثابت
فيكون اللوت متغير بأحتساب الفرق المسافه بين السعر عند فتح الصفقه الاساسيه و السعر عند توافر صفقه التبريد
و لتكن المسافه ٣٠ نقطه فيضاعف قيمه اللوت المستخدم فى صفقه التبريد ×٣ و هكذا
تحياتى

kira-h
22-02-2019, 06:00 PM
السلام عليكم
معي إكسبيرت سوبلكس بأوامر معلقة
أريد أن أضيف متغير جديد يقبل العدد العشري tp sl mp
يعني هذف ووقف الصفقة المعاكسة يكون مضروب في هذه القيمة
يعني الهذف والوقف يزداد في نظام السوبلكس
مثال
tp sl mp =2.0
فتح الإكسبيرت صفقة شراء هذف 20 وستوب 20 وسيعلق أمر معاكس لكن سيكون هذفه 40 ووقف خسارته 40
لو ضربت صفقة الشراء الستوب سيتفعل البيع وسيتم تعليق أمر معاكس لكن بهذف 80 ووقف 80
وهكذا
المطلوب أن تزودني بهذا الكود وأين سأضعه
ولكم جزيل الشكر
وعليكم السلام
ستستخدم طريقة المصفوفة
يوجد مثال عملي بالموضوع التالي :
https://www.fxprg.com/vb/showthread.php?t=34361

kira-h
22-02-2019, 06:03 PM
السلام عليكم
هل يمكن برمجه اكسبرت يفتح صفقات تبريد و لكن صفقات التبريد لا تفتح بلوت ثابت
فيكون اللوت متغير بأحتساب الفرق المسافه بين السعر عند فتح الصفقه الاساسيه و السعر عند توافر صفقه التبريد
و لتكن المسافه ٣٠ نقطه فيضاعف قيمه اللوت المستخدم فى صفقه التبريد ×٣ و هكذا
تحياتى
وعليكم السلام
نعم ممكن

Geobeshoy
22-02-2019, 10:09 PM
شكرا لردك
تحياتى 😊

sabil
23-02-2019, 11:26 AM
اريد دالة اجمالي الربح فوق الايكويتي الحالي
للشرح اكتر
لو الرصيد والايكويتي مثلا 100 دولار وكتبت اجمالي الربح 10 دولار يبقى كل ما الايكويتي يزيد 10 دولار يقفل كل الصفقات المفتوحة حتى لو مجموعهم خسارة
كالتالي
110
120
130
الخ

kira-h
23-02-2019, 07:35 PM
اريد دالة اجمالي الربح فوق الايكويتي الحالي
للشرح اكتر
لو الرصيد والايكويتي مثلا 100 دولار وكتبت اجمالي الربح 10 دولار يبقى كل ما الايكويتي يزيد 10 دولار يقفل كل الصفقات المفتوحة حتى لو مجموعهم خسارة
كالتالي
110
120
130
الخ

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


input double EquityProfit=0;


static double=E;
int G=0;

void OnTick()
{
if(EquityProfit>0)
{
if(!IsTesting())
{
if(OrdersTotal()==0)GlobalVariableDel("closeall");
if(GlobalVariableGet("Eq")==0||OrdersTotal()==0)GlobalVariableSet("Eq",AccountBalance()+EquityProfit);
if((OrdersTotal()>0&&GlobalVariableGet("Eq")>0&&AccountEquity()>=GlobalVariableGet("Eq"))||GlobalVariableGet("closeall")==10)
{
CloseAllOrders();
GlobalVariableSet("closeall",10);
}
if(GlobalVariableGet("closeall")==10)return;
}
else
{
if(Orderscnt()==0){G=0;}
if(E==0||Orderscnt()==0)E=AccountBalance()+EquityP rofit;
if((Orderscnt()>0&&E>0&&AccountEquity()>=E)||G>0){CloseAllOrders();G++;}
if(G>0)return;
}
}
}


void CloseAllOrders()
{
bool select,close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0)
{
if(OrderType()==OP_BUY){close=OrderClose(OrderTick et(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID ),50);}
if(OrderType()==OP_SELL){close=OrderClose(OrderTic ket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_AS K),50);}
if(OrderType()>OP_SELL){close=OrderDelete(OrderTicket());}
}
}
}

sabil
24-02-2019, 08:07 AM
السلام عليكم
كالتالي :


input double EquityProfit=0;


static double=E;
int G=0;

void OnTick()
{
if(EquityProfit>0)
{
if(!IsTesting())
{
if(OrdersTotal()==0)GlobalVariableDel("closeall");
if(GlobalVariableGet("Eq")==0||OrdersTotal()==0)GlobalVariableSet("Eq",AccountBalance()+EquityProfit);
if((OrdersTotal()>0&&GlobalVariableGet("Eq")>0&&AccountEquity()>=GlobalVariableGet("Eq"))||GlobalVariableGet("closeall")==10)
{
CloseAllOrders();
GlobalVariableSet("closeall",10);
}
if(GlobalVariableGet("closeall")==10)return;
}
else
{
if(Orderscnt()==0){G=0;}
if(E==0||Orderscnt()==0)E=AccountBalance()+EquityP rofit;
if((Orderscnt()>0&&E>0&&AccountEquity()>=E)||G>0){CloseAllOrders();G++;}
if(G>0)return;
}
}
}


void CloseAllOrders()
{
bool select,close;
for(int i=OrdersTotal()-1;i>=0;i--)
{
select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrdersTotal()>0)
{
if(OrderType()==OP_BUY){close=OrderClose(OrderTick et(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID ),50);}
if(OrderType()==OP_SELL){close=OrderClose(OrderTic ket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_AS K),50);}
if(OrderType()>OP_SELL){close=OrderDelete(OrderTicket());}
}
}
}


شكرا اخي حسن
لكن يعطيني خطأ في هذا الكود

static double=E;int G=0;

ما المشكلة؟
https://imgur.com/h06dAec
https://imgur.com/h06dAec
https://imgur.com/a/YRLLxax

morad
24-02-2019, 01:29 PM
السلام عليكم أخي حسن.
سؤالي هو : هل توجد طريقة اِستخراج بعض الشموع أختارهم عن الباقي , او وضع سهم فوقها حتي يسهل ملاحظتها ؟ مثلا :اريد ان ادرس شمعة 8 صباحا لكل يوم لمدة شهر , فكيف يمكنني اِستخراجها او التعليم عليها حتى يسهل ملاحظة تفاصيلها ؟.
شكرا أستاذنا.

kira-h
24-02-2019, 07:32 PM
شكرا اخي حسن
لكن يعطيني خطأ في هذا الكود

static double=E;int G=0;

ما المشكلة؟
https://imgur.com/h06dAec
https://imgur.com/h06dAec
https://imgur.com/a/YRLLxax

خطأ مطبعي واضح أخي
الصحيح كالتالي :


static double E=0;
int G=0;

kira-h
24-02-2019, 07:42 PM
السلام عليكم أخي حسن.
سؤالي هو : هل توجد طريقة اِستخراج بعض الشموع أختارهم عن الباقي , او وضع سهم فوقها حتي يسهل ملاحظتها ؟ مثلا :اريد ان ادرس شمعة 8 صباحا لكل يوم لمدة شهر , فكيف يمكنني اِستخراجها او التعليم عليها حتى يسهل ملاحظة تفاصيلها ؟.
شكرا أستاذنا.
وعليكم السلام
ابسط طريقة عن طريق الوظيفة TimeHour لتحديد شمعة الساعة
راجع كود المؤشر المرفق

sabil
25-02-2019, 07:19 AM
خطأ مطبعي واضح أخي
الصحيح كالتالي :


static double E=0;
int G=0;

ههههه ايوة صحيح
عذرا بقالي فترة بعيد عن الفوركس ونسيت كل المعلومات ههههه
شكراً اخي حسن
==============
تحديث :
تمت التجربة بباكتيست ولاحظت ان الدالة لا تعمل
صورة للتوضيح
https://imgur.com/MM6ZTRS

الخط الاخضر : معناه ان الصفقات اغلقت عند 10060$ وبعدها بدأ الاكسبرت في فتح صفقات جديدة
لو انا كتبت التارجت 10$ في الايكويتي
المفروض ان التارجت القادم هيكون عند 10070$ في الايكويتي والاكسبرت يغلق كل الصفقات المفتوحة على خسارة ولكن هذا مالم يحدث
كما ترى في الصورة
الخط الاحمر : معناه ان الايكويتي تعدى 10090$ اي تارجت فوق الـ 30$ في الايكويتي وليس 10$ ولكن لم يغلق الصفقات !
ارجو حل المشكلة

ملحوظة : هذه الاغلاقات لاني وضعت دالة اغلاق الخسارة بالدولار وليس من دالة الايكويتي

morad
25-02-2019, 04:06 PM
وعليكم السلام
ابسط طريقة عن طريق الوظيفة TimeHour لتحديد شمعة الساعة
راجع كود المؤشر المرفق
شكرا أخي الكريم , حسن .

kira-h
25-02-2019, 07:18 PM
ههههه ايوة صحيح
عذرا بقالي فترة بعيد عن الفوركس ونسيت كل المعلومات ههههه
شكراً اخي حسن
==============
تحديث :
تمت التجربة بباكتيست ولاحظت ان الدالة لا تعمل
صورة للتوضيح
https://imgur.com/MM6ZTRS

الخط الاخضر : معناه ان الصفقات اغلقت عند 10060$ وبعدها بدأ الاكسبرت في فتح صفقات جديدة
لو انا كتبت التارجت 10$ في الايكويتي
المفروض ان التارجت القادم هيكون عند 10070$ في الايكويتي والاكسبرت يغلق كل الصفقات المفتوحة على خسارة ولكن هذا مالم يحدث
كما ترى في الصورة
الخط الاحمر : معناه ان الايكويتي تعدى 10090$ اي تارجت فوق الـ 30$ في الايكويتي وليس 10$ ولكن لم يغلق الصفقات !
ارجو حل المشكلة

ملحوظة : هذه الاغلاقات لاني وضعت دالة اغلاق الخسارة بالدولار وليس من دالة الايكويتي

الشروط سليمة برمجيا

kira-h
25-02-2019, 07:19 PM
شكرا أخي الكريم , حسن .
العفو أخي الكريم

silver
27-02-2019, 03:29 PM
مشرفنا القدير حسن
السلام عليكم ورحمة الله وبركاته
بالنسبة لحسابات من نوع ecn عند استخدام دالة التريلينج ستوب
حاولت تطبيق فكرة تحويل الكوميشن إلى نقاط ومن ثم يتم إضافته إلى السبريد
مثلا لو كان السبريد الحقيقي الآن هو 0.3 نقطة والكوميشن بعد تحويله إلى نقاط هو 0.6
إذن في هذه الحالة سوف تعمل دالة التريلينج ستوب بسبريد مقداره 0.9 نقاط ... وهكذا
طبعا دائما التريلينج ستوب والتريلينج ستيب سوف يعملون بشكل طبيعي حسب الإعدادات المدخلة
ولكن الفرق هنا كما هو موضح في زيادة عدد نقاط السبريد بإضافة عدد نقاط الكوميشن
حاولت عدة مرات ولكن لم يضبط الأمر، آخر كود عدلت عليه بالأسفل
أتمنى من يدك الذهبية إضافة التعديل الصحيح


void MoveTrailingStop()
{
bool s,mod;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
orc=OrderCommission(),
tp=OrderTakeProfit();
if(sy==Symbol()&&mn==MagicNo&&ot<=OP_SELL)
{
if(ot==OP_BUY)
{
if(TrailingStop>0&&NormalizeDouble(Ask-(TrailingStep*point),Digits)>NormalizeDouble((op+(TrailingStop*point)),Digits))
{
if((NormalizeDouble(sl,Digits)<NormalizeDouble(Bid-(TrailingStop*point) + (orc* point) ,Digits))||(sl==0))
{
mod=OrderModify(tk,op,NormalizeDouble(Bid-(TrailingStop*point) + (orc* point),Digits),tp,0,Blue);
}
}
}
else
{
if(TrailingStop>0&&NormalizeDouble(Bid+(TrailingStep*point),Digits)<NormalizeDouble((op-(TrailingStop*point)),Digits))
{
if((NormalizeDouble(sl,Digits)>(NormalizeDouble(Ask+(TrailingStop*point) - (orc* point) ,Digits)))||(sl==0))
{
mod=OrderModify(tk,op,NormalizeDouble(Ask+(Trailin gStop*point) - (orc* point) ,Digits),tp,0,Red);
}
}
}
}
}
}

kira-h
27-02-2019, 07:46 PM
مشرفنا القدير حسن
السلام عليكم ورحمة الله وبركاته
بالنسبة لحسابات من نوع ecn عند استخدام دالة التريلينج ستوب
حاولت تطبيق فكرة تحويل الكوميشن إلى نقاط ومن ثم يتم إضافته إلى السبريد
مثلا لو كان السبريد الحقيقي الآن هو 0.3 نقطة والكوميشن بعد تحويله إلى نقاط هو 0.6
إذن في هذه الحالة سوف تعمل دالة التريلينج ستوب بسبريد مقداره 0.9 نقاط ... وهكذا
طبعا دائما التريلينج ستوب والتريلينج ستيب سوف يعملون بشكل طبيعي حسب الإعدادات المدخلة
ولكن الفرق هنا كما هو موضح في زيادة عدد نقاط السبريد بإضافة عدد نقاط الكوميشن
حاولت عدة مرات ولكن لم يضبط الأمر، آخر كود عدلت عليه بالأسفل
أتمنى من يدك الذهبية إضافة التعديل الصحيح


void MoveTrailingStop()
{
bool s,mod;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
orc=OrderCommission(),
tp=OrderTakeProfit();
if(sy==Symbol()&&mn==MagicNo&&ot<=OP_SELL)
{
if(ot==OP_BUY)
{
if(TrailingStop>0&&NormalizeDouble(Ask-(TrailingStep*point),Digits)>NormalizeDouble((op+(TrailingStop*point)),Digits))
{
if((NormalizeDouble(sl,Digits)<NormalizeDouble(Bid-(TrailingStop*point) + (orc* point) ,Digits))||(sl==0))
{
mod=OrderModify(tk,op,NormalizeDouble(Bid-(TrailingStop*point) + (orc* point),Digits),tp,0,Blue);
}
}
}
else
{
if(TrailingStop>0&&NormalizeDouble(Bid+(TrailingStep*point),Digits)<NormalizeDouble((op-(TrailingStop*point)),Digits))
{
if((NormalizeDouble(sl,Digits)>(NormalizeDouble(Ask+(TrailingStop*point) - (orc* point) ,Digits)))||(sl==0))
{
mod=OrderModify(tk,op,NormalizeDouble(Ask+(Trailin gStop*point) - (orc* point) ,Digits),tp,0,Red);
}
}
}
}
}
}

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

جرب الدالة التالية :


void MoveTrailingStop()
{
bool s,mod;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
orc=OrderCommission(),
tp=OrderTakeProfit();
if(sy==Symbol()&&mn==MagicNo&&ot<=OP_SELL)
{
if(ot==OP_BUY)
{
if(TrailingStop>0&&NormalizeDouble(Ask-(TrailingStep*point),Digits)>NormalizeDouble(op+(TrailingStop+orc)*point,Digits ))
{
if((NormalizeDouble(sl,Digits)<NormalizeDouble(Bid-(TrailingStop+orc)*point,Digits))||(sl==0))
{
mod=OrderModify(tk,op,NormalizeDouble(Bid-(TrailingStop+orc)*point,Digits),tp,0,Blue);
}
}
}
else
{
if(TrailingStop>0&&NormalizeDouble(Bid+(TrailingStep*point),Digits)<NormalizeDouble(op-(TrailingStop+orc)*point,Digits))
{
if((NormalizeDouble(sl,Digits)>(NormalizeDouble(Ask+(TrailingStop+orc)*point,Digi ts)))||(sl==0))
{
mod=OrderModify(tk,op,NormalizeDouble(Ask+(Trailin gStop+orc)*point,Digits),tp,0,Red);
}
}
}
}
}
}

sabil
28-02-2019, 07:17 AM
الشروط سليمة برمجيا
اوك
هحاول احل المشكلة بطرق تانية
الان اريد دالة مساواة العقود ببعضها
يعني لو عندنا 5 عقود بيع بلوت اساسي 0.01 لكل عقد
ومش عندنا اي اوردرات شراء تكون صفقة الشراء القادمة بلوت 0.05 اللي هي مجموع عقود البيع
وهكذا .......

silver
28-02-2019, 10:18 AM
وعليكم السلام

جرب الدالة التالية :


void MoveTrailingStop()
{
bool s,mod;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
string sy=OrderSymbol();
int tk=OrderTicket(),
ot=OrderType(),
mn=OrderMagicNumber();
double op=OrderOpenPrice(),
sl=OrderStopLoss(),
orc=OrderCommission(),
tp=OrderTakeProfit();
if(sy==Symbol()&&mn==MagicNo&&ot<=OP_SELL)
{
if(ot==OP_BUY)
{
if(TrailingStop>0&&NormalizeDouble(Ask-(TrailingStep*point),Digits)>NormalizeDouble(op+(TrailingStop+orc)*point,Digits ))
{
if((NormalizeDouble(sl,Digits)<NormalizeDouble(Bid-(TrailingStop+orc)*point,Digits))||(sl==0))
{
mod=OrderModify(tk,op,NormalizeDouble(Bid-(TrailingStop+orc)*point,Digits),tp,0,Blue);
}
}
}
else
{
if(TrailingStop>0&&NormalizeDouble(Bid+(TrailingStep*point),Digits)<NormalizeDouble(op-(TrailingStop+orc)*point,Digits))
{
if((NormalizeDouble(sl,Digits)>(NormalizeDouble(Ask+(TrailingStop+orc)*point,Digi ts)))||(sl==0))
{
mod=OrderModify(tk,op,NormalizeDouble(Ask+(Trailin gStop+orc)*point,Digits),tp,0,Red);
}
}
}
}
}
}




شكرا لك مشرفنا القدير
جزالك الله ألف خير

sabil
28-02-2019, 06:41 PM
اوك
هحاول احل المشكلة بطرق تانية
الان اريد دالة مساواة العقود ببعضها
يعني لو عندنا 5 عقود بيع بلوت اساسي 0.01 لكل عقد
ومش عندنا اي اوردرات شراء تكون صفقة الشراء القادمة بلوت 0.05 اللي هي مجموع عقود البيع
وهكذا .......
دورت على الدالة عندي ووجدتها لكن للاسف لا تعمل ابداً على الباكتيست رغم عدم وجود اخطاء برمجية
حاولت بشتى الطرق لكن دون جدوى
ارفقت الاكسبرت مفتوح
ارجو فحصه وتعديل الخطأ ان وجد وبالمرة شوف حكاية اغلاق الربح في الايكويتي

kira-h
01-03-2019, 01:11 AM
دورت على الدالة عندي ووجدتها لكن للاسف لا تعمل ابداً على الباكتيست رغم عدم وجود اخطاء برمجية
حاولت بشتى الطرق لكن دون جدوى
ارفقت الاكسبرت مفتوح
ارجو فحصه وتعديل الخطأ ان وجد وبالمرة شوف حكاية اغلاق الربح في الايكويتي

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

sabil
01-03-2019, 07:51 AM
كل شيء سليم إلا شروط فتح الصفقات
راجع النسخة المرفقة
شكرا ع التعديل
بعد عمل الباكتيست تبين الاتي
1- فتح صفقات كثيرة وهذا مخالف لشروطي لذلك انا اشترطت عدم وجود صفقات في شرط الدخول الاول كي يحد من فتح صفقات كثيرة.
2- دالة مساواة العقود ما زالت لا تعمل.
3- كذلك دالة الربح في الايكويتي لا تعمل.

Ahmed Esmail
01-03-2019, 12:26 PM
السلام عليكم اخي حسن لدي اكسبيرت ولكني اريد اضافة دالة لفتح صفقة معاكسة للصفقة الخاسرة بمعني عمل هيدج فاذا كانت الصفقة المفتوحة لزوج اليورو دولار بيع وانعكس السعر ٢٠ نقطة يدخل شراء ولا يغلق الصفقة المفتوحة