رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة waleedgadelmola
الأخ الكريم الاستاذ يوسف او الأخ الكريم الاستاذ مستر دولار
جزاك الله خير
قمت بتجربة الأكسبرت وفعلا قام بإغلاق جميع الصفقات دفعة واحده بعد اضافة المتغير
كم تفضلت استاذ يوسف
ولكن تم اغلاق الصفقات على خسارة قليلة أتوقع أنها نتيجة إعادة التسعير ( ري كوت )
هل من حل برمجي لها لأغلاق الصفقات دفعة واحده بشرط ضمان أنها تكون اكبر من الصفر لأن الاكسبرت لم ينظر إلى الشرط أو سبب اعادة التسعير والحركة السريعة
كود PHP:
if(OrdersTotal()>0&&AccountProfit()>0)
مرفق الاكسبرت
للأسف يا أخي لا يوجد لها حل برمجي
والإكسبيرت برمجياً يعمل بشكل صحيح كما ذكرت أعلاه
--------
لكن من الممكن ان تجعل AccountProfit()>50 مثلا أو حسب ما تراه يتناسب مع احجام اللوت المستخدمة
ممكن تخليها 10 أو 20 .... بحيث يكون في وقت متاح لإغلاق جميع العقود قبل العودة لقيمة سالبة
يمكنك جعل البروفت متغير خارجي وتقوم بوضع قيم مختلفة لتراى ما يناسبك
كود PHP:
if(OrdersTotal()>0&&AccountProfit()>=USDProfit)
وتقوم بتعريفها كمتغير خارجي
كود PHP:
extern int USDProfit=10;
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة wadi2012
عندي سؤالان
1- عند عمل امر for لطباعة ارقام من 0 الى 6 واريد استخدام امر comment ليطبع كل رقم في سطر مستقل فهل يمكن ذلك لانني لم اتوصل الى حل حيث نفذت في اخر امر comment
"\n
ولكن لم تطبع الارقام في سطر مستقل ولكن في نفس السطر وبآخر رقم فقط
2- عند تعريف متغير خارجي external لمتغير ما اريدان يقبل عبارتين مثل المتغير من النوع bool ولكن bool تقبل false او true ولكن اريد تعريف متغير مثل الاختيار الذاتي ل true و false
حاولت تعريف متغير من النوع نص string ليقبل نصين مثل
extern string select= "buy"
select="sell"
كي تظهر مع بعض في النافذة لاختيار اين منهما لتنفيذ مهمة ولكن لا يقبل البرنامج فهل من طريقة لتنفيذ ذلك على نمط true و false ؟؟؟
في كل مره تستخدم الأمر comment فإنه يحذف جميع الكومنتات السابقه ويبدأ في الكتابه من جديد من أول السطر
الحل أن تستخدم ObjectCreate لكتابة النصوص على الشاشه
بالنسبه للسؤال الثاني لا يمكن ذلك
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
في كل مره تستخدم الأمر comment فإنه يحذف جميع الكومنتات السابقه ويبدأ في الكتابه من جديد من أول السطر
الحل أن تستخدم ObjectCreate لكتابة النصوص على الشاشه
بالنسبه للسؤال الثاني لا يمكن ذلك
انا اعرف object creat
ولكن ظننت انه توجد فكرة بالنسبة للcomment كنوع من التحايل البرمجي فقط
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة waleedgadelmola
السلام عليكم
كيف لنا جعل الاكسبرت يقوم بفتح أوامر على جميع العملات الموجودة بالمنصة مع وضعة على شارت عملة واحد ؟
ولكم الشكر
انا لم افهم سؤالك أرجو التوضيح
يعني ماذا تقصد اذا وضعنا اكسبيرت على شارت اليورو دولار وتريد فتح صفقة على الباوند دولار وانت تفتح شارت اليورو دولار وعليه الاكسبيرت ؟
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة waleedgadelmola
السلام عليكم
كيف لنا جعل الاكسبرت يقوم بفتح أوامر على جميع العملات الموجودة بالمنصة مع وضعة على شارت عملة واحد ؟
ولكم الشكر
شوف Symbol() دي عبارة عن دالة من النوع النصي .. تعود بإسم العملة الموضوع عليها الإكسبيرت
يعني لو وضعتها على شارت اليورو دولار ستعود بـ "EURUSD" أو حسب إسم العملة على المنصة عندك مثلا "EURUSDr"
فلو إنت عايز تخلي الإكسبيرت يوضع على أي شارت ويفتح عمليات على عملات أخرى
1 - لن تستخدم Symbol() ولكن ستستخدم إسم العملة مباشرة
2 - ستقوم بتعريف متغير وتعطيه قيمة Ask أو Bid للعملة وتستخدم المتغير في أي حاجة في الإكسبيرت بدل من سعر الشراء أو البيع المباشر
مثال على عمليات الشراء
كود PHP:
double EURUSDAsk=MarketInfo("EURUSD",MODE_ASK);
double GBPUSDAsk=MarketInfo("GBPUSD",MODE_ASK);
double USDCHFAsk=MarketInfo("USDCHF",MODE_ASK);
OrderSend("EURUSD",OP_BUY,0.1,EURUSDAsk,30,SL,TP,"",MagicNumber,0,Lime);
OrderSend("GBPUSD",OP_BUY,0.1,GBPUSDAsk,30,SL,TP,"",MagicNumber,0,Lime);
OrderSend("USDCHF",OP_BUY,0.1,USDCHFAsk,30,SL,TP,"",MagicNumber,0,Lime);
مثال على عمليات البيع
كود PHP:
double EURUSDBid=MarketInfo("EURUSD",MODE_BID);
double GBPUSDBid=MarketInfo("GBPUSD",MODE_BID);
double USDCHFBid=MarketInfo("USDCHF",MODE_BID);
OrderSend("EURUSD",OP_SELL,0.1,EURUSDBid,30,SL,TP,"",MagicNumber,0,Lime);
OrderSend("GBPUSD",OP_SELL,0.1,GBPUSDBid,30,SL,TP,"",MagicNumber,0,Lime);
OrderSend("USDCHF",OP_SELL,0.1,USDCHFBid,30,SL,TP,"",MagicNumber,0,Lime);
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة waleedgadelmola
السلام عليكم
كيف لنا جعل الاكسبرت يقوم بفتح أوامر على جميع العملات الموجودة بالمنصة مع وضعة على شارت عملة واحد ؟
ولكم الشكر
وعليكم السلام ورحمة الله وبركاته
بالإضافه إلى ما قاله الإخوه مرفق سكربت كمثال يفتح على أكثر من زوج
رد:موضوع مخصص للأسئلة البرمجية
السلام عليكم ورحة الله وبركاته
الأخوة الأفاضل
بعد مزيد من التحية
أقوم بعملي البرمجي الأن من خلال عمل مكتبة دوال من خلال تجميع دوال كثيرة للاستاذ أسامه الله يجزاه عني كل خير من اكسبرتات متعددة لحضرته وكل ما أحتاج دالة أقوم بنسخها من هذا الملف ووضعها بالمكان المناسب في الاكسبرت اللي أقوم ببرمجتة
ولكن أليس آن الأوان لكي أفهم فكرة تصميم الدوال حتى نكون فاهمين وليس حافظين
أرجو التكرم بشرح ولو بسيط عن الدوال ( مشكلتي الكبيرة ) في البرمجة
يعني مثلا
1- فكرة انشاء الدوال والغرض منها
2- كيف يتم صياغة دالة متكاملة بشكل صحيح
3- كما أرجو التكرم بأن يكون الشرح على الدالتين المرفقين طبعا برمجة الاستاذ العبقري أسامة
( ما شاء الله ولا حول ولا قوة الا بالله )
لأني أحتاج لتصميم أكسبرت تقريبا بنفس فكرة هذه الدوال
ولكم الشكر
دالة الشراء
كود PHP:
void AddBuy(){
if(Q>ordersS(MagicNumberB)&&ordersS(MagicNumberB)>0){
for(int i=0;i<OrdersHistoryTotal();i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if(OrderType()==OP_BUY){
int type=OrderType();double open=OrderOpenPrice();double lott=OrderLots();double stop=OrderStopLoss();
double profit=OrderTakeProfit();
}
}{
if(Ask>open+3*point){
OrderSend(Symbol(),OP_BUYLIMIT,lott,open,3,stop,profit,"MR.dollar EA",MagicNumberB,0,Green);}
if(Ask<open-3*point){
OrderSend(Symbol(),OP_BUYSTOP,lott,open,3,stop,profit,"MR.dollar EA",MagicNumberB,0,Green);}
}
}
}
دالة البيع
كود PHP:
void AddSell(){
if(Qq>ordersS(MagicNumberS)&&ordersS(MagicNumberS)>0){
for(int i=0;i<OrdersHistoryTotal();i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if(OrderType()==OP_SELL){
int type=OrderType();double open=OrderOpenPrice();double lott=OrderLots();double stop=OrderStopLoss();
double profit=OrderTakeProfit();
}
}{
if(Bid<open-3*point){
OrderSend(Symbol(),OP_SELLLIMIT,lott,open,3,stop,profit,"MR.dollar EA",MagicNumberS,0,Red);}
if(Bid>open+3*point){
OrderSend(Symbol(),OP_SELLSTOP,lott,open,3,stop,profit,"MR.dollar EA",MagicNumberS,0,Red);}
}
}
}
وشكرا
1 مرفق
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة waleedgadelmola
السلام عليكم ورحة الله وبركاته
الأخوة الأفاضل
بعد مزيد من التحية
أقوم بعملي البرمجي الأن من خلال عمل مكتبة دوال من خلال تجميع دوال كثيرة للاستاذ أسامه الله يجزاه عني كل خير من اكسبرتات متعددة لحضرته وكل ما أحتاج دالة أقوم بنسخها من هذا الملف ووضعها بالمكان المناسب في الاكسبرت اللي أقوم ببرمجتة
ولكن أليس آن الأوان لكي أفهم فكرة تصميم الدوال حتى نكون فاهمين وليس حافظين
أرجو التكرم بشرح ولو بسيط عن الدوال ( مشكلتي الكبيرة ) في البرمجة
يعني مثلا
1- فكرة انشاء الدوال والغرض منها
2- كيف يتم صياغة دالة متكاملة بشكل صحيح
3- كما أرجو التكرم بأن يكون الشرح على الدالتين المرفقين طبعا برمجة الاستاذ العبقري أسامة
( ما شاء الله ولا حول ولا قوة الا بالله )
لأني أحتاج لتصميم أكسبرت تقريبا بنفس فكرة هذه الدوال
ولكم الشكر
دالة الشراء
كود PHP:
void AddBuy(){
if(Q>ordersS(MagicNumberB)&&ordersS(MagicNumberB)>0){
for(int i=0;i<OrdersHistoryTotal();i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if(OrderType()==OP_BUY){
int type=OrderType();double open=OrderOpenPrice();double lott=OrderLots();double stop=OrderStopLoss();
double profit=OrderTakeProfit();
}
}{
if(Ask>open+3*point){
OrderSend(Symbol(),OP_BUYLIMIT,lott,open,3,stop,profit,"MR.dollar EA",MagicNumberB,0,Green);}
if(Ask<open-3*point){
OrderSend(Symbol(),OP_BUYSTOP,lott,open,3,stop,profit,"MR.dollar EA",MagicNumberB,0,Green);}
}
}
}
دالة البيع
كود PHP:
void AddSell(){
if(Qq>ordersS(MagicNumberS)&&ordersS(MagicNumberS)>0){
for(int i=0;i<OrdersHistoryTotal();i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if(OrderType()==OP_SELL){
int type=OrderType();double open=OrderOpenPrice();double lott=OrderLots();double stop=OrderStopLoss();
double profit=OrderTakeProfit();
}
}{
if(Bid<open-3*point){
OrderSend(Symbol(),OP_SELLLIMIT,lott,open,3,stop,profit,"MR.dollar EA",MagicNumberS,0,Red);}
if(Bid>open+3*point){
OrderSend(Symbol(),OP_SELLSTOP,lott,open,3,stop,profit,"MR.dollar EA",MagicNumberS,0,Red);}
}
}
}
وشكرا
مرفق الاكسبرت
رد:موضوع مخصص للأسئلة البرمجية
اقتباس:
المشاركة الأصلية كتبت بواسطة daod
هل اذا قمت بحذف مايوجد بداخل وظيفه المقدمه والنهايه لم يؤثر على عمل الاكسبيرت؟
اخي اسامه بعد ما قرات الموضوع هناك بعض الملاحظات
هناك بعض المتغيرات لم افهمها وهي
extern bool FridayCloseEA=false
extern int Distance_AddBuyS=0
extern bool ReverseClosedOrders=false
,وقسم اخر من المتغيرات لا اعرف ايش الفرق بينها لتشابهها مع بعضها
منها
extern bool UseHourTrade = false; و extern bool OpenAtChoosenHour=false;
وكذلك ايش الفرق بين المتغيرايين
extern bool FridayCloseOrders=false;
extern int _Hour=20;
والمتغير
extern bool FridayCloseEA=false;
extern int Friday_CloseHour=20
بالنسبه بعد التجربه للاكسبيرت وجدت هنا ك عيب الى الان وهو انه احيانا وليس دائما يقوم بفتح الصفقه مرة أخرى بعد إغلاقها سواء أغلقت على ربح أو خسارةلكن بشكل مكرر او ثنائي اي امرين معلقين بنفس الوقت بدل من عقد واحد فقط والاصل هو ان يفتح امر معلق واحد فقط بدلا عن الامر الذي اغلق سواء على ربح اوخساره .
بالتأكيد سوف يؤثر على الإكسبرت وإلا لما أضفت الكود لو لم يكن له فائده
بالنسبه للإعدادات
FridayCloseEA لإيقاف عمل الإكسبرت يوم الجمعه في ساعة محدده
Distance_AddBuyS عدد نقاط المسافه بين أوامر الباي ستوب المعلقه
ReverseClosedOrders عكس وضع الأوامر المعلقه التي تغلق فمثلا لو أغلق أمر شراء يضع مكانه في نفس النقطه أمر بيع والعكس صحيح
UseHourTrade لتشغيل الإكسبرت في ساعات محدده مثلا من الساعه 1 إلى الساعه 12
أما OpenAtChoosenHour لوضع الأوامر في ساعه محدده فقط وليس العمل خلال ساعات معينه
FridayCloseOrders لإغلاق الصفقات المفتوحه يوم الجمعه في ساعه محدده
_Hour ساعة إغلاق الصفقات يوم الجمعه
أما FridayCloseEA لإيقاف فقط عمل الإكسبرت وليس إغلاق الصفقات المفتوحه
حتى تحل مشكله الخطأ حاول تقليل عدد الأوامر المعلق المفتوحه لكل نوع