Избранное трейдера _sg_
str='C:\\curl-7.63.0-win64-mingw\\bin\\curl.exe --socks5 127.0.0.1:9150 ' str=str..'"https://api.telegram.org/botидентификаторвашегобота/sendMessage?chat_id=айдивашегоаккаунта&text=' str=str..переменная1..": "..переменная2 str=str..'"' os.execute(str)Приведенный код будет слать в телеграм значения двух переменных, разделенных двоеточием.

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 — абсолютный или относительный индекс переменной в стэке.
TICER = "SBER";
CLASS_CODE = "TQBR";
FilePath = getScriptPath() .. "\\export.txt";--путь к файлу
save = false;--сохранять данные в файл если false нет, true да
f = nil;
stopped = false;
t_id = nil
H = -1;
M = -1;
VSELL = 0;
VBUY = 0;
CDelta = 0;
CountTrans = 0;
PriceTrans = 0.0;
t = "";
function OnInit()
CountTrans = 0;
if save then f = io.open(FilePath,"w"); end
CreateTable();
end
function main()
while not stopped do
if IsWindowClosed(t_id) then
stopped = true;
end
sleep(10);
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, 10);
AddColumn(t_id, 2, "SELL", true, QTABLE_INT_TYPE, 10);
AddColumn(t_id, 3, "Дельта V", true, QTABLE_INT_TYPE, 10);
AddColumn(t_id, 4, "AVG Цена", true, QTABLE_DOUBLE_TYPE, 15);
AddColumn(t_id, 5, "Накопленная Дельта", true, QTABLE_INT_TYPE, 15);
AddColumn(t_id, 6, "Кол-во сделок", true, QTABLE_DOUBLE_TYPE, 12);
tab = CreateWindow(t_id);
local NAME = tostring(getParamEx(CLASS_CODE,TICER,"LONGNAME").param_image);
SetWindowCaption(t_id, TICER.." ("..NAME..") Баланс покупок/продаж");
SetTableNotificationCallback(t_id, EventCallBack);
end
function Calc(alltrade)
if bit.test(alltrade.flags, 0) then VSELL = VSELL+alltrade.qty; --Продажа
else VBUY = VBUY+alltrade.qty; end
CountTrans = CountTrans+1;
PriceTrans = PriceTrans+alltrade.price;
end
function OnAllTrade(alltrade)
if alltrade.sec_code == TICER then
local Rows, Col = GetTableSize(t_id);
if H==-1 or H~= alltrade.datetime.hour then
H = alltrade.datetime.hour;
M = alltrade.datetime.min;
t = tostring(alltrade.datetime.hour)..":"..tostring(alltrade.datetime.min);
end
if M==alltrade.datetime.min then
Calc(alltrade);
else
M=alltrade.datetime.min;
InsertRow(t_id, -1);
local Delta = VBUY-VSELL;
Price = PriceTrans/CountTrans;
SetCell(t_id, Rows, 6, tostring(CountTrans));
SetCell(t_id, Rows, 0, t);
SetCell(t_id, Rows, 1, tostring(VBUY));
SetCell(t_id, Rows, 2, tostring(VSELL));
SetCell(t_id, Rows, 3, tostring(Delta));
local SEC_SCALE = tostring(getParamEx(CLASS_CODE,TICER,"SEC_SCALE").param_value);
SEC_SCALE = string.format("%.0f",SEC_SCALE);
SetCell(t_id, Rows, 4, string.format("%."..SEC_SCALE.."f", tostring(Price)));
if Rows>=2 then
local OldPrice = tonumber(GetCell(t_id,Rows-1,4).image);
if OldPrice>Price then
Red(Rows,4);
else
Green(Rows,4);
end
CDelta = tonumber(GetCell(t_id,Rows-1,5).image);
CDelta = CDelta + Delta;
else
CDelta = Delta;
end
SetCell(t_id, Rows, 5, tostring(CDelta));
if Delta<0 then Red(Rows,3); end
if Delta>0 then Green(Rows,3); end
if CDelta<0 then Red(Rows,5); end
if CDelta>0 then Green(Rows,5); end
if save then
local Str = tostring(H)..";"..tostring(M)..";"..tostring(VBUY)..";"..tostring(VSELL)..";"
..tostring(Delta)..";"..tostring(Price)..";"..tostring(CDelta);
Str=Str.."\n";
SaveFile(Str);
end
t = tostring(alltrade.datetime.hour)..":"..tostring(alltrade.datetime.min);
VBUY = 0;VSELL = 0;
PriceTrans = 0;
CountTrans = 0;
Calc(alltrade);
end
end --if alltrade.sec_code == TICER then
end
function SaveFile(Str)
if f ~= nil then
f:write(Str);
f:flush();
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 f ~= nil then f:close(); end
if t_id ~= nil then
DestroyTable (t_id);
end;
stopped = true;
end
У меня сейчас есть список акции которые я хочу купить и уровни на которых хочу это сделать. дойду до уровней -куплю, не дойду- не куплю.
С опционами не работал т к считал что это тема сложная. Вопрос- стоит ли сейчас без опыта начинать использовать эту стратегию? есть ли подводные камни?
основной плюс — дополнительный заработок на продаже опционов.
я пока вижу 2 риска
1. если ситуация сильно изменится и акцию покупать желание исчезнет- я не смогу просто так отказаться от покупки (как это можно сделать через снятие алгозоявки). тут либо придётся принимать убыток и фиксировать, либо городить какую то конструкцию из опционов, делать ролирование..
Рецепт вижу такой- продавать только на те акции которые точно хочется.
2. если всё упадет и придется кучу акций покупать. опять же -в алгозаявке я могу работать с суммой больше чем есть наличка исходя из того что акции не с единичной кореляцией падают- что то купить успею и упадет, а что то не упадет достаточно низко- выходит что для того что бы загрузить депозит надо выставить заявки на сумму больше чем кол-во кэша свободного.
Рецепт вижу такой: ограничиваться по объёму продаж. по крайней мере за N ный период. что бы даже если все опционы эксплицируются в акции- не появлялось плече. Ну или если решу заесть в плече (если прям рынок совсем на дне будет- то не исключено что буду готов и на это) -то что бы плече было в пределах заданного риска(условно при rts 600=уровень 2008 года +инфляция загрузится в плечем 1.5- 2 исходя из того что риск упасть до 200/300 очень мало, да и если такое произойдет- важны ли будут акции (или важней патроны и тушонка будут)).
Несколько напрягает начинать это делать в такой жесткой ситуации с дикой волатильностью. тем более начинать работу с опционами с их продажи впрочем- волатильность выше, опционы дороже.
Кризис приятен тем, что даёт возможность потренировать разные позиции. Никому не интересно читать однотипные под копирку посты «продал стреддл — зафиксировал прибыль». Даже одиночный возглас "будь прокляты хуситы и охрана завода саудитов!" общей картины не менял. Хоть новоявленный опционный псевдогуреныш Г… ая Г… нь и считает, что «торговать мосбиржу западло» и «торговать в кризис дважды западло», но кто он такой, чтобы нам указывать? Поэтому караван идет и на пути ему попался Зигзаг Удачи.
Эта позиция считается базовой уважаемым Каленкович Алексей (enki) .
Низкий ему поклон за науку и за время, которые он мне уделил.
Давным-давно в уже далеком 2017 году эта позиция так и торговалась из месяца в месяц методично и довольно скучно (до февраля 2018 года примерно =) ) на боевом тестовом счете (размером около 100 тыр). Учитывая, что это были месячные опционы на РИ сейчас сам себе удивляюсь, насколько хватало смелости переносить это всё хозяйство через ночь и выходные. =) Nobless oblige
Про греки.
Сразу предупреждаю. Следующие три ссылки — ссылки на мой сайт (никаких регистраций не нужно).
Все, что я хотел сказать в открытом доступе, я сказал здесь. Даже сделал чек-лист по грекам (здесь). И еще написал алгоритм действий при создании опционной позиции (здесь).
По-моему, уже здесь выкладывал, но выложу еще раз:

Идея создания опционов – это попытка оценить будущий диапазон движения БА. Отсюда и идет то, что профессионалы при торговле опционами смотрят на историческую волатильность (HV), подразумеваемую волатильность (IV) и пытаются спрогнозировать будущую реализованную волатильность. Затем, участники рынка пытаются спрогнозировать, какой будет волатильность БА, если его цена вырастет/упадет на 1,2,3 и т.д. процента. Так появляется кривая волатильности. Затем начинают прогнозировать движение БА за различный временной интервал, что приводит нас к временной структуре.