226 (2015-10-21 13:16:39 отредактировано kalikazandr)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

diksan пишет:

Файл сохраняет, а при запуске не загружает

Конечно не будет считывать, у вас пути сохранения и чтения разные совсем, это беда копирования, в одном месте поправили - в другом забыли.
В функцию SaveToFile (table_name, path) вы передаете путь path (в вашем случае  - место, где лежит ваш робот), а сохранение производите в папку квика: io.open ("config.cfg", "w") замените "config.cfg" на path.
И еще loadfile ( path ) нужно вызвать до создания формы. А функцию записи вызывать в Handlere.

227

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

kalikazandr спасибо большое за помощь!

228 (2015-10-21 19:17:14 отредактировано diksan)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

kalikazandr пишет:
diksan пишет:

Файл сохраняет, а при запуске не загружает

Конечно не будет считывать, у вас пути сохранения и чтения разные совсем, это беда копирования, в одном месте поправили - в другом забыли.
В функцию SaveToFile (table_name, path) вы передаете путь path (в вашем случае  - место, где лежит ваш робот), а сохранение производите в папку квика: io.open ("config.cfg", "w") замените "config.cfg" на path.
И еще loadfile ( path ) нужно вызвать до создания формы. А функцию записи вызывать в Handlere.

в строке где исправил "config.cfg" на path - выдает ошибку при сохранении - "bad argument #1 to 'open' (string expected, got nil)

229

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

diksan пишет:

в строке где исправил "config.cfg" на path - выдает ошибку при сохранении - "bad argument #1 to 'open' (string expected, got nil)

Вот, держите и постарайтесь проанализировать свои ошибки. Для начала просто почитайте что-нибудь про Lua.

local VCL=require "qvcl"

local path = getScriptPath().."\\config.cfg"

local stopped
function OnStop()
    if mainForm then mainForm:Release(); mainForm = nil; VCL = nil end
    message("Робот отключен пользователем")
    stopped = true
end
--================================== Параметры =========================================

ACCOUNT                 = "";          -- Торговый счет
CLIENT_CODE             = "";          -- Код клиента
SEC_CODE                = "";          -- Код бумаги
CLASS_CODE              = "";          -- Код класса


--================================== Функции =================================
-- Чтение таблицы из файла-- и все!
function LoadFromFile ( directory )
    local st, err = os.rename ( directory, directory )  --пробуем переименовать файл, если файла нет, то вернет nil и текст ошибки
    if st then  --нашли файл с настройками
       local func, err = loadfile ( path )
       if func then
          func ()
          ACCOUNT = config.ACCOUNT
          CLIENT_CODE = config.CLIENT_CODE
          SEC_CODE = config.SEC_CODE
          CLASS_CODE = config.CLASS_CODE
          message("Настройки загружены из директории:\n"..path)
       else
          message ( "Настройки не загружены:\n"..err, 3 )  --если файл config.cfg не содержит в таблице данных
       end
    else
       message ( "Файл настроек не найден:\n"..err, 3 )  --нет такого файла (не удалось переименовать)
    end
end
--
function Log (ad,...)
    local str="";
    for i=1,arg.n do
        if arg[i] ~= nil then str=str..tostring(arg[i]) end
    end
end

function Handler(Sender,...)
local SN=Sender.Name  --получает имя поля (EditButton, ComboBox, FloatSpinEdit и т.д)
   if SN == "Button_exit" then OnFormClose()
   elseif SN == "Button_save" then SaveToFile("config", path)    Log(0,"Значения из таблицы сохранены в файл  ", path)
   elseif SN == "Button_load" then
        LoadFromFile ( path )
        Edit_account.Text = ACCOUNT
        Edit_client_code.Text = CLIENT_CODE
        Edit_sec_code.Text = SEC_CODE
        ComboBox_class_code.Text = CLASS_CODE
   elseif SN == "Edit_account" then
      ACCOUNT = Edit_account.Text
   elseif SN == "Edit_client_code" then
      CLIENT_CODE = Edit_client_code.Text
   elseif SN == "Edit_sec_code" then
      SEC_CODE = Edit_sec_code.Text
   elseif SN == "ComboBox_class_code" then
      CLASS_CODE = ComboBox_class_code.Text
   end
end

--================================== Интерфейс =================================

mainForm = VCL.Form({Name = "mainForm", Height = 150, Width = 600, Caption = "Робот",
Position = "", OnClose = OnStop})--тут просто вызываем OnStop()

Button_save = VCL.Button(mainForm, {Name = "Button_save",  top=100, left=130, Caption="Сохранить", Width=80, Enabled = true, OnClick = Handler, ShowHint=true, Hint="Запись значений таблицы в файл"})
Button_load = VCL.Button(mainForm, {Name = "Button_load",  top=100, left=350, Caption="Загрузить", Width=80, Enabled = true, OnClick = Handler, ShowHint=true, Hint="Загрузка значений в таблицу из файла"})
-- Выбор торгового счета
Label_account = VCL.Label(mainForm, {    Name = "Label_account",
                                        top=10, left=10,
                                        Caption="Торговый счет",
                                        ShowHint=true,
                                        Hint=" Элемент Label"})

Edit_account = VCL.Edit(mainForm,  {    Name = "Edit_account",
                                        Text = ACCOUNT,
                                        top=10, left=110, Width=90,
                                        ShowHint=true, Hint="Элемент EditButton", OnExit = Handler })
-- Выбор кода клиента
Label_client_code = VCL.Label(mainForm, {    Name = "Label_client_code",
                                            Caption="Код клиента",
                                            top=10, left=240,
                                            ShowHint=true, Hint=" Элемент Label"})
Edit_client_code = VCL.Edit(mainForm, {    Name = "Edit_client_code",
                                        Text = CLIENT_CODE,
                                        top=10, left=330, Width=90,
                                        ShowHint=true, Hint="Элемент EditButton", OnExit = Handler })
-- Выбор кода бумаги
Label_sec_code = VCL.Label(mainForm, {    Name = "Label_sec_code",
                                        Caption="Код бумаги",
                                        top=40, left=10,
                                        ShowHint=true, Hint=" Элемент Label" })
Edit_sec_code = VCL.Edit(mainForm, {    Name = "Edit_sec_code",
                                        Text = SEC_CODE,
                                        top=40, left=110, Width=90,
                                        ShowHint=true, Hint="Элемент EditButton", OnExit = Handler }) 
-- Выбор кода класса
Label_class_code = VCL.Label(mainForm, {Name = "Label_class_code",
                                        Caption="Код класса",
                                        top=40, left=240,
                                        ShowHint=true, Hint=" Элемент Label" })
local text = (CLASS_CODE ~= "" and CLASS_CODE) or "Выбрать..."
ComboBox_class_code = VCL.ComboBox(mainForm, {    Name = "ComboBox_class_code",
                                                Text = text,
                                                top=40, left=330, Width=110,
                                                ShowHint=true, Hint="Элемент ComboBox", OnExit = Handler, })
for _,i in ipairs({"SPBFUT","SPBOPT","TQBR"}) do    ComboBox_class_code.Items:Add(i) end

mainForm:Show()
-- Конец скрипта интерфейса
--=================================== Основной блок скрипта =================================
-- Сохранение таблицы или массива в файл без вложенных таблиц, тип string or number для ключей и значений
function SaveToFile (table_name, path)
  os.remove ( path )  --удаляем файл перед созданием нового
  local t = {ACCOUNT = ACCOUNT, CLIENT_CODE = CLIENT_CODE, SEC_CODE = SEC_CODE, CLASS_CODE = CLASS_CODE}
  local f, err = io.open (path, "w")
  if not f then
     return nil, err
  end
  local res = {}
  f:write ( table_name.." =\n{\n" )
  for k, v in pairs ( t ) do
    k = (type(k) == "number" and '['..k..']') or k
    v = (type(v) == "string" and '"'..v..'"') or v
    res[#res + 1] = "\t"..k.."="..v
  end
  f:write ( table.concat ( res, ",\n" ) )
  f:write ("\n}"); f:flush (); f:close ()
  return true
end
--
function main()
    while not stopped do
       sleep (1)
    end
    sleep(300)
end

230

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

kalikazandr спасибо вам!

231 (2015-10-22 11:39:10 отредактировано kalikazandr)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Пожалуйста.

232

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

kalikazandr спасибо вам, по прошлым вопросам все получилось! но есть еще вопрос, сможете дать ссылочку на пример или может сможете дать пример кода для обучения, как данные с любого индикатора (ишимоку или другой, состоящий из 2-3 линий) вывести в таблицу grid -  данные предпоследние, последние, текущие? Заранее вам спасибо!

233 (2015-10-24 18:27:06 отредактировано kalikazandr)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Конечно могу, открываете папку с квик, там файлик QLUA.chm, в нем ищите "Функции для работы с графиками".
Там есть волшебная функция getCandlesByIndex, которая может получить данные с любого штатного индикатора с конкретной линии этого индикатора.
Примеров использования этой функции в интернете очень много.

234

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Это вызов данных, но не совсем понятно как каждое значение прикрутить к ячейкам grid

235

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

diksan пишет:

Это вызов данных, но не совсем понятно как каждое значение прикрутить к ячейкам grid

Вот тут [url]http://quik2dde.ru/viewtopic.php?pid=725#p725[/url] есть пример "прикручивания" значений к ячейкам grid.

236 (2015-10-25 00:34:21 отредактировано diksan)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

ничего я на первой странице не нашел по своему вопросу!
Вот таблица:
gridIndicator = VCL.StringGrid(mainForm,"gridIndicator")
gridIndicator._ = { Top = 18, left = 270, Width=990, ColCount = 10, RowCount = 1, Height = 100, AutoEdit = False, FixedCols = 1, FixedRows = 1, Flat = True }
gridIndicator:SetColParams({
  {Width= 160, Alignment="taRightJustify", Title={Caption="Tenkan-sen", Alignment="taCenter"}},
  {Width= 160, Alignment="taRightJustify", Title={Caption="Kijun-sen", Alignment="taCenter"}},
  {Width= 160, Alignment="taRightJustify", Title={Caption="Senkou Span 1", Alignment="taCenter"}},
  {Width= 160, Alignment="taRightJustify", Title={Caption="Senkou Span 2", Alignment="taCenter"}},
  {Width= 160, Alignment="taRightJustify", Title={Caption="Chinkou Span", Alignment="taCenter"}},
})
дальше есть что-то правильно?
Tenkan-sen = gridIndicator, 5, Ichimoku getCandlesByIndex (ICHMK, 0, 0, 5)
из этого TABLE t, NUMBER n, STRING l getCandlesByIndex (STRING tag, NUMBER line, NUMBER first_candle, NUMBER count)\
------------------------------------------------------------
в справке QLUA ничего нет о getCandlesByIndex кроме вышенаписанного и ничего совсем нет о StringGrid!!!
Я же не прошу расписать все линии Ишимоку, можете хотя бы кинуть работоспособный пример хотя бы одного МА с одной ячейкой в таблице Grid? мне больше ничего не надо! я разберусь...
только в 1 класс не отправляйте!  smile
на форуме много чего есть, но простых обучающих примеров не найдешь (для новичков)!

237

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

diksan пишет:

в справке QLUA  ничего совсем нет о StringGrid!!!

Нет конечно.

diksan пишет:

Tenkan-sen = gridIndicator, 5, Ichimoku getCandlesByIndex (ICHMK, 0, 0, 5)

Вот тут посмотрите, очень подробно все описано:
[url]https://www.google.ru/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=getCandlesByIndex[/url]

238

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Я все это раньше делал в Qpile, а сейчас хочу сделать в интерфейсе LUA, я только учусь!
Вот как было в Qpile:
'Индикатор Ichimoku
Tenkan =  GET_VALUE(get_candle(ID_ind_ICHMK,GET_COLLECTION_ITEM(date_col,0),GET_COLLECTION_ITEM(time_col,0),0),"close")+0
Kijun = GET_VALUE(get_candle(ID_ind_ICHMK,GET_COLLECTION_ITEM(date_col,0),GET_COLLECTION_ITEM(time_col,0),1),"close")+0
SenkouA = GET_VALUE(get_candle(ID_ind_ICHMK,GET_COLLECTION_ITEM(date_col,0),GET_COLLECTION_ITEM(time_col,0),2),"close")+0
SenkouB = GET_VALUE(get_candle(ID_ind_ICHMK,GET_COLLECTION_ITEM(date_col,0),GET_COLLECTION_ITEM(time_col,0),3),"close")+0
TenkanLast =  GET_VALUE(get_candle(ID_ind_ICHMK,GET_COLLECTION_ITEM(date_col,1),GET_COLLECTION_ITEM(time_col,1),0),"close")+0
KijunLast = GET_VALUE(get_candle(ID_ind_ICHMK,GET_COLLECTION_ITEM(date_col,1),GET_COLLECTION_ITEM(time_col,1),1),"close")+0
SenkouALast = GET_VALUE(get_candle(ID_ind_ICHMK,GET_COLLECTION_ITEM(date_col,1),GET_COLLECTION_ITEM(time_col,1),2),"close")+0
SenkouBLast = GET_VALUE(get_candle(ID_ind_ICHMK,GET_COLLECTION_ITEM(date_col,1),GET_COLLECTION_ITEM(time_col,1),3),"close")+0
TenkanPrev =  GET_VALUE(get_candle(ID_ind_ICHMK,GET_COLLECTION_ITEM(date_col,2),GET_COLLECTION_ITEM(time_col,2),0),"close")+0
KijunPrev = GET_VALUE(get_candle(ID_ind_ICHMK,GET_COLLECTION_ITEM(date_col,2),GET_COLLECTION_ITEM(time_col,2),1),"close")+0
SenkouAPrev = GET_VALUE(get_candle(ID_ind_ICHMK,GET_COLLECTION_ITEM(date_col,2),GET_COLLECTION_ITEM(time_col,2),2),"close")+0
SenkouBPrev = GET_VALUE(get_candle(ID_ind_ICHMK,GET_COLLECTION_ITEM(date_col,2),GET_COLLECTION_ITEM(time_col,2),3),"close")+0

и потом таблица вкратце:
           STRING = SET_VALUE(STRING, "IND1", "Tenkan-sen текущий")   
           STRING = SET_VALUE(STRING, "IND1_DATA", Tenkan)

PARAMETER IND1;
PARAMETER_TITLE Индикатор;
PARAMETER_DESCRIPTION Индикатор;
PARAMETER_TYPE STRING(50);
END

PARAMETER IND1_DATA;
PARAMETER_TITLE Значение;
PARAMETER_DESCRIPTION Значение;
PARAMETER_TYPE STRING(30);
END
и т.д.
здесь нужен мне тоже понятный пример! Кто поможет?

239 (2015-10-25 01:13:50 отредактировано diksan)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

kalikazandr пишет:
diksan пишет:

в справке QLUA  ничего совсем нет о StringGrid!!!

Нет конечно.

diksan пишет:

Tenkan-sen = gridIndicator, 5, Ichimoku getCandlesByIndex (ICHMK, 0, 0, 5)

Вот тут посмотрите, очень подробно все описано:
[url]https://www.google.ru/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=getCandlesByIndex[/url]

Я уже там все просмотрел, все также как и вы отвечаете! на всех сайтах та же инфо что и в справке QLUA.
Конкретного примера хотя бы простой МА с внесением в таблицу Grid не могу найти.

Здесь тоже только описание, примера нет [url]http://quikluacsharp.ru/quik-qlua/poluchenie-v-qlua-lua-dannyh-iz-grafikov-i-indikatorov/[/url]
как правильно это прописать не понятно! не для спецов, а для чайников нет толкового описания QVCLua

240

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Примеров предостаточно, просто надо разбираться в примерах, сделать тестового робота самого простого:

# test.lua
local ccode, scode = "SPBFUT", "RIZ5"
local tag = "ICHMK"
local count = getNumCandles (tag)
local T0, N0, L0 = getCandlesByIndex (tag, 0, count - 2, 2)--получаем таблицу с двумя последними значениями линии индикатора
if type (T0) == "table" then
  message ( L0.."\n"..type (T0).." : "..T0[0].close.."; "..T0[1].close.."\nlen T0: "..N0)
end
local T1, N1, L1 = getCandlesByIndex (tag, 1, count - 2, 2)--тоже самое для первой линии индикатора
if type (T1) == "table" then
  message (( L1.."\n"..type (T1).." : "..T1[0].close.."; "..T1[1].close.."\nlen T1: "..N1)
end
--и т.д.

А как вставлять значения в grid - просто почитайте этот форум, здесь все есть и ссылку на пример я вам давал уже 2 раза.

241

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

swerg пишет:

Для компонента Button (кнопка) можно задавать цвет через свойство Color.
     btn = VCL.Button(MainForm)
     btn.Color = 0x22BB22

Для элемента BitBtn можно изменить цвет фона?

242 (2015-10-25 19:12:10 отредактировано diksan)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

kalikazandr спасибо, пока разбираюсь с таблицей индикатора, но сразу возник вопрос. При запуске скрипт уже начинает считать текущее значение индикатора по tag. Но идентификатор у меня загружается кнопкой "Загрузить", поэтому он начинает считывать первый попавшийся индикатор на графике Quik без Tag. Вопрос: как мне прописать, чтобы function LoadFromFile ( directory ) загружалась автоматом при запуске не дожидаясь нажатия кнопки "Загрузить"?

243

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

diksan пишет:

загружалась автоматом при запуске не дожидаясь нажатия кнопки "Загрузить"?

А вызвать функцию перед созданием формы пытались? Думаю нет.

244 (2015-10-25 22:10:56 отредактировано diksan)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

пытался. Она прописана перед созданием формы, но загружается пустой

245

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

diksan пишет:

пытался. Она прописана перед созданием формы, но загружается пустой

А при нажатии кнопки "Load" в таблицу попадают данные из файла?

246

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

да

247

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Ну что вам сказать, пытайтесь дальше. Вы пишете робота и ничего не знаете о языке, на котором пишете. Обращайтесь через пару месяцев, когда мат часть подучите.

248 (2015-10-26 15:50:18 отредактировано diksan)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

спасибо за совет, я и изучаю сочетая с практикой! извините если утомил. Приятно было общаться. Придется поискать другой форум: не для ассов Lua, а для новичков.

249

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

kalikazandr пишет:
GREEN_X5 пишет:
kalikazandr пишет:

w8.1 x64, обновил, не работает. версия квик 6.17.1.17, на 6.16.1.15 тоже обновил - не работает

Не работает - в смысле скрипт запускается корректно, StaticText внизу формы появляется, но не зеленый?

так точно, скрипт запускается ровно, StaticText - не зеленый

Такая же беда: не получается изменить цвет фона элемента StaticText в Win8 x64.

250

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

OpenDlg с кириллическими именами не работает?