النتائج 1 إلى 15 من 17
- 12-04-2018, 12:57 AM #1
أستفسار عن ادارة رأس المال في الاكسبرت (برمجة ادارة رأس المال لكل صفقة )
سلام عليكم و رحمة الله وبركاته
كان عندي فكرة كل اخلي الاكسبرت يخاطر بكل صفقة ب 1 % من الحساب و يحسب حجم اللوت بحسب عدد نقاط ستوب لوز
مثال
الحساب 10000 دولار نسبة المخاطرة 2 % و ستوب لوز مثلا 24
من هذا كلوا
(10000 *2 /100 )/24 = 200 / 24 = 8.3333 دولار لكل نقطة
اي 0.83 لوت
Lots=(AccountBalance()*RiskPercent/100)/((MathAbs(OrderStopLoss()-OrderOpenPrice()))*10000);
جربت الكود و اكواد كثير و لا واحد عم يشتغل
بقدر حدا يدلني اكيف ازبط الكود
و شكرا
وتحياتي
- 12-04-2018, 08:29 AM #2
تحت الـ Local variables
ثم داخل دالة الـ int OnInit()كود PHP:int Q,digits,Lot_Decimal;
ثم داخل الدالة void OnTick()كود PHP:if(MarketInfo(Symbol(),MODE_MINLOT)<0.1)Lot_Decimal=2;else Lot_Decimal=1;
الاول بتحسب عدد نقاط الاستوب لوز وتقسمها على نسبة الخسارة من راس المال النتيجة هتكون اللوت المناسب للصفقة اللي تساوي نسبة الخسارة لو الصفقة ضربت استوب لوز
مثال :
وبتعمل متغيرات خارجية في مدخلات الاكسبرت كالتالي :كود PHP:double cp=iClose(Symbol(),0,1);
double lp=iLow(Symbol(),0,1);
double hp=iHigh(Symbol(),0,1);
double op=iOpen(Symbol(),0,0);
double pipsbuy=(Ask-lp)/Point;
if(Tryy>0&&pipsbuy>0)double lotsbuy=(Balance/Tryy/pipsbuy);
double pipssell=(hp-Bid)/Point;
if(Tryy>0&&pipssell)double lotssell=(Balance/Tryy/pipssell);
double Takeprofitbuy=(Ask-lp)/Point/10*Step_TakeProfits_Buy;
double Takeprofitsell=(hp-Bid)/Point/10*Step_TakeProfits_Sell;
واخيراً بتعمل التالي في شروط فتح الصفقةكود PHP:input double Step_TakeProfits_Buy=2,
Step_TakeProfits_Sell=2,
Balance=2000,
Tryy=100;
input double Stoploss=0.1;
كود PHP:int tickets=OrderSend(Symbol(),OP_SELL,NormalizeDouble(lotssell,Lot_Decimal),NormalizeDouble(Bid,Digits),3*Q,SLs,TPs,"aymoon",MagicNo,0,Red);
- 12-04-2018, 06:28 PM #3
شكرا اخي أيمن راح اجربها
تحياتي
- 13-04-2018, 02:16 AM #4
ما زبطت معي
عم بحاول اعدل على اكسبرت عجبني بكثرة المدخلات الي فيوا
بامكانك اخي ايمن و احد من الاخوة المبرمجين التعديل على المخاطرة بحيث تكون جسب عدد نقاط ستوب لوز مثل ما وضحت باول المشاركة
extern bool RiskManagement=false; //money management
extern double RiskPercent=10; //risk in percentage
و بهكذا يمكن استعمال هذا الاكسبرت كقالب لاستراتيجيات مختلفة
//risk management
bool MM=RiskManagement;
if(MM){if(RiskPercent<0.1||RiskPercent>100){Commen t("Invalid Risk Value.");return(0);}
else{Lots=MathFloor((AccountFreeMargin()*AccountLe verage()*RiskPercent*Point*100)/(Ask*MarketInfo(Symbol(),MODE_LOTSIZE)*
MarketInfo(Symbol(),MODE_MINLOT)))*MarketInfo(Symb ol(),MODE_MINLOT);}}
if(MM==false){Lots=Lots;}
سلام عليكم و رحمة الله وبركاته
كان عندي فكرة كل اخلي الاكسبرت يخاطر بكل صفقة ب 1 % من الحساب و يحسب حجم اللوت بحسب عدد نقاط ستوب لوز
مثال
الحساب 10000 دولار نسبة المخاطرة 2 % و ستوب لوز مثلا 24
من هذا كلوا
(10000 *2 /100 )/24 = 200 / 24 = 8.3333 دولار لكل نقطة
اي 0.83 لوت
Lots=(AccountBalance()*RiskPercent/100)/((MathAbs(OrderStopLoss()-OrderOpenPrice()))*10000);
جربت الكود و اكواد كثير و لا واحد عم يشتغل
بقدر حدا يدلني اكيف ازبط الكود
و شكرا
وتحياتي
- 30-04-2018, 03:25 PM #5
اخي بامكانك تشرح كيفية عملهاكود:input double Step_TakeProfits_Buy=2, Step_TakeProfits_Sell=2, Balance=2000, Tryy=100; input double Stoploss=0.1;
هل يمكن تبسيط الكود
بحيث يمكن وضع نسبة مخاطرة داخل شروط الاكسبرت مثالصرحتنا الكود صعب شويكود:double risk = 2 ;
تحياتي
- 30-04-2018, 06:33 PM #6
اكثر شيء شرحته في المنتديات
فكرة سؤالك: ماهو حجم الصفقة باللوتات التي تكفل خسارة 1% مثلا بعد 24 نقطة؟
- 30-04-2018, 06:35 PM #7
المشكلة في كودك اخي انك افترضت الامر مفتوح واستخدمت دوال امر مفتوح او معلق: ونعلم ان قيمها 0.00000 قبل وضعها
OrderStopLoss()-OrderOpenPrice())
- 30-04-2018, 06:37 PM #8
والخطأ الابرز في كودك رقم 10000 في المعادلة
افترض طبقت على المجنون ؟؟؟
وكودك بالمجمل صحيح الا فيما ذكر--يعني الفكرة نفسها صحيحة (قسمة الخسارة على فرق النقاط)-- مع ملاحظة انك نسيت قيمة النقطة لزوج وهي تؤثر في قيمة الربح او الخسارة,
- 30-04-2018, 06:48 PM #9
===========
- 30-04-2018, 07:08 PM #10
ستواجهك مشكلة التقريب: انظر للصورة, سواء استخدن النورمال او السترنق
تحلها بخصم 0.01 لوت من الناتج الاخير, او تستخدم طريقة اذكى شوي,
- 30-04-2018, 07:13 PM #11
=============او تستخدم طريقة اذكى شوي,
- 30-04-2018, 07:14 PM #12
فيكون أفضل جواب على الإطلاق لسؤالك هو:
كود PHP:Lotsx=(AccountBalance()*RiskPercent/100.0)/(PIPS_LOSS*MarketInfo(Symbol(),MODE_TICKVALUE));
double Lots3=Lotsx-MathMod(Lotsx,0.01);
- 01-05-2018, 04:58 AM #13
شكرا أخي محمد على الاجابة الكود الي كتبتوا استعملتوا
بس المشكلة انو انا ما بستعمل Fixed Stop loss
يعني عندي الاكسبرت بستعمل المعدلات التالية لحساب الستوب لوز
NumberOfBarsSwing عدد شمعات للمقارنة بين القمم او القيعان الاخيرةكود:// SL=(Low[iLowest(_Symbol, PERIOD_CURRENT, MODE_LOW, NumberOfBarsSwing, 0)])+(Ask-Bid); BUY // // TP=(Ask-(Low[iLowest(_Symbol, PERIOD_CURRENT, MODE_LOW, NumberOfBarsSwing, 0)]))+Ask; BUY // // SL=(High[iHighest(_Symbol, PERIOD_CURRENT, MODE_HIGH, NumberOfBarsSwing, 0)])+(Ask-Bid); SELL // // TP=Bid-((High[iHighest(_Symbol, PERIOD_CURRENT, MODE_HIGH, NumberOfBarsSwing, 0)])-Bid); SELL //
و المشكلة لما يوصل و يبلش يحسب اللوت ما بيتعرف على الستوب لوز الذي يتغير بكل صفقة سوى كانت بيع او شراء
تحياتي
- 02-05-2018, 10:47 AM #14
- 02-05-2018, 10:50 AM #15
يعني بدلا من اعطاء PIPS_LOSS قيمة ثابتة----اسحبها اولا:
مثال:
PIPS_LOSS=(High[iHighest(_Symbol, PERIOD_CURRENT, MODE_HIGH, NumberOfBarsSwing, 0)])-Ask; G
مع ضرب القيمة في 10000 او 100 حسب الزوج لتحويله من فرق سعري الى فرق نقاط
الأكثر زيارة
رد مع اقتباس