FORTS: Tasa de Transacción Ineficiente - página 2

 
Sergey Chalyshev:

Por supuesto, una explicación oficial no estaría de más.

Lo que falta para la plena satisfacción es una función de grifo como ésta:

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

Si una bolsa lleva la cuenta del número de transacciones, probablemente sea posible obtener estos datos en el terminal.

Debemos pedir a los desarrolladores de MQ que añadan dicha función.

Sí, sería bueno.

Yo mismo cuento...

 
Михаил:

Sí, eso sería bueno.

Yo mismo considero...

Redactó una propuesta para el SR.
 

¡La respuesta ha llegado!

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

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

Михаил

Ya está, ahora está todo claro. Puedes contar.

#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() вызывать после каждой сделки и при инициализации
 

Ligeramente reelaborada a mi manera, la función para obtener la hora de inicio de la sesión:

//+------------------------------------------------------------------+
//| 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);
  }
//+------------------------------------------------------------------+

funciona seis veces más rápido.

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

si te gusta, puedes moverlo a tu hilo de novatos.

script para probar:

Archivos adjuntos:
 
Sergey Chalyshev:

Ligeramente reelaborada a mi manera, la función para obtener la hora de inicio de la sesión:

funciona seis veces más rápido.

si te gusta, puedes moverlo a tu hilo de novatos.

script para probar:

Me gusta, gracias, es realmente más rápido.
 
Михаил:

Hoy he recibido una "carta en cadena" por 208,10 rublos.

Se han realizado 2.121 transacciones.

Al mismo tiempo, compró/vendió durante este día de negociación:

La comisión de cambio era: 30 rublos.

Punto por transacción = 40

De las fórmulas anteriores tenemos:

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

Me "faltaron" 1079 transacciones para la sanción.

Engañar a nuestro hermano de intercambio sólo limitar 2000 transacciones, y luego "fuera de la luz" pone la pena

(por supuesto, tal vez el corredor lo robe).

Debes haber cometido un error en alguna parte de tus cálculos.

Pero sin su historial de operaciones y registros detallados es imposible comprobarlo.

 
Andrey Khatimlianskii:

Es probable que se haya equivocado en sus cálculos en alguna parte.

Pero sin su historial de operaciones y registros detallados es imposible comprobarlo.

¿Crees que no soy capaz de calcular el número de transacciones a partir de los registros del terminal?

P/S He enviado todo al soporte técnico de la bolsa.

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

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 руб.

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


Михаил

Publicaré la respuesta.

 
Михаил:

¿Crees que no soy capaz de calcular el número de transacciones a partir de los registros del terminal?

P/S He enviado todo al soporte técnico de la bolsa.

Creo que tú también eres humano y puedes equivocarte. ¿No es así? )

Esperaremos una respuesta, me pregunto qué dirán.

 
Andrey Khatimlianskii:

Es probable que se haya equivocado en sus cálculos en alguna parte.

Pero sin su historial de operaciones y registros detallados es imposible verificar esto.

Sí, me he equivocado.

La bolsa solía emitir una sanción al día siguiente, pero ahora, en el mismo día.

Me he equivocado de día de negociación :(

Y el número de transacciones (hoy) fue de 2081, lo que supuso una sanción de 208,10 rublos.

Esto es correcto.

 
Михаил:

Sí, mi error.

La bolsa solía emitir una sanción al día siguiente, pero ahora, en el mismo día.

Me he equivocado de día de negociación :(

Y el número de transacciones (hoy) fue de 2081, lo que supuso una sanción de 208,10 rublos.

Esto es correcto.

Sigue sin "encajar" en su fórmula.