النتائج 1 إلى 6 من 6
- 17-07-2010, 12:28 AM #1
مشاكل برمجة عويصة فيما يخص الاكسبرتات
كود:int MyPendingOrdersTotal(int Magic) { int c=0; int total = OrdersTotal(); for (int cnt = 0 ; cnt < total ; cnt++) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && OrderType()>OP_SELL) { c++; } } return(c); }
ولكن المشكلة عند نسخها في اى اكسبرت آخر نظهر رسالة خطأ التالية
'(' - function definition unexpected H:\AL Trade 4\experts\TestExpert.mq4 (153, 25)
معترض على الاقواس !
'c' - variable not defined H:\AL Trade 4\experts\TestExpert.mq4 (163, 7)
معترض على المتغير C رغم انه معرف ف بداية الدالة على انه متغير من نوع Int
'}' - unbalanced parentheses H:\AL Trade 4\experts\TestExpert.mq4 (168, 1)
وآخيرا وليس آخرا معترض على القوس } رغم ان عدد الاقواس المفتوحة = عدد الاقواس المغلقة
جربت وضع الدالة في اكسبرت آخر ظهر لدى هذة الرسالة
Function "MyPendingOrdersTotal" is not referenced and will be removed from exp-file
مش عاجبه الدالة كلها وعاوز يحذفها كلها المرادى !
وايضا باستخدام دالة الاستاذ مستر دولار DeletePendingOrders نفس رسائل الخطأ السابقة تماماً
هذا كود الاكسبرت الكلى
كود://+------------------------------------------------------------------+ //| My_First_EA.mq4 | //| Coders Guru | //| http://www.forex-tsd.com | //+------------------------------------------------------------------+ #property copyright "Coders Guru" #property link "http://www.forex-tsd.com" //---- input parameters extern double TakeProfit=250.0; extern double Lots=0.1; extern double TrailingStop=35.0; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } int Crossed (double line1 , double line2) { static int last_direction = 0; static int current_dirction = 0; if(line1>line2)current_dirction = 1; //up if(line1<line2)current_dirction = 2; //down if(current_dirction != last_direction) //changed { last_direction = current_dirction; return (last_direction); } else { return (0); } } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- int cnt, ticket, total; double shortEma, longEma; if(Bars<100) { Print("bars less than 100"); return(0); } if(TakeProfit<10) { Print("TakeProfit less than 10"); return(0); // check TakeProfit } shortEma = iMA(NULL,0,8,0,MODE_EMA,PRICE_CLOSE,0); longEma = iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,0); int isCrossed = Crossed (shortEma,longEma); total = OrdersTotal(); if(total < 1) { if(isCrossed == 1) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"My EA",12345,0,Green); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); } else Print("Error opening BUY order : ",GetLastError()); return(0); } if(isCrossed == 2) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"My EA",12345,0,Red); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); } else Print("Error opening SELL order : ",GetLastError()); return(0); } return(0); } for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) // long position is opened { // should it be closed? if(isCrossed == 2) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position return(0); // exit } // check for trailing stop if(TrailingStop>0) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()<Bid-Point*TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green); return(0); } } } } else // go to short position { // should it be closed? if(isCrossed == 1) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position return(0); // exit } // check for trailing stop if(TrailingStop>0) { if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) { if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); return(0); } } } } } } int DeletePendingOrders() { int total = OrdersTotal(); for (int cnt = total-1 ; cnt >= 0 ; cnt--) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol() && (OrderType()>OP_SELL)) { OrderDelete(OrderTicket()); } } return(0); } return(0); } //+------------------------------------------------------------------+
ما مشكلة هذة اللغة المعترضة دائماً !!
- 17-07-2010, 12:20 PM #2
رد: مشاكل برمجة عويصة فيما يخص الاكسبرتات
- 17-07-2010, 09:58 PM #3
- 18-07-2010, 07:32 AM #4
رد: مشاكل برمجة عويصة فيما يخص الاكسبرتات
اخى الفاضل اين نعرف الدالة DeletePendingOrders هل نعرفها بداخل الدالة init ام قبل او بعد الدالة Start ولا في بداية الاكسبرت ؟
وهل نعرفها بInt ام لها كلمة محجوزة آخرى لتعريف الدالة
- 18-07-2010, 02:57 PM #5
رد: مشاكل برمجة عويصة فيما يخص الاكسبرتات
في لغة MQL4 يوجد ثلاث دوال أساسيه هي
init و deinit و start
إذا أردت عمل أي داله أخرى مثل دالة إغلاق الصفقات أو داله حساب مجموع الصفقات فيجب أن تقوم ببرمجتها كداله مستقله اي خارج هذه الدوال ويمكنك كتابتها في أي مكان بعد الداله ستارت أو قبلها أو قبل الداله اينيت المهم أن تقوم بكتابتها خارج هذه الدوال فلا يمكن تعريف داله بداخل داله أخرى
بعد ذلك تقوم بإستدعاء هذه الداله التي قمت بتصميمها بداخل أي داله من الدوال الثلاث الأساسيه
حسب الكود الذي تريده
- 18-07-2010, 10:33 PM #6
المواضيع المتشابهه
-
ما هي أفضل الكتب لتعلم برمجة الاكسبرتات
By MR.dollar in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EAمشاركات: 7آخر مشاركة: 03-09-2010, 06:13 AM -
لمحترفين برمجة الاكسبرتات .......مساعدة بسيطة جدا
By batttot in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EAمشاركات: 4آخر مشاركة: 29-04-2010, 05:18 PM -
سؤال في برمجة الاكسبرتات (بسيط)
By Dr.Aoudi in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EAمشاركات: 1آخر مشاركة: 11-01-2009, 08:00 AM