اقتباس:
المشاركة الأصلية كتبت بواسطة Mohammed_Elmasry
:00006:
أود أن أشارك بهذا الكود البسيط حتي نستطيع أن نحقق أرباح معتدلة من مجمل العقود المفتوحة
كود PHP:
.....//your normal code
extern bool ProtectProfit= true;
extern double ProfitToProtect = 250;
extern double ProtectStarter = 125;
extern bool ProtectLoss= false;
extern double LossToProtect = 100;
.....//your normal code
int start()
{
...... //your normal code
if(ProtectProfit)
ProfitProtect(ProfitToProtect);
if(ProtectLoss)
LossProtect(LossToProtect);
.......//your normal code
}
void ProfitProtect(double profit)
{
int total = OrdersTotal();
double MyCurrentProfit=0;
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber)
MyCurrentProfit += OrderProfit();
}
//Print("My Current Profit is : " + DoubleToStr(MyCurrentProfit,2) + " While My Profit Target is " + DoubleToStr(profit,2));
if(MyCurrentProfit>=ProtectStarter) //start protection at this level!
ProtectLoss=true;
if(MyCurrentProfit>=profit)
CloseAll();
}
void LossProtect(double profit)
{
int total = OrdersTotal();
double MyCurrentProfit=0;
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber)
MyCurrentProfit += OrderProfit();
}
if(MyCurrentProfit<=profit)
CloseAll();
}
void CloseAll()
{
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber)
if(OrderType()==OP_BUY)
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet);
if(OrderType()==OP_SELL)
OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Violet);
}
}
هذا الكود سوف يجعلك تضع حد أقصي للربح لجميع القود المفتوحة و حد أدني لهذا الربح
كما أنك مطالب بأن تضع نقطة يبدأ فيها البرنامج مراقبة الأرباح عندما يصل إليها
مثلا:
الحد الأقصي للربح الذي أريد البرنامج أن يقفل جميع العقود إذا وصل إليه هو
300 نقطة
و الحد الأدني هو
150 نقطة
ولكن لا تبدأ في المراقبة إلا إذا وصل الربح إلي
200 نقطة
هنا عندما يصل مجموع أرباح العقود المفتوحة إلي 200 نقطة فأن الرنامج لن يسمح لهذا الربح أن يقل عن 150 نقطة ثانيا و يأخذ الأرباح عند 300 نقطة
:00012:
الأخ الحبيب محمد المصري:
أنا مسرور جداً بتواجدك معنا هنا، وبمشاركاتك الكثيرة المفيدة، وفقك الله وجعل ذلك كله في موازين أعمالك.
لدي ملاحظة صغيرة على الكود الذي قدمته سابقاً أحببت أن أنوه لها، وبالطبع أنت أستاذنا في البرمجة وفي تطوير الإكسبرتات بدون أية مجاملة، هذا الخطأ البرمجي وقعت فيه سابقاً وقد احترت كثيراً حتى صحح لي أحدهم الكود الخاص بي.
بالنسبة لإغلاق الصفقات الأفضل أن نبدأ من الصفقة الأخيرة ثم التي قبلها وهكذا حتى نصل إلى الصفقة الأولي، لأنه كلما نقوم بإغلاق صفقة ينقص عدد الصفقات واحد وبالتالي ينقص الإندكس بمقدار واحد.
كود PHP:
void CloseAll()
{
int total = OrdersTotal();
for (int cnt = total ; cnt >=0 ; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber)
if(OrderType()==OP_BUY)
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet);
if(OrderType()==OP_SELL)
OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Violet);
}
}