Неверное значение ВМ, полученное из Portfolio.VariationMargin


Неверное значение ВМ, полученное из Portfolio.VariationMargin
Atom
5/18/2012


Сегодня запустил программу, работающую через S# PlazaTrader и заметил что значение ВМ в портфеле сильно отличается от значений ВМ для этого счета в привязанном к этому счету квике. Разница в несколько порядков. При этом на этом же логине у меня работают написанные мною программы, которые транслируют ВМ, не отличающуюся от квика. Данные ВМ в своей программе беру из потока FORTS_VM_REPL таблицы fut_vm поле vm.

Tags:


Thanks:


Alexander

Avatar
Date: 5/18/2012
Reply


Поправил. Мы по полю vm_real определяем.
Thanks: Limfocit

Limfocit

Avatar
Date: 5/18/2012
Reply


Поставил ревизию 17022 - все равно нет связи с данными в квике (разница опять на несколько порядков).
Плюс еще заметил такую вещь. если в открытом примере под плазу отключиться и подключиться под шлюз на другом порту на этой же машине - портфели остаются от старого подключения.
Thanks:

Alexander

Avatar
Date: 5/18/2012
Reply


на codeplex еще не положил
Thanks:

Alexander

Avatar
Date: 5/20/2012
Reply


Limfocit Go to
Сегодня запустил программу, работающую через S# PlazaTrader и заметил что значение ВМ в портфеле сильно отличается от значений ВМ для этого счета в привязанном к этому счету квике. Разница в несколько порядков. При этом на этом же логине у меня работают написанные мною программы, которые транслируют ВМ, не отличающуюся от квика. Данные ВМ в своей программе беру из потока FORTS_VM_REPL таблицы fut_vm поле vm.


Посмотрел ещё раз.
В vm и vm_real транслируется ведь информация по вариционной марже по отдельным инструментам, поэтому как раз она и суммируется у нас.
Т.е. суммируется вариционка по суммарным показателям id_инструмента, id_сессии
Thanks:

Limfocit

Avatar
Date: 5/22/2012
Reply


Стало понятно что дело в нескольких счетах на логине. Так как на тестовом полигоне где всего один счет все отлично работает.
На данный момент удалось добиться совпадения с данными в квике с помощью следующего кода:

вешаем обработчик события
Code
Trader.TableRegistry.VarMarginFuture.Inserted +=new Action<PlazaRecord>(VarMarginFuture_Inserted);


сам код обработчика

Code

        //сохраняем сессию, чтобы очистить словарь ВМ от значений при изменении сессии
        private int LastSessionId = 0;

        private void VarMarginFuture_Inserted(PlazaRecord record)
        {
            var metadata = Trader.TableRegistry.ColumnRegistry.VarMarginFuture;

            if (LastSessionId == 0)
            {
                LastSessionId = record.GetInt(metadata.SessionId);
            }
            if (LastSessionId != record.GetInt(metadata.SessionId))
            {
                VMDict = new Dictionary<string, Dictionary<int, decimal>>();
            }
            var isin = record.GetInt(metadata.IsinId);
            var curr = record.GetDecimal(metadata.VarMarginReal);
            var client = record.GetString(metadata.ClientCode);
            if (!VMDict.ContainsKey(client))
            {
                VMDict[client] = new Dictionary<int, decimal>();
            }
            VMDict[client][isin] = curr;
        }
        //мой метод для получения ВМ текущего портфеля
        public decimal getVM()
        {
            decimal res = 0.0m;
            //получаю текущий для робота портфель
            var portfolioName = getPortfolio().Name;
            if (VMDict.ContainsKey(portfolioName))
            {
                foreach (int isin in VMDict[portfolioName].Keys)
                {
                    res += VMDict[portfolioName][isin];
                }
            }
            return res;
        }
        //словарь ВМ, основной ключ код клиента, второй ключ - isin
        private Dictionary<string,Dictionary<int, decimal>> VMDict = new Dictionary<string,Dictionary<int,decimal>>();
Thanks: Alexander

Alexander

Avatar
Date: 5/22/2012
Reply


Fixed
Thanks: Limfocit


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy