Неверное значение ВМ, полученное из Portfolio.VariationMargin
Atom Ответить
18.05.2012


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

Теги:


Спасибо:




6 Ответов
Alexander

Фотография
Дата: 18.05.2012
Ответить


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

Limfocit

Фотография
Дата: 18.05.2012
Ответить


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

Alexander

Фотография
Дата: 18.05.2012
Ответить


на codeplex еще не положил
Спасибо:

Alexander

Фотография
Дата: 20.05.2012
Ответить


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


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

Limfocit

Фотография
Дата: 22.05.2012
Ответить


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

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


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

Код

        //сохраняем сессию, чтобы очистить словарь ВМ от значений при изменении сессии
        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>>();
Автор топика
Спасибо: Alexander

Alexander

Фотография
Дата: 22.05.2012
Ответить


Fixed
Спасибо: Limfocit


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy