FORTS: 비효율적인 거래에 대한 수수료 - 페이지 2

 
Sergey Chalyshev :

물론 공식적인 해명은 해를 끼치 지 않을 것입니다.

완전히 만족시키기 위해서는 다음과 같은 탭 기능이 충분하지 않습니다.

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

거래소가 거래 수를 계산하면 아마도 터미널에서 이 데이터를 얻을 수 있을 것입니다.

MQ 개발자에게 이 기능을 추가하도록 요청해야 합니다.

예, 좋을 것입니다.

나는 스스로 생각한다...

 
Михаил :

예, 좋을 것입니다.

나 자신이 고려...

SD에 제안서를 작성했습니다.
 

답변이 도착했습니다!

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

 С уважением,
Глеб Кочнев
Техническая поддержка ПАО Московская Биржа
+ 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 루블에 대한 "행복의 편지"를 받았습니다.

2121건의 거래가 이루어졌습니다.

동시에 이번 거래일에 매수/매도:

교환 수수료는 30 루블에 달했습니다.

거래당 포인트 = 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루블의 벌금이 부과되었습니다.

모든 것이 맞습니다.

마찬가지로, 이 수치는 공식에 "맞지 않습니다".