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

по

Трагедия на 60,640 контрактов CLJ0 на Московской бирже.

Вот он этот контракт https://smart-lab.ru/q/futures/CLJ0/
Сегодня он упал на планку $8,84 и остался на ней лежать.
Вы могли просто разорить себя, просто взяв и купив с планки. 
Потому что на 1 купленный по 8,84 контракт вам придется выплатить....

Смысл в том, что это российский контракт, который торгуется на Московской бирже, а его исполнение привязано к американской нефти WTI, которая торгуется в США на Nymex. Вот правила биржи по исполнению нашего контракта:
Цена исполнения контракта считается равной значению расчетной цены (Settle Price) соответствующего фьючерса Light Sweet Crude Oil Futures, которая определяется биржей NYMEX и публикуется на сайте CME Group по адресу www.cmegroup.com в последний торговый день, предшествующий дню исполнения соответствующего фьючерса Light Sweet Crude Oil Futures. (Информация о значении расчетной цены (Settlement Price) соответствующего фьючерса Light Sweet Crude Oil Futures размещена на сайте www.cmegroup.com в открытом (бесплатном) доступе, значение цены выражено в долларах США за 1 (один) баррель нефти сорта Light Sweet Crude Oil. Биржа и Клиринговый центр не несут ответственности за недостоверность, неполноту и несвоевременное обновление информации о значении расчетной цены (Settlement Price) соответствующего фьючерса Light Sweet Crude Oil Futures на сайте www.cmegroup.com, а также за сбои в работе указанного сайта.)
https://www.moex.com/ru/contract.aspx?code=CLJ0&utm_source=www.moex.com&utm_term=clj0

Прикол однако в том, что если контракт американский торговался непрерывно целый день и упал в минус, правила Московской биржи ограничили падение фьючерса так называемым нижним лимитом торгов, в результате чего фьючерс упал на планку $8,84 и тем кто «попал» продать свои контракты на Мосбирже уже было невозможно.

Цена Settle price 20 апреля составила -$37,63. Вот ссылка на табличку:
https://www.cmegroup.com/trading/energy/crude-oil/light-sweet-crude_quotes_settlements_futures.html 
Трагедия на 60,640 контрактов CLJ0 на Московской бирже.
Если финальный сеттлмент был сегодня (я так и не понял до конца, сегодня или завтра), то покупатель 1 контракта с планки в итоге бы должен был бы перевести продавцу 8,84+37,63=$46,47х10 (10 это размер контракта). то есть -$465.

Завтра по идее по майскому контракту уже торгов нет так как:
If the 25th calendar day is not a business day, trading terminates 4 business days prior to the 25th calendar day of the month prior to the contract month

При ОИ = 60 тыс контрактов, чей-то убыток составит $28 млн. (Это только относительно цены планки, а ведь покупцы покупали то выше)

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

Есть конечно ряд вопросов:
👉почему на cme не сработал нижний лимит $0,01
👉как мосбиржа будет исполнять контракты, если сеттл прайс -$37?

Говорят, что американская биржа заранее предвидела вариант отрицательных нефтяных цен и с 15 апреля сняли эти лимиты.
Трагедия на 60,640 контрактов CLJ0 на Московской бирже.

https://www.cmegroup.com/notices/clearing/2020/04/Chadv20-160.html#pageNumber=1

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


Мораль сей басни?
👉Господа, когда ЦБ хочет ввести квалификацию инвесторов, ЦБ знает что делает. Ведь вы, торгуя фьючерсы, вряд ли думали, что ваш лонг в нефти может упасть на планку, что вы не сможете его закрыть, а исполнят ваш контракт глубоко в минусе, потому что таков регламент биржи.

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

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

А возможно и обойдется, ведь народ наш в основном торгует Brent на Мосбирже, а не WTI, поэтому надеюсь, что пострадавших будет не так много как в 2018-м.

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




Объединение методов пересечения и ценового канала скользящих средних (перевод с elliottwave com)

    • 02 апреля 2020, 16:36
    • |
    • RUH666
  • Еще
Еще один способ работы со скользящими средними — это объединить технику кроссовера с техникой ценового канала. Система ценовых каналов показана на графике E-mini S&P 500 на рисунке 1-6. Зеленые стрелки показывают, когда синяя линия пересекает 20-периодную скользящую среднюю более высокой линии, которая является 20-периодной простой скользящей средней максимумов. Красные стрелки указывают на пересечения вниз. Обведенные кружочками ромбы показывают, когда 5-периодная скользящая средняя пересеклась ниже 10-периодной. (В попытке облегчить интерпретацию этого графика цены я не показал простую скользящую среднюю за 10 периодов.)
Объединение методов пересечения и ценового канала скользящих средних (перевод с elliottwave com)По сути, этот метод объединяет лучшие из двух систем скользящих средних в одну. Его цель состоит в том, чтобы дать вам медленный вход с использованием системы канала с скользящей средней ценой, которая устраняет ложные торговые сигналы, но быстрый выход для защиты прибыли с помощью системы пересечения скользящих средних.

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

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

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

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

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

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

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

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

Досужие размышления о Quik, Lua и Python.

    • 28 марта 2020, 16:03
    • |
    • 3Qu
  • Еще

Я уже писал, что у меня сделана C++ DLL, которая получает данные из Lua и пишет их в БД SQLite. Уже писал также, что DLL под Lua делается на раз, и даже приводил коды и шаблон проекта простенькой C++ DLL. Посмотрело несколько тысяч, скачало, аж 12 человек, применят от силы двое. КПД постов, прямо скажем, оч низкий.)

В DLL реализована как связь с Lua, и будет реализована сама стратегия, вот только не решил какая из них. Повторять старые стратегии на новой для меня платформе Quik уже неинтересно, а новых моделей АТС отработано уже несколько. Все моделируется в Python. Часть стратегий не требует сложной математики, и могут быть легко перенесены непосредственно на С++. Другие непосредственно в DLL перенесены быть не могут, т.к. используют пакеты Python — всяческие регрессии и машинное обучение.
В общем, получилось, что DLL является шаблоном для любой стратегии. Все необходимые для АТС данные доступны АТС — реал-тайм данные поступают в DLL непосредственно из терминала, а необходимая история пишется DLL в БД SQLite и читается АТС из базы данных.



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

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

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

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

5 индикаторов, которые помогут определить максимумы и минимумы рынка

Рассказываю о полезных инструментах, которые используют долгосрочные инвесторы. Эти инструменты дают дополнительную информацию и помогают прогнозировать рынок.

5 индикаторов, которые помогут определить максимумы и минимумы рынка

Purchasing Managers' Index (PMI)

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

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

Нейтральное значение индекса составляет 50 пунктов. Значения выше говорят о росте деловой активности. Значения ниже предупреждают о падении. Если индекс опускается ниже 40 пунктов, то наступает рецессия.

5 индикаторов, которые помогут определить максимумы и минимумы рынка

PMI опережает максимумы и минимумы деловой активности на 2-6 месяцев. Рыночные экстремумы он опережает не всегда, но тоже часто. В целом, PMI хорошо подходит, чтобы прогнозировать окончания крупных кризисов и рецессий.

Индикатор удобно смотреть на площадке TradingView. Для этого нужно:



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

103 тезиса из книги Trading in the Zone - Mark Douglas

103 тезиса из книги Trading in the Zone - Mark Douglas

Очередная порция букв: 

1. Трейдеры должны научиться мыслить категориями вероятностей, пожертвовав при этом всеми навыками, наработанными для достижения успеха во всех других сферах жизни.

2. Успеха добиваются лишь те трейдеры, которым присуща уверенность в действиях и доверие к самим себе, что в комплексе позволяет делать нужные вещи без каких-либо колебаний и сомнений. Их не пугает хаотичность рыночных движений. Они научились концентрировать внимание на информации, которая помогает определять возможности для получения прибыли, и не зацикливаются на новостях, подпитывающих страхи.

3. 
Необходимо осознать: необязательно знать, что случится на рынке в следующий момент времени, для того чтобы заработать деньги; может случиться все, что угодно; каждый момент на рынке отличается единообразием, поэтому любой конкретный случай и результат по-своему уникальны и неповторимы.


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

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