Specification
к примеру 10 стратегий выстреливают одновременно в одну и ту же милисекунду при открытие бара
надо их сделать последовательными один за другим, с проверкой, что предыдущий оред был открыт и модифицирован SL TP
оредра могут быть отложенные и маркет
пока один ордер исполняется другие ждут в очереди
так как используется ММ настоящий баланс
double Total_Current_Risk()
{
double res = 0;
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderStopLoss() != 0)
{
double m_point = MarketInfo(OrderSymbol(), MODE_POINT);
double m_lotstep = MarketInfo(OrderSymbol(), MODE_LOTSTEP);
double m_TickValue = MarketInfo(OrderSymbol(), MODE_TICKVALUE);
double m_sl = 0;
if (OrderType() == OP_BUY || OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP)
{
m_sl = (OrderOpenPrice() - OrderStopLoss()) / m_point;
}
else
{
m_sl = (OrderStopLoss() - OrderOpenPrice()) / m_point;
}
res += NormalizeDouble((OrderLots() * (m_sl * m_TickValue)) + OrderCommission() + OrderSwap(), 2);
}
}
Print("Account Balance: ", AccountBalance(), " -- Total Current Risk (with swap and commission): ", res, " -- Net Balance: ", AccountBalance() - res);
return res;
}
modify MM ( accountbalance() - total_current_risk() )
random range Sleep не предлогать,
################## sleep random delay #########################
ulong micro=GetMicrosecondCount();
ulong rnd = MathAbs(micro+MagicNumber);
MathSrand( rnd );
int slp = (MathRand()%120);
Verbose ("sqMMRiskFixedBalancePct, sleep="+IntegerToString(slp)+" seconds; rnd=" + IntegerToString(rnd)+"; GetMicrosecondCount()="+IntegerToString(micro) + ";GetTickCount()="+IntegerToString(GetTickCount())+"; magic="+IntegerToString(MagicNumber));
Sleep (1000*slp);
скан по номерам чартов и выставка sleep (current chart num) тоже не надо.
//+--------------------This is the new Function----------------------------+
int Get_Delay()
{
long prev_chart = ChartFirst(); // here we get ID of 1st chart
int count = 0;
while (prev_chart != -1) // we check if charts has finished
{
if (prev_chart == ChartID()) break; // we check if the current chart is = ID of selected chart, break the loop
prev_chart = ChartNext(prev_chart); // update selected Chart ID
count++; // increase count
}
return (count * 3000); // return Time in Milliseconds
}
#Sleep(Get_Delay()) _ticket =
работает плагин OrderReliable mqh
минимальное изменения кода и структуры шаблонов, при сравнении будет использован vimdiff
указать где какой код был вставлен, так как будет использован для изменения будующих шаблонов