وعليكم السلام ورحمة الله
الموضوع يطول شرحه فتختار الريسك حسب الرصيد او الريسك حسب الأكويتي حتى ياخذ في الحسبان الأوردرات المفتوحة بمكاسبها وخسايرها بنفس اللحظة وبالتالي الأكسبيرت يحدد اللوت حسب حجم المخاطرة الذي انته طلبته وخذ مثال :
extern int OpenOrdersLimit36 = 20;
extern int SellStoploss35 = 100;
extern int SellTakeprofit35 = 100;
extern int PriceOffset35 = 100;
extern double BalanceRiskPercent35 = 5;
extern int OpenOrdersLimit37 = 20;
extern int BuyStoploss30 = 100;
extern int BuyTakeprofit30 = 100;
extern int PriceOffset30 = 100;
extern double BalanceRiskPercent30 = 5;
للمخاطر 5% من الرصيد لدورة من عشرين اوردر وممكن تخليها اوردر واحد
بعدها مثال لتنفيذ البيع حسب الشرط اعلاه البيع فقط كمثال
BuyPendingRiskFixed30();
}
}
void BuyPendingRiskFixed30()
{
double lotsize = MarketInfo(Symbol(),MODE_LOTSIZE) / AccountLeverage();
double pipsize = 1 * 10;
double maxlots = AccountBalance() / 100 * BalanceRiskPercent30 / lotsize * pipsize;
if (BuyStoploss30 == 0) Print("OrderSend() error - stoploss can not be zero");
double lots = maxlots / BuyStoploss30 * 10;
// calculate lot size based on current risk
double lotvalue = 0.001;
double minilot = MarketInfo(Symbol(), MODE_MINLOT);
int powerscount = 0;
while (minilot < 1)
{
minilot = minilot * MathPow(10, powerscount);
powerscount++;
}
lotvalue = NormalizeDouble(lots, powerscount - 1);
if (lotvalue < MarketInfo(Symbol(), MODE_MINLOT)) // make sure lot is not smaller than allowed value
{
lotvalue = MarketInfo(Symbol(), MODE_MINLOT);
}
if (lotvalue > MarketInfo(Symbol(), MODE_MAXLOT)) // make sure lot is not greater than allowed value
{
lotvalue = MarketInfo(Symbol(), MODE_MAXLOT);
}
تحياتي