Правильно я понимаю, что получить только с getItem позицию по фьючу не получится?

Страницы: 1
RSS
Правильно я понимаю, что получить только с getItem позицию по фьючу не получится?, Предварительно нужно будет пройтись по количеству срок в "Позиции по клиентским счетам" с getNumberOf?
 
Может кто-то уже делал получение позиции по наименованию фьючерса, поделитесь?
:)
 
выходит что-то на вроде такого:
Код
function pos()
   local i = 0
      while futures.sec_code ~= "SiM5" do
         futures = getItem("futures_client_holding", i)
         i = i+1
      end
end
а можно ли сделать таблицу из таблиц?
 
Цитата
Николай Бехтерев пишет:
а можно ли сделать таблицу из таблиц?
да можно
T={
T1={},
T2={}
}
 
Цитата
Sergey Gorokhov пишет:
Цитата
Николай Бехтерев пишет:
а можно ли сделать таблицу из таблиц?
да можно
T={
T1={},
T2={}
}
а обращаться к таким таблицам через две точки?
Код
T.futures.sec_code
 
Цитата
Николай Бехтерев пишет:
а обращаться к таким таблицам через две точки?
да можно

Код
T={
T1={test="Hello!"},
T2={}
} 
message(T.T1.test,1)
 
Цитата
Sergey Gorokhov пишет:
Цитата
Николай Бехтерев пишет:
а обращаться к таким таблицам через две точки?
да можно
Код
 T={
T1={test="Hello!"},
T2={}
} 
message(T.T1.test,1) 
подсобите, не работает конструкция такого вида, табличку получаем нужную, это вижу по futures.sec_code
но увидеть чистую позицию по фьючерсам: futures.totalnet не получается:



Код
function pos(stroka)
   local i = 0
      while futures.sec_code ~= stroka do
         futures = getItem("futures_client_holding", i)
         i = i+1
      end
      return futures.totalnet
end
   

function main()
   
   while is_run == 1 do
      j = pos(fuc)
   --   One()
      message(tostring(j),1)
      sleep(1000)
   end
end
 
Указанный код у нас работает.
Единственное изменение, определили переменные futures={}, is_run=1 и fuc='RIM5'
Уточните что Вы задаете в переменной fuc?
Также, уточните какое значение Вы видите в таблице "Позиции по клиентским счетам" в колонке "Тек.Чист. Поз" и какое в итоге значение попадает в переменную j?
 
Мой код:
Код
is_run = 1
fuc = "SiM5"
futures = {
         firmid = '',
         trdaccid = '',
         sec_code = '',
         startbuy = 0,
         startsell = 0,
         startnet = 0,
         todaybuy = 0,
         todaysell = 0,
         totalnet = 0,
         openbuys = 0,
         opensells = 0,
         cbplused = 0,
         cbplplanned = 0,
         varmargin = 0,
         avrposnprice = 0,
         positionvalue = 0,
         real_varmargin = 0,
         total_varmargin = 0
      }

function OnStop()
   is_run = 0
end

function pos(stroka)
   local i = 0
      while futures.sec_code ~= stroka do
         futures = getItem("futures_client_holding", i)
         i = i+1
      end
   return futures.totalnet
end

function main()
   while is_run == 1 do
      j = pos(fuc)
      message(tostring(j),1)
      sleep(1000)
   end
end
Совершаю сделку в таблице "Позиции по клиентским счетам (Фьючерсы)" в колонке "План. чист. поз." горит единичка, код продолжает выкидывать мне в сообщениях "0". Другие цифры, маржу например, показывает правильно.
 
Николая,
Проблема в логике.
При первом срабатывании futures.sec_code ничего не содержит и условие
while futures.sec_code ~= stroka do
нормально срабатывает, когда у Вас 0.

Но при повторном срабатывании функции, в futures.sec_code уже есть запись "SiM5" так как она туда записалась при первом обращении к функции.
Поэтому при повторном вызове условие "while futures.sec_code ~= stroka do" уже нарушено и цикл не выполняется. Для решения проблемы, Вам нужно обнулять futures при каждом вызове функции pos.
Перепишите так:
Код
is_run = 1
fuc = "SiM5"

function OnStop()
   is_run = 0
end

function pos(stroka)
   local i = 0
   local futures = {}
      while futures.sec_code ~= stroka do
         futures = getItem("futures_client_holding", i)
         i = i+1
      end
   return futures.totalnet
end

function main()
   while is_run == 1 do
      j = pos(fuc)
      message(tostring(j),1)
      sleep(1000)
   end
end
 
Николай,
Прошу прощения опечатка в имени
 
спасибо, сработало.
 
не работает код, если таблица "Позиции по Клиентским счетам" совсем пустая, т.е. давно не было сделок и поэтому там в принципе нет строчек.
Код
11: attempt to index local 'futures' (a nil value)
 
как быть?
 
Цитата
Николай Бехтерев пишет:
не работает код, если таблица "Позиции по Клиентским счетам" совсем пустая, т.е. давно не было сделок и поэтому там в принципе нет строчек.
Код
 11: attempt to index local 'futures' (a nil value)
  
как быть?
К сожалению, нам не известен способ получить данные из таблицы, если в таблице нет данных.
Если у Вас есть идеи готовы выслушать
 
Цитата
Николай Бехтерев пишет:
как быть?
Если Вы просто хотите чтобы не было ошибки, задайте значение по умолчанию для
futures.totalnet
Или сделайте проверку на nil. Это Ваш код, Вам решать сто он должен делать в случае отсутствия данных
 
Мда...
У вас в функции pos поиск выходит за пределы таблицы. Перепишите код так:
Код
function pos(stroka)
    for i = 0, getNumberOf("futures_client_holding")-1 do
      local futures = getItem("futures_client_holding", i)
      if futures.sec_code == stroka then return futures.totalnet end
   end
end
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Серж пишет:
Мда...
У вас в функции pos поиск выходит за пределы таблицы. Перепишите код так:
Спасибо за совет, но что выдаст в вашем коде getNumberOf, если табличка пустая, вообще нет позиций? У меня нет сейчас возможности проверить этот код.
 
Цитата
Николай Бехтерев пишет:
Спасибо за совет, но что выдаст в вашем коде getNumberOf, если табличка пустая, вообще нет позиций?
0
Надо делать так, как надо. А как не надо - делать не надо.
Страницы: 1
Читают тему
Наверх