Перестал работать getCandlesByIndex у всех брокеров

Страницы: 1
RSS
Перестал работать getCandlesByIndex у всех брокеров, getCandlesByIndex
 
Перестал работать getCandlesByIndex
причем время свечек видно в datetime, а остальные параметры open, high, low, close, volume и doesExist - нулевые.
Написал код для тестирования, индикатор ставим на график с идентификатором SBER_Chart:
Код
Settings=
{
   Name = '#test'
}
function writeToFile(filename, content)
  local file_handle = io.open(filename, 'w')
  if file_handle then
    file_handle:write(content)
    file_handle:close()
    return true
  else
    return false
  end
end

function Init()
  return 1
end

function OnCalculate(index)
  id_chart = 'SBER_Chart'
  local need_right_candles_count = 10
  local line_number = 0
  local candles_count = getNumCandles(id_chart)
  local candles_from = candles_count - need_right_candles_count
  check1 =  tostring(id_chart)..'\n'..tostring(line_number)..'\n'..tostring(candles_from)..'\n'..tostring(need_right_candles_count)..'\n'..tostring(candles_count)..'\n'

  local result_table, result_candles_count, result_chart_name = getCandlesByIndex(id_chart, line_number, candles_from, need_right_candles_count)


  if result_table == nil or #result_table == 0 then
    return "Empty result_table"
  end

  local fieldNames = {}
  for field, _ in pairs(result_table[1]) do
    table.insert(fieldNames, field)
  end

  check1 = check1..'My_Time\t'..table.concat(fieldNames, '\t') .. '\n'

  for i = #result_table, 1, -1 do
    if result_table[i].datetime == nil or 
       result_table[i].datetime.day == nil or 
       result_table[i].datetime.month == nil or 
       result_table[i].datetime.year == nil or 
       result_table[i].datetime.hour == nil or 
       result_table[i].datetime.min == nil or 
       result_table[i].datetime.sec == nil then
          return nil 
    end

    local candle_datetime = string.format("%02d.%02d.%04d %02d:%02d:%02d", 
        result_table[i].datetime.day, 
        result_table[i].datetime.month, 
        result_table[i].datetime.year, 
        result_table[i].datetime.hour, 
        result_table[i].datetime.min, 
        result_table[i].datetime.sec)
    
    local formattedFields = {
      candle_datetime
    }
    for j, fieldName in ipairs(fieldNames) do
      local fieldValue = result_table[i][fieldName]
      table.insert(formattedFields, tostring(fieldValue))
    end

    check1 = check1 .. table.concat(formattedFields, '\t')..'\n'
  end

  local filename_w = getWorkingFolder()..'\\check1.txt'
  if writeToFile(filename_w, check1) then
    return
  else
    return "Failed to write to file"
  end
end

На выходе получаем, нулевые данные (кроме времени свечей)
Код
SBER_Chart
0
5595
10
5605
My_Time   open   close   volume   datetime   doesExist   low   high
08.12.2023 15:00:00   0.0   0.0   0.0   table: 000000002BD45650   0   0.0   0.0
08.12.2023 14:50:00   0.0   0.0   0.0   table: 000000002BD455D0   0   0.0   0.0
08.12.2023 14:40:00   0.0   0.0   0.0   table: 000000002BD45550   0   0.0   0.0
08.12.2023 14:30:00   0.0   0.0   0.0   table: 000000002BD454D0   0   0.0   0.0
08.12.2023 14:20:00   0.0   0.0   0.0   table: 000000002BD45450   0   0.0   0.0
08.12.2023 14:10:00   0.0   0.0   0.0   table: 000000002BD453D0   0   0.0   0.0
08.12.2023 14:00:00   0.0   0.0   0.0   table: 000000002BD45350   0   0.0   0.0
08.12.2023 13:50:00   0.0   0.0   0.0   table: 000000002BD452D0   0   0.0   0.0
08.12.2023 13:40:00   0.0   0.0   0.0   table: 000000002BD45250   0   0.0   0.0
и так у разных брокеров (реальный счет) на споте и на фьюче.
 
awkozlov, добрый день.

Проверили работу приложенного скрипта - у нас описанное поведение не воспроизводится.
Уточните, пожалуйста, какую версию Рабочего места QUIK Вы используете?
 
Версия 10.1.0.26 на Windows 7
Улучшил наглядность в скрипте, но результат такой же - нолики в ценах.
Индикатор #test
Идентификатор графику ставим 111
В папке рабочей папке QUIK появляется файл check1.txt
Код
Settings=
{
   Name = '#test'
}
function writeToFile(filename, content)
  local file_handle = io.open(filename, 'w')
  if file_handle then
    file_handle:write(content)
    file_handle:close()
    return true
  else
    return false
  end
end

function Init()
  return 1
end

function OnCalculate(index)
  id_chart = '111'
  local need_right_candles_count = 10
  local line_number = 0
  local candles_count = getNumCandles(id_chart)
  local candles_from = candles_count - need_right_candles_count
  local info = getDataSourceInfo()
  check1 =  tostring(id_chart)..'\n'..tostring(line_number)..'\n'..tostring(candles_from)..'\n'..tostring(need_right_candles_count)..'\n'..tostring(candles_count)..'\n'..tostring(info.class_code)..'\n'..tostring(info.sec_code)..'\n'

  local result_table, result_candles_count, result_chart_name = getCandlesByIndex(id_chart, line_number, candles_from, need_right_candles_count)

  if result_table == nil or #result_table == 0 then
    return "Empty result_table"
  end

  local fieldNames = {}
  for field, _ in pairs(result_table[1]) do
    table.insert(fieldNames, field)
  end

  check1 = check1..'fieldNames:\n'..table.concat(fieldNames, '\n') .. '\n'

  for i = #result_table, 1, -1 do
    if result_table[i].datetime == nil or 
       result_table[i].datetime.day == nil or 
       result_table[i].datetime.month == nil or 
       result_table[i].datetime.year == nil or 
       result_table[i].datetime.hour == nil or 
       result_table[i].datetime.min == nil or 
       result_table[i].datetime.sec == nil then
          return nil 
    end

    local candle_datetime = string.format("%02d.%02d.%04d %02d:%02d:%02d", 
        result_table[i].datetime.day, 
        result_table[i].datetime.month, 
        result_table[i].datetime.year, 
        result_table[i].datetime.hour, 
        result_table[i].datetime.min, 
        result_table[i].datetime.sec)
    
    local formattedFields = {
      candle_datetime
    }
    for j, fieldName in ipairs(fieldNames) do
      local fieldValue = result_table[i][fieldName]
      table.insert(formattedFields, fieldName..'='..tostring(fieldValue))
    end

    check1 = check1 .. tostring(i)..'\t'..table.concat(formattedFields, '\t')..'\n'
  end

  local filename_w = getWorkingFolder()..'\\check1.txt'
  if writeToFile(filename_w, check1) then
    return
  else
    return "Failed to write to file"
  end
end

Результат в файле check1.txt

Код
111
0
6041
10
6051
TQBR
ROSN
fieldNames:
close
doesExist
high
datetime
volume
open
low
9   19.12.2023 18:10:00   close=0.0   doesExist=0   high=0.0   datetime=table: 000000001147F030   volume=0.0   open=0.0   low=0.0
8   19.12.2023 18:00:00   close=0.0   doesExist=0   high=0.0   datetime=table: 0000000011468C70   volume=0.0   open=0.0   low=0.0
7   19.12.2023 17:50:00   close=0.0   doesExist=0   high=0.0   datetime=table: 000000001146C630   volume=0.0   open=0.0   low=0.0
6   19.12.2023 17:40:00   close=0.0   doesExist=0   high=0.0   datetime=table: 000000001147EFF0   volume=0.0   open=0.0   low=0.0
5   19.12.2023 17:30:00   close=0.0   doesExist=0   high=0.0   datetime=table: 0000000011470030   volume=0.0   open=0.0   low=0.0
4   19.12.2023 17:20:00   close=0.0   doesExist=0   high=0.0   datetime=table: 000000001146E570   volume=0.0   open=0.0   low=0.0
3   19.12.2023 17:10:00   close=0.0   doesExist=0   high=0.0   datetime=table: 000000001147D270   volume=0.0   open=0.0   low=0.0
2   19.12.2023 17:00:00   close=0.0   doesExist=0   high=0.0   datetime=table: 0000000011475E70   volume=0.0   open=0.0   low=0.0
1   19.12.2023 16:50:00   close=0.0   doesExist=0   high=0.0   datetime=table: 0000000011461DF0   volume=0.0   open=0.0   low=0.0
Вначале перечислены исходные данные, затем список полей, который скрипт установил из списка, потом значения свечей. В первом поле идет расшифровка даты свечи из поля datetime
 
awkozlov,  добрый день.

Воспроизвести проблему по-прежнему не удается - получаем корректные значения.

Просим Вас предоставить для анализа копию папки с Рабочим местом QUIK (без файлов ключей, если используются), в котором наблюдается проблема.
В терминале должно быть открыто окно с графиком, на который добавляется индикатор.
Перед созданием копии терминал необходимо закрыть.

Просим Вас поместить папку в архив и загрузить полученный файл на любой удобный Вам файлообменный сервис, затем отправить ссылку на загрузку на нашу почту quiksupport@arqatech.com.
В письме укажите ссылку на данную тему форума.

Заранее благодарим за информацию!
Страницы: 1
Читают тему
Наверх