Постов с тегом "Торговые роботы": 5977

Торговые роботы


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

В этом разделе вы найдете самые актуальные записи по теме торговые роботы.

Хочу вернуться к истокам.

    • 23 декабря 2021, 17:06
    • |
    • 3Qu
  • Еще
Помнится, где-то до 2012 года у меня были простенькие автоматические ТС — несколько модифицированных МАшек, какие-то дополнительные расчеты — на вход в сделку всего-то 32 параметра, на выход немногим меньше. Параметры ТС наруливались за каких-то 2-3 дня. И я вполне понимал как и почему работает ТС.
Сейчас какие-то сложные расчеты, не оч понятные параметры с непонятным смыслом. Вроде, все пока работает, но уже изменить что-то или понять, почему это вдруг не сработало не оч реально.
И это как-то всё само образовалось — там упростили, здесь объединили, и если по отдельности это имело смысл, то итог — это уже нечто абстрактное, не оч поддающееся интерпретации и толкованию.
Вот, сегодня и подумал, что надо вернуться к истокам и сделать прозрачную ТС, с понятными функциями. Иначе, дальше можно вообще запутаться.
Сложно будет — за много лет многое из функционала уже объединено между собой, и срослось так, что не оч разорвешь. С одной стороны, быстро и удобно — ставишь готовый блок, и думать не надо — все уже изначально отлажено и сразу работает. А с другой…

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

Обновил индикатор наклонных уровней

Индикатор AT-obl_can для отрисовки наклонных уровней для quik
Обновил индикатор наклонных уровней
--[[
индикатор отрисовки наклонных уровней
Параметры:
delta - чувствиельность индикатора на волатильность в %
rep - количество повторений поиска конечного уровня
shif - сдвиг влево конечного бара 	
wt - признак наличия весового коэффициента =0 - без весового =1,2.. - свосовыми коф. чем ближе к концу тем больше
show=1,			
--]]
Settings=              
        {                          
            Name = "AT-obl_can",   -- название индикатора
            delta=2.0,             -- параметр индикатора  
            rep=10, 
            shif=0,		
            wt=1,	
            --hl=1,	
            show=1,
            line=                                     
                {                               
                    {  
                        Name = "ln1",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(255, 0, 0)
                    },
					{  
                        Name = "ln2",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(255, 0, 0)
                    }
                }
       }


function Init()

    vMin = 0
    vMax = 0
    vMinindex = 0
    vMaxindex = 0
    voldMinindex = 0
    voldMaxindex = 0

  return 2
end


function OnCalculate(index)

  rep = Settings.rep
  shif = Settings.shif
  wt = Settings.wt
  --hl = Settings.hl  

  sz = Size()-shif
  if Settings.show == 1 then   
  
  if index <= sz then 

  if index <= 1 then
    vMin = C(index)
    vMax = C(index)
    vMinindex = index
    vMaxindex = index
    voldMinindex = index
    voldMaxindex = index
    v = C(index)  
  else
         
    if voldMaxindex >= voldMinindex then
	 if vMin~=nil and C(index)~=nil then 
      if C(index) > (1 + Settings.delta/100)*vMin then
        vMin = C(index)  
        vMax = C(index) 
        vMaxindex = index
        voldMinindex = vMinindex 
        vFrom = vMinindex  
      else     
        if vMin > C(index) then
          vMin = C(index)
          vMinindex = index
          vFrom = voldMaxindex      
       else
          vFrom = vMinindex 
        end 
      end
	 end
    else
     
    if voldMaxindex <= voldMinindex then
	 if vMax~=nil and C(index)~=nil then 
      if C(index) < (1 - Settings.delta/100)*vMax then
        vMax = C(index) 
        vMin = C(index)  
        vMinindex = index
        voldMaxindex = vMaxindex
        vFrom = vMaxindex
      else 
        if vMax < C(index) then
          vMax = C(index)
          vMaxindex = index
          vFrom = voldMinindex    
       else  
          vFrom = vMaxindex          
        end
      end  
	 end
    end
    end
 
    --if vFrom~=nil then 
	--[[
    for i = vFrom, index do
	 
      k = (C(index)- C(vFrom))/(index- vFrom);
      v = i*k + C(index) - index*k
      SetValue(i, 1, v) 
    end --]] 
    --end
 
   if index == sz then
    for k = 1, 2 do
      vf = 1
	  vs = 0
	  if k == 1 then 
        if vMinindex < vMaxindex then
	      vf = vMinindex
		  vs = vMaxindex
		  up = 0
	    elseif vMinindex > vMaxindex then
	      vs = vMinindex
		  vf = vMaxindex
		  up = 1
	    end 	  
	  elseif k == 2 then  
        if voldMinindex < voldMaxindex then
	      vf = voldMinindex
		  vs = voldMaxindex
		  up = 0
	    elseif voldMinindex > voldMaxindex then
	      vs = voldMinindex
		  vf = voldMaxindex
		  up = 1
	    end 
	  end 
	  n = 0
	  xy = 0
	  x = 0
	  y = 0
	  xx = 0
	  m = 0
      for i = vf, vs do	 
	   if C(i) ~= nil then 
	    m = m +1
	    n = n + 1*(1+wt*m)
	    xy = xy + i*C(i)*(1+wt*m)
	    x = x + i*(1+wt*m)
	    y = y + C(i)*(1+wt*m)
	    xx = xx + i*i*(1+wt*m)
	   end 	
      end
	  if (n*xx - x*x) ~= 0 and n ~= 0 then 
        a = (n*xy - x*y)/(n*xx - x*x)	
        b = (y - a*x)/n	  
		
		for j = 1, rep do 		
	      n = 0
	      xy = 0
	      x = 0
	      y = 0
	      xx = 0
          m = 0 		  
		  for i = vf, vs do	 	
           if C(i) ~= nil then 		  
		    v = a*i + b
		    clc = 0
		    if up == 1 and C(i) >= v then 
	          clc = 1	  
		    end 
		    if up == 0 and C(i) <= v then 
		      clc = 1
		    end 
		    if clc == 1 then
			  m = m + 1
	          n = n + 1*(1+wt*m)
			  --[[
			  if up == 1 and hl == 1 then
                xy = xy + i*H(i)*(1+wt*m)			  
			  elseif up == 0 and hl == 1 then 
			    xy = xy + i*L(i)*(1+wt*m)
			  else --]]
	            xy = xy + i*C(i)*(1+wt*m)
			 -- end 	
	          
			  x = x + i*(1+wt*m)
              --[[   
			  if up == 1 and hl == 1 then
                y = y + H(i)*(1+wt*m)
			  elseif up == 0 and hl == 1 then 
			    y = y + L(i)*(1+wt*m)
			  else --]]
	            y = y + C(i)*(1+wt*m)
			 -- end 	
	          
	          xx = xx + i*i*(1+wt*m) 
		    end 
		   end 	
		  end --[[--]]
	      if (n*xx - x*x) ~= 0 and n ~= 0 and n >= 2 then 
            a = (n*xy - x*y)/(n*xx - x*x)	
            b = (y - a*x)/n	  		   --[[  --]]
		  end 
        end 
		for i = vf, sz do	 		  
		  v = a*i + b
		  if up == 1 and v >= C(vs) or up == 0 and v <= C(vs) then 
		    SetValue(i, k, v) 
		  end 
		end 		
 		
	  end 
	  
    end   	  
   end 
   end 
  end  
  end 
end

телеграм: t.me/autotradering




Сделаю индикатор

    • 23 декабря 2021, 11:47
    • |
    • Gomorra
  • Еще
Сделаю индикатор для любого символа, аналогичный этому:

disk.yandex.ru/d/F5kSkVYbq-5uBw

Нейросеть выбрала лучшие акции

На Санкт-Петербужской бирже, по мнению нейросети Investington, сейчас актуальны следующие позиции:

AA, оптимальная цена для покупки — 59.45$. Цель — 63.781$. Вероятность роста 74.6%
FGEN, оптимальная цена для покупки — 14.82$. Цель — 15.8776$. Вероятность роста 70.9%
NTLA, оптимальная цена для покупки — 126.24$. Цель — 136.2257$. Вероятность роста 69.5%


Результаты поста от 2021-11-24

ZG, купили по 56.95$. Продали 7 декабря по 61.3737$. Итоговый процент +7.77%
ACH, купили по 13.04$. Продали 7 декабря по 13.9199$. Итоговый процент +6.75%
OII, купили по 11.94$. Продали 22 декабря по 11.63$. Итоговый процент -2.6%

Итого: из 3 сигналов 2 оказались верными.


Что это такое? || Отчет

Как я потерял веру в человечество.

    • 22 декабря 2021, 15:59
    • |
    • 3Qu
  • Еще
Было это в году 11-м или 12-м. В эти годы Финам зачастил приглашать меня на свои семинары. Ходил только на 3 из них. Первый семинар в подвале Финама (они в основном там все проходили) был оч неплох. О чем конкретно, уже не помню, но в перерыве давали халявный кофе с булками и баунти-сникерсами. Такая теплая дружественная обстановка. В перерыве прибился ко мне какой-то мужичек, который что-то говорил. Задним числом, по косвенным признакам, подозреваю, что это был наш Хамстер.
Второй семинар был о том, как зарабатывать на рынке. Лектор телосложением напоминал маршала Жукова, но ничего конкретного сказано не было. На любой вопрос ответ был стандартный — это вы узнаете на курсе, который вы оплатите. Могли бы, хоть кофием угостить.
Третий семинар — это был монолог нашего АГ. До этого я его уже неск раз видел-слышал на семинарах РТС и конференциях по алготорговле. АГ у меня прочно ассоциировался с длинными хвостами.
На этот раз АГ рассказывал о своей торговой системе, не помню, приглашал ли он делать взносы и стать инвесторами.) Наверное сейчас, после многих лет, что-нибудь перевру, но основная суть его системы: проводим линию регрессии, определяем стандартное отклонение, задаем порог отклонения котировок от линии регрессии, и при превышении этого порога покупаем или продаем активы. Это называется — пороговое устройство. В теории сигналов — это самая простейшая и самая примитивная обработка, которую можно придумать.

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

Индикатор горизонтальных уровней

Индикатор ZIGZAGLEVELS горизонтальных уровней
Индикатор горизонтальных уровней
--[[
параметры: 
Procent - процент зигзага 
--]]
Settings={
Name="ZIGZAGLEVELS",
Procent=5.0,
levels=6,
delta=0.2,
    line=                                     
                {  
					{  
                        Name = "cur1",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(0,0, 255)
                    },				
					{  
                        Name = "cur2",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(0,0, 255)
                    },
					{  
                        Name = "cur3",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(0,0, 255)
                    },
					{  
                        Name = "cur4",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(0,0, 255)
                    },				
					{  
                        Name = "cur5",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(0,0, 255)
                    },
					{  
                        Name = "cur6",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(0,0, 255)
                    }					
                }
}

function Init()
  
  y1 = nil
  y2 = nil
  x1 = 1
  x2 = 1
  levelsy={}
  levelsx={}  
  cntlevels=0
      	
  return 6
  
end

function OnCalculate(index)

  de = Settings.Procent
  levels = Settings.levels
  delta = Settings.delta
  sz = Size()

  vl = C(index)
  if index <= 1 then 
	y1 = vl
    y2 = vl
	cntlevels=0
  else   
	  if C(index) > y1*(1+de/100) and y1 < y2 then 
	    x2 = x1
	    y2 = y1	
	    x1 = index 
	    y1 = C(index)	        
        cntlevels = cntlevels + 1		
		levelsx[cntlevels]=x2
	    levelsy[cntlevels]=y2        
	  end 	
	  if C(index) > y1 and C(index) > y2 then 
	    x1 = index 
	    y1 = C(index)	  			  
	  end 
	  	  		
	  if C(index) < y1*(1-de/100) and y1 > y2 then 
	    x2 = x1
	    y2 = y1
	    x1 = index 
	    y1 = C(index)	  		
		cntlevels = cntlevels + 1
		levelsx[cntlevels]=x2
	    levelsy[cntlevels]=y2		
	  end 	
	  if C(index) < y1 and C(index) < y2 then 
	    x1 = index 
	    y1 = C(index)	  			  
	  end 	  	  		
	end 	
  
  if x1 ~= index then 
    curfrom = x1
	curto = index
  else 
    curfrom = x2
	curto = x1
  end 
  
  if sz == index then 
   cnt = levels
   for k = 1, cnt do  
	for i = 1, index  do        
	  SetValue(i, k, nil)
    end     
   end 
  
  -- cnt = 3
   k = 0
   for j = cntlevels, 1, -1 do
    d = 0
    if levelsy[j] > C(index) then 
      d = levelsy[j] - C(index)
	end 
    if levelsy[j] < C(index) then 
      d = C(index) - levelsy[j]
	end 	
	if d < delta*C(index) and d > 0 then 
	 k = k + 1
	 if k <= cnt then 	   
	   y = levelsy[j]   
	   for i = levelsx[j], index  do        	     
	     SetValue(i, k, y)
       end   
	 end
	end 
   end

  --[[
   k = 0
   for j = cntlevels, 1, -1 do
    d = 0
    if levelsy[j] < C(index) then 
      d = C(index) - levelsy[j]
	end 	
	if d < 0.2*C(index) and d > 0 then 	 
	 if k <= cnt then 
	   k = k + 1
	   y = levelsy[j]   
	   for i = levelsx[j], index  do        	     
	     SetValue(i, k+3, y)
       end   
	 end
	end 
   end
   --]]
   
  end   

 
  
end

телеграм: t.me/autotradering

Анализ лчи-сделок makdi067

Имеется красивейшая эквити:
Анализ лчи-сделок makdi067
Эта эквити интересна не только тем, что у неё высокий шарп, но и тем, что она получена не на копеечном счете.
На стартовые 30 млн заработано 11 млн рублей.

Это опционная торговля, которая велась по трём базовым активам: RI, Si, BR.

Что я сделал для анализа? Скачал все сделки за конкурс и немного подшаманил файлик.
Видимо, там были открытые позиции на начало конкурса ну и остались открытые на момент окончания.
Чтобы всё закрывалось в ноль для финреза, я добавил в начала и в конец файла несколько строк с виртуальными сделками.

Тогда получилась такая картина.
Финрез по бренту (опционы+БА) порядка 230 долларов.
Финрез по сишке (опционы+БА) порядка 650 тыс рублей.
Финрез по ришке (опционы+БА) порядка 7,5 млн пунктов.
То есть можно сказать, что вся эквити получена на ришке.

Что меня интересовало?
1. Как получено?
2. Насколько устойчиво и насколько масштабируемо?



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

Нейросеть выбрала лучшие акции

На Санкт-Петербужской бирже, по мнению нейросети Investington, сейчас актуальны следующие позиции:

DDS, оптимальная цена для покупки — 244.65$. Цель — 264.4293$. Вероятность роста 82.1%
W, оптимальная цена для покупки — 202.55$. Цель — 215.1061$. Вероятность роста 74.6%
SWBI, оптимальная цена для покупки — 17.51$. Цель — 18.7278$. Вероятность роста 74.5%


Результаты поста от 2021-11-23

ZEN, купили по 91.83$. Продали 30 ноября по 98.319$. Итоговый процент +7.07%
ENTA, купили по 83.11$. Продали 26 ноября по 90.0815$. Итоговый процент +8.39%
MUR, купили по 28.93$. Продали 21 декабря по 25.175$. Итоговый процент -12.98%

Итого: из 3 сигналов 2 оказались верными.


Что это такое? || Отчет

225 публичных торговых сигналов: счет моих роботов 135:90

    • 21 декабря 2021, 17:10
    • |
    • AlexChi
  • Еще

225 публичных торговых сигналов: счет моих роботов 135:90


Закрылись еще две публичные сделки моих роботов:

  • Робот PVVI, купивший акции Сургутнефтегаза (SNGS15.12.2021 по 39.81 рубля, закрыл сделку по стоп-лоссу, цена продажи 38.01 рублей.
  • Робот PVVI, купивший акции Мечела (MTLR16.12.2021 по 115.01 рубля, закрыл сделку по стоп-лоссу, цена продажи 108.41 рублей.

На текущий момент было 225 публичных сигналов на покупку. 76 от робота AVP118 от робота PVVI и 31 от робота CandleMax. Вот ссылки:



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

Скрещиваем две стратегии: пирамидинг и усреднение. Robot-Scalper.ru

Сегодня мы выдвинем несколько гипотез и проверим их на бэктестах.

Скрещиваем две стратегии: пирамидинг и усреднение. Robot-Scalper.ru

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

Как мы знаем, существует 3 фазы рынка: растущий тренд, падающий тренд и флет.

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



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

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