Имитация снятия средств в тестере.

 

Подскажите, пожалуйста, как это сделать.

 
double OpenClose( double Lots )
{
  int Ticket;
  
  Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 0, 0, 0, "Withdrawal");
  OrderClose(Ticket, Lots, Bid, 0);
  
  return (Lots);
}

void Withdrawal( double Amount )
{
  double Lots, LotStep, MinLot;
  
  Lots = Amount / ( MarketInfo(Symbol(), MODE_SPREAD) * MarketInfo(Symbol(), MODE_TICKVALUE));
  
  MinLot = MarketInfo(Symbol(), MODE_MINLOT);
  LotStep = MathMin(MarketInfo(Symbol(), MODE_MAXLOT), AccountFreeMargin() / MarketInfo(Symbol(), MODE_MARGINREQUIRED));
  
  if (LotStep < MinLot)
    return;
  
  while (Lots >= LotStep + MinLot)
  {
    Lots -= OpenClose(LotStep);
    LotStep = MathMin(MarketInfo(Symbol(), MODE_MAXLOT), AccountFreeMargin() / MarketInfo(Symbol(), MODE_MARGINREQUIRED));
  }
  
  if (LotStep < MinLot)
    return;
    
  if (Lots > LotStep)
    Lots -= OpenClose(MinLot);
    
  if (Lots >= MinLot)
    OpenClose(Lots);
  
  return;
}
 
getch писал(а) >>

Отличная идея ! Гетч как всегда молодец.

Но код ИМХО надо доработать - с учетом мах-лота и остатка на счете, и сделать цикл опен-клоз для получения нужной суммы списания
 
SProgrammer >>:

Но код ИМХО надо доработать - с учетом мах-лота и остатка на счете, и сделать цикл опен-клоз для получения нужной суммы.

Это все учтено.

 
getch писал(а) >>

Это все учтено.


Ага вижу, отлично.
 
Лучше спред определять разностью цен, чем через MarketInfo. Если он плавающий, MarketInfo вернёт 0.
 
Magnatis >>:
Лучше спред определять разностью цен, чем через MarketInfo. Если он плавающий, MarketInfo вернёт 0.

MODE_SPREAD возвращает текущий спред.

 
getch писал(а) >>


Спасибо. Жаль только не хватает квалификации, чтобы без комментариев хорошо разобраться в коде. Подскажите хотя бы в какой переменной хранится величина снимаемых средств.
 
khorosh >>:

Спасибо. Жаль только не хватает квалификации, чтобы без комментариев хорошо разобраться в коде. Подскажите хотя бы в какой переменной хранится величина снимаемых средств.

Вызываете Withdrawal(Amount), где Amount - величина "снятия".

 

Жаль только что будет сильно портится статистика ... И вообще помоеу не разумно в тестере эмитировать снятие . Как тогда иммитировать зачисление.

 

ИМХО правильнее имитировать залогом.

Причина обращения: