FORTS: 低效的交易费用 - 页 2

 
Sergey Chalyshev:

当然,官方的解释也无妨。

要想完全满足,缺少的是像这样的水龙头功能。

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

如果一个交易所对交易数量进行统计,很可能可以将这些数据输入终端。

我们必须要求MQ开发者添加这样的功能。

是的,这将是好事。

我自己算...

 
Михаил:

是的,那就好了。

我自己认为...

写了一份提交给SR的提案。
 

答案已经到了!

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

 С уважением,
Глеб Кочнев
Техническая поддержка ПАО Московская Биржа
+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);
  }
//+------------------------------------------------------------------+

工作速度快六倍。

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 Время выполнения = 89 mcs
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 Время выполнения = 563 mcs

如果你喜欢它,你可以把它移到你的新手主题。

脚本来测试。

附加的文件:
 
Sergey Chalyshev:

以我自己的方式稍作修改,获得会议开始时间的功能。

工作速度快六倍。

如果你喜欢它,你可以把它移到你的新手主题。

脚本来测试。

我喜欢它,谢谢,它真的更快。
 
Михаил:

今天我收到一封208.10卢布的 "连锁信"。

已经有2,121项交易。

同时,在这个交易日买入/卖出。

交易委员会是。30卢布。

每笔交易的点数=40

从上述公式中我们可以看出。

交易=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卢布的罚款。

这一点是正确的。

它仍然不 "适合 "你的公式。
原因: