Из Квик качаю торговые данные фьючерса SR.
Кто нибудь знает, как такую диаграмму с помощью Lua встроить в сам Квик, чтобы можно было разделять по тайм-периодам?

Авто-репост. Читать в блоге >>>
Собираюсь пока поторговать его руками, чтобы окончательно убедиться в его работоспособности и потому, что еще не программировал на Lua вообще и для «квика» в частности.
Внутридневная торговля с минимальной просадкой (для желающих могу посчитать отдельно). До 10 сделок в день. Хорошо подходит для одного класса инструментов и плохо — для других, что является косвенным показателем жизнеспособности. Почему так происходит — мне тоже понятно.
Алгоритм без заглядывания в будущее и мартингейла. Ниже результаты бэктеста за пять лет. Конечно же, в идеальных условиях: без проскальзываний и комиссий брокера и биржи. Без реинвестирования прибыли.
Выручка от торгов BTC/USD с осени 2016 года:

Фьючерс S&P500 с начала 2015 года, когда он стоил 2055 пунктов:

PORTFOLIO_EX LUK;
DESCRIPTION Объёмы купли/продажи за интервал;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST FIRMID;
PROGRAM
'Автор: Михаил Булычев
'Что делает:
' подсчитывается объёмы купли\продажи по определённому инструменту за
' заданный интервал
'Как использовать:
' В следующих строках следует указать код бумаги и код класса для
' отслеживаемого инструмента
'=============================НАСТРОЙКИ===============================
SecCode="LKOH" ' Код инструмента
ClassCode="TQBR" 'Код класса
interv=3600 'является интервалом в секундах
razn = 0 'смещение часового пояса относительно времени торговой системы.
'=============================НАСТРОЙКИ===============================
FUNC is_in_interval(interval, trade_time, sys_time, hour_shift)
csys_time_value=0
c_time_value=0
csys_time_value =0 + (0 + get_value(sys_time, "Hour") + hour_shift)*3600 + _
get_value(sys_time, "Min")*60 + _
get_value(sys_time, "Sec")
c_time_value=0 + ((0 + substr("" & trade_time, 0, 2)) * 3600) + ((0 + substr("" & trade_time, 2, 2)) * 60) + ((0 + substr("" & trade_time, 4, 2)))
csys_time_value = csys_time_value + 0
c_time_value = c_time_value + 0
k=csys_time_value - c_time_value
if k <= interval
result=1
else
result=0
end if
END FUNC
buy_value=0
sell_value=0
total_value=0
sys_time = GET_DATETIME()
delete_all_items()
mString=create_map()
j=0
n=get_number_of("ALL_TRADES")
for i from 0 to n
mTrade=get_item("ALL_TRADES", n-i)
trade_time=get_value(mTrade, "TIME")
if (get_value(mTrade, "SECCODE")= SecCode) AND (get_value(mTrade, "CLASSCODE")= ClassCode)
if is_in_interval(interv, trade_time, sys_time, 0-razn) = 1
value=0+get_value(mTrade, "VALUE")
j=j+1
if (get_value(mTrade, "OPERATION") = "BUY")
buy_value=buy_value+value
else
sell_value=sell_value+value
end if
total_value=total_value+value
else
break
end if
end if
end for
mString=set_value(mString, "vol", total_value)
mString=set_value(mString, "volbuy", buy_value)
mString=set_value(mString, "volsell", sell_value)
add_item(1, mString)
END_PROGRAM
PARAMETER vol;
PARAMETER_TITLE vol;
PARAMETER_DESCRIPTION Купили;
PARAMETER_TYPE NUMERIC(10,0);
END
PARAMETER volbuy;
PARAMETER_TITLE volbuy;
PARAMETER_DESCRIPTION Купили;
PARAMETER_TYPE NUMERIC(10,0);
END
PARAMETER volsell;
PARAMETER_TITLE volsell;
PARAMETER_DESCRIPTION Продали;
PARAMETER_TYPE NUMERIC(10,0);
END
END_PORTFOLIO_EX
Возможности новой версии
1. Реализован функционал быстрого фильтра в таблицах. Для активации \ деактивации быстрого фильтра используется пункт «Включить быстрый фильтр» \ «Выключить быстрый фильтр» контекстного меню, открываемого для заголовка самого левого столбца таблицы. Данный функционал позволяет фильтровать информацию в таблицах QUIK с наглядным отображением критериев фильтрации.

void lua_pushnumber (lua_State *L, lua_Number n);
const char *lua_pushstring (lua_State *L, const char *s);
lua_Number lua_tonumber (lua_State *L, int index);
const char *lua_tostring (lua_State *L, int index);где L — указатель Lua-стэка, а index — абсолютный или относительный индекс переменной в стэке.
Признаться уже достал этот 32-битный Quik 7. Работать стало почти невозможно, начал подвисать практически на пустом месте. А если повесить на Quik Lua, а к Lua прицепить DLL, то вообще все эпизодически вставало. DLL-ки, вообще-то, многопоточные и освобождают вызывающие потоки (события) Lua практически за миллисекунды, но если таких событий много Quik встает. Хотя, он и без Lua и DLL тоже регулярно встает.)
Были и другие причины ухода от 32-бит Quik, но это уже связано с брокером.
Итак, новый брокер — новый 64-битный Quik 8.4.1.6. Наконец сбылась мечта идиота!
Что можно сказать, — х64 Quik работает гораздо лучше, все равно временами немного подвисает, но, вроде, некритично. После логин-пароля, прежде чем работать надо подождать, — потоки обезличенных сделок начинают работать только через 3-4 минуты после старта. В общем, с этим все более-менее ОК.
Следующий этап — надо переводить весь софт с х86 на х64, и если есть исходники, то никаких проблем не должно появиться. Если вы не используете в своем софте каких либо дополнительных DLL, то все должно ограничиваться двумя действиями.
1. Меняете в проекте С++ в разделе Файлы ресурсов 32-битную версию файла Lua5.1.lib на 64-битную версию Lua5.1.lib,
2. Выставляете в свой свойствах проекта компиляцию в x64. Можно даже так:
Начал вчера работы по реализации "Брошенной стратегии". Хорошо когда есть наработки: взял готовые куски кода, немного доработал под новые нужды, соединил их вместе и уже все готово — почти все необходимые данные передаются в DLL, расставляются по местам и готовы к использованию. С этим почти закончено, остальное будет делаться по ходу пьесы, и по мере необходимости.
С передачей данных закончено, а стратегия даже не начиналась. Система новая и архитектора системы пока не ясна, есть несколько вариантов, выбрать из которых не так просто.
Пока суд, да дело, решил написать о передаче данных из Quik в С++DLL.
О том как сделать простую С++DLL для работы с Quik-Lua написано на сайте https://quikluacsharp.ru здесь и о передаче данных из Lua — здесь и в других материалах сайта. Наверняка многие из вас все это видели и знают, а некоторые это даже применяют. Я это все не использую, не очень разбирался, но, тем не менее, сам сайт
На самом деле для построения роботов все эти действия абсолютно не нужны. Поэтому, собственно, таких возможностей и не предусмотрено.
Практически со 100% вероятности то что вам необходимо, делается другими способами, которые являются документированными и стандартными.
Здравствуйте, коллеги!
ВОПРОС:
можно ли средствами только QLUA (не открывая окон редактирования настроек графика) менять настройки и параметры графика цен?
Нужно управлять:
1. идентификатором инструмента (например, заменить SRZ9 на SRH0 в определенный момент времени),
2. назначением имён линий графика (линия цен, линия индикатора) на подобие тех, что устанавливаются в окне «Редактирование настроек графика».
Eugene Bright,
1. Нет
2. Нет
И такой же ответ на остальные вопросы из этой серии.
Здравствуйте, коллеги!
ВОПРОС:
можно ли средствами только QLUA (не открывая окон редактирования настроек графика) менять настройки и параметры графика цен?
Нужно управлять:
1. идентификатором инструмента (например, заменить SRZ9 на SRH0 в определенный момент времени),
2. назначением имён линий графика (линия цен, линия индикатора) на подобие тех, что устанавливаются в окне «Редактирование настроек графика».
Здравствуйте. Подскажите где взять подробный учебник (для начинающего) или какой нибудь видео курс по обучению QLUA?
Куда QUIK сохраняет (буферизует) запущенный на нем скрипт Lua?
И главное — может ли брокер (тех. служба) «иметь доступ» к этому скрипту (отдельному потоку)?
Просто хочется узнать народное мнение.
Авто-репост. Читать в блоге >>>
Всем привет!
Вопрос вот возник. Как (и можно ли вообще) из экранной таблицы открыть еще одно окно поверх этой таблицы, например по двойному клику на какую-нибудь ее ячейку?