النتائج 1 إلى 14 من 14
- 12-05-2014, 03:22 AM #1
...:::@@مساعدة في كود برمجي للاوامر المعلقة @@:::..
السلام عليكم ورحمة الله وبركاته
تحية عطرة لكل الاخوة الكرام المتواجدين في هذا المنتدي العظيم
وتحية خاصة لاستاذي الجليل مستر دولار الذي تعلمت منه البرمجه وفضله علي لا انكره ابدا
الاخوة المبرمجين
انا اكتب الان اكسبرت وواجهتني مشكله احتاج لها حل
المشكله ببساطه كالاتي
الاكسبرت يقوم بالمتاجره من تلقاء نفسه بدون اي مشاكل مطلقا ولكن
اريد ان اجعله يضع امر معلق شراء علي مسافة ولتكن x من النقاط اعلي من اعلي امر مفتوح علي المنصه
وان يضع امر بيع علي مسافة x من النقاط ايضا اقل من اقل امر موجود علي المنصه
المشكله التي تواجهني هي انه اعلي امر علي المنصه واقل امر علي المنصه يتغيرون بأستمرار لان الاومر تحقق اهداف واستوبات وتغلق ويفتح غيرها
لذلك اريد ان يتغير بأستمرار الامر المعلق العلوي الشراء والسفلي البيع بأستمرار مع تغير الاوامر علي المنصه
بحيث يكون دائما مهما كانت انواع الاوامر المفتوحه دائما يكون هناك امر شراء اعلي من اعلي امر علي المنصه ويتغير مع تغير سعر افتتاح اعلي امر ليكون دائما اعلي من اعلي امر مفتوع علي المنصه بقيمة x من النقاط
ومثله البيع دائما يكون هناك امر بيع اقل من اقل امر علي المنصه ويظل يتغير معه كلما تغير اقل امر علي المنصه بأستمرار وهكذا
طبعا غني عن الذكر ان الاوامر من نوع
Op_buystop و Op_Sellstop فقط وليس اي نوع اخر
ارجو المساعده في كتابة هذا الكود وانا هنا لا اطلب شرح او توضيح فالحمد لله انا اجيد برمجة الاكسبرتات نوعا ما فكل ما اريده هو المساعده في الاكواد او الفكره البرمجيه لتنفيذ هذه الاوامر
جازاكم الله خيرا
والسلام عليكم ورحمة الله وبركاته
- 12-05-2014, 11:29 PM #2
للرفع للاهمية
هل يمكن لاحد الاخوة المبرمجين المساعده ..... جازاكم الله خيرا .
- 13-05-2014, 01:52 AM #3
السلام عليكم
الدكتور بطوط ليك وحشة
انت فينك يا راجل
هو الطب يخليك تنسى اصحابك
اتمنى لك التوفيق الدائم
وان شاء الله يرد عليك احد الاخوة المتخصصين في البرمجة
- 13-05-2014, 02:19 AM #4
السلام عليكم
حقيقة أخي لم أفهم جيدا
إذا كان الأمر أنه عليك تغيير الصفقتين BuyStop و SellStop كلما اغلقت أكبر صفقة و أصغر صفقة
فكل ما عليك فعله هو كل ما أغلقت صفقة تنظر إن كانت الأكبر فتغلق معها ال BuyStop و تعيد البحث في الصفقات المفتوحة عن أكبر صفقة تسجل معلوماتها و تفتح BuyStop جديدة وفقا للمعلومات الجديدة
و كذلك بالنسبة لل SellStop
إذا كان ممكن مثال حتى توضح الفكرة
- 13-05-2014, 04:48 AM #5
الله يكرمك اخي ........ شكرا علي سؤالك صدقني عدم تفرغي لظروف خارجه عن ارادتي ان شاء الله تنتهي علي خير و صدقني انا لا انسي اصحابي ابدا و لم انسي ايضا الكلام الذي قلته لك من قبل اخي الكريم ....... ان شاء الله خير الله قريب ......
اخي الفاضل ..... هذا هو مثال توضيحي كما اردت
الاكسبرت لنقل انه فتح 7 صفقات بيع وشراء ولنقل مثلا انهم 4 بيع و ثلاثه شراء في وقت واحد ولكل صفقه هدف واستوب واضح ومحدد
وهنا نجد انه لدينا علي المنصه سبعه ضفقات بغض النظر عن نوعهم ..........
وايضا لدينا اكيد صفقه سعر افتتاحها هو اعلي سعر في السبعه صفقات واخري سعر افتتاحها هو اقل سعر في السبعة صفقات
وهنا انا اريد الاتي
ان يضع امر بيع معلق من نوع SellStop علي مسافة ولتكن 15 نقطة اقل من سعر افتتاح اقل صفقه في السبعة صفقات بغض النظر عن نوعها
وايضا يضع الاكسبرت امر من نوع BuyStop علي مشافه ولتكن مثلا 15 نقطه اعلي من اعلي سعر افتتاح في الصفقات السبعه بغض النظر عن نوع الامر
وايضا الاتي
اذا فتح الاكسبرت صفقات اخري وصار مجموع الصفقات ثمانية صفقات وهنا لدينا احتمال من ثلاثة احتمالات
ان يكون يعر افتتاح الصفقه الجديده يقع بين اعلي سعر افتتاح لاي من الصفقات السبعه السابقه واقل سعر افتتاح فيهم ايضا اي انه تكون الصفقه الجديده في الوسط بين العلوي والسفلي .............. الحاله الاولي (1)
ان يكون سعر افتتاح الصفقه الجديده اعلي من اعلي سعر افتتاح في الصفقات السبعه المفتوحه ........... حالة (2)
ان يكون سعر افتتاح الصفقه الجديده اقل من اقل سعر افتتاح في الصفقات السبعه المفتوحه ............... حالة ( 3)
وهنا المطلوب الاتي
في الحاله 1 .......... يبقي الوضع علي ماهو عليه بدون اي تعديل
في الحاله 2 ........ يتم تغيير الامر المعلق للشراء ليكون اعلي من سعر افتتاح الصفقه الجديده لانها هي التي اصبحت اعلي سعر علي المنصه
في الحاله 3 ........ يتم تغيير الامر المعلق للبيع ليكون اقل من سعر افتتاح الصفقه الجديده لانها هي التي اصبحت اقل سعر علي المنصه
ويستمر هكذا دائما بأستمرار يتغير مع تغير قيم اعلي سعر واقل سعر للصفقات المفتوحه بأستمرار
اتمني ان يكون الشرح واضحا وانا تحت امرك في اي توضيح اكثر
والف الف شكر عل يردك واهتمامك اخي الكريم
- 13-05-2014, 06:05 PM #6
السلام عليكم
كل ما علي أخي أن تأخد تيكت أكبر صفقة و أصغر صفقة تسجلهم في متغير و تقوم كل مرة بإعادة فحص هل تبدلو فإذا تبدلو تقوم بتبديل ال BUYSTOP و SELLSTOP
لكن سؤال هنا
إذا ما فتحت ال BUYSTOP فهل الصفقة الجديدة تصبح أكبر صفقة مفتوحة ؟؟
يلزمني معرفة هته الحالة حتى أكتب لك كود
- 13-05-2014, 06:46 PM #7
اخي الكريم انا كتبت داله بالفعل تقارن بين الصفقات المفتوحه وتعطي قيمة اعلي سعر افتتاح موجود بين الاوامر
ودالة اخري تعطي اقل سعر افتتاح
وبالفعل استخدمتهم ف يوضع الاوامر المعلقه
لكن عند تغير هذا السعر الامر المعلق لم يتغير
بالنسبه لملاحظتك : عند تفعيل الامر المغلق نعم يعتبر هو اعلي سعر او اقل سعر لانه لن يكون buystop او SELLSTOP وانا سوف يصبح امر بيع عادي اوامر شراء عادي
وهذا هو الكود كاملا الذي اريد اضافته علي الاكسبرت
كود:int placePending() { int toto; if(OrdersTotal()>=1&&toto!=OrdersTotal()) { for (double i=OrdersTotal()+1;i>0;i--) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magicn_BRG_ecase&&OrderComment()=="BRG-ecase") { if(OrderType()==OP_BUYSTOP) {OrderDelete(OrderTicket(), Red);} if(OrderType()==OP_SELLSTOP) {OrderDelete(OrderTicket(), Red);} } } if(PendingOrderBuysCount()< 1&&PendingOrderSellsCount()< 1) { OrderSend(Symbol(),OP_BUYSTOP,lotsize ,highorderprice()+(dispips*pt*Point),slippage*pt,0,0,"BRG-ecase",magicn_BRG_ecase,0,Green); OrderSend(Symbol(),OP_SELLSTOP,lotsize ,loworderprice()-(dispips*pt*Point),slippage*pt,0,0,"BRG-ecase",magicn_BRG_ecase,0,Green); toto =OrdersTotal(); } } return(0); } //////////////////////////////////////////////////////////// double highorderprice() { for (double i=OrdersTotal()+1;i>0;i--) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); datetime ordertime1=OrderOpenTime();double price1=OrderOpenPrice(); OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES); datetime ordertime2= OrderOpenTime();double price2=OrderOpenPrice(); if(OrderType()==OP_BUY||OrderType()==OP_SELL) { if (price1<price2) { price1=price2; } else if(price1>price2){ price1=price1;} } } return(price1); } ////////////////////////////////// double loworderprice() { for (double i=OrdersTotal()+1;i>0;i--) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); datetime ordertime1=OrderOpenTime();double pricelast1=OrderOpenPrice(); OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES); datetime ordertime2= OrderOpenTime();double pricelast2=OrderOpenPrice(); if(OrderType()==OP_BUY||OrderType()==OP_SELL) { if (pricelast1<pricelast2) { pricelast1=pricelast1; } else if(pricelast1>pricelast2){ pricelast1=pricelast2;} } } return(pricelast1); } //////////////////////////////////// ///////////////////////////////////////////////// int PendingOrderBuysCount( ) {int bb; for(int i=OrdersTotal()-1;i>=0;i--) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magicn_BRG_ecase&&OrderComment()=="BRG-ecase") { if(OrderType()==OP_BUYSTOP)bb++; // if(OrderType()==OP_SELLSTOP)return(false); } } return(bb ); } int PendingOrderSellsCount( ) {int ss; for(int i=OrdersTotal()-1;i>=0;i--) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magicn_BRG_ecase&&OrderComment()=="BRG-ecase") { //if(OrderType()==OP_BUYSTOP) if(OrderType()==OP_SELLSTOP)ss++; } } return(ss ); }
- 13-05-2014, 08:50 PM #8
لتغيير الأمر المعلق قم بوضع متغيرين بهما رقم صفقة ال BUYSTOP و SELLSTOP
و كلما فتحت صفقة جديدة نقوم برؤية هل هي أكبر من أكبر صفقة أو أصغر من أصغر صفقة
لنحدد هل نغلق ال BUYSTOP القديمة و نفتح واحدة جديدة أو نغلق ال SELLSTOP القديمة و نفتح واحدة جديدة
انظر لهذا الكود ستجده في المرفقات في ملف txt أيضا
كود PHP:
int ob = 0;int os = 0;double highest_price = -1;double lowest_price = -1;
int high_low_order(){ for(int i = 0:i<OrdersTotal():i++) { OrderSelect(i, SELECT_BY_POS); if(highest_position != -1) {
if(OrderOpenPrice()>highest_price ) { highest_price = OrderOpenPrice(); //Close Open OB ob = OrderSend(.......); }
}else{ highest_position = i;
}
if(lowest_position != -1) {
if(OrderOpenPrice()>highest_price ) { highest_price = OrderOpenPrice(); //Close Open OS os = OrderSend(.......); }
}else{ lowest_position = i;
}
}
}
- 14-05-2014, 12:29 AM #9
السلام عليكم ورحمة الله وبركاته
انا قرأت الكود الذي كتبته واصفت اليه الاوامر كما تفصلت انت بالشرح اخي الكريم ولكن لم يعمل بل فقط جعل الشارت يتجمد من الاوامر التي يضعها ويمسحها بلا اي سبب
هذا هو الكود كاملا كما اضفته للاكسبرت
ارجو ملاحظة الاتي
المتغيرات التي كتبتها انت اخي الكريم كانت
highest_price // lowest_price
لكن في الكود من الدخلي استخدمت
lowest_position
highest_position
فهل هذا امر محدد لم افهمه لانني غيرتهم لكي يكونو كلهم متغير واحد
هذا هو الكود الكامل بالاوامر كما عدلته انا ارجو التوضيح والغير المناسب لانه لا يعمل
يمكنك ان تضيف هذه الداله لاي اكسبرت المفروض انها تضع الاوامر اعلقه اعلي الصفقات واسفلها لكن هذا لا يحدث
فصلا لا امرا راجع الكود لتصويبه جازاك الله خيرا اخي الكريم
كود PHP:int high_low_order()
{
for(int i = 0;i<OrdersTotal();i++)
{
OrderSelect(i, SELECT_BY_POS);
if(highest_price != -1)
{
if(OrderOpenPrice()>highest_price )
{
highest_price = OrderOpenPrice();
//Close Open OB
for ( i=OrdersTotal()+1;i>0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magicn_BRG_ecase&&OrderComment()=="BRG-ecase")
{
if(OrderType()==OP_BUYSTOP)
{OrderDelete(OrderTicket(), Red);}
}
}
ob = OrderSend(Symbol(),OP_BUYSTOP,lotsize ,highest_price+(dispips*pt*Point),slippage*pt,0,0,"BRG-ecase",magicn_BRG_ecase,0,Green);
}
}
else{highest_price = i;}
if(lowest_price != -1)
{
if(OrderOpenPrice()>lowest_price )
{
lowest_price = OrderOpenPrice();
//Close Open OS
for ( i=OrdersTotal()+1;i>0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magicn_BRG_ecase&&OrderComment()=="BRG-ecase")
{
if(OrderType()==OP_SELLSTOP)
{OrderDelete(OrderTicket(), Red);}
}
}
os = OrderSend(Symbol(),OP_SELLSTOP,lotsize ,lowest_price-(dispips*pt*Point),slippage*pt,0,0,"BRG-ecase",magicn_BRG_ecase,0,Green);
}
}
else{lowest_price = i;}
}
}
آخر تعديل بواسطة batttot ، 14-05-2014 الساعة 12:33 AM
- 14-05-2014, 01:34 AM #10
إن شاء الله أحاول أعطيك الكود كاملا بدون مشاكل غدا إن شاء الله
اليوم بي عياء لذلك لم أكمله فقط وضعت لك الفكرة
- 14-05-2014, 02:14 AM #11
الف سلامه عليك .......... ان شاء الله غدا تصبح في خير حال
خد راحتك وانا في انتظارك
- 14-05-2014, 02:33 AM #12
تفضل راجع الكود بشكل كامل وأخبرني إذا لم تفهم أي جزء فيه
كود PHP:double GetMaxPrice()
{
double MaxPrice;
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()<=OP_SELL)
{
if(OrderOpenPrice()>MaxPrice)MaxPrice=OrderOpenPrice();
}
}
return(MaxPrice);
}
double GetMinPrice()
{
double MinPrice=999999;
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()<=OP_SELL)
{
if(OrderOpenPrice()<MinPrice)MinPrice=OrderOpenPrice();
}
}
return(MinPrice);
}
void OpenModifyOrder()
{
bool MaxOrderSet,MinOrderSet;
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string comment=OrderComment();
double OpenPrice=OrderOpenPrice();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()>OP_SELL)
{
if(comment="MaxPriceOrder")
{
MaxOrderSet=true;
if(OPenPrice!=GetMaxPrice()+15*Point)
{
OrderModify(OrderTicket(),GetMaxPrice()+15*Point,0,0,0);
}
}
if(comment="MinPriceOrder")
{
MinOrderSet=true;
if(OPenPrice!=GetMinPrice()-15*Point)
{
OrderModify(OrderTicket(),GetMinPrice()-15*Point,0,0,0);
}
}
}
}
if(MaxOrderSet==false)OrderSend(Symbol(),OP_BUYSTOP,Lots,GetMaxPrice()+15*Point,3,0,0,"MaxPriceOrder",MagicNumber,0,Blue);
if(MinOrderSet==false)OrderSend(Symbol(),OP_SELLSTOP,Lots,GetMinPrice()-15*Point,3,0,0,"MinPriceOrder",MagicNumber,0,Red);
}
- 14-05-2014, 03:09 PM #13
السلام عليكم ورحمة الله وبركاته
مستر دولار شخصيا ............ فعلا الكمات لا تكفي لشكرك
انا راجعت الكود بالكامل وبدقه
لم اغير فيه اي شيئ سوي فقط 15 استبدلتها بمتغير خارجي اسمه dispips والماجيك نمبر حتي لا يتداخل مع باقي صفقات الاكسبرت
لكن استاذي الجليل مستر دولار
الكود فعلا يضع امر اعلي من اعلي صفقه واقل من اقل صفقه لكنه لا يقوم بتعديله اذا تم فتح صفقه اخري اعلي من اعلي صفقه
ولا يعدل الاوامر المعلقه لتكون اعلي من اعلي صفقه في حالة اعلي صفقه اغلقت
فقط الكود يضع الامر المعلق ولا يتعامل معه ابدا لا يغير في مكانه ولا يعدل فيه حتي يتم تفعيله وعندها يضع غيره علي المنصه
ارجو مستر دولا ضع الكود علي اي اكسبرت سوف تلاحظ علي الفيجوال تيست انه لا يعدل علي الامر بل فقط يضع الامر المعلق بدون تعديل عليه معي تغير اعلي صفقه واقل صفقه
جازاك الله الف خير علي مساعدتك استاذي الكريم
همسة : الكود به اخطأ برمجيه فالجمله او يبدو انني لم افهمها
الجمله الشرطيه
كود PHP:if(comment="MaxPriceOrder")
{
MaxOrderSet=true;
if(OpenPrice!=GetMaxPrice()+ dispips *Point )
{
OrderModify(OrderTicket(),GetMaxPrice()+ dispips *Point ,0,0,0);
}
}
كود PHP:if(comment=="MaxPriceOrder
كود PHP:if(comment="MaxPriceOrder
كود PHP:double OpenPrice=OrderOpenPrice();
كود PHP:if(OPenPrice!=GetMaxPrice()+ dispips *Point )
ارجو التصويب لي ان كنت اخطأت
وارجو مراجعة الكود لانه فعلا لاي يعدل الامر المعلق بأستمرار مع تغير قيم اعلي صفقه واقل صفقه
- 14-05-2014, 03:26 PM #14