FORTS: To help beginners - page 14

 
the philosophical question is whether the glass is completely empty or the glass is completely clearing ))
 
What percentage does the exchange take as commission? For example, on forex, the common option is 20 per million = 0.002%.
 
fxsaber:
What percentage is taken by the exchange as a commission? For example, 20 per million = 0.002% is common on forex.
https://www.moex.com/s93

3. the exchange and clearing fees of the derivatives market

I.e., for today it is approximately: RTS - 9.3, Si - 1.2, PLT - 3.9 p per contract. If you close in the same session, there is no charge for the reverse trade.

Московская Биржа - Рынки
Московская Биржа - Рынки
  • www.moex.com
Тарифы. Участие в торгах на Срочном рынке ПАО Московская Биржа и регистрация в качестве Расчетной фирмы Взнос в Гарантийный фонд Биржевой сбор (с 02.10.2017) Клиринговый сбор и клиринговые тарифы Маркетинговая программа Сборы за Транзакции Сбор за Календарные спреды Информационно-техническое обслуживание срочного рынка С 19:05 мск 01 ноября 2018 года вступил в силу новый расчет оборотной комиссии с разделением на биржевую и клиринговую составляющие. Внешние интерфейсы остаются без изменений.
 
JRandomTrader:
https://www.moex.com/s93

3. the exchange and clearing commission of the derivatives market

Thank you. Apparently it's written for lawyers. How many pips on the RTS? -I see above.

 
fxsaber:

Thank you. It seems to be written for lawyers. How many pips on the RTS? -I see higher.

And plus the brokerage commission.

 
fxsaber:
What percentage is the commission charged by exchange? For example, in the forex market 20 per million = 0.002%.

I used to write code like this for myself at one time. It worked then. Maybe things have changed now.

const string CurrencyFutures[]={"AUDU","ED","Eu","GBPU","Si","UCAD","UCHF","UJPY"};
const string PercentFutures[]={"1MFR","RUON"};
const string IndexFutures[]={"MIX","MXI","RTS","RVI","U500"};
const string CommoditiesFutures[]={"ALMN","BR","CL","Co","CU","GLD","GOLD","Nl","PLD","PLT","SILV","SLV","SUGR","Zn"};

template <typename T>
bool IsEntityInArray(const T &Array[],const T &Value)
{
  for(int i=ArraySize(Array)-1;i>=0;--i)
  {
    if(Array[i]==Value)
      return true;
  }
  return false;
}

bool IsStringInArray(const string &Array[],const string Value)
{
  return IsEntityInArray(Array,Value);
}

double GetBaseTutFee(const string &PureSymbName)
{
  if(IsStringInArray(CurrencyFutures,PureSymbName))
    return 0.00154/100;
  if(IsStringInArray(PercentFutures,PureSymbName))
    return 0.00550/100;
  if(IsStringInArray(IndexFutures,PureSymbName))
    return 0.00220/100;
  if(IsStringInArray(CommoditiesFutures,PureSymbName))
    return 0.00440/100;
  return 0.00660/100;
}

double GetLastPrice(const string SymbName)
{
  double Result=SymbolInfoDouble(SymbName,SYMBOL_BID);
  if(Result!=0)
    return Result;

  MqlTick OldTicks[];
  int OldTicksCount=CopyTicks(SymbName,OldTicks,COPY_TICKS_ALL);
  //workaround for custom symbols
  if(OldTicksCount==-1)
    OldTicksCount=CopyTicksRange(SymbName,OldTicks,COPY_TICKS_ALL,(TimeCurrent()-60*60*24*7)*1000);
  for(int i=OldTicksCount-1;i>=0;--i)
  {
    if(OldTicks[i].bid!=0)
      return OldTicks[i].bid;
  }
  return 0;
}

double GetSymbolTickSize(const string &SymbName)
{
  return SymbolInfoDouble(SymbName,SYMBOL_TRADE_TICK_SIZE);
}

double GetFuturesCommission(const string &SymbName)
{
  string PureSymbName=StringSubstr(SymbName,0,StringFind(SymbName,"-"));
  double BaseTutFee=GetBaseTutFee(PureSymbName);
  double FutPrice=GetLastPrice(SymbName);
  double Wf=SymbolInfoDouble(SymbName,SYMBOL_TRADE_TICK_VALUE);
  double Rf=GetSymbolTickSize(SymbName);
  return 0.74+NormalizeDouble(NormalizeDouble(FutPrice*NormalizeDouble(Wf/Rf,5),2)*BaseTutFee/2,2);
}



  long SymbCalcMode=GetSymbolCalcMode(SymbName);
  bool IsSymbFutures=SymbCalcMode==SYMBOL_CALC_MODE_FUTURES || SymbCalcMode==SYMBOL_CALC_MODE_EXCH_FUTURES || SymbCalcMode==SYMBOL_CALC_MODE_EXCH_FUTURES_FORTS;

  if(IsSymbFutures)
    Multiplier=2*GetFuturesCommission(SymbName);
  return Multiplier*Trades;

It returns the commission in money. Takes the worst case, when for both trades entry+exit will have to pay

2*GetFuturesCommission(SymbName)

At the end it is multiplied by the number of trades to get the total commission for the entire trading interval.

You can compare if you have a look at the contract specification, e.g. https://www.moex.com/ru/contract.aspx?code=RTS-3.21

 
traveller00:

I used to write code like this for myself at one time. It worked then. Maybe things have changed now.

It returns the commission in money. Takes the worst case, when for both trades entry+exit will have to pay

At the end it is multiplied by the number of trades to get the total commission for the entire trading interval.

You can compare if you have a look at contract specifications, e.g. https://www.moex.com/ru/contract.aspx?code=RTS-3.21

Thanks for the constructive feedback!