FORTS: Ineffiziente Transaktionsgebühr - Seite 2

 
Sergey Chalyshev:

Offizielle Erklärungen können natürlich nicht schaden.

Was zur vollen Zufriedenheit fehlt, ist eine Tippfunktion wie diese:

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

Wenn eine Börse die Anzahl der Transaktionen aufzeichnet, ist es wahrscheinlich möglich, diese Daten in das Terminal zu übertragen.

Wir müssen die MQ-Entwickler bitten, eine solche Funktion hinzuzufügen.

Ja, das wäre gut.

Ich selbst zähle...

 
Михаил:

Ja, das wäre gut.

Ich selbst halte...

Er hat einen Vorschlag an den SR geschrieben.
 

Die Antwort ist da!

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

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

Михаил

So, jetzt ist alles klar. Sie können zählen.

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

Die Funktion , mit der die Startzeit der Sitzung ermittelt wird, habe ich auf meine Weise leicht überarbeitet:

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

arbeitet sechsmal schneller.

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

Wenn es dir gefällt, kannst du es in deinen Neulings-Thread verschieben.

Skript zu testen:

Dateien:
 
Sergey Chalyshev:

Die Funktion, mit der die Startzeit der Sitzung ermittelt wird, habe ich auf meine Weise leicht überarbeitet:

arbeitet sechsmal schneller.

Wenn es dir gefällt, kannst du es in deinen Neulings-Thread verschieben.

Skript zu testen:

Das gefällt mir, danke, es ist wirklich schneller.
 
Михаил:

Heute habe ich einen "Kettenbrief" über 208,10 Rubel erhalten.

Es wurden 2.121 Transaktionen durchgeführt.

Gleichzeitig wird an diesem Handelstag gekauft/verkauft:

Die Börsenaufsicht war: 30 Rubel.

Punkte pro Transaktion = 40

Aus den obigen Formeln ergibt sich:

Vorgänge = 2121 - (30 * 40) - 2000 = -1079

Für die Strafe "fehlten" mir 1079 Transaktionen.

Fool unser Bruder Austausch nur 2000 Transaktionen zu begrenzen, und dann "aus dem Licht" setzt die Strafe

(natürlich kann es sein, dass der Makler es stiehlt).

Sie müssen irgendwo in Ihren Berechnungen einen Fehler gemacht haben.

Aber ohne Ihre Handelsgeschichte und detaillierte Protokolle ist es unmöglich, dies zu überprüfen.

 
Andrey Khatimlianskii:

Es ist wahrscheinlich, dass Sie sich irgendwo verrechnet haben.

Aber ohne Ihren Handelsverlauf und detaillierte Protokolle ist es unmöglich, dies zu überprüfen.

Glauben Sie, ich bin nicht in der Lage, die Anzahl der Transaktionen aus den Terminalprotokollen zu berechnen?

P/S Ich habe alles an den technischen Support der Börse geschickt.

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

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

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


Михаил

Ich werde die Antwort veröffentlichen.

 
Михаил:

Glauben Sie, dass ich nicht in der Lage bin, die Anzahl der Transaktionen aus den Terminalprotokollen zu berechnen?

P/S Ich habe alles an den technischen Support der Börse geschickt.

Ich denke, auch Sie sind ein Mensch und können sich irren. Ist es nicht so? )

Wir werden auf eine Antwort warten, ich bin gespannt, was sie sagen.

 
Andrey Khatimlianskii:

Es ist wahrscheinlich, dass Sie sich irgendwo verrechnet haben.

Aber ohne Ihre Handelsgeschichte und detaillierte Protokolle ist es unmöglich, dies zu überprüfen.

Ja, ich habe einen Fehler gemacht.

Früher hat die Börse eine Strafe am nächsten Tag verhängt, jetzt am selben Tag.

Ich habe den falschen Handelstag genommen :(

Und die Anzahl der Transaktionen (heute) betrug 2081, was zu einer Strafe von 208,10 Rubel führte.

Das ist richtig.

 
Михаил:

Ja, mein Fehler.

Früher hat die Börse eine Strafe am nächsten Tag verhängt, jetzt am selben Tag.

Ich habe den falschen Handelstag genommen :(

Und die Anzahl der Transaktionen (heute) betrug 2081, was zu einer Strafe von 208,10 Rubel führte.

Das ist richtig.

Es "passt" immer noch nicht in Ihre Formel.