FORTS : Frais de transaction inefficaces - page 2

 
Sergey Chalyshev:

Bien sûr, une explication officielle ne ferait pas de mal.

Ce qui manque pour être pleinement satisfait, c'est une fonction de robinetterie comme celle-ci :

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

Si une bourse tient le compte du nombre de transactions, il est probablement possible d'obtenir ces données dans le terminal.

Nous devons demander aux développeurs de MQ d'ajouter une telle fonctionnalité.

Oui, ce serait bien.

Moi-même, je compte...

 
Михаил:

Oui, ce serait bien.

Je considère moi-même...

Rédiger une proposition pour le SR.
 

La réponse est arrivée !

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

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

Михаил

Voilà, maintenant tout est clair. Vous pouvez compter.

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

Légèrement retravaillée à ma façon, la fonction pour obtenir l'heure de début de la session :

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

travaille six fois plus vite.

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 tu l'aimes, tu peux le déplacer dans ton fil de discussion pour débutants.

script à tester :

Dossiers :
 
Sergey Chalyshev:

Légèrement retravaillée à ma façon, la fonction pour obtenir l'heure de début de la session :

travaille six fois plus vite.

si tu l'aimes, tu peux le déplacer dans ton fil de discussion pour débutants.

script à tester :

J'aime bien, merci, c'est vraiment plus rapide.
 
Михаил:

Aujourd'hui, j'ai reçu une "lettre en chaîne" pour 208,10 roubles.

Il y a eu 2 121 transactions.

En même temps, acheté/vendu pendant cette journée de négociation :

La commission des changes était : 30 roubles.

Point par transaction = 40

D'après les formules ci-dessus, nous avons :

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

Il m'a "manqué" 1079 transactions pour la pénalité.

Tromper notre frère d'échange juste limiter 2000 transactions, et puis "hors de la lumière" met la pénalité

(bien sûr, peut-être que le courtier le vole).

Vous devez avoir fait une erreur quelque part dans vos calculs.

Mais sans l'historique de vos transactions et des journaux détaillés, il est impossible de vérifier.

 
Andrey Khatimlianskii:

Il est probable que vous vous soyez trompé dans vos calculs.

Mais sans l'historique de vos transactions et des journaux détaillés, il est impossible de vérifier.

Vous pensez que je ne suis pas capable de calculer le nombre de transactions à partir des journaux du terminal ?

P/S J'ai tout envoyé au support technique de l'échange.

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

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

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


Михаил

Je publierai la réponse.

 
Михаил:

Vous pensez que je ne suis pas capable de calculer le nombre de transactions à partir des journaux du terminal ?

P/S J'ai tout envoyé au support technique de l'échange.

Je pense que vous êtes aussi humain et que vous pouvez vous tromper. N'est-ce pas ? )

Attendons une réponse, je me demande ce qu'ils disent.

 
Andrey Khatimlianskii:

Il est probable que vous vous soyez trompé dans vos calculs.

Mais sans votre historique de transactions et vos journaux détaillés, il est impossible de le vérifier.

Oui, j'ai fait une erreur.

Auparavant, la bourse émettait une pénalité le lendemain, mais maintenant, le jour même.

J'ai pris le mauvais jour de bourse :(

Et le nombre de transactions (aujourd'hui) était de 2081, ce qui a entraîné une pénalité de 208,10 roubles.

C'est exact.

 
Михаил:

Oui, je me suis trompé.

Auparavant, la bourse émettait une pénalité le lendemain, mais maintenant, le jour même.

J'ai pris le mauvais jour de bourse :(

Et le nombre de transactions (aujourd'hui) était de 2081, ce qui a entraîné une pénalité de 208,10 roubles.

C'est exact.

Cela ne rentre toujours pas dans votre formule.
Raison: