Избранное трейдера autotrade

по

Скрипт lua Баланс покупок/продаж

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

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




Таблица. Ожидаемые дивиденды

Пересчитал ожидаемые дивиденды в % соотношении к текущим ценам, с разбивкой по мес.

Тут не все учтены!, только то что интересует в перспективе

Таблица. Ожидаемые дивиденды


Какие акции нужно было покупать десять лет назад, чтобы сейчас получить много денег

За последнее десятилетие индекс S&P 500 вырос в 3,5 раза, что соответствует 13,5% ежегодной доходности. Но несколько акций, которые входят в состав индекса, сильно его опередили. Я сделал подборку этих компаний, описал, чем они занимаются, и посчитал, какую доходность они показали.


Netflix

Какие акции нужно было покупать десять лет назад, чтобы сейчас получить много денег
Тикер: $NFLX

Сфера: потоковое мультимедиа

Рост: 40x

Описание: американская развлекательная компания, которая производит и поставляет фильмы и сериалы. Если вы слышали про Ведьмака или Карточный Домик, то понимаете, о чем идет речь. Netflix начинался с проката DVD, затем добавились сервисы онлайн-подписки и потокового видео. Выручка компании стала активно расти в 2013 году, тогда же пошли вверх котировки. Среднегодовая доходность акций Netflix за десять лет составила 44,68% с учетом сложных процентов.


Broadcom



( Читать дальше )

Утренний обзор за 29.01.2020

Доброе утро!

❗️ Экономика: заказы на товары длительного пользования в США выросли на 2,4% в декабре. Считаем, что отчет был негативным для рынка из-за снижения заказов, если исключить транспорт и военную технику (+168%). В то же время, уверенность потребителей выросла до 6-месячного максимума. Сегодня заседание ФРС и пресс-конференция.

✅ Apple (AAPL US) представил сильные результаты за квартал, существенно превысив прогноз (выручка $92 млрд при консенсусе $88.4 млрд). Прогноз выручки на следующий квартал: выручка $65 млрд при консенсусе $62,3 млрд, обусловленном высоким ростом продаж на развивающихся рынках. Акции Apple обновили исторический максимум на пост-торгах.

✅ LVMH (LVMH PA) сообщил о сильных результатах за 2019 год, опередив ожидания. Органический рост +10%, рост выручки + 15%. Компания объявила об увеличении дивидендов + 13% год к году. Акции выросли, несмотря на то, что на Китай и Гонконг приходится значимая доля в росте продаж компании.



( Читать дальше )

Вклады россиян

Посмотрел тут на выходных сборник с официальной статистической информацией от Росстата  — хотел там увидеть свежие цифры по вкладам россиян, но несмотря на то, что сборник опубликован 30.12.2019, данные по вкладам в нём актуальны на 01.01.2019.

Ну да ладно, не пропадать же добру, поэтому делюсь своими изысканиями с вами. Карты правда вставились не очень хорошо, чтоб детально разглядеть — откройте оригинал (ссылки на оригинал на файлообменнике — под каждой картой)

ДЕНЬГИ РОССИЯН
Вклады россиян Деньги, Банк, Экономика, Финансы, Статистика, Карты, Россия, Москва, Длиннопост

Итак, в банках в стране на 01.01.2019 хранится 28 триллионов 577 миллиардов рублей на счетах физлиц. Тут всё — вклады, накопительные счета, деньги на дебетовых карточках. Здесь не учтены все другие активы — недвижимость, ценные бумаги, наличность под матрасом и т.д.

Это, кстати, почти в два раза больше, чем на счетах юридических лиц!



( Читать дальше )

Про Феликса!

Миллиардер Владимир Евтушенков подарил сыну Феликсу:
Про Феликса!


акции АФК «Система» на $38 млн!


   Ваш все тот же самый, 
            S.Hamster

Коммуникации Quik Lua с внешним миром.

    • 14 декабря 2019, 20:42
    • |
    • 3Qu
  • Еще

Мне нравится Lua. Lua хороший компактный язык на котором можно сделать индикаторы, различные вспомогательные программы, помогающие трейдеру и даже несложные торговые системы (ТС, роботы). Пожалуй единственная книга по Lua — Роберту Иерузалимски: Программирование на языке Lua. Ее можно найти в интернете.

Lua имеет также несложный C-API позволяющий связать программы Quik Lua с внешним миром через DLL и получить доступ практически ко всему, в том числе к любым математическим библиотекам обработки данных, что необходимо для сколь-нибудь сложным ТС. Однако, для этого уже необходимо знание не только Lua, но и Lua C-API, языка С/С++, а также умения писать DLL. При этом надо будет решить еще ряд проблем, которые возникнут по ходу пьесы в процессе этой деятельности. Далеко не каждый пользователь Quik и Lua может все это реализовать в обозримое время.
У Quik Lua (QLua) есть еще недостатки — все события терминала в Lua работают в потоке терминала, и получив из них данные надо как можно быстрей завершать функции обработки этих данных и освобождать поток терминала, иначе терминал просто повиснет. Единственная функция QLua работающая в собственном потоке — это main() и вся сколь-нибудь сложная обработка может находиться только в ней.
Кроме того, для Lua крайне мало библиотек, а существующие работают оч не быстро. В принципе, это и не нужно, если можно организовать связь с внешним миром через C-API. Но нам от этого легче не становится.) Короче, для написания хорошей сложной ТС нам надо выйти за пределы QLua и установить связь с внешним миром, и сделать это доступными средствами.
Сейчас наиболее продвинутым языком, включающим в себя массу библиотек обработки данных является Python. По применимости для обработки данных он, пожалуй, занимает первое место в мире, а по распространенности входит в первую пятерку. В числе библиотек — математические, статистические, машинного обучения и пр., и пр. Таких библиотек более тысячи только в Anaconda, большинство из которых устанавливается при ее инсталяции. Вы можете не использовать Anaconda и скачать Python с сайта



( Читать дальше )
  • обсудить на форуме:
  • Quik Lua

Стул - убийца трейдера!

Наконец-то я нашел книгу про ЗОЖ, которую ТМ не прочитал!
Стул - убийца трейдера!

Кто слышал, что сидячий образ жизни вреднее курения? Это, конечно, звучит как доведенный до абсурда заголовок желтой
прессы, но автор этой фразы не собирается отступаться. Это доктор Джеймс Левайн, директор Инициативы по борьбе с ожирением клиники Майо и Университета штата Аризона, и он зашел даже дальше. Вот что он говорит: «Сидение опаснее, чем курение, убивает больше людей, чем ВИЧ, и коварнее, чем парашютный спорт». Его вывод прост: «Сидя, мы убиваем себя» . Добрый доктор — не единственный, кто бьет тревогу. Доктор Левайн и все большее число других экспертов, основываясь на целой горе научных исследований, говорят, что если сидеть всего два часа без перерыва, это внесколько раз повышает риск развития болезней сердца, диабета, метаболического синдрома, рака, боли в шее и спине и других ортопедических проблем. Сидение, как и курение, сокращает вашу жизнь. Многие исследования также показывают, что эффекты от долгосрочно-
го сидения невозможно обратить вспять физическими упражнениями или другими хорошими привычками. Это значит, что даже если вы правильно
питаетесь и целый час в день проводите в спортзале, но потом практически весь день сидите, то все ваши физические упражнения просто не до-
стигнут цели. Вы все равно ведете сидячий образ жизни. Некоторые эксперты даже заявляют, что сидение воздействует на здоровье
еще пагубнее, чем курение. Исследование, проведенное в Австралии в 2008 году, показывает, что каждый час, проведенный у телевизора
после 25 лет, сокращает ожидаемую продолжительность жизни телезрителя на 21,8 минуты. Для сравнения, выкурив одну сигарету, вы сокращаете свою жизнь на 11 минут. Доктор Левайн утверждает, что каждый сидячий час сокращает нашу жизнь на два часа .
У типичного сидячего офисного работника больше мышечно-скелетных травм, чем у любого другого работника производственных отраслей, вклю-
чая строительство, металлургию и транспорт. Один исследователь пришел к выводу, что сидение — это такой же профессиональный риск, как поднятие тяжестей или разгрузка вагонов .  Последние два десятилетия врачи и ученые-исследователи очень активно
изучали опасность сидения. Пресса же лишь недавно снизошла до того, чтобы назвать эту проблему «кризисом в здравоохранении» — только по-
сле того, как появилось множество доказательств связи сидячего образа жизни с самыми разнообразными негативными эффектами для здоровья.
Сегодня Всемирная организация здравоохранения ставит недостаточную физическую активность — слишком много времени, проведенного в сидячем положении, — на четвертое место в списке предотвратимых причин смерти в мире: ежегодно, по оценкам, она вызывает 3,2 миллиона смертей.



( Читать дальше )

Поиск акций с помощью коэффициента Грэма

 Множество инвесторов фондового рынка часто применяют для отбора акций теорию Бенджамина Грэма. По мнению авторов, каждая акция обладает некой внутренней (истинной, реальной) стоимостью, которая находится в зависимости от ее рыночной стоимости. Один из постулатов теории гласит, что стоимость актива предопределена фундаментальными показателями, и обычно на нее не действуют спекулятивные прогнозы о грядущей доходности.
 В долгосрочной перспективе те, кто работает, отталкиваясь от внутренней стоимости, ожидают приближения котировок к действительной цене. При этом цены могут долго колебаться значительно выше или ниже этого уровня, прежде чем вернуться, подобно тому, как они всегда возвращаются к скользящей средней на ценовом графике.
 Б. Грэм смог доказать состоятельность своих доводов даже в годы американской Великой Депрессии, когда большинство фондовых инвесторов потерпели крах. Его труды «Анализ ценных бумаг» (Benjamin Graham, David L. Dodd – Security Analysis, 1934 г.) и «Разумный инвестор» (Benjamin Graham – The Intelligent Investor, 1949 г.) – настоящая классика, не теряющая актуальности и в наши дни. Самым известным практиком теории Грэма является Уоррен Баффет.



( Читать дальше )

....все тэги
UPDONW
Новый дизайн