Избранное трейдера Алексей

по

Скрипт 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




QLua: формирование свечных данных для робота

    • 31 марта 2020, 13:37
    • |
    • _sk_
  • Еще
Поделюсь своим опытом, который может быть полезен начинающим алготрейдерам, пишущим своего робота на QLua.

Внутри QLua есть стандартный способ, которым можно заказать свечные данные. Это делается через функцию CreateDataSource. При этом терминал возвращает все свечи, которые у него есть на момент вызова этой функции, но это может быть не совсем удобно. Вот несколько примеров.

Пример 1. Мы торгуем акции на 30-минутках и при этом не хотим учитывать свечу, которая получается в 9:30 из-за аукциона открытия, и не хотим, чтобы аукцион закрытия портил последнюю свечу дня в 18:30. Хотим только нужные свечи в одном массиве.

Пример 2. Мы торгуем фьючерсы только в дневную сессию, а вечернюю сессию выбрасываем, поскольку наша стратегия в этом случае даёт более приличный график эквити. Хочется иметь «отфильтрованный» свечной ряд.

Пример 3. Мы торгуем американские акции на Санкт-Петербургской бирже и хотим, чтобы время свечей было как в Америке, а не как на бирже, и хотим оставить только основные торги с 9:30 до 16:00 по буржуйскому времени.

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

Скрипт lua читающий таблицу обезличенных сделок.

Всем привет. Может кому пригодится. Скрипт читает ленту сделок и раз в минуту подсчитывает разницу между покупками и продажами. Часть кода нашел в интернете часть кода написал сам. Не знаю может уже есть что то подобное. Цель была не написать что то оригинальное, а наработать навыки программирования на lua.

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

Борис Березовский. Как заработать большие деньги?

Борис Березовский. Как заработать большие деньги?


Зачем я откровенничаю?

Я уже пожилой человек, добившийся в жизни всего, о чем только можно мечтать. Моих денег мне не прожить до конца моих дней, а, учитывая скромность моих потребностей – и за много жизней не прожить.

Я больше не заинтересован в зарабатывании денег. Будучи евреем, я, за исключением последних лет, жил и работал в России, хорошо узнал страну и ее народ, изучил силу и слабости русских. Начав, как беспощадный эксплуататор и иудей, я постепенно проникся сочувствием к великому и сверхтерпеливому русскому народу, и сейчас уже вполне искренне желаю ему блага.

Я изменил религию, крестился в Православии, во многом разошелся с еврейской общиной и её солидарным мнением, хотя до конца евреем быть не перестал.

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



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

Стратегия Поплавок. Робот-тестер на Луа и Питоне с описанием.

    • 16 марта 2020, 19:49
    • |
    • Albus
  • Еще
--ВВЕДЕНИЕ--
Пост будет полезен только разработчикам алгоритмических стратегий. Здесь нет прорывных идей. На истории стратегия прибыльная, но опыт показывает, что эта прибыльность иллюзорна и не гарантирует успех в будущем. По любой стратегии можно найти комбинацию параметров, которая прибыльна на прошлых свечках. Но радоваться, что ты нашёл Грааль, рано. На будущих сделках эти параметры скорее всего будут убыточными.
Тем не менее, подгонка под исторические данные — штука интересная, поэтому пишу этот пост. В нём вы найдёте рабочий тестер для описанной стратегии, который можете использовать как захотите. 

---ОПИСАНИЕ СТРАТЕГИИ---
Назовём её «Поплавок», потому что это стратегия выныривания из зоны перепроданности.
1. Ждём, когда индикатор RSI сформирует двойное дно.
2. Оба дна должны быть ниже какого-то горизонтального порога по RSI, например 25.
3. Подъём (выныривание) выше этого порога мы считаем признаком разворота и покупаем.
4. Прибыль забираем, когда акция дорастёт до (к примеру) уровня 50 по RSI. Скрипт умеет подбирать и этот параметр. Часто наилучшим вариантом будет продавать при RSI = 70 или даже RSI = 80, то есть уже в состоянии сильной перекупленности. Но эту фразу не воспринимайте как рекомендательную, ведь все эти прогоны на истории ищут лучший вариант в прошлом, но это не гарантирует успеха в будущем.

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

Вега и Вомма

Возможно, не все знают про нелинейные эффекты грека Веги и волшебные свойства грека Воммы. По нынешним волатильным временам, когда вола ходит туда-сюда на десятки процентов — эти эффекты могут значительно повлиять на финрез при торговле волатильностью. Хочу поделиться своим видением — может кому будет интересно. А может кого убережет от опасной позиции с неоправданным риском.

Итак, рассмотрим проданный стрэдл:

Вега и Вомма

Это обычный профиль PnL, который рисуют все опционные программы. Фактически, это зависимость PnL позиции от первого момента (M1) распределения вероятностей, где 
окажется цена БА на экспирацию (вон оно на заднем фоне профиля). M1 = текущей цене БА. Т.е. мысленно двигаем все распределение влево-вправо (меняем M1) и считаем, как изменится PnL позиции при этом. Но, когда торгуем волатильностью, влияние первого момента ведь стараемся исключать используя дельтахедж (ДХ). И в большей степени нас должен интересовать профиль PnL от второго момента распределения (M2). Именно от него зависит финрез торговли волатильностью. Фактически, M2 почти тоже самое, что IV на центре улыбки (IVC). Смотрел на истории, специальным образом нормированный M2 (на цену БА и время до экспы) коррелирует с IVC почти 100%.

Если у нас есть опционная модель, в которой можно точечно менять второй момент, то легко посмотреть профиль PnL от изменений M2. Я использую замечательную модель Курбаковского, в которой главный параметр mI — как раз и отвечает за второй момент. Поэтому добавил в своей программе отрисовку такого профиля. И вот что рисует для проданного стрэдла:



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

Главный секрет успеха в трейдинге

ёКак вы уже могли понять из названия, пост этот будет очень важный. И, сразу говорю, не короткий. 

Спросили меня тут в очередной раз, «в чем секрет успеха, чтобы стабильно зарабатывать?»

Думал-думал я. Много ответов перебрал:

— дисциплину,
— управление рисками,
— системность торговли,
— и то, что секрет в психологии и познании себя…
— и то, что секрет в сочетании фундаментального и технического анализа…

Нет, всё не то. Надоели эти ответы. Банально. Неоригинально. Скучно. Размыто. Давать такие ответы – слишком просто.

Призадумался еще. Придумал такие варианты.

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

Уже лучше… Но всё равно — нет. Как же дать человеку правильный ответ? Ведь что ни скажи — это будет только нюанс трейдинга! А ответ надо дать наиболее универсальный, потому что он же — самый правильный. (Вот, кстати, почему я не люблю вопросы подобного рода. Они предполагают серьезный детальный обстоятельный разговор, а не пару предложений. И даже после этого человек всё равно вряд ли что-то поймёт, если у него нет опыта! Это всё равно, что объяснять никогда не плававшему человеку, как плавать!!! Или объяснять необстрелянному, как вести себя во время сражения на войне)

В общем думал-думал я и вот что придумал. Давайте определимся с уже с этим ответом раз и навсегда.



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

Рекорд


Впервые за 5,5 лет, т.е. с тех пор, как я начал выкладывать график торговли на Смарте, у меня образовалась серия из 6 прибыльных месяцев подряд!
См. картинку (суммы месячной прибыли указаны в рублях):
Рекорд
Всем успехов в торгах.





Мой список Telegram каналов

Всем привет!
Сегодня я решил поделиться списком Telegram каналов, на которые я подписан.
Каналы разобью на две группы и отсортирую в порядке убывания количества подписчиков.

Поехали!

Рынок / инвестиции

РынкиДеньгиВласть https://t.me/AK47pfl ~ 57.9 подписчиков
Очень популярный канал, интересные и аргументированные рекомендации (а то часто бывает советуют покупать без четкого обоснования почему)
Чувствуется наличие инсайда. Попадались на fake news (если помните то это была отставка Миллера).
Посты небольшие с аргументами почему покупаем или продает.
Поставлю 5 из 5.

MarketTwits https://t.me/markettwits ~ 34.3 подписчиков
Самый классный рыночный канал с моей точки зрения. Финансовые новости компаний, FX, зарубежных рынков, рынка РФ.
Нравится их тонкий юмор и троллинг).
Посты короткие, рекомендаций покупок / продаж нет.
Ставлю 5 из 5.

ДОХОДЪ https://t.me/dohod ~ 22.3 подписчиков



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

Ответ с Конфы по поводу Enter1

    • 29 сентября 2019, 18:58
    • |
    • Enter1
  • Еще

Вестников сделал обзор про меня (качественный)
Сразу был сделан акцент на возможность и доступность действий. Эх, из зала вышел в этот момент...



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

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