FORTS: OnTradeTransaction() 返回代码 - 页 5

 

11.2对错误的交易收取 费用。

如果在交易过程中出现了表2所列的错误代码,交易应被确认为错误的。为了确定错误的交易,交易被理解为提交订单、撤回订单、撤回订单并同时提交不同交易条件的订单、撤回一对订单并同时提交不同交易条件的一对订单。

错误交易费用的计算应针对每个登录者,从当前交易日 晚间清算时段暂停交易(包括暂停的第一秒)到下一个交易日晚间清算时段暂停交易(不包括暂停的第一秒)(以下简称-计算期)。

错误交易的费用金额的计算应根据公式进行。

其中。

TranFee2 - 在结算期间进行的错误交易的费用金额(包括增值税的卢布)。

上限 - 由技术中心制定并在莫斯科交易所网站上公布的错误交易费的最高金额限制。

xi- 每秒计算的数值,四舍五入为整数,由公式确定

其中。

Qi- 第i次的所有积分之和(积分按照表2确定)

Li- 给定的登录的极限,根据公式计算并四舍五入为整数

在哪里?

容量i- 登录的容量,根据本附件第3.2点规定的程序确定,对第i秒有效

表2:

交易类型*

执行的结果(错误代码)*

分数Q

添加订单

发生了一笔交叉交易(31)。

Q1

客户资金不足 (332)

Q2

经纪公司的资金不足 (333)

Q3

未合并的FOK投标 (4103)

Q4

递送订单

未找到订单 (14)

Q5

迁入顺序

发生交叉交易 (31)

Q6

没有发现订单(50)

Q7

客户资金不足(332)

Q8

经纪公司资金不足(333)

Q9

用户订单延迟

交易已成功完成。

并没有删除任何订单

Q10

*根据FORTS Plaza-2网关的描述。

Q1-Q10的点值由技术中心决定,并在莫斯科交易所网站上公布。

如果符合条件,将对错误的交易收取费用。

其中。

TranFee2 - 结算期内错误交易的费用金额(卢布,包括增值税)。

Capmin- 由技术中心制定并在莫斯科交易所网站上公布的关于错误交易费用的最低限额 的限制。

错误交易的费用从清算册部分收取,确定错误交易费用的登录与此有关。

 
不幸的是,只有公式没有被插入。
 
Dmitriy Skub:
你想让我们喝醉吗?))写个图有这么难吗?
Alexey Kozitsyn 只复制了这一条款的部分文本。现在更清楚了吗?))如果你想了解它,恐怕你还是得睡觉。))
 

这个错误的返回代码是什么?

2015.09.21 10:00:13     20845617        SBRF-3.16       buy limit       2.00 / 0.00             7 303                   2015.09.21 10:00:13             rejected        Инструмент отсутствует в текуще 
 

返回到无效请求的错误代码

我已经改变了功能,将订单删除了一些。

//+------------------------------------------------------------------+
// Remove order                                                      |
//+------------------------------------------------------------------+
void COrder::Remove()
{
  if ( ticket > 0 )
  {
    if ( OrderSelect( ticket ) )
    {
      ENUM_ORDER_STATE ord_state = ENUM_ORDER_STATE( OrderGetInteger( ORDER_STATE ) );
      if ( ( ord_state == ORDER_STATE_REQUEST_MODIFY ) || ( ord_state == ORDER_STATE_REQUEST_CANCEL ) ) return;
//---      
      mem_magic = ulong( OrderGetInteger( ORDER_MAGIC ) );
      mem_tick = GetTickCount();
      req_id = 0;
      MqlTradeRequest request = {0};
      MqlTradeResult  result  = {0};
            
      request.action = TRADE_ACTION_REMOVE;
      request.order = ticket;
          
      if ( OrderSendAsync( request, result ) )
      {
        if ( result.retcode == TRADE_RETCODE_PLACED )
        { 
          req_id = result.request_id;
//---          
          switch( order_status )
          {
            case BUY_ORDER:  state = ORD_BUY_DO_CANCEL;
                             break;
                
            case SELL_ORDER: state = ORD_SELL_DO_CANCEL;
                             break;           
          } 
          SetTransCount( true );
        }
        else
        {
          mem_magic = 0;
          mem_tick = 0;
          CheckError( result.retcode, "Remove: Ордер не удалён! Причина: ", order_status, ticket );
        }  
      }
      else
      {
        mem_magic = 0;
        mem_tick = 0;
        CheckError( result.retcode, "Remove: Ордер не отослан! Причина: ", order_status, ticket );
      }
    }
    else
    {
      ticket = 0;
      modify_count = 0;
    }
  }
  else
  {
    modify_count = 0;
  }
}

CheckError()函数。

//+------------------------------------------------------------------+
// Expert Check Error function                                       |
//+------------------------------------------------------------------+
void CheckError( const uint ret_code, const string err_msg, const ENUM_ORD_STATUS ord_status, const ulong a_ticket )
{
  switch( ret_code )
  {
    ........                              
    case TRADE_RETCODE_INVALID: Print( err_msg + GetRetCode( ret_code ), "; Билет = ", a_ticket );
                                break;                                                       
                
    default: Print( err_msg, GetRetCode( ret_code ), "; Билет = ", a_ticket );  
             break;            
  }
}

下订单后。

2015.11.25 15:07:30.773 Trades  'xxxxx': buy limit 5.00 SNGP-3.16 at 40718
2015.11.25 15:07:30.784 Trades  'xxxxx': buy limit 5.00 SNGP-3.16 at 40718 placed for execution in 10 ms

MT 5服务器没有发送任何响应,CheckOrders()函数被触发,并收到一张订单票。

2015.11.25 15:07:31.849 Forts_trader (SNGP-12.15,H1)    CheckOrders: Buy ордер установлен. Билет = 23992887

此后,删除订单(EA)的命令没有通过。

2015.11.25 15:07:31.865 Forts_trader (SNGP-12.15,H1)    Remove: Ордер не отослан! Причина: Неправильный запрос Билет = 23992887

而这一点也得到了终端的证实。

2015.11.25 15:07:31.865 Trades  'xxxxx': failed cancel order #23992887 buy limit 5.00 SNGP-3.16 at 40718.00000 [Invalid request]

问题。

订单 在终端存储器中的状态 是什么?

为什么无效的请求?

我收到了来自终端环境的票据,所以终端 "知道 "订单已被设置好了!"。

毕竟,后来同一个职能部门用同一张票删除了这个订单。

2015.11.25 15:15:03.245 Trades  'ххххх': cancel order #23992887 buy limit 5.00 SNGP-3.16 at 40718
2015.11.25 15:15:03.254 Trades  'ххххх': cancel order #23992887 buy limit 5.00 SNGP-3.16 at 40718 placed for execution in 8 ms
 
Михаил:

返回到无效请求的错误代码

我已经改变了功能,将订单删除了一些。

CheckError()函数。

下订单后。

MT 5服务器没有发送任何响应,CheckOrders()函数被触发,并收到一张订单票。

此后,删除订单(EA)的命令没有通过。

而这一点也得到了终端的证实。

问题。

订单 在终端存储器中的状态 是什么?

为什么无效的请求?

(我从终端环境中得到了票据,所以终端 "知道已经下了订单")!

还有这个。

2015.11.24 17:07:15.020 FORTS (MXI-12.15,M5)       ORDER_STATE = ORDER_STATE_REQUEST_ADD
 

这样试试吧。

if(!(OrderGetInteger(ORDER_STATE)==ORDER_STATE_PARTIAL || OrderGetInteger(ORDER_STATE)==ORDER_STATE_PLACED)) return; 
 
Sergey Chalyshev:

这样的情况比较多。

谢尔盖!

出于某种原因,在我看来,如果有一张罚单(在发出逮捕令后),就不能有

其状态。

ORDER_STATE_REQUEST_ADD
 
Михаил:

谢尔盖!

在我看来,如果有一张罚单(在发出逮捕令后),就不可能有

其地位。

我也这么认为,但这不是我的主意,这个错误是来自于交易日志。

添加这个检查后,把所有的状态,在删除和修改之前,都放在日志里。不再发生InvalidRequest。

这个问题更多的是关于服务器操作和开发人员如何出现ORDER_STATE_REQUEST_ADD

 
Sergey Chalyshev:

我也这么认为,但这不是我的主意,这个错误是来自操作日志。

添加这个检查后,把所有的状态,在删除和修改之前,都放在日志里。不再发生InvalidRequest。

这个问题更多的是关于服务器操作和开发人员如何出现ORDER_STATE_REQUEST_ADD

终端一定有一个相当长的超时时间,在等待服务器的响应......