FORTS:非効率なトランザクションフィー - ページ 2

 
Sergey Chalyshev:

もちろん、公式な説明があっても問題はないでしょう。

満足度を高めるために足りないのは、このようなタップ機能です。

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

取引所が取引回数をカウントしているのであれば、このデータを端末に取り込むことは可能でしょう。

MQの開発者にそのような機能を追加してもらう必要があります。

そうですね、いいんじゃないでしょうか。

私自身、数えるほどしか...

 
Михаил:

そうですね、それがいいと思います。

私自身は...

SRへの提案書を作成。
 

その答えが届いた!

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

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

Михаил

ほら、これですっきりしましたね。数えることができます。

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

セッションの開始時刻を取得 する機能を自分なりに少し作り直した。

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

は6倍の速さで動作します。

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

が気に入ったら、初心者スレッドに移動してください。

スクリプトでテストします。

ファイル:
 
Sergey Chalyshev:

セッションの開始時刻を取得する機能を自分なりに少し作り直した。

は6倍の速さで動作します。

が気に入ったら、初心者スレッドに移動してください。

スクリプトでテストします。

気に入りました!ありがとうございます!本当に速くなりましたね。
 
Михаил:

今日、208.10ルーブルの「チェーンレター」が届きました。

取引件数は2,121件です。

同時に、この取引日の間に買った/売った。

為替手数料は30ルーブル

1取引あたりのポイント=40

上記の式から、以下のようになります。

トランザクション = 2121 - (30 * 40) - 2000 = -1079

ペナルティのために1079トランザクションを「欠落」させた。

私たちの兄弟の交換だけで2000トランザクションを制限し、その後、"光のうち "ペナルティを置くだます。

(もちろん、ブローカーに盗まれるかもしれませんが)。

どこかで計算を間違えてしまったのでしょう。

しかし、取引履歴や詳細なログがなければ、確認することはできません。

 
Andrey Khatimlianskii:

どこかで計算を間違えている可能性があります。

しかし、取引履歴や詳細なログがなければ、確認することはできません。

端末のログから取引回数を計算するのは無理だと?

P/S 取引所のテクニカルサポートに全て送りました。

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

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

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


Михаил

その答えを公開します。

 
Михаил:

端末のログからトランザクション数を算出するのは無理があると?

P/S 取引所のテクニカルサポートに全て送りました。

あなたも人間だから間違うこともあると思うんです。そうでしょう?)

返信を待ちます、なんて言うんでしょうね。

 
Andrey Khatimlianskii:

どこかで計算を間違えている可能性があります。

しかし、取引履歴や詳細なログがなければ、これを確認することは不可能です。

はい、間違えました。

取引所では、以前は翌日にペナルティを発行していましたが、現在は当日に発行しています。

取引日を間違えてしまった :(

そして、(本日の)取引件数は2081件で、208.10ルーブルのペナルティが発生しました。

これは正しい。

 
Михаил:

はい、私のミスです。

取引所では、以前は翌日にペナルティを発行していましたが、現在は当日に発行しています。

取引日を間違えてしまった :(

そして、(本日の)取引件数は2081件で、208.10ルーブルのペナルティが発生しました。

これは正しい。

やはり、あなたの計算式には「当てはまらない」のです。