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

по

Пострадавшие на WTI

    • 22 апреля 2020, 14:28
    • |
    • Nicker
  • Еще
Требуйте закрытие по 10.01$ — это цена закрытия на бирже CME майского контракта
Американцев расчитали по 10.01, а наших физиков по -37$.
Вам не кажется это странным?
Выгодоприобретатели это маркетмейкеры биржы они заработали (47.01$ на контракт) 20млн$  — то есть это ваши же брокера (привет мошенники!) любимые.
Пострадавшие на WTI


Пострадавшие на WTI

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

Эксперимент: торговая система на базе глубокого обучения от начала до реальных торгов.

Всем привет,

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

В общем вот видюшка для затравки



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

STATDIV3 доработанный индикатор для quik на языке lua

если индикатор больше 0, то покупаем, если ниже то продаем

скачать можно здесь:dropmefiles.com/09FCu
как устанавливать смотрите предыдущие статьи: https://smart-lab.ru/blog/528424.php
название STATDIV3 это доработанный STATDIV


поведение индикатора на графике:
STATDIV3 доработанный индикатор для quik на языке lua


сам код индикатора:
Settings={
Name="STATDIV3",
period=50,
  line=
  {
    {
      Name="curve",
      Color=RGB(0,0,255),
      Type=TYPE_LINE,
      Width=1
    },
    {
      Name="line",
      Color=RGB(255,0,0),
      Type=TYPE_LINE,
      Width=1
    },
    {
      Name="MA",
      Color=RGB(0,0,255),
      Type=TYPE_LINE,
      Width=1
    },
    {
      Name="MA2",
      Color=RGB(0,128,128),
      Type=TYPE_LINE,
      Width=1
    },
    {
      Name="line2",
      Color=RGB(0,0,255),
      Type=TYPE_LINE,
      Width=1
    },
    {
      Name="line3",
      Color=RGB(0,128,128),
      Type=TYPE_LINE,
      Width=1
    }
  } 
}

function Init()
  cache_ind={}
  cache_ind2={}
  cache_ind3={}
  return 2
end

function OnCalculate(index)
  if index < Settings.period then
    return nil
  else
    local sum1=0
    local sum2=0
    local sum0=0
    local sum02=0
    local sum03=0
    for i=index-Settings.period+1, index do  
    do
      if C(i) > O(i) then
        sum1 = sum1 + C(i) - O(i)
        sum2 = sum2 + C(i) - O(i)
      else
        sum2 = sum2 + O(i) - C(i)
      end  
    end 
    cache_ind[index] = sum1/sum2    
    if index > Settings.period+12 then 
--[[
      sum0 = 1*cache_ind[index]+
            (1)*cache_ind[index-1]+
            (1)*cache_ind[index-2]+
            (1)*cache_ind[index-3]+
            (1)*cache_ind[index-4]+
            (1)*cache_ind[index-5]+
            (1)*cache_ind[index-6]+
            (1)*cache_ind[index-7]+
            (1)*cache_ind[index-8]+
            (1/2)*cache_ind[index-9]+
            (1/3)*cache_ind[index-10]+
            (1/4)*cache_ind[index-11]+
            (1/5)*cache_ind[index-12]
--]]
      sum0 = 1*cache_ind[index]+
            (1/2)*cache_ind[index-1]+
            (1/3)*cache_ind[index-2]+
            (1/4)*cache_ind[index-3]+
            (1/5)*cache_ind[index-4]+
            (1/6)*cache_ind[index-5]+
            (1/7)*cache_ind[index-6]+
            (1/8)*cache_ind[index-7]+
            (1/9)*cache_ind[index-8]+
            (1/10)*cache_ind[index-9]+
            (1/11)*cache_ind[index-10]+
            (1/12)*cache_ind[index-11]+
            (1/13)*cache_ind[index-12]

    end
--[[
    sum0 = sum0/(1+1+1+1+1+1+1+1+1+1/2+1/3+1/4+1/5)
--]]
    sum0 = sum0/(1+1/2+1/3+1/4+1/5+1/6+1/7+1/8+1/9+1/10+1/11+1/12+1/13)

       
    cache_ind2[index] = sum0
    if index > Settings.period+50 then   
      sum02 = 1*cache_ind2[index]+
            (1)*cache_ind2[index-1]+
            (1)*cache_ind2[index-2]+
            (1)*cache_ind2[index-3]+
            (1)*cache_ind2[index-4]+
            (1)*cache_ind2[index-5]+
            (1)*cache_ind2[index-6]+
            (1)*cache_ind2[index-7]+
            (1/2)*cache_ind2[index-8]+
            (1/3)*cache_ind2[index-9]+
            (1/4)*cache_ind2[index-10]+
            (1/5)*cache_ind2[index-11]+
            (1/6)*cache_ind2[index-12]
--[[
      sum02 = 1*cache_ind2[index]+
            (1/2)*cache_ind2[index-1]+
            (1/3)*cache_ind2[index-2]+
            (1/4)*cache_ind2[index-3]+
            (1/5)*cache_ind2[index-4]+
            (1/6)*cache_ind2[index-5]+
            (1/7)*cache_ind2[index-6]+
            (1/8)*cache_ind2[index-7]+
            (1/9)*cache_ind2[index-8]+
            (1/10)*cache_ind2[index-9]+
            (1/11)*cache_ind2[index-10]+
            (1/12)*cache_ind2[index-11]+
            (1/13)*cache_ind2[index-12]
--]]
    end
    sum02 = sum02/(1+1+1+1+1+1+1+1+1/2+1/3+1/4+1/5+1/6)
--[[
    sum02 = sum02/(1+1/2+1/3+1/4+1/5+1/6+1/7+1/8+1/9+1/10+1/11+1/12+1/13)
--]]
    cache_ind3[index] = sum0 - sum02
    if index > Settings.period+50 then   
      sum03 = 1*cache_ind3[index]+
            (1/2)*cache_ind3[index-1]+
            (1/3)*cache_ind3[index-2]+
            (1/4)*cache_ind3[index-3]+
            (1/5)*cache_ind3[index-4]+
            (1/6)*cache_ind3[index-5]+
            (1/7)*cache_ind3[index-6]+
            (1/8)*cache_ind3[index-7]+
            (1/9)*cache_ind3[index-8]+
            (1/10)*cache_ind3[index-9]+
            (1/11)*cache_ind3[index-10]+
            (1/12)*cache_ind3[index-11]+
            (1/13)*cache_ind3[index-12]
    end
    sum03 = sum03/(1+1/2+1/3+1/4+1/5+1/6+1/7+1/8+1/9+1/10+1/11+1/12+1/13)

  end  

  if sum1/sum2 > 0.5 and sum03 > 0 then
    sum1 = sum03
  else
    if sum1/sum2 < 0.5 and sum03 < 0 then
      sum1 = sum03 
    else 
      sum1 = 0
    end
  end

  return sum1, 0
end

end
 всем удачи!
  • обсудить на форуме:
  • Quik Lua

Вот он мой бэктестер-оптимизатор, моя прееелесть.

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


Выкатил новую версию.

 

Настоящий мужской оптимизатор конечно же должен быть консольным. Этот красавчик быстр – 10 лет 5-минуток на простой стратегии вместе с вычислением всяких там PF, RF 0,3 секунды. И это на одном потоке! (с многопоточностью, к слову, пока не смог подружить, но заложил такую возможность).

Бэктестер берет задания из csv файла и пашет. Т.е. на данный момент задания на оптимизацию задаются в момент создания файла с заданиями, решил поменять план оптимизации – меняю файл – меняется дальнейшая оптимизация. Т.е. по факту сейчас план на оптимизацию предустановленный, но легко прикрутить в дальнейшем оптимизацию с обратной связью на результаты предыдущих бэктестов. Меня всегда смущали стандартные оптимизаторы в этой части – где перебирается один параметр, или несколько строго итерационно, но я не мог задать явно другие алгоритмы перебора или в общем случае даже не перебора, а «изменения» значений. А здесь могу: т.е., могу за раз закинуть задания сразу на нужное количество гипотез, хочу посмотреть, как стратегия себя ведет между тикерам – не трогаю ничего, меняю только тикер, хочу проверить как ведет себя между тайм-фреймами – меняю только тайм-фреймы и т.д., т.е. минут за 5-10 во всемогущем экселе можно создать файл с заданиями для нужного набора гипотез. Потом когда бэктестер отработает – берешь эксельку и дата-майнишь данные.

Все-таки когда ты точно знаешь, чего хочешь, свой бэктестер это кайф! Нужна скорость, но не нужна какая-то функциональность – супер, не делаешь тормозящую функциональность, получая преимущество в скорости, интересует какая-то конкретная парадигма в оптимизации – отлично, пилишь архитектуру именно под парадигму, без оглядки на стандартные «лучшие практики», «модные мнения» и прочие «а вот я так делаю, а ты какую-то херню».

Более менее ООПшная прога получилась, так что есть надежда, что можно мяса при необходимости накрутить с контролируемым уровнем сложности и поддерживаемости.

Если вдруг кто-то собирался завидовать – не надо, вам бы не понравился мой оптимизатор. Думаю, он будет нравиться только мне! :)


Гипотезы о рыночном базисе

Дисклэймер: далее идет скучный лонгрид.

В 2004-2008 годах мы искали естественное для рынка разложение. Был перебран широкий арсенал от SVD и SSA до спектральных методов типа Фурье-Хаар-вейвлет. Мой кусочек работы был связан с Фурье, Уолшем и вейвлетами. В качестве оценки естественности мы исходили из наивного допущения: что лучше работает, то и естественнее. Лучше — значит обладает лучшими прогнозными свойствами. Т.е., по-простому, какой из базисов позволяет подальше заглянуть (по-честному) в будущее, тот и лучший, стало быть, самый естественный.

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

На 90% рыночным материалом для исследований были данные основных валютных пар (FOREX).


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

Как я логи на RGMII подымал и выводил их в ModelSim

Введение

     Так получилось, стал я обладателем борды, на которой есть все, кроме JTAG. Это означало, что такого софта как SignalTAP у меня нет. Отлаживать не получится. Подымать карту в слепую то еще занятие. Это как копаться в черном ящике в темной комнате. Было принято решение, начать писать логи на карте и передавать их в каком нибудь формате через Ethernet на компьютер. На основе этого был получен некоторый опыт, описать который захотелось. Сильно особо не критикуйте, эту тему я изучаю полностью с нуля, давалось и дается fpga (как и схемотехника) очень тяжело, когда нет специализированного образования.

ETHERNET

     Вообще ethernet — это технология передачи данных. Жестко стандартизирована по IEEE. Подстандартов сейчас очень много, технологии не стоят на месте. Наверное слышали 10Base-T (10Мбит/сек), 100Base-T, 1000Base-T(1Гигабит/сек), ну или как на нашей бирже 10GBase… Самая сложность реализации на железе этих стандартов — это реализация физического уровня, то есть как передаваемые вами байты в сеть преобразовывать в электрические сигналы, используя кодировку и тд. Если поднять с нуля 10Base-T не представляется сложным, делал это без проблем даже без специальных magnetic на разъеме RJ45, то скорости повыше это задачка уже так себе. Ну еще можно без каких либо сильных сложностей поднять 100Мбит. 

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

Стакан на графике | LUA QUIK

Просто, коротко, минималистично.

Стакан на графике | LUA QUIK


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

Параметрическое оптимальное f при нормальном распределении: Разбор 3 главы книги Ральфа Винса “Математика управления капиталом”

Трейдинг

Продолжение краткого изложения книги Ральфа Винса “Математика управления капиталом” с комментариями DTI.

Сегодня разбираем третью главу “Параметрическое оптимальное f при нормальном распределении”. В ней рассматриваются различные виды распределений вероятности и методы их анализа. Также описывается нахождение оптимального f при условии нормального распределения.

Читать обзор 1 | 2



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

Грааль существует

Все в формуле
Грааль существует
отсюда.

А теперь от слов к делу:
1) значение показателя должно быть как можно больше. этого можно добиться увеличением числителя и уменьшением знаменателя.
2) числитель мы увеличиваем только тогда, когда выбираем самое «чистое» движение, т.е. среднее значение приращения цены в сделке у нас как можно больше по отношению к среднему приращению цены вне сделки. т.е. мы вырезаем самый жир из рынка.
3) знаменатель мы уменьшаем тогда, когда уменьшаем подкоренное выражение, а именно его первую составляющую, которая отвечает за среднеквадратическое отклонение приращений цены в сделке (на это мы можем влиять, а 2я составляющая это рынок). т.е. опять, чем чище движение мы берем, тем лучше. тем неслучайнее наш результат.
4) естественно чем больше у нас сделок в выборке самой торговой системы и стабильнее среднеквадратическое отклонение, тем лучше. на длительном промежутке времени у нас наше преимущество должно оставаться. а не теряться через какое-то время и как следствие этого происходит ухудшение среднеквадратического отклонения и падает итоговый показатель.

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

алго - какие фильтры я использую и какие уже нет

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


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

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