اف اكس ارابيا..الموقع الرائد فى تعليم فوركس Forex

اف اكس ارابيا..الموقع الرائد فى تعليم فوركس Forex (https://fx-arabia.com/vb/index.php)
-   منتدى المؤشرات و الاكسبيرتات (https://fx-arabia.com/vb/forumdisplay.php?f=6)
-   -   موضوع مخصص للاسئلة والاستفسارات الخاصة بدورة تعليم البرمجة الاحترافية بلغة mql4 (https://fx-arabia.com/vb/showthread.php?t=34302)

Qamar14 26-01-2014 11:57 AM

رد: موضوع مخصص للاسئلة والاستفسارات الخاصة بدورة تعليم البرمجة الاحترافية بلغة mql4
 
اقتباس:

المشاركة الأصلية كتبت بواسطة اسلام العوامى (المشاركة 665317)

،،،ابسط واسهل طريقة هى استخدام الامر sleep لمدة الثلاث شموع ، مثلا اذا كانت التايم فريم دقيقة تقومى باستخدام sleep() وتعى بين الاقواس 180000 حيث ان الثانية تساوى 1000 مللى ثانية ،وعندما تنتهى مدة الامر تصبح الشموع الجديدة هى مجال عمل الاكسبيرت،،،

يعني الشمعه الواحده للفريم 1 دقيقه = 60 الف
صح؟

ولفريم الساعه = 60 الف *60 * 60
صح؟

واليومي !!!!! رقم غريب راح يطلع صح؟

Qamar14 26-01-2014 12:25 PM

رد: موضوع مخصص للاسئلة والاستفسارات الخاصة بدورة تعليم البرمجة الاحترافية بلغة mql4
 
1 مرفق
شكرا ليك أخ العوامي

وللفائده العامه
هاد تبسيط للرقم بالمي تانيه للفريمات
بالمرفقات

اسلام العوامى 26-01-2014 12:45 PM

رد: موضوع مخصص للاسئلة والاستفسارات الخاصة بدورة تعليم البرمجة الاحترافية بلغة mql4
 
اقتباس:

المشاركة الأصلية كتبت بواسطة Qamar14 (المشاركة 665320)
يعني الشمعه الواحده للفريم 1 دقيقه = 60 الف
صح؟

ولفريم الساعه = 60 الف *60 * 60
صح؟

واليومي !!!!! رقم غريب راح يطلع صح؟

،،،تمام،،،

اقتباس:

المشاركة الأصلية كتبت بواسطة Qamar14 (المشاركة 665322)
شكرا ليك أخ العوامي

وللفائده العامه
هاد تبسيط للرقم بالمي تانيه للفريمات
بالمرفقات

،،،العفو ومشكورة على الملف،،،

cobra2010 28-01-2014 11:03 AM

رد: موضوع مخصص للاسئلة والاستفسارات الخاصة بدورة تعليم البرمجة الاحترافية بلغة mql4
 
استاذ اسلام بارك الله فيك وتسلم على الشرح الأكثر من رائع

عندي اسئلة كثير ولكني اختصرها في الاتي حتى لا أثقل عليك

اولا : ما هو الفرق بين ( symbol , Null )

كود:

iHigh(Symbol(),PERIOD_D1,1);
و

كود:

iHigh(NULL(),PERIOD_D1,1);
ثانيا : وده الأهم عندي لو ان السعر الحالي محصور بين نقطتين ولتكن مثلا نقطة A و نقطة B (حيث A أعلى من B)

فكيف يمكن ان اجعل الاكسبيرت ان يشتري كلما زار السعر النقطة A واذا ارتد السعر للنقطة B فانه يقوم بالبيع بلوت مضاعف ويحتفظ بالشراء

واذا عاد السعر مرة اخرى للنقطة A فيقوم بالشراء مرة اخرى بلوت مضاعف وهكذا كلما زار السعر النقطة A يقوم بالشراء بمضاعفة اللوت

وكلما زار النقطة B يقوم بالبيع ويضاعف اخر لوت

ارجو ان اكون وضحت الفكرة

وتقبل فائق احترامي :1 (73):



اسلام العوامى 28-01-2014 11:36 AM

رد: موضوع مخصص للاسئلة والاستفسارات الخاصة بدورة تعليم البرمجة الاحترافية بلغة mql4
 
اقتباس:

المشاركة الأصلية كتبت بواسطة cobra2010 (المشاركة 665902)
استاذ اسلام بارك الله فيك وتسلم على الشرح الأكثر من رائع

عندي اسئلة كثير ولكني اختصرها في الاتي حتى لا أثقل عليك

اولا : ما هو الفرق بين ( symbol , Null )

كود:

iHigh(Symbol(),PERIOD_D1,1);
و

كود:

iHigh(NULL(),PERIOD_D1,1);
ثانيا : وده الأهم عندي لو ان السعر الحالي محصور بين نقطتين ولتكن مثلا نقطة A و نقطة B (حيث A أعلى من B)

فكيف يمكن ان اجعل الاكسبيرت ان يشتري كلما زار السعر النقطة A واذا ارتد السعر للنقطة B فانه يقوم بالبيع بلوت مضاعف ويحتفظ بالشراء

واذا عاد السعر مرة اخرى للنقطة A فيقوم بالشراء مرة اخرى بلوت مضاعف وهكذا كلما زار السعر النقطة A يقوم بالشراء بمضاعفة اللوت

وكلما زار النقطة B يقوم بالبيع ويضاعف اخر لوت

ارجو ان اكون وضحت الفكرة

وتقبل فائق احترامي :1 (73):



،،،اهلا بك اخى الكريم ، ليس هناك فرق الاثنين فى المثال السابق ولكن NULL تكتب بدون اقواس وتعنى فى المثال السابق اى عملة اما Symbol() فتعود باسم الزوج الحالى والاثنان يؤديان نفس الغرض فى المثال السابق،،،

،،،بالنسبة للجزء الاخر يجب ان تقوم بحجز متغيرين A,B ثم تقوم باعطائهم القيم الخاصة بهم وتقوم بعمل جملة شرطية كالتالى بلوت البداية،،،

كود:


if(Ask>A && OrdersTotal()==0){OrderSend()}
if(Bid<B && OrdersTotal()==0){OrderSend()}

،،،ثم تقوم بعمل وظيفة لمعرفة اخر لوت ووظيفة لمعرفة عدد صفقات الشراء واخرى لعدد صفقات البيع وتقوم بعمل جملة شرطية اخرى،،،
كود:


if(Ask>A && OrdersTotal()>0){OrderSend()}
if(Bid<B && OrdersTotal()>0){OrderSend()}

،،،ولكن تقوم بتغيير اللوت ووضع متغير لوت المضاعفات ، وكل الوظائف وطريقة كتابتها مشروحة بفيديوهات دورة البرمجة،،،

،،،تحياتى،،،

cobra2010 28-01-2014 11:54 AM

رد: موضوع مخصص للاسئلة والاستفسارات الخاصة بدورة تعليم البرمجة الاحترافية بلغة mql4
 
اقتباس:

المشاركة الأصلية كتبت بواسطة اسلام العوامى (المشاركة 665911)

،،،اهلا بك اخى الكريم ، ليس هناك فرق الاثنين فى المثال السابق ولكن NULL تكتب بدون اقواس وتعنى فى المثال السابق اى عملة اما Symbol() فتعود باسم الزوج الحالى والاثنان يؤديان نفس الغرض فى المثال السابق،،،

،،،بالنسبة للجزء الاخر يجب ان تقوم بحجز متغيرين A,B ثم تقوم باعطائهم القيم الخاصة بهم وتقوم بعمل جملة شرطية كالتالى بلوت البداية،،،

كود:


if(Ask>A && OrdersTotal()==0){OrderSend()}
if(Bid<B && OrdersTotal()==0){OrderSend()}

،،،ثم تقوم بعمل وظيفة لمعرفة اخر لوت ووظيفة لمعرفة عدد صفقات الشراء واخرى لعدد صفقات البيع وتقوم بعمل جملة شرطية اخرى،،،
كود:


if(Ask>A && OrdersTotal()>0){OrderSend()}
if(Bid<B && OrdersTotal()>0){OrderSend()}

،،،ولكن تقوم بتغيير اللوت ووضع متغير لوت المضاعفات ، وكل الوظائف وطريقة كتابتها مشروحة بفيديوهات دورة البرمجة،،،

،،،تحياتى،،،



اشكرك اخي اسامة على سرعة الرد وبارك الله فيك

ولكن المشكلة عندي تكمن في الجزء المظلل بالأحمر وهو الخاص بعمل وظيفة لمعرفة اخر لوت ووظيفة لمعرفة عدد صفقات الشراء واخرى لعدد صفقات البيع

صدقنى انا تعبت فيهم جدا ولكن دائما هذه الوظائف اما لا تعطي نتائج او انها تعطي نتائج خاطئة ومش عارف المشكلة فين

ارجو منك المساعدة وخصوصا الوظيفة التي تعود بأخر لوت

ارجو ان لا اكون قد اثقلت عليك

فائق احترامي

اسلام العوامى 28-01-2014 12:27 PM

رد: موضوع مخصص للاسئلة والاستفسارات الخاصة بدورة تعليم البرمجة الاحترافية بلغة mql4
 
اقتباس:

المشاركة الأصلية كتبت بواسطة cobra2010 (المشاركة 665917)
اشكرك اخي اسامة على سرعة الرد وبارك الله فيك

ولكن المشكلة عندي تكمن في الجزء المظلل بالأحمر وهو الخاص بعمل وظيفة لمعرفة اخر لوت ووظيفة لمعرفة عدد صفقات الشراء واخرى لعدد صفقات البيع

صدقنى انا تعبت فيهم جدا ولكن دائما هذه الوظائف اما لا تعطي نتائج او انها تعطي نتائج خاطئة ومش عارف المشكلة فين

ارجو منك المساعدة وخصوصا الوظيفة التي تعود بأخر لوت

ارجو ان لا اكون قد اثقلت عليك

فائق احترامي

،،،الدالة مشروحة بالتفصيل الممل فى الفيديوهات ، ويمكنك ارفاق الوظيفة التى تعطى الخطأ للاطلاع عليها وتحديد الخطأ،،،

cobra2010 28-01-2014 11:39 PM

رد: موضوع مخصص للاسئلة والاستفسارات الخاصة بدورة تعليم البرمجة الاحترافية بلغة mql4
 
1 مرفق
اقتباس:

المشاركة الأصلية كتبت بواسطة اسلام العوامى (المشاركة 665927)


،،،الدالة مشروحة بالتفصيل الممل فى الفيديوهات ، ويمكنك ارفاق الوظيفة التى تعطى الخطأ للاطلاع عليها وتحديد الخطأ،،،


الشكر موصول لك اخي اسامة

الكود مرفق بالكامل مع ملاحظة ان

الدالة MyRealOrder دائما قيمتها صفر حتى بعد تفعيل الصفقة
والدالة GetOrderType دائما قيمتها -1

كود:

//+------------------------------------------------------------------+
//|                                                        test.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern int        Step=30;
extern double    Lots=0.01;
extern int        Magicnumber=123123;
double point;
//+------------------------------------------------------------------+
//| expert initialization function                                  |
//+------------------------------------------------------------------+
int init()
{
    if(Digits<4){point=0.01;}
    else{point=0.0001;}

  return(0);
}
 
//+------------------------------------------------------------------+
//| expert deinitialization function                                |
//+------------------------------------------------------------------+
int deinit()
  {
//----
 
//----
  return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
 double OpenPrice,Up11,Up12,Up13,Dn11,Dn12,Dn13;
 
 
 if(Hour()==0 && Minute()<1 && MyOrdersTotal(Magicnumber)>0){DeletePendingOrders(Magicnumber);}
 
if(Hour()==0 && Minute()>5 && MyOrdersTotal(Magicnumber)==0)
{
  OpenPrice=NormalizeDouble(iOpen(Symbol(),PERIOD_D1,0),4);
 
  Up11=OpenPrice+Step*point;
  Up12=Up11+Step*point;
  Up13=Up12+Step*point;
 
  Dn11=OpenPrice-Step*point;
  Dn12=Dn11-Step*point;
  Dn13=Dn12-Step*point;
 
  int  BUY=OrderSend(Symbol(),OP_BUYSTOP,Lots,Up12,3,0,Up13,"TEST_Buy#1",Magicnumber,0,Green);
  int SELL=OrderSend(Symbol(),OP_SELLSTOP,Lots,Dn12,3,0,Dn13,"TEST_Sell#1",Magicnumber,0,Red);
 
 
 
  int GOT=GetOrderType(Magicnumber);
  int R=MyRealOrdersTotal(Magicnumber);
  int mot=MyOrdersTotal(Magicnumber);
  Comment("BUY = "+BUY+
  "\nSELL = "+SELL+
  "\nUp11 = "+Up11+
  "\nUp12 = "+Up12+
  "\nUp13 = "+Up13+
  "\nDn11 = "+Dn11+
  "\nDn12 = "+Dn12+
  "\nDn13 = "+Dn13+
  "\nMyRealOrdersTotal = "+R+
  "\nGetOrderType = "+GOT+
  "\nMyOrdersTotal = "+mot);
 
    if((BUY>0 || SELL>0) && R>0)
  {
    DeletePendingOrders(Magicnumber);
  //  double Lots2=
      OrderSend(Symbol(),OP_SELLSTOP,Lots,Up11,3,0,OpenPrice,"TEST_Sell#1",Magicnumber,0,Red);
  }
 

//----
  return(0);
  }
//+------------------------------------------------------------------+
int MyOrdersTotal(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())
    {
      c++;
    }
  }
  return(c);
}

//////////////////////////////////////////////////////////
int MyRealOrdersTotal(int magic)
{
  int i=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_BUY || OrderType()==OP_SELL))
        {
          i++;
        }
  }
  return(i);
}
//////////////////////////////////////////////////////////

int DeletePendingOrders(int Magic)
{
  int total  = OrdersTotal()-1;
 
  for (int cnt = total ; cnt >= 0 ; cnt--)
  {
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
    if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()!=OP_BUY || OrderType()!=OP_SELL))
    {
      OrderDelete(OrderTicket());
     
    }
  }
  return(0);


////////////////////////////////////////////////////////

int GetOrderType(int magic)
{
  int OT=-1;
  int total  = OrdersTotal();
 
  for (int cnt = 0 ; cnt < total ; cnt++)
  {
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
    if (OrderMagicNumber() == magic && OrderSymbol()==Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL))
    {
      OT=OrderType();
     
    }
  }
 
 
  return(OT);
}

مرفق ملف الكود بالمرفقات


اسلام العوامى 29-01-2014 11:32 AM

رد: موضوع مخصص للاسئلة والاستفسارات الخاصة بدورة تعليم البرمجة الاحترافية بلغة mql4
 
اقتباس:

المشاركة الأصلية كتبت بواسطة cobra2010 (المشاركة 666150)
الشكر موصول لك اخي اسامة

الكود مرفق بالكامل مع ملاحظة ان

الدالة MyRealOrder دائما قيمتها صفر حتى بعد تفعيل الصفقة
والدالة GetOrderType دائما قيمتها -1

كود:

//+------------------------------------------------------------------+
//|                                                        test.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern int        Step=30;
extern double    Lots=0.01;
extern int        Magicnumber=123123;
double point;
//+------------------------------------------------------------------+
//| expert initialization function                                  |
//+------------------------------------------------------------------+
int init()
{
    if(Digits<4){point=0.01;}
    else{point=0.0001;}

  return(0);
}
 
//+------------------------------------------------------------------+
//| expert deinitialization function                                |
//+------------------------------------------------------------------+
int deinit()
  {
//----
 
//----
  return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
 double OpenPrice,Up11,Up12,Up13,Dn11,Dn12,Dn13;
 
 
 if(Hour()==0 && Minute()<1 && MyOrdersTotal(Magicnumber)>0){DeletePendingOrders(Magicnumber);}
 
if(Hour()==0 && Minute()>5 && MyOrdersTotal(Magicnumber)==0)
{
  OpenPrice=NormalizeDouble(iOpen(Symbol(),PERIOD_D1,0),4);
 
  Up11=OpenPrice+Step*point;
  Up12=Up11+Step*point;
  Up13=Up12+Step*point;
 
  Dn11=OpenPrice-Step*point;
  Dn12=Dn11-Step*point;
  Dn13=Dn12-Step*point;
 
  int  BUY=OrderSend(Symbol(),OP_BUYSTOP,Lots,Up12,3,0,Up13,"TEST_Buy#1",Magicnumber,0,Green);
  int SELL=OrderSend(Symbol(),OP_SELLSTOP,Lots,Dn12,3,0,Dn13,"TEST_Sell#1",Magicnumber,0,Red);
 
 
 
  int GOT=GetOrderType(Magicnumber);
  int R=MyRealOrdersTotal(Magicnumber);
  int mot=MyOrdersTotal(Magicnumber);
  Comment("BUY = "+BUY+
  "\nSELL = "+SELL+
  "\nUp11 = "+Up11+
  "\nUp12 = "+Up12+
  "\nUp13 = "+Up13+
  "\nDn11 = "+Dn11+
  "\nDn12 = "+Dn12+
  "\nDn13 = "+Dn13+
  "\nMyRealOrdersTotal = "+R+
  "\nGetOrderType = "+GOT+
  "\nMyOrdersTotal = "+mot);
 
    if((BUY>0 || SELL>0) && R>0)
  {
    DeletePendingOrders(Magicnumber);
  //  double Lots2=
      OrderSend(Symbol(),OP_SELLSTOP,Lots,Up11,3,0,OpenPrice,"TEST_Sell#1",Magicnumber,0,Red);
  }
 

//----
  return(0);
  }
//+------------------------------------------------------------------+
int MyOrdersTotal(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())
    {
      c++;
    }
  }
  return(c);
}

//////////////////////////////////////////////////////////
int MyRealOrdersTotal(int magic)
{
  int i=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_BUY || OrderType()==OP_SELL))
        {
          i++;
        }
  }
  return(i);
}
//////////////////////////////////////////////////////////

int DeletePendingOrders(int Magic)
{
  int total  = OrdersTotal()-1;
 
  for (int cnt = total ; cnt >= 0 ; cnt--)
  {
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
    if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()!=OP_BUY || OrderType()!=OP_SELL))
    {
      OrderDelete(OrderTicket());
     
    }
  }
  return(0);


////////////////////////////////////////////////////////

int GetOrderType(int magic)
{
  int OT=-1;
  int total  = OrdersTotal();
 
  for (int cnt = 0 ; cnt < total ; cnt++)
  {
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
    if (OrderMagicNumber() == magic && OrderSymbol()==Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL))
    {
      OT=OrderType();
     
    }
  }
 
 
  return(OT);
}

مرفق ملف الكود بالمرفقات


،،،حسب مافهمت من الكود هو وضع امرين معلقين مع بداية اليوم حالى وعند افتتاح اليوم يتم مسح الاوامر التى لم تفعل ويتم وضع اوامر جديدة ، لكن الصياغة البرمجية للفكرة غير صحيحة فى الكود المرفق ، اذا كان مافهمته صحيح الرجاء اخبارى لاقوم بارفاق الكود الصحيح،،،

cobra2010 29-01-2014 01:20 PM

رد: موضوع مخصص للاسئلة والاستفسارات الخاصة بدورة تعليم البرمجة الاحترافية بلغة mql4
 
اقتباس:

المشاركة الأصلية كتبت بواسطة اسلام العوامى (المشاركة 666261)

،،،حسب مافهمت من الكود هو وضع امرين معلقين مع بداية اليوم حالى وعند افتتاح اليوم يتم مسح الاوامر التى لم تفعل ويتم وضع اوامر جديدة ، لكن الصياغة البرمجية للفكرة غير صحيحة فى الكود المرفق ، اذا كان مافهمته صحيح الرجاء اخبارى لاقوم بارفاق الكود الصحيح،،،

نعم صحيح أخي اسامة بارك الله فيك
المفروض مع بداية اليوم يمسح اي اوامر معلقة قديمة وبهذا يكون شرط اجمالي عدد الصفقات في مخزن التريد == 0 ثم يعلق صفقتين واحدة شراء والأخرى بيع وفي حال تفعلت احداهما يلغي الأخرى ثم يضيف صفقة مضادة للمفعلة بهدف مختلف وبلوت مختلف

وأعرف ان الكود غير صحيح وذلك بسبب عدم تمكني من الحصول على النتائج الصحيحة من الوظائف (مثل الحصول على نوع الصفقة المفعلة او عدد الصفقات المفعلة ) فمثلا عندما يكون اجمالي العقود المفعلة حقيقيا وليست المعلقة سواء كانت بيع او شراء == 1 يقوم بالغاء الأمر المعلق الأخر ويعدها يعلق صفقة اخرى مضادة للأولى وبلوت مختلف
وهكذا

اشكرك بشدة لأهتمامك اخي اسامة ولكني فعلا تعبت مع الوظائف ولا ادري لماذا لا تعمل بشكل صحيح حتى اتمكن من تكملة الفكرة برمجيا

جزاك الله عني كل خير


الساعة الآن 04:15 PM

Powered by vBulletin® Copyright ©2000 - 2024

جميع الحقوق محفوظة الى اف اكس ارابيا www.fx-arabia.com