النتائج 1 إلى 2 من 2
- 18-06-2013, 06:58 PM #1
تعديل في الاكسبيرت مطلوب من الاخ اسامه ان امكن
السلام عليكم ورحمة الله وبركاته
الاكسبيرت المرفق يعتمد في الدخول على الباربوليك سار بأوامر معلقه فقط والمطلوب التعديل في الامر المعاكس من حيث حجم اللوت بناء على شروط في الامر المفعل والاوامر السابقه كما هو مشروح في صورة الشارت المرفقه
ارجوا التعديل اخ اسامه ان امكن لاني بصراحه حاولت لما عجزت ومنكم ان شاء الله نستفيد
- 23-06-2013, 06:23 AM #2
رد:تعديل في الاكسبيرت مطلوب من الاخ اسامه ان امكن
الفكره في أنك تريد دالة عند عمل مودفاي للسعر يقوم بمقارنة الربح الحالي بالخسارات السابقه ويقوم بتغيير حجم اللوت بناء على التطور الجديد وفي نفس الوقت حجم اللوت الجديد يغطي الخسارات السابقه عندما يضرب الأستوب عند نقطة البارابوليك سار
لكن فكرة إستخدامك لحجم لوت ثابت مع العلم أن الأستوب لوز ليس عدد نقاط ثابته فحتى عند إغلاق الصفقة الرابحه قد يكون إجمالي الناتج خسارة في النهاية
بالنسبه لفكرتك سوف أقوم بعمل دالة لحفظ قيم الصفقات التي أغلقت على خساره والربح والخساره لها
كود PHP:double CurrentLoss()
{
double allloss;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
double lots=OrderLots();double loss=OrderProfit();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderProfit()<0)
{
allloss+=loss;
OrdersInfo[arraysize-1][0]=lots;
OrdersInfo[arraysize-1][1]=loss;
arraysize++;
ArrayResize(OrdersInfo,arraysize);
}
else return(allloss);
}
}
return(allloss);
}
كود PHP:double CurrentProfit()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
double lots=OrderLots();double loss=OrderProfit();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
return(OrderProfit());
}
}
return(0);
}
كود PHP:double LostOrders;
for(int i=0;i<arraysize;i++)
{
LostOrders+=OrdersInfo[i][0];
if(CurrentProfit()>LostOrders)
{
double newlot=OrdersInfo[i][1];
}
else break;
}
وضعت الشروط في الداله ModifyPendingOrderSar
مرفق الإكسبرت