النتائج 1 إلى 10 من 10
الموضوع: سؤال برمجي للاخ مستر دولار
- 13-10-2010, 07:17 AM #1
سؤال برمجي للاخ مستر دولار
اخي مستر دولار لقد برمجت اكسبيرت بسيط للتعلم وهو يعتمد على مؤشر واحد فقط (signal line ) واريد هذا الاكسبيرت
1-ان يعمل على كل العملات او على عملات مختارة من عندي بنفس الوقت
2-تكون كل الصفقات على نفس الحساب
3-ان يفتح عدد معين من الصفقات لكل عملة مثلا صفقة واحدة او اثنتين على الكيبل ومثله على اليورو دولار
4- و اخيرا اخي ما الوضع لو كانت شروط الدخول مختلفة من عملة لاخرى (لكن باستخدام نفس المؤشر المستخدم في الاكسبيرت) يعني مثلا period هي 15 للكيبل ولكنها 20 لليورو دولار ، فهل هنا يلزمني ان اضع الاكسبيرت على كل شارت عملة اريدها ؟
اخي مستر دولار مرفق الاكسبيرت - ان شاء الله يكون قد المقام
جزاكم الله خيرا
- 13-10-2010, 12:31 PM #2
رد: سؤال برمجي للاخ مستر دولار
1 _ هنا أكثر من طريقة لتنفيذ طلبك الأول وسيعتمد الحل على فكرة الإكسبرت فالحل الأسهل هو أن تضع الإكسبرت على شارت العمله التي تريد العمل عليها وبالتالي سيعمل الإكسبرت على هذه العمله ثم قم بضبط إعدادات الإكسبرت حسب ما تريد وطبعا لا تنسى تغيير الماجيك نمبر في كل مرة تضع الإكسبرت على الشارت على عمله مختلفه
الحل الآخر هو من الكود نفسه هذا في حال أردت مثلا عند تحقق أحد الشروط أن يفتح الإكسبرت أكثر من صفقة على أكثر من زوج في وقت واحد كمثال راجع هذا الإكسبرت
https://forum.arabictrader.com/t108035.html#post1876897
لكن أعتقد أن هذا ليس ما تريده حسب فهمي لسؤالك
2_ بالتأكيد ستكون كل الصفقات على نفس الحساب بما أنك وضعت الإكسبرت على أكثر من شارت على نفس الحساب وسيفتح الإكسبرت صفقات على الزوج الذي وضعت الإكسبرت عليه
3_ إذا كنت تقصد فتح صفقتين مثلا عند تحقق الشروط في نفس الوقت في هذه الحاله يمكنك تكرار الأمر OrderSend مره أخرى في حال مثلا أردته أن يفتح صفقتين وليس صفقه واحده أو يمكنك إستخدام الحلقه for على سبيل المثال :
كود PHP:for(int i=0;i<MaxOrders;i++){
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage*Q,0,0,"amj-single",Magic,0,Green);
if(ticket>0)
{
OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(sl,digits),NormalizeDouble(tp,digits),0,Green);//للعمل على بروكر ECN
}
}
أما إذا كنت تقصد أن لا يزيد عدد الصفقات المفتوحه على نفس الزوج ككل عن عدد معين تقوم بتحديده في هذه الحاله يمكنك عمل داله تعود بعدد الصفقات المفتوحه كمثال:
كود PHP:int orderscnt(){
int cnt=0;
for(int i =0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber()){
cnt++;
}
}
}
return(cnt);
}
كود PHP:if(orderscnt()<MaxOrders)
4_ بالتأكيد يجب أن تضع الإكسبرت على شارت كل عمله تريد أن يعمل الإكسبرت عليه وقم بتغيير الإعدادات حسب ما تريد في كل مره
بالتوفيق وبارك الله فيك
- 13-10-2010, 06:57 PM #3
رد: سؤال برمجي للاخ مستر دولار
جزاك الله خيرا اخي حسن العرض وسرعة الاستجابة وجزى الله خيرا القائمين على هذا المنتدى
الحمد لله الاكسبيرت الان ينفذ المطلوب ولنا عودة اذا كان لنا اي سؤال ان شاء الله
بارك الله بك وبعلمك
- 14-10-2010, 06:48 AM #4
رد: سؤال برمجي للاخ مستر دولار
اخي مستر دولار السلام عليكم
الاكسبيرت الان يفتح عدد الصفقات المحددة له وعلى العملات المطلوبة ايضا بحيث اضعه على شارت العملة المطلوبة فيقوم بفتح الصفقة لكن ظهرت مشكلة انه لا ينفذ شروط ما بعد فتح الصفقة مثل شروط الاغلاق و التريلنغ ستوب وهذه المشكلة لم تكن سابقا . اي من السطر
كود PHP://now we have to handle opening positions
بارك الله فيك ووفقك لكل خير
- 15-10-2010, 01:04 AM #5
رد: سؤال برمجي للاخ مستر دولار
الخطأ عندك في هذا السطر
كود PHP:for (cnt=0;cnt<total;cnt++)
فلن يكون الشرط صحيح بالتالي لن ينفذ جسد الحلقه
لذلك قم بجعله بالشكل الآتي
كود PHP:for (cnt=0;cnt<OrdersTotal();cnt++)
كود PHP:total=OrdersTotal();
- 15-10-2010, 01:03 PM #6
رد: سؤال برمجي للاخ مستر دولار
الاكسبيرت يشتغل تمام الان
جزاك الله كل خير اخي مستر دولار على مجهودك معنا
- 20-10-2010, 04:18 PM #7
رد: سؤال برمجي للاخ مستر دولار
السلام عليكم اخي مستر دولار ملاحظتان على نفس الاكسبيرت لو سمحت :
1- كنت فاتح صفقة بيع يدوي على الكيبل ثم تحققت شروط شراء حسب الاكسبيرت فاغلق صفقة البيع اليدوية التي لا تخص الاكسبيرت وفتح صفقة شراء رغم وجود الكود الذي يجعله يتعرف على صفقاته فقط ؟
2-الحالة الاخرى هي ان شروط الصفقة تحققت بيع مثلا و فتح عملية بيع :
أ - تحقق الهدف في الشمعة اللاحقة لكنه استمر في فتح عملية بيع مرة اخرى لان شروط الدخول مازالت متحققة في الشمعة السابقة : فما هو الكود الذي الذي يجعل الاكسبيرت لا يكرر الدخول مرة اخرى لان الهدف قد تحقق سابقا .
ب -نفس الصفقة السابقة( وقبل ما يحقق الهدف ) ضرب الاستوب لوز في الشمعة اللاحقة لكن اريده ان يفتح صفقة مرة اخرى لان شروط الدخول مازالت متحققة في الشمعة السابقة
ج- يكون لنا خيار تفعيل هذين الشرطين او احدهما
جزاك الله كل خير اخي و بارك الله فيكآخر تعديل بواسطة ABU-NOOR ، 20-10-2010 الساعة 04:20 PM
- 20-10-2010, 05:43 PM #8
رد: سؤال برمجي للاخ مستر دولار
حسب الكود الذي إستخدمته
كود PHP:for (cnt=0;cnt<OrdersTotal();cnt++)
{//7
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderType()<=OP_SELL && OrderSymbol()==Symbol())
{//8
if (OrderType()==OP_BUY) // long postion is opened
{//9
// should be closed?
if (SignalLineDn==2147483647&&SignalLineUp_3==2147483647)
{//10
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);//close position
return (0);
}//10
//check for trailing stop
if (TS>0)
{//11
if (Bid-OrderOpenPrice()>=point*TS)
{//12
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Green);
return(0);
}//12
}//11
}//9
else //short position is opened
// should be closed
if (SignalLineUp==2147483647&&SignalLineDn_3==2147483647)
{//13
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);//close position
return (0);
}//13
if (TS>0)
{//14
if (OrderOpenPrice()-Ask>=point*TS)
{//15
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Silver);
return(0);
}//15
}//14
}//8
}//7
بالنسبة حتى تمنع الإكسبرت من فتح صفقه أخرى في نفس الشمعة راجع الإكسبرت المرفق وراجع هذا الجزء
كود PHP:Time0!=Time[0]
- 20-10-2010, 06:20 PM #9
رد: سؤال برمجي للاخ مستر دولار
جزاك الله كل خير اخي
انا ما عندي مشكلة في دالة التعامل مع الصفقات المفتوحة التي ارفقها حضرتك اخي فأنا عدلتها سابقا .
المشكلة ان الاكسبيرت يغلق اي صفقات لاتخصه رغم انني استخدم الدالة التاليه التي يتم بموجبها فحص الصفقات المفتوحه بناء على نوع العملة والماجيك نمبر
كود PHP:/ داله تعود بعدد الصفقات المفتوحه
int orderscnt()
{
int cnt=0;
for(int i =0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && Magic==OrderMagicNumber())
{
cnt++;
}
}
}
return(cnt);
}
بالنسبة للسؤال الثاني يظهر انك نسيت ترفق الاكسبيرت المحتوي على حل مشابه .. الله يعينك علينا
بارك الله فيك
- 20-10-2010, 06:29 PM #10
رد: سؤال برمجي للاخ مستر دولار
يا أخي الكريم هل قرأت ردي السابق جيدا وراجعت الكود الذي وضعته لك
لا علاقة لكود حساب عدد الصفقات الحاليه بإغلاق صفقة ليست للإكسبرت
راجع مشاركتي السابقه سوف تجد الآتي
كود PHP:if (OrderType()<=OP_SELL && OrderSymbol()==Symbol())
كود PHP:if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
مرفق الإكسبرت