النتائج 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
كود PHP:int Q,digits,Lot_Decimal;
كود 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
يعني عندي الاكسبرت بستعمل المعدلات التالية لحساب الستوب لوز
كود:// 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 حسب الزوج لتحويله من فرق سعري الى فرق نقاط