FORTS: tassa di transazione inefficiente - pagina 2

 
Sergey Chalyshev:

Certo, delle spiegazioni ufficiali non farebbero male.

Ciò che manca per una piena soddisfazione è una funzione tap come questa:

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

Se uno scambio tiene il conto del numero di transazioni, è probabilmente possibile ottenere questi dati nel terminale.

Dobbiamo chiedere agli sviluppatori di MQ di aggiungere una tale caratteristica.

Sì, sarebbe bello.

Io stesso conto...

 
Михаил:

Sì, sarebbe bello.

Io stesso considero...

Ha scritto una proposta alla SR.
 

La risposta è arrivata!

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

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

Михаил

Ecco, ora è tutto chiaro. Puoi contare.

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

Leggermente rielaborata a modo mio, la funzione per ottenere l'ora di inizio della sessione:

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

funziona sei volte più velocemente.

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 ti piace, puoi spostarlo nel tuo thread per principianti.

script da testare:

 
Sergey Chalyshev:

Leggermente rielaborata a modo mio, la funzione per ottenere l'ora di inizio della sessione:

funziona sei volte più velocemente.

se ti piace, puoi spostarlo nel tuo thread per principianti.

script da testare:

Mi piace, grazie, è davvero più veloce.
 
Михаил:

Oggi ho ricevuto una "lettera a catena" per 208,10 rubli.

Ci sono state 2.121 transazioni.

Allo stesso tempo, comprato/venduto durante questa giornata di trading:

La commissione di scambio era: 30 rubli.

Punto per transazione = 40

Dalle formule precedenti abbiamo:

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

Mi sono "mancate" 1079 transazioni per la pena.

Fool nostro scambio fratello solo limitare 2000 transazioni, e poi "fuori dalla luce" mette la pena

(certo, forse il broker lo ruba).

Devi aver fatto un errore da qualche parte nei tuoi calcoli.

Ma senza la vostra storia di trading e i registri dettagliati è impossibile controllare.

 
Andrey Khatimlianskii:

È probabile che tu abbia sbagliato i tuoi calcoli da qualche parte.

Ma senza la vostra storia di trading e i registri dettagliati è impossibile controllare.

Pensi che non sia in grado di calcolare il numero di transazioni dai log del terminale?

P/S Ho inviato tutto al supporto tecnico dello scambio.

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

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

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


Михаил

Pubblicherò la risposta.

 
Михаил:

Pensi che non sia in grado di calcolare il numero di transazioni dai log del terminale?

P/S Ho inviato tutto al supporto tecnico dello scambio.

Penso che anche voi siete umani e potete sbagliare. Non è così? )

Aspettiamo una risposta, mi chiedo cosa dicono.

 
Andrey Khatimlianskii:

È probabile che tu abbia sbagliato i tuoi calcoli da qualche parte.

Ma senza la vostra storia di trading e i registri dettagliati è impossibile verificarlo.

Sì, ho fatto un errore.

La borsa emetteva una sanzione il giorno dopo, ma ora, il giorno stesso.

Ho preso il giorno di trading sbagliato :(

E il numero di transazioni (oggi) è stato di 2081, che ha portato a una sanzione di 208,10 rubli.

Questo è corretto.

 
Михаил:

Sì, errore mio.

La borsa emetteva una sanzione il giorno dopo, ma ora, il giorno stesso.

Ho preso il giorno di trading sbagliato :(

E il numero di transazioni (oggi) è stato di 2081, che ha portato a una sanzione di 208,10 rubli.

Questo è corretto.

Ancora non "entra" nella vostra formula.