النتائج 1,456 إلى 1,470 من 10335
الموضوع: موضوع مخصص للأسئلة البرمجية
- 26-12-2011, 01:38 AM #1456
شكرا اخي مستر دولار على المعلومات
هل يوجد موقع معين خاص بال MQL حيث يقدم كل الكلمات الدلالية للغة وشرحها (مثل OrderSend,,,SELECT_BY_POS,,,REASON_CHARTCLOSE
وغيرها .ويكون ايضا موقع تعليمي جيد للغة(غير موقع mql4.com).
شكرا جزيلا
- 26-12-2011, 11:43 PM #1457
- 27-12-2011, 05:41 PM #1458السلام عليكم
الاخ ميستر دولار
في هذا الموضوع قمت ببرمجة اكسبيرت يعمل بمضاعفة فيبوناتشي
https://forum.arabictrader.com/t111353.html
و في محاولة مني لفهم طريقة عمل الاكسبيرت، اذا سمحت أريد أن أطرح بعض الاسئلة
أولا لقد قمت بتقسيم الكود للمراحل التالية
1/التصريح بالمتغيرات
2/التعامل مع عدد الارقام بعد الفاصلة
3/ حساب عدد الاوامر المفتوحة
4/التحقق من شرط الدخول و الدخول بمضاعفة
5/التحقق من وقت التداول
6/الدخول بالعقد الاول بعد التأكد من شروط الدخول
حسنا
لماذا وضعت كود الدخول بمضاغعفة قبل كود الصفقة الاولى و هل اذا بدلنا بينهما سيأثر ذلك على عمل الاكسبيرت
ما دور الدالة movebreakeven()
ما هي الدالة PL()وما هو دورها.
كيف يكمنني عمل مضاعفات على الشكل 1-1-1-1 ثم 2-2-2 ثم 4-4-4. هدفي هو تعلم التحكم في عدد العقود بصفة عامة.
أخيرا هل يكمن عمل اكسبيرت نصف آلي مثلا أنا أقوم بفتح العقود يدويا و هو يكمل الباقي.
أرجوا أن لا أكون أثقلت عليك
شكرا مسبقا
تحياتي الخالصة
- 27-12-2011, 09:41 PM #1459
طرق برمجة الإكسبرتات مهما كانت قد تختلف من مبرمج لآخر وأيضا ربما نفس المبرمج لكن يقوم ببرمجة الإكسبرت بأكثر من طريقة
فلو راجعت أحد الإكسبرتات الأخرى التي قمت ببرمجتها سوف تجد أنني إستخدمت المضاعفات بطرق أخرى مختلفه
بالنسبه لهذا الإكسبرت
فسر المضاعفات هنا هو الداله التي قمت بعملها والتي سألت أيضا أنت عنها
كود PHP:bool LP(){
for(int i=OrdersHistoryTotal();i>0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
if(OrderProfit()>=0)return(true);
else return(false);
}
}
return(true);
}
وبما أنني وضعت هذا الشرط من ضمن شروط الدخول في المضاعفات
كود PHP:if(!LP())
وظيفة الداله MoveBreakEven
فلو راجعت الكود الخاص بتعريف هذه الداله
كود PHP:void MoveBreakEven()
{
int cnt,total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
if(BreakEven>0)
{
if(NormalizeDouble((Bid-OrderOpenPrice()),digits)>BreakEven*point)
{
if(NormalizeDouble((OrderStopLoss()-OrderOpenPrice()),digits)<0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+movestopto*point,digits),OrderTakeProfit(),0,Blue);
return(0);
}
}
}
}
else
{
if(BreakEven>0)
{
if(NormalizeDouble((OrderOpenPrice()-Ask),digits)>BreakEven*point)
{
if(NormalizeDouble((OrderOpenPrice()-OrderStopLoss()),digits)<0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-movestopto*point,digits),OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
}
يقوم الإكسبرت بعمل مودفاي للأمر وينقل الأستوب لوز إلى نقطة الدخول أو إلى ربح عدد نقاط
الذي يتم تحديده في المتغير movestopto
يمكنك التحكم في طريقة المضاعفات التي تريدها لكن المهم أن تقوم بتحويل هذه الفكره إلى طريقة رياضيه يمكن برمجتها
فمثلا لنفرض أنك تريد فتح مضاعفات بالشكل الآتي 1 1 1 2 2 2 3 3 3
بالتالي ماذا سوف نحتاج ؟
ستحتاج إلى عمل داله لمعرفة آخر حجم لوت للصفقه الأخيره
كود PHP:double LastLot()
{
int d;
for(int i=OrdersHistoryTotal();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
double L=OrderLots();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
return(L);
}
}
}
كود PHP:int LotsNumber(){
int N;
for(int i=OrdersHistoryTotal();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
double L=OrderLots();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
if(L==LastLot())N++;
if(L!=LastLot())return(N);
}
}
return(N);
}
كود PHP:if(LotsNumber()==3)
{
NewLot=LastLot()+FirstLot;
}
else {
NewLot=LastLot();
}
فإن حجم اللوت التالي سوف يساوي حجم آخر لوت وهو 2 + حجم اللوت الإبتدائي ولنفرض أنه 1
فيكون حجم اللوت التالي هو 3
وهكذا يستمر الحسب
- 27-12-2011, 10:49 PM #1460
- 28-12-2011, 05:15 PM #1461
اخي العزيز اسامه
هل ممكن تطلع على الموضوع https://forum.arabictrader.com/f31.html حيث والشباب هناك بنتضارك واعتذر على الازعاج.
والله الموفق
- 29-12-2011, 12:43 PM #1462
السلام عليكم ورحمة الله وبركاته
أخي العزيز لدي سؤال محير
لمذا لا يظهر المؤشر في الشموع القادمة قبل بدايتها (-1/-2/-3....)؟؟
وجزاك الله خيراً
والسلام عليكم ورحمة الله وبركاته
- 29-12-2011, 04:34 PM #1463
لقد اتبعت الخطوات الموجودة في التطبيق العملي لبرمجة اكسبيرت في هذا الموضوع
https://forum.arabictrader.com/t97945.html
بعد أن وصلت الى مرحلة اضافة الدالة التي تقوم بحساب العدد الكلي لصفقات و اضافتها كشرط لفتح صفقة جديدة ، قمت بعمل تست،فحدث الخطأ التالي :
ordersend error 148
كود://+------------------------------------------------------------------+ //| sar-expert.mq4 | //| Copyright © 2011, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2011, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" extern int price=0; extern int period=20; extern int takeprofit=50; extern int stoploss=25; extern int slippage=3; extern double lots=0.1; int ticket, tp,sl,magicnumber,i; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- double rsi_1=iRSI(NULL,0,period,price,0); double rsi_2=iRSI(NULL,0,period,price,1); //***فتح صفقة بيع if(all_orders()<1 && rsi_2>70 && rsi_1<70) { if(stoploss==0){sl=0;}else {sl=Bid+stoploss*Point;}//**وقف الخسارة if(takeprofit==0){tp=0;} else {tp=Bid-takeprofit*Point;}//** الربح } ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,slippage,sl,tp,"rsi EA sell",magicnumber,0,Red); if (ticket<1) { Print("you can not sell, the error number is",GetLastError()); } //**فتح صفقة الشراء if(all_orders()<1 && rsi_2<30 && rsi_1>30) { if(stoploss==0){sl=0;} else{sl=Ask-stoploss*Point;} if(takeprofit==0){tp=0;}else{tp=Ask+takeprofit*Point;} } ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,slippage,sl,tp,"rsi EA buy",magicnumber,0,Green); if(ticket<1) { Print("you can not buy, the error number is", GetLastError()); } //---- return(0); } //+------------------------------------------------------------------+ int all_orders() { int cnt=0; for(i=0;i<OrdersTotal();i++) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol() && OrderMagicNumber()==magicnumber) cnt++; } return(cnt); }
- 29-12-2011, 07:42 PM #1464
جاري مراجعة الموضوع
وعليكم السلام ورحمة الله وبركاته
لا يمكنك عمل مصفوفه بهذا الشكل مثلا
كود PHP:ExtMapBuffer1[-3]=High[1];
لكن يمكنك إستخدام الأمر
كود PHP:SetIndexShift
- 29-12-2011, 07:47 PM #1465
الخطأ 148 يعني أن عدد الصفقات المفتوحه في نفس الوقت وصل إلى الحد الأقصى الذي يسمح به البروكر
الخطأ لديك في هذا الجزء
كود PHP:if(all_orders()<1 && rsi_2>70 && rsi_1<70)
{
if(stoploss==0){sl=0;}else {sl=Bid+stoploss*Point;}//**وقف الخسارة
if(takeprofit==0){tp=0;} else {tp=Bid-takeprofit*Point;}//** الربح
/////////// }
ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,slippage,sl,tp,"rsi EA sell",magicnumber,0,Red);
if (ticket<1)
{
Print("you can not sell, the error number is",GetLastError());
}
}//////////////
فيجب أن تقوم بإغلاق القوس بعد أمر OrderSend
قمت بوضع لك علامة ///////////// بجوار القوس الصحيح وأين يجب وضعه
- 30-12-2011, 02:08 PM #1466
شكرا أخي Mr.Dollar
لكن بعد التصحيح ، يظهر الخطأ 130
- 31-12-2011, 08:25 AM #1467
- 01-01-2012, 02:45 PM #1468
- 01-01-2012, 02:51 PM #1469
وعليكم السلام ورحمة الله وبركاته
سوف تقوم بتعريف متغير خارجي تحدد فيه التاريخ مثلا
كود PHP:extern datetime day=D'2010.10.10 12:00';
كود PHP:int Shift=iBarShift(Symbol(),0,day,false);
كود PHP:for(int i=shift;i>0;i--)
{
// do
}
- 01-01-2012, 09:25 PM #1470
الاخ العزيز اسامه
هل بالامكان اضافة خاصية اغلاق للاكسبيرت المرفق عندما يصل الاكويتي الى قيمة معينه.
واذا كال لك فكرة عن هذا الاكسبيرت وشرح عن عمله اكون شاكرا" لك.
والله الموفق
المواضيع المتشابهه
-
موضوع مخصص للاكسبيرتات اللتي يستخدمها الاعضاء على الحقيقي,,عندك اكسبيرت ممتاز ضعه هنا
By محمد معمو in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EAمشاركات: 11آخر مشاركة: 15-12-2023, 02:03 PM -
عااااااااااااجل ( موضوع مخصص للفرص الفورية)!!!
By عاشق الذبذبـة in forum توقعات وتوصيات سوق العملاتمشاركات: 280آخر مشاركة: 27-08-2009, 10:30 PM