النتائج 1 إلى 15 من 35
- 22-04-2013, 08:03 PM #1
...@@ مساعده في كتابة كود برمجي @@...
السلام عليكم ورحمة الله وبركاته
انا الان تواجهني مشكله برمجيه وحاولت ان احلها لكن لم اوفق الي حل
المشكله لها شقين الشق الاول
هذا الشرط
كود:if (can>=stepdeviation && Close[0] ==(buypoint-9*Point)) { OrderSend(Symbol(),OP_BUY,lotsize,Ask,3,0,0,"",magicn,0,Green); {
هذا كان الشق الاول
وطبعا الشق الثاني مرتبط بالمشكله الاولي بمعني انه بعد ان يفتح الاكسبيرت مثلا 10صفقات شراء وكلها لها نفس الماجيك نمبر وعلي نفس الزوج كيف اختار من الصفقات العشره صفقه واحده فقط لكي اعدل عليها دون المساس بالباقي اي انه كيف اختار مثلا الصفقه السابعه او الرابعه لاعدلها او اغلقها وليس الباقين ؟؟؟؟؟؟
هذه هي المشكله التي تواجهني الان وحاولت ان ابتكر لها دوال خارجيه لتعد الاوامر او تمنع التكرار ولكن لم اصل الي حل
فأرجو المساعده جازاكم الله خيرا
والسلام عليكم ورحمة الله وبركاته
- 22-04-2013, 08:54 PM #2
السلام عليكم
من الافضل اخى انك تنقل الموضوع لمنتدى الاكسبرتات هتلاقى الحل على الفور
https://forum.arabictrader.com/f31.html
تحياتى
- 22-04-2013, 08:59 PM #3
- 23-04-2013, 12:39 AM #4
رد:...@@ مساعده في كتابة كود برمجي @@...
الأخ كاش جاوبك على سؤال منع تكرار الصفقة في نفس الشمعة اما بالنسبة للشق الثاني فهو ان تضيف متغير مع المتغيرات :
كود PHP:extern int Ticketa=0;
كود PHP:int Ticket(int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
return(OrderTicket());
}
return(-1);
}
كود PHP:if ( Ticket(OP_BUY)==Ticketa) // نفذ التعديل المطلوب
- 23-04-2013, 04:36 AM #5
رد:...@@ مساعده في كتابة كود برمجي @@...
وعليكم السلام ورحمة الله وبركاته
الجزء الثاني من السؤال
يمكنك عمل دالة تعد عدد الأوامر المفتوحه وتختار أي أمر منهم
مثال
سوف أقوم بعمل دالة تغلق رقم الأمر الذي أريده
كود PHP:void CloseSelectedOrder(int Num)
{
int OrderNumber;
for (int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
OrderNumber++;
if(OrderNumber!=Num)continue;
if (OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,digits),3*Q);
}
if (OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,digits),3*Q);
}
}
}
}
بالنسبه للسؤال الأول فكما أخبرك الأخ ecash
- 23-04-2013, 01:19 PM #6
السلام عليكم ورحمة الله وبركاته
فعلا الكلمات لا توفي حقكم جعل الله عملكم هذا في ميزان حسناتكم .................... اشكركم جدا علي المساعده جاري التنفيذ وتجرب الدوال و بعدها عرض النتائج ان شاء الله
- 23-04-2013, 09:57 PM #7
السلام عليكم ورحمة الله وبركاته
بعد التجربه للكواد المقترحه وجدت الاتي
للاسف الاكسبيرت بالرغم من وجود متغير الزمن في شرط الدخول الاانه يكرر فتح الاوامر ولكن بصوره عشوائيه بمعني انه يفتح صفقتين او ثلاثه قبل ان يتوقف عن فتح الصفقات عند هذه النقطه
هذا اولا
ثانيا الاكواد التي ذكرها كل من الاخ الفاضل جميل ومستر دولار
كود الاخ جميل هو متغير خارجي اضع به رقم التيكيت للصفقه ............ لكن انا اريد الاكسبيرت يتعرف علي الصفقه من نفسه بدون تدخل مني مطلقا وفقا لشروط الاكسبيرت
كود الاخ المبجل مستر دولار ايضا يترك المتغير num لاعطيه رقم الصفقه التي اريد ان اغلقها وكما وضحت اريد الاكسبرت بنفسه يختار بدون تدخل مني
واخيرا هذا هو الكود الكامل للاكسبيرت بكل معادلاه ومتغيراته وبه الدوال صحيحه لفتح الاوامر وهو يفتح اوامر البيع والشراء بتكرار و ليست مره واحده بالرغم من اضافة متغيركود:t!= Time[0]
ارجو مراجعته جازاكم الله خيرا
كود://+------------------------------------------------------------------+ //| number.mq4 | //| Copyright 2013, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" extern double magicn = 2013; extern double lotsize = 0.01; extern double dlotsize = 0.02; extern double stepdeviation= 4; //// sell orders with dubled lot double sellpoint ; double doblebuy ; double sellstop ; double sellprofit ; double doblebuystop ; double doblebuyprofit ; //// buy orders with dubled lot double buypoint; double doblesell; double buystop ; double buyprofit ; double doblesellstop ; double doblesellprofit; double i ; double point; int digits,Q; datetime t; double can ; int init() { if(Digits==5||Digits==3) {Q=10;} else {Q=1;} if(Digits<4) { point=0.01; digits=2; } else { point=0.0001; digits=4; } return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { if (Close[1]>Open[1]) { ///sell orders conditions in up candle can = (High[1]-Low[1])*10000; sellpoint = NormalizeDouble((High[1]+((High[1]-Close[1])*Point)),Digits); doblebuy = NormalizeDouble((sellpoint+ ((Close[1]-Open[1])*Point)),Digits); sellstop = doblebuy; sellprofit = NormalizeDouble(((High[1]-Open[1])*Point),Digits); doblebuystop = NormalizeDouble((doblebuy- (((High[1]-Low[1])/2)*Point)),Digits); doblebuyprofit = NormalizeDouble((doblebuy+(((High[1]-Low[1])/2) *Point)),Digits); //// buy orders conditions in up candle buypoint = NormalizeDouble((Low[1]-((Open[1]-Low[1])*Point)),Digits); doblesell = NormalizeDouble(((buypoint -((Close[1]-Open[1])*Point))),Digits); buystop = doblesell; buyprofit = NormalizeDouble((((Open[1]-Low[1])*Point)),Digits); doblesellstop = NormalizeDouble(((doblesell+((High[1]-Low[1])/2)*Point)),Digits); doblesellprofit = NormalizeDouble((( doblesell-((High[1]-Low[1])/2) *Point)),Digits); ////////////in up candle /////////// if ( Close[1]>Open[1]&&Close[0]==buypoint&&t!=Time[0]&&can>=stepdeviation) { OrderSend(Symbol(),OP_BUY,lotsize,Ask,3,0,0,"",magicn,0,Green); t=Time[0]; } if ( Close[1]>Open[1]&&Close[0]==sellpoint&&t!=Time[0]&&can>=stepdeviation) { OrderSend(Symbol(),OP_SELL,lotsize,Bid,5,0,0,"",magicn,0,Red); } } return(0); } //+------------------------------------------------------------------+
- 23-04-2013, 10:46 PM #8
رد:...@@ مساعده في كتابة كود برمجي @@...
زميلي العزيز تفضل تم اصلاح التكرار ، يظل عندك مشكلة في معادلات استخراج الأستوب والهدف .
- 23-04-2013, 11:44 PM #9
السلام عليكم ورحمة الله وبركاته
اولا اخي الفاضل زميلي العزيز دي فعلا مكانه لا استحقها فيمكنك ان تناديني تلميذي العزيز سوف تكون مناسبه لانني مازلت اتعلم منك ومن اخرين
ثانيا بخصوص الكود الذي عدلته انت لماذا في دالة البيع ذكرت ان
كود:T=Time[0]
هذه نقطه
والنقطه الثانيه والاهم
للاسف الاكسبيرت توقف عن فتح اي صفقات شراء تماما ولا يفتح الا ثلاث صفقات بيع فقط بالرغم من تحقق الشروط للبيع والشراء
لذلك التعديلات التي غيرتها اخي الكريم لم تصلح المشكله لكن جعلته يتوقف عن فتح الاوامر ......
وبالنسبه لباقي المعادلات نعم انا لم اراجع الاهداف والاستوبات لانني افضل بناء الاكسبيرت جزء جزء حتي اتجنب اي خطأ يمكن ان يحدث فبمعدما انتهي من مشكله فتح واختيار الاوامر سوف ادقق في الاستوب كما طلبت من ياخي الكريم لاعرف اين يوجد الخطأ
لذلك ارجو مراجعة الكود مره اخري لانه فعلا توقف عن فتح صفقات .......آخر تعديل بواسطة batttot ، 23-04-2013 الساعة 11:47 PM
- 24-04-2013, 12:04 AM #10
انا وضعت T!=Time[0] في الشرط الأساسي ةالذي بعده تبتدي المعادلات ولآن امر البيع وأمر الشراء في الأصل تابعين لتحقق هذا الشرط . اما عدم تنفيذ صفقات فهو راجع كما اخبرتك لأخطاء استخراج الأستوب والتارجت من المعادلات لو تلاحظ ستجد انه لم يسجل الأستوب والتارجت مع فتح الصفقة وهنا اساس الخطأ ، وتستطيع استخدام الأمر Comment أو Print للأستوب والتارجت ولاحظ الرقم هل هو مناسب مع سعر البيع او الشراء ؟؟
- 24-04-2013, 12:49 AM #11
اخي الفاضل
انت تقول ان الخطأ في استخراج الاهدف والاستوب ........... انا قمت بمسح كل المتغيرات والمعادلات ولم اترك غير نقطة الشراء
buypoint
ونقطة البيع
sellpoint
وكما تلاحظ ان نقطة الشراء هي سعر الهاي للشمعه مضاف اليه المسافه من الهاي الي الاغلاق لنفس الشمعه
ونقطة البيع هي سعر اللو مطروح منه المسافه من اللو الي الاوبن لنفس الشمعه
والمعادلات صحيحه وقرأ نقاط الدخول جيدا
وهنا طبعا لا مجال لوجود اي خطأ في الاستوب او الهدف لانني في الاساس وضعت فيهم القيمه صفر اي ان الاستوب والهدف = 0
كود:OrderSend(Symbol(),OP_BUY,lotsize,Ask,3,0,0,"",magicn,0,Green);
كود:OrderSend(Symbol(),OP_SELL,lotsize,Bid,5,0,0,"",magicn,0,Red);
فأرجو اخر الكريم ان تقوم مراجعته جازاك الله خيرا
كود://+------------------------------------------------------------------+ //| number.mq4 | //| Copyright 2013, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" extern double magicn = 2013; extern double lotsize = 0.01; extern double dlotsize = 0.02; extern double stepdeviation= 4; //// sell orders with dubled lot double sellpoint ; //// buy orders with dubled lot double buypoint; double i ; double point; int digits,Q; datetime T; double can ; int init() { if(Digits==5||Digits==3) {Q=10;} else {Q=1;} if(Digits<4) { point=0.01; digits=2; } else { point=0.0001; digits=4; } return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { if (T!=Time[0] && Close[1]>Open[1]) { ///sell orders conditions in up candle can = (High[1]-Low[1])*10000; sellpoint = NormalizeDouble((High[1]+((High[1]-Close[1])*Point)),Digits); //// buy orders conditions in up candle buypoint = NormalizeDouble((Low[1]-((Open[1]-Low[1])*Point)),Digits); ////////////in up candle /////////// if ( Close[1]>Open[1]&&Close[0]==buypoint && can>=stepdeviation) { OrderSend(Symbol(),OP_BUY,lotsize,Ask,3,0,0,"",magicn,0,Green); T=Time[0]; } if ( Close[1]>Open[1]&&Close[0]==sellpoint&&can>=stepdeviation) { OrderSend(Symbol(),OP_SELL,lotsize,Bid,5,0,0,"",magicn,0,Red); } T=Time[0]; } return(0); } //+------------------------------------------------------------------+
- 24-04-2013, 01:20 AM #12
رد:...@@ مساعده في كتابة كود برمجي @@...
ولايهمك تفضل هذا الكود قمت بترتيب وتنظيم شكل الأكسبيرت وأوقفت اكواد المعادلات القديمة ووضعت شروط بسيطة للتأكيد وستلاحظ انه لايفتح الا امر واحد مع اتجاه الشمعة السابقة هذا اولا . بالأضافة الى ترتيب الجمل والأقواس .
ثانيا اضفت لك برنت لكل معادلة قديمة ستشغلها بعد ان تتأكد من صحة الأكسبيرت وتعمل من نسخة تانية تجرب عليها وتبتدي كود بعد كود ، تشوف برنت الكود مثلا صفقة شراء هل التارجت اعلى السعر والأستوب اسفل السعر ام لا وبغير هذه الحالة لن يعمل . او تضعها صفر . وهكذا حتى تصل الى الحل بالصبر .آخر تعديل بواسطة Jmeel ، 24-04-2013 الساعة 01:22 AM
- 24-04-2013, 01:50 AM #13
اخي الفاضل يبدو انه هناك سوء تفاهم ................. اخي الكريم لماذا تصمم علي وضع استوب لوز و تيك بروفيت انا قلت لنترك هذا الاختيار تماما الان ونجعل الهدف والاستوب =0
اخي الفاضل
لماذا قمت بالغاء شرط نقطة الدخول .؟؟؟؟؟؟؟؟؟ ات بذلك حولت الاكسبريت الي مجرد اكسبيرت لفتح صفقة شراء مع الشمعه الصاعده وصفقة بيع مع الشمعه الهابطه وكما تلاحظ ان هذا الاكسبيرت قمت بتصميمه انا من قبل علي ان يكون مشروع التخرج ......
لماذا قمت بالغاء شرط الشراء واضفت هدف واستوب اخي الكريم
انا اريد اني ييبيع ويشتري من نقطة الشراء التي الغيتها او من نقطة البيع التي الغيتها ايضا ..............ارجو التوضيح لهذا النقطه لان السطور التي قمت بالغائها هي الاساس في عمل الاكسبيرت وبدلا منها وضعت اوامر للهدف والاستوب
اخي الكريم انا لا اريدوضع هدف واستوب للصفقات اريد تركها كما هي وارداني يفعل البيع والشراء من نفقطة البيع ونقطة الشراء....... والنقطتين محسوبتين بدقه وتأكدت من الحسابات اكثر من مره
فلماذا قمت بالغائهم .....................
- 24-04-2013, 04:34 AM #14
رد:...@@ مساعده في كتابة كود برمجي @@...
الفكرة دائما عندما تجد خطأ في إكسبرت حاول تبسيط الكود على أقصى تقدير ثم تبحث عن الخطأ في كل جزء حتى تصل إلى الحل هذا ما قام بعمله الأخ جميل فإذا أردت أن تعيد الشروط الأساسيه مره أخرى فبالتالي النتيجه ستكون صحيحه
بالنسبه لطريقته تعريف متغير T وأضاف الشرط T!=Time[0] فهي صحيحه
يوجد طريقة أخرى يمكنك عمل دالة للبحث عن الصفقات والتأكد هل فتحت صفقه في هذه الشمعه أم لا
مثال
كود PHP:bool IsOrderOpened()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderOpenTime()>=Time[0])return(true);
else if(OrderOpenTime()<Time[0])return(false);
}
}
return(false);
}
if(I
كود PHP:if(IsOrderOpened()==false)
بالنسبه للجزء الثاني
حتى تختار صفقة معينه حسب رقمها أيضا نفس فكرة الداله التي قمت بوضعها سابقا سوف تبحث في الصفقات المفتوحه من 0 إلى عدد الصفقات
أنت تريد الصفقه رقم 7 مثلا ستقوم بعمل متغير مثلا
كود PHP:int OrderNumber;
كود PHP:int OrderNumber;
for (int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
OrderNumber++;
if(OrderNumber==7)
{
Print("ticket : ",OrderTicket());
}
}
}
- 24-04-2013, 05:53 AM #15
مرحبا بك أخي ، انا ذهبت في البداية كما هي طريقتي الخاصة للبحث عن حلول لأخطاء بأيسر الطرق فكان البداية هي اضافة كود التايم لايقاف التكرار على الشمعة الواحدة ، بعدها تستطيع أن تعمل على حل مشكلة سعر الدخول فقط وترك الأستوب والهدف بمعنى أن نحل الأشكال مرحليا حتى نفهم ماذا صنعنا وبالتالي يصبح ثابت في ذاكرتنا ، هذا ماقصدت أخي وسأواصل معك حتى نصل إن شاء الله .