عرض مشاركة واحدة
قديم 12-10-2016, 10:35 AM   المشاركة رقم: 1
الكاتب
اسلام العوامى
عضو ذهبى
الصورة الرمزية اسلام العوامى

البيانات
تاريخ التسجيل: Apr 2012
رقم العضوية: 9148
الدولة: alexandria - egypt
المشاركات: 6,086
بمعدل : 1.38 يوميا

الإتصالات
الحالة:
اسلام العوامى غير متواجد حالياً
وسائل الإتصال:

المنتدى : منتدى المؤشرات و الاكسبيرتات
افتراضي كبسولات برمجية - طريقة كتابة كود ادارة رأس المال

،،،السلام عليكم ورحمة الله وبركاته،،،

،،،اعضاء وزوار ارابيا الكرام،،،

نقره لعرض الصورة في صفحة مستقلة

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

كود:
 extern bool  UseMoneyManagement = false;
،،،اولا نقوم بحجز متغير خارجي من النوع bool ونعطية اسم USE_Money_Managment وكما تعلمنا سابقا المتغيرات من النوع bool تأخذ احدا القيمتان true او false وسنقوم باسناد القيمة true للمتغير اذا اردنا تشغيل ادارة راس المال والقيمة false اذا اردنا إلغائها والعمل بلوت نقوم بتحديده،،،
كود:
  extern int  RiskPercent = 10;
،،،ومتغير خارجي من النوع int ونعطيه اسم Risk_Percent والمتغيرات من النوع int تأخذ فقط قيمه عددية صحيحة بدون كسور عشرية ، وهذا المتغير سنقوم بكتابة نسبة المخاطرة المطلوبة به،،،
كود:
extern double Lot = 0.01;
،،،ومتغير خارجي من النوع double ونعطيه اسم Lot والمتغيرات من النوع double تأخذ قيمة عددية عشرية ، وهذا المتغير سنقوم بكتابة اللوت العادي به،،،

،،،المتغيرات السابقة يتم الاعلان عنها او كتابتها في Global Area او في بداية الكود قبل اي وظائف اخري،،،

،،،وسنقوم بكتابة الوظيفة التالية في اخر الكود،،،

كود:
double LotManage()
  {
      double lot = MathCeil(AccountFreeMargin() *  RiskPercent / 1000) / 100; 
	  
	  if(lot<MarketInfo(Symbol(),MODE_MINLOT))lot=MarketInfo(Symbol(),MODE_MINLOT);
	  if(lot>MarketInfo(Symbol(),MODE_MAXLOT))lot=MarketInfo(Symbol(),MODE_MAXLOT);
	  
	   
	   return (lot);
  }
،،،في الكود السابق قمنا بكتابة وظيفة من النوع double واسميناها LotManage وقمنا باخبار الاكسبيرت ان يقوم بضرب الهامش الحر للحساب في نسبة المخاطرة التي حددناها سابقا من المتغير الخارجي RiskPercent ثم القسمة علي 1000 وتقريب الناتج الي اقل عدد صحيح وذلك عن طريق الوظيفة MathCeil ، ثم قمنا بقسمة الناتج علي 100،،،

،،،وفي السطور الباقية من الوظيفة قمنا باخبار الاكسبيرت اذا كان اللوت الناتج اقل من اقل لوت تقبله المنصة اجعل قيمة اللوت تساوي اقل لوت تقبله المنصة ، واذا كان اللوت الناتج اكبر من اكبر لوت تقبله المنصة اجعل قيمة اللوت تساوي اكبر لوت تقبله المنصة،،،

نقره لعرض الصورة في صفحة مستقلة

،،،بعد ذلك في بداية الوظيفة OnTick نقوم بكتابة الكود التالي،،،

كود:
  double Lots=Lot;  
  if(UseMoneyManagement){Lots=LotManage();}
،،،في السطر السابق قمنا بالاعلان عن متغير من النوع double واسميناه Lots واعطيناه قيمة المتغير الخارجي Lot ، وبعد ذلك قمنا باخبار الاكسبيرت اذا كانت قيمة المتغير UseMoneyManagement تساوي true قم باعطاء المتغير Lots قيمة الوظيفة LotManage،،،

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



التوقيع

عرض البوم صور اسلام العوامى  
رد مع اقتباس


  #1  
قديم 12-10-2016, 10:35 AM
اسلام العوامى اسلام العوامى غير متواجد حالياً
عضو ذهبى
افتراضي كبسولات برمجية - طريقة كتابة كود ادارة رأس المال

،،،السلام عليكم ورحمة الله وبركاته،،،

،،،اعضاء وزوار ارابيا الكرام،،،

نقره لعرض الصورة في صفحة مستقلة

،،،نحتاج في بعض الاحيان ان يقوم الاكسبيرت بادارة راس المال للحساب وتحديد اللوت المناسب حسب نسبة المخاطرة التي نتبعها ، وطريقة كتابة هذا الكود كالتالي،،،
كود:
 extern bool  UseMoneyManagement = false;
،،،اولا نقوم بحجز متغير خارجي من النوع bool ونعطية اسم USE_Money_Managment وكما تعلمنا سابقا المتغيرات من النوع bool تأخذ احدا القيمتان true او false وسنقوم باسناد القيمة true للمتغير اذا اردنا تشغيل ادارة راس المال والقيمة false اذا اردنا إلغائها والعمل بلوت نقوم بتحديده،،،
كود:
  extern int  RiskPercent = 10;
،،،ومتغير خارجي من النوع int ونعطيه اسم Risk_Percent والمتغيرات من النوع int تأخذ فقط قيمه عددية صحيحة بدون كسور عشرية ، وهذا المتغير سنقوم بكتابة نسبة المخاطرة المطلوبة به،،،
كود:
extern double Lot = 0.01;
،،،ومتغير خارجي من النوع double ونعطيه اسم Lot والمتغيرات من النوع double تأخذ قيمة عددية عشرية ، وهذا المتغير سنقوم بكتابة اللوت العادي به،،،

،،،المتغيرات السابقة يتم الاعلان عنها او كتابتها في Global Area او في بداية الكود قبل اي وظائف اخري،،،

،،،وسنقوم بكتابة الوظيفة التالية في اخر الكود،،،

كود:
double LotManage()
  {
      double lot = MathCeil(AccountFreeMargin() *  RiskPercent / 1000) / 100; 
	  
	  if(lot<MarketInfo(Symbol(),MODE_MINLOT))lot=MarketInfo(Symbol(),MODE_MINLOT);
	  if(lot>MarketInfo(Symbol(),MODE_MAXLOT))lot=MarketInfo(Symbol(),MODE_MAXLOT);
	  
	   
	   return (lot);
  }
،،،في الكود السابق قمنا بكتابة وظيفة من النوع double واسميناها LotManage وقمنا باخبار الاكسبيرت ان يقوم بضرب الهامش الحر للحساب في نسبة المخاطرة التي حددناها سابقا من المتغير الخارجي RiskPercent ثم القسمة علي 1000 وتقريب الناتج الي اقل عدد صحيح وذلك عن طريق الوظيفة MathCeil ، ثم قمنا بقسمة الناتج علي 100،،،

،،،وفي السطور الباقية من الوظيفة قمنا باخبار الاكسبيرت اذا كان اللوت الناتج اقل من اقل لوت تقبله المنصة اجعل قيمة اللوت تساوي اقل لوت تقبله المنصة ، واذا كان اللوت الناتج اكبر من اكبر لوت تقبله المنصة اجعل قيمة اللوت تساوي اكبر لوت تقبله المنصة،،،

نقره لعرض الصورة في صفحة مستقلة

،،،بعد ذلك في بداية الوظيفة OnTick نقوم بكتابة الكود التالي،،،

كود:
  double Lots=Lot;  
  if(UseMoneyManagement){Lots=LotManage();}
،،،في السطر السابق قمنا بالاعلان عن متغير من النوع double واسميناه Lots واعطيناه قيمة المتغير الخارجي Lot ، وبعد ذلك قمنا باخبار الاكسبيرت اذا كانت قيمة المتغير UseMoneyManagement تساوي true قم باعطاء المتغير Lots قيمة الوظيفة LotManage،،،

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




رد مع اقتباس