Друзья, а что может быть, перестали котировки бегать. Вчера все норм было...

Авто-репост. Читать в блоге >>>
TICER = "SBER";
CLASS_CODE = "TQBR";
stopped = false;
t_id = nil
H = -1;
M = -1;
VSELL = 0;
VBUY = 0;
function OnInit()
CreateTable();
end
function main()
while not stopped do
if IsWindowClosed(t_id) then
stopped = true;
end
sleep(100);
end
end
function CreateTable()
t_id = AllocTable();
AddColumn(t_id, 0, "Время", true, QTABLE_STRING_TYPE, 10);
AddColumn(t_id, 1, "BUY", true, QTABLE_INT_TYPE, 15);
AddColumn(t_id, 2, "SELL", true, QTABLE_INT_TYPE, 15);
AddColumn(t_id, 3, "Дельта V", true, QTABLE_INT_TYPE, 15);
AddColumn(t_id, 4, "Цена", true, QTABLE_DOUBLE_TYPE, 15);
tab = CreateWindow(t_id);
SetWindowCaption(t_id, TICER.." Баланс покупок/продаж");
SetTableNotificationCallback(t_id, EventCallBack);
end
function OnAllTrade(alltrade)
if alltrade.sec_code == TICER then
fl = tostring(alltrade.flags);
if H==alltrade.datetime.hour then
if M==alltrade.datetime.min then
if fl == "1025" then VSELL = VSELL+alltrade.qty; end --Продажа
if fl == "1026" then VBUY = VBUY+alltrade.qty; end
else
M=alltrade.datetime.min;
--Rows --срока Coll -- Колонка
InsertRow(t_id, -1);
local Rows, Col = GetTableSize(t_id);
local Delta = VBUY-VSELL;
--local t = tostring(alltrade.datetime.hour)..":"..tostring(alltrade.datetime.min);
local t = tostring(H)..":"..tostring(M);
SetCell(t_id, Rows-1, 0, t);
SetCell(t_id, Rows-1, 1, tostring(VBUY));
SetCell(t_id, Rows-1, 2, tostring(VSELL));
SetCell(t_id, Rows-1, 3, tostring(Delta));
SetCell(t_id, Rows-1, 4, tostring(alltrade.price));
if Delta<0 then Red(Rows-1,3); end
if Delta>0 then Green(Rows-1,3); end
if Delta==0 then Yellow(Rows-1,3); end
if fl == "1025" then VSELL = alltrade.qty; end --Продажа
if fl == "1026" then VBUY = alltrade.qty; end
end
else
H = alltrade.datetime.hour;
M = alltrade.datetime.min;
end
end
end
function Red(row,col)
SetColor(t_id, row, col, RGB(255,0,0), RGB(0,0,0), RGB(255,0,0), RGB(0,0,0));
end
function Yellow(row,col)
SetColor(t_id, row, col, RGB(240,240,0), RGB(0,0,0), RGB(240,240,0), RGB(0,0,0));
end
function Green(row,col)
SetColor(t_id, row, col, RGB(0,200,0), RGB(0,0,0), RGB(0,200,0), RGB(0,0,0));
end
function EventCallBack(t_id, msg, par1, par2)
if msg==QTABLE_CLOSE then
OnStop();
end;
end
function OnStop(s)
if t_id ~= nil then
DestroyTable (t_id);
end;
stopped = true;
end
Не далее как вчера опубликовал топик «Смена x86 Quik 7.27.2.1 на x64 Quik 8.4.1.6. Пляски вокруг DLL», где кртко рассказывалось как перекомпилировать проект С++ с платформы х86 на х64. Надеюсь, что у вас все уже получилось или получится.
Но я «крутой» программист, и, естественно, у меня вначале вообще ничего и никак не получалось. А так как проект большой, да еще и непонятно в чем дело, а своими экспериментами я могу вообще все испортить, то решил сделать маленькую простенькую DLL LuaProba.dll, на ней отработать переход на х64, и потом перенести это в большой проект.
Привожу код С++ DLL целиком:
// LuaProba.cpp: определяет экспортированные функции для приложения DLL.
//
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
//=== Необходимые для Lua константы ============================================================================//
#define LUA_LIB
#define LUA_BUILD_AS_DLL
//=== Заголовочные файлы LUA ===================================================================================//
extern "C" {
#include "Lua\lua.h"
#include "Lua/lauxlib.h"
}
static int forLua_TestFunc(lua_State *L) // Возвращает заданный текст
{
const char *cc = "Привет из C/C++ и от меня 2 раза"; //str.c_str();
lua_pushstring(L, cc);
return(1);
}
//= == Регистрация реализованных в dll функций, чтобы они стали "видимы" для Lua == == == == == == == == == == == == == == == ==//
static struct luaL_reg ls_lib[] =
{
{ "TestFunc", forLua_TestFunc },
{ NULL, NULL }
};
//=== Регистрация названия библиотеки, видимого в скрипте Lua ==================================================//
extern "C" LUALIB_API int luaopen_LuaProba(lua_State *L)
{
luaL_openlib(L, "LuaProba", ls_lib, 0);
return 0;
}
Весь проект DLL можно скачать по ссылке - 
Settings={
Name="absorption",
period=20,
line=
{
{
Name = "cur1",
Type =TYPE_LINE,
Width = 2,
Color = RGB(255,0, 0)
}
}
}
--[[
описание свойств:
period - период, за каротрый делается расчет
назначение:
построение поглащения
--]]
function Init()
y = 0
return 1
end
function OnCalculate(index)
sz = Size()
n = Settings.period
if index == 1 then
y = 0
end
i = index
if index-n > 0 then
if (C(i) < C(i-1)) and (C(i-1) > O(i-1)) and (C(i) < O(i)) and
(C(i-1) - O(i-1) < O(i) - C(i)) then
y = y - 1
end
if (C(i) > C(i-1)) and (C(i-1) < O(i-1)) and (C(i) > O(i)) and
(O(i-1) - C(i-1) < C(i) - O(i)) then
y = y + 1
end
end
return y
end
Признаться уже достал этот 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. Можно даже так:

Квик. Новичкам.
Если виснет терминал и долго грузит.
После этих параметров работа заметно улучшится.
Итак, начнём.
Про сервера.
Лайфхак 1.
Звоните брокеру и узнаете у него пустой сервер, а не основной. Он работает лучше.
Картинка 1

У меня Открытие брокер.
Далее.
Как сделать чтобы квик не тормозил и работал быстрее?
— Есть ряд рецептов.
Далее делаем как у меня.
Картинка