Тарифы Срочного и Фондового рынков (НЕ ФОРЕКС) - страница 2

 
prostotrader #:

Не понял, что значит на момент сделки?

На счету 1 000 000 руб.

Открытие считает комиссию, анализируя сколько на счете не "сейчас", а сколько было "вчера"


 

Прикрепляю скрипт для расчета комиссии по акциям и фьючерсам на MOEX

Сейчас проверил на акциях и фьючерсах на акции- у меня бьёт идеально с отчетом брокера на реале. В одном месте только округление у брокера срабатывает на 1 коп. не так как у меня - и есть расхождения небольшие. Есть мысли, что округляется у брокера не так, как написано на сайте биржи. Или на сайте биржи опечатка :)

Для расчета под своего брокера исправить строки

//+------------------------------------------------------------------+
//| Комиссия брокера (без сбора биржи!!!) - у каждого свой
//+------------------------------------------------------------------+
//---Акция (0,0177% от суммы сделки)
double stock_p = 0.0177;

//---Фьючерсы (0.45 руб./контракт)
double futures_v = 0.45;

По фьючерсу RTS есть нюансы из-за стоимости тика. В онлайн будет вроде всего правильно, на истории будут отклонения. Но точно уже не помню - давно его не торговал, лучше проверить.

Добавлено:

Сбор биржи у всех физ.лиц одинаковый (на сколько я знаю) и в коде он считается - скрипт выводит сумму комиссии брокера и биржи.

Файлы:
Comission.mq5  14 kb
 

Если кому-нибудь нужно в тестере учитывать комиссию, то логика такая:

1) Идет обработка транзакций

//+------------------------------------------------------------------+
//|   Обрабатываем транзакции
//+------------------------------------------------------------------+
void CTradeDriver::OnTradeTransaction(const MqlTradeTransaction &trans,
                                      const MqlTradeRequest &request,
                                      const MqlTradeResult &result)
  {
//Списываем комиссию со счета в тестере
   if(MQLInfoInteger(MQL_TESTER) ||
      MQLInfoInteger(MQL_OPTIMIZATION) ||
      MQLInfoInteger(MQL_VISUAL_MODE))
     {

      //--- если транзакция не является результатом добавления сделки в историю - завершаемся
      if((ENUM_TRADE_TRANSACTION_TYPE)trans.type!=TRADE_TRANSACTION_DEAL_ADD)
         return;

      if(trans.symbol != m_symbol)
         return;

      if(trans.deal_type != DEAL_TYPE_BUY && trans.deal_type != DEAL_TYPE_SELL)
         return;

      // если всё же сделка - начинаем процедуру списания комиссии
      if(!HistoryDealSelect(trans.deal))
         return;

      double commission=Comission(trans.price, trans.volume);

      if(commission>0)
         TesterWithdrawal(commission);

     }
   return;
  }

2) и в конце теста выводим результат с комиссией

//+------------------------------------------------------------------+
//|   Выводим итоговый баланс для оптимизатора
//+------------------------------------------------------------------+
double OnTester()
  {
   return(AccountInfoDouble(ACCOUNT_BALANCE));
  }

Я даже не помню, сам это всё придумал, или подглядел у кого. Давно это было уже...