ФОРТС: Сбор за неэффективные Транзакции - страница 2

 
Sergey Chalyshev:

Конечно, официальные разъяснения не помешают.

Для полного удовлетворения не хватает функции тапа такой:

 AccountInfoInteger(ACCOUNT_TRANSACTION_SESSION) // - количество транзакций за текущую сессию.

Если биржа ведет подсчет количества транзакций, то наверное можно получить эти данные в терминал.

Надо просить разработчиков MQ добавить такую возможность. 

Да, было бы хорошо.

Я сам считаю... 

 
Михаил:

Да, было бы хорошо.

Я сам считаю... 

Написал в СД предложение.
 

Пришел ответ!

Верно, объем заявки, сделки - не важен.

 С уважением,
Глеб Кочнев
Техническая поддержка ПАО Московская Биржа
+7 (495) 733-95-07 | help@moex.com

 
 
--- Первоначальное сообщение ---
С: 
Отправленные: 25.11.2015 0:16:09
По: help@moex.com
Копия: 
Тема: Re[2]: Сбор за неэффективные Транзакции (N602821N)
 

Добрый день, Глеб!

Осталось выяснить следующий ньюанс.

Из формулы по расчёту неэффективных транзакций
не ясен параметр "l"
l – балл для Сделки, заключенной с указанием одного из Разделов (определенный по типу Сделки в соответствии с Таблицей 1).
Имеется ввиду, что формула не учитывает объём сделки?
Т.е 1 сделка - 40 баллов и неважно каким объёмом она была совершена?

Михаил

 Ну вот, теперь, всё ясно. Можно считать.

#property copyright "Copyright 2015, Mikalas"
#property link      "https://www.mql5.com"
#property version   "1.00"
//
input double  TrPoint    = 1;    //Балл за транзакцию
input ulong   DealPoint  = 40;   //Балл за сделку
input ulong   SesTrCount = 620;  //Транзакций за сессию 
//
double ord_count, trans_count;
//
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  ord_count = NormalizeDouble( double( SesTrCount ) * TrPoint, 0 );
  SetTransactions();
  return( INIT_SUCCEEDED ); 
}
//+------------------------------------------------------------------+
//| Expert Set start day time function                               |
//+------------------------------------------------------------------+
datetime SetStDayTime()
{
  MqlDateTime  dt_str; 
  TimeTradeServer( dt_str );
//---
  if ( ( dt_str.day_of_week == 0 ) || ( dt_str.day_of_week == 6 ) ) return( datetime( 0 ) );  
//---
  string time_str = IntegerToString( dt_str.year ) + "." + IntegerToString( dt_str.mon ) +
                    "." + IntegerToString( dt_str.day ) + " 19:00:00";
  ulong cur_day = ulong( StringToTime( time_str ) );                     

  if ( ( dt_str.hour >= 19 ) && ( dt_str.hour <= 23 ) )
  {
    return( StringToTime( time_str ) );
  }
  else
  {
    ulong one_day = 24 * 60 * 60;
//---      
    if ( dt_str.day_of_week == 1 )
    {
      cur_day -= one_day * 3;
    }
    else
    {
      cur_day -= one_day;
    }
    return( datetime( cur_day ) );
  }  
  return( datetime( 0 ) );
}
//+------------------------------------------------------------------+
//| Expert calc deals fee function                                   |
//+------------------------------------------------------------------+
double GetExgangeFee( const datetime start_time )
{
  double all_fee = 0.0;
  ulong deal_ticket;
//---  
  if ( HistorySelect( start_time, TimeTradeServer() ) )
  {
    int deals_total = HistoryDealsTotal();
//---   
    if ( deals_total > 0 )
    {
      for ( uint i = 0; i < uint( deals_total ); i++ )
      {
        deal_ticket = HistoryDealGetTicket( i );
//---        
        if ( deal_ticket > 0 )
        {
          ulong order_ticket = ulong( HistoryDealGetInteger( deal_ticket, DEAL_ORDER ) );
          
          if ( order_ticket > 0 )
          {
            all_fee += HistoryDealGetDouble( deal_ticket, DEAL_COMMISSION );
          }  
        }
      }
      return( MathAbs( all_fee ) );
    }  
  }
  return( 0 );
}
//+------------------------------------------------------------------+
// Expert Set transactions function                                  |
//+------------------------------------------------------------------+
void SetTransactions()
{
  datetime start_time = SetStDayTime();
  double tr_bonus = GetExgangeFee( start_time );
//---
  if ( tr_bonus > 0.0 )
  {
    double bonus = tr_bonus * double( DealPoint ); 
    ord_count = NormalizeDouble( double( SesTrCount ) * TrPoint + bonus, 0 );
  }   
}
//Осталось "организовать" счётчик транзакций ( trans_count )
//и при установке, удалении или модификации ордера, считать кол-во транзакций.
//А во время клиринга обнулять счётчик транзакций.
//Перед установкой ордера проверять

/*if ( trans_count < ord_count )
{
  //Установка ордера
}*/
//Функцию SetTransactions() вызывать после каждой сделки и при инициализации
 

Немного переделал по своему, функцию получения времени начала сессии:

//+------------------------------------------------------------------+
//| Get start session time function Serj                             |
//+------------------------------------------------------------------+
datetime GetTimeStartSession()
  {
   MqlDateTime  dt_str;
   datetime one_day=86400;
   TimeTradeServer(dt_str);
   int hour=dt_str.hour;
   dt_str.hour=19; dt_str.min=0; dt_str.sec=0;
   datetime time_start=StructToTime(dt_str);
   
   switch(dt_str.day_of_week)
     {
      case 6: time_start-=one_day; break;
      case 0: time_start-=(one_day*2); break;
      case 1: if(hour<19) time_start-=(one_day*3); break;
      default: if(hour<19) time_start-=one_day; break;
     }
   return(time_start);
  }
//+------------------------------------------------------------------+

работает в 6 раз быстрее

2015.11.27 08:20:52.374 Speed Test Time Session (UTRY-12.15,H1) session start time: 2015.11.26 19:00:00
2015.11.27 08:20:52.374 Speed Test Time Session (UTRY-12.15,H1) Serj Время выполнения = 89mcs
2015.11.27 08:20:52.374 Speed Test Time Session (UTRY-12.15,H1) session start time: 2015.11.26 19:00:00
2015.11.27 08:20:52.374 Speed Test Time Session (UTRY-12.15,H1) Mikalas Время выполнения = 563mcs

если понравится можешь перенести в свою ветку для новичков. 

скрипт для проверки:

Файлы:
 
Sergey Chalyshev:

Немного переделал по своему, функцию получения времени начала сессии:

работает в 6 раз быстрее

если понравится можешь перенести в свою ветку для новичков. 

скрипт для проверки:

Понравилось, спасибо, действительно быстрее.
 
Михаил:

Сегодня получил "письмо счастья" на 208,10 руб.

Было совершено 2121 транзакция.

При этом, куплено/продано за этот торговый день:

Комиссия биржи составила: 30 руб.

Балл за сделку = 40 

Исхода из приведённых выше формул имеем:

Transactions = 2121 - (30 * 40) - 2000  = -1079

Т.е я "недобрал" 1079 транзакций для выставления штрафа.

Дурит нашего брата биржа, просто стоит лимит в 2000 транзакций, а потом "от фонаря" штраф выставляет

(может, конечно это брокер приворовывает). 

Скорее всего, вы где-то ошиблись в расчетах.

Но без вашей истории торговли и подробных журналов это проверить невозможно. 

 
Andrey Khatimlianskii:

Скорее всего, вы где-то ошиблись в расчетах.

Но без вашей истории торговли и подробных журналов это проверить невозможно. 

Вы думаете, что я не в состоянии подсчитать кол-во транзакций из логов терминала?

P/S Я всё отправил в техподдержку биржи.

Добрый день, Глеб!

01.12.2015 г. я получил от Вас (Биржи) штраф за
неэффективные транзакции. За данный торговый день (с 19:00 27.12.2015 по 18:45 30.12.2015),
я произвёл 2121 транзакцию, при этом было куплено/продано 5 MIX-12.15 и 50 MXI-12.15

1. На каком основании выставлен штраф в 208,10 руб, если я, исходя из формул биржи,
"недобрал" 1079 транзакций до штрафа?

2. Если не сложно, покажите на моём конкретном примере, как Вы (Биржа) насчитали 208,10 руб.

Во вложенном файле логи моего терминала с произведёнными транзакциями.


Михаил

 

Ответ опубликую. 

 
Михаил:

Вы думаете, что я не в состоянии подсчитать кол-во транзакций из логов терминала?

P/S Я всё отправил в техподдержку биржи.

Я думаю, что вы тоже человек, и можете ошибаться. Это не так? )

Ответа подождем, интересно, что скажут. 

 
Andrey Khatimlianskii:

Скорее всего, вы где-то ошиблись в расчетах.

Но без вашей истории торговли и подробных журналов это проверить невозможно. 

Да, ошибся.

Раньше биржа выставляла штраф на следующий день, а сейчас, в тот же день.

я взял не тот торговый день :( 

А кол-во транзакций (сегодня) составило 2081, что привело к штрафу 208,10 руб.

Всё правильно.

 
Михаил:

Да, ошибся.

Раньше биржа выставляла штраф на следующий день, а сейчас, в тот же день.

я взял не тот торговый день :( 

А кол-во транзакций (сегодня) составило 2081, что привело к штрафу 208,10 руб.

Всё правильно.

Все равно в вашу формулу эта цифра "не помещается".
Причина обращения: