FORTES: Taxa de Transação Ineficiente - página 2

 
Sergey Chalyshev:

É claro, explicações oficiais não fariam mal.

O que falta para plena satisfação é uma função de torneira como esta:

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

Se uma troca mantém a contagem do número de transações, é provável que seja possível levar esses dados para o terminal.

Devemos pedir aos desenvolvedores da MQ que acrescentem tal recurso.

Sim, seria bom.

Eu mesmo conto...

 
Михаил:

Sim, isso seria bom.

Eu mesmo considero...

Escreveu uma proposta para a SR.
 

A resposta já chegou!

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

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

Михаил

Pronto, agora está tudo claro. Você pode 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() вызывать после каждой сделки и при инициализации
 

Ligeiramente retrabalhada à minha maneira, a função para obter a hora de início da sessão:

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

trabalha seis vezes mais 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

se você gostar, você pode movê-lo para a linha do seu novato.

roteiro a ser testado:

Arquivos anexados:
 
Sergey Chalyshev:

Ligeiramente retrabalhada à minha maneira, a função para obter a hora de início da sessão:

trabalha seis vezes mais rápido.

se você gostar, você pode movê-lo para a linha do seu novato.

roteiro a ser testado:

Eu gosto, obrigado, é realmente mais rápido.
 
Михаил:

Hoje eu recebi uma "carta em cadeia" para 208,10 rublos.

Foram realizadas 2.121 transações.

Ao mesmo tempo, comprado/vendido durante este dia de negociação:

A comissão de intercâmbio foi: 30 rublos.

Ponto por transação = 40

A partir das fórmulas acima, temos:

Transações = 2121 - (30 * 40) - 2000 = -1079

Eu "faltava" 1079 transações para a penalidade.

Enganar nosso irmão de câmbio apenas limita 2000 transações, e então "fora da luz" coloca a penalidade

(é claro, talvez o corretor o roube).

Você deve ter cometido um erro em algum lugar em seus cálculos.

Mas sem seu histórico comercial e registros detalhados, é impossível verificar.

 
Andrey Khatimlianskii:

É provável que você tenha errado seus cálculos em algum lugar.

Mas sem seu histórico comercial e registros detalhados, é impossível verificar.

Você acha que eu não sou capaz de calcular o número de transações a partir dos logs do terminal?

P/S Eu enviei tudo para o suporte técnico da troca.

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

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

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


Михаил

Vou publicar a resposta.

 
Михаил:

Você acha que eu não sou capaz de calcular o número de transações a partir dos logs do terminal?

P/S Eu enviei tudo para o suporte técnico da troca.

Eu acho que você também é humano e pode estar errado. Não é assim? )

Vamos esperar por uma resposta, eu me pergunto o que eles dizem.

 
Andrey Khatimlianskii:

É provável que você tenha errado seus cálculos em algum lugar.

Mas sem seu histórico comercial e seus registros detalhados é impossível verificar isto.

Sim, eu cometi um erro.

A troca costumava emitir uma penalidade no dia seguinte, mas agora, no mesmo dia.

Eu tomei o dia de negociação errado :(

E o número de transações (hoje) foi de 2081, o que resultou em uma penalidade de 208,10 rublos.

Isto é correto.

 
Михаил:

Sim, erro meu.

A troca costumava emitir uma penalidade no dia seguinte, mas agora, no mesmo dia.

Eu tomei o dia de negociação errado :(

E o número de transações (hoje) foi de 2081, o que resultou em uma penalidade de 208,10 rublos.

Isto é correto.

Ainda não "cabe" em sua fórmula.