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

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


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

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

Критическая масса и критическое значение аналогичных стратегий


В первой части мы анализировали критический порог статистической значимости для сложных композитных систем на примере модели AR. В этот раз мы попытаемся быть чуть ближе к делу и проведем тесты для набора трендовых систем на базе Simple Moving Average. В качестве примера возьмем самый ликвидный фьючерс — белый шум, для которого заранее известно, что он абсолютно «не торгуемый» и попытаемся всё же что-нибудь под него подобрать из соображений трендовости «больших денег» и саморефлексии участников торгов. 

Сгенерируем набор из 10 стратегий с периодом 10*i, i=1,2,...10. 

Nstr=10; 
x=randn(10000,1); 
y=[x(2:end);0]; 
M=zeros(10000,Nstr);
for i=1:Nstr; 
    M(:,i)=tsmovavg(x,'s',10*i,1); 
end; 
M(1:Nstr*10,:)=0; R=M.*y;   

И оценим порог 70% статистической значимости коэффициента шарпа стратегии без учета размерности набора стратегий: 

Критическая масса и критическое значение аналогичных стратегий

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

Лайфхаки для алготрейдинга: что важно учитывать?


Лайфхаки для алготрейдинга: что важно учитывать?


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

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

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

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



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

Биткоин против мувинга, кто кого.

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

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

Индикатор зигзага, показывающий периоды колебания

ZIG_MA_v2  строится как зигзаг относительно EMA
Индикатор зигзага, показывающий периоды колебания

--[[
параметры: 
Procent - процент зигзага 
--]]
Settings={
Name="ZIG_MA_v2",
Procent=2.0,
ln=50,
line=                                     
                {  
					{  
                        Name = "ZIG_MA",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(0,0, 0)
                    },
					{  
                        Name = "ZIG_MA2",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,0, 255)
                    }	
                }
}

function Init()
  ema = {}
  
  y1 = nil
  y2 = nil
  x1 = 1
  x2 = 1
       
  return 2
  
end

function OnCalculate(index)

  de = Settings.Procent
  ln = Settings.ln
  
  if index <= 1 then 
	ema[index] = C(index)
  else 
    ema[index] = (ema[index-1]*(ln-1) + C(index))/ln
  end   
  
  if ln==0 then   
    pr = C(index)
  else 
    pr = C(index)-ema[index]
  end 

  vl = C(index)
  if index == 1 then 
	y1 = vl
    y2 = vl
  else   
	  if pr > y1+C(index)*de/100 and y1 < y2 then 
	    x2 = x1
	    y2 = y1	
	    x1 = index 
	    y1 = pr		
      else 
	    if pr > y1 and y1 >= y2 
		then 
	      x1 = index 
	      y1 = pr	  			  
	    end 		
	  end 	

	  	  		
	  if pr < y1-C(index)*de/100 and y1 > y2 then 
	    x2 = x1
	    y2 = y1
	    x1 = index 
	    y1 = pr		
      else 
	    if pr < y1 and y1 <= y2 
		then 
	      x1 = index 
	      y1 = pr	  			  
	    end 		
	  end 	
	  	  		
	end 	
  
  if x1 ~= index then 
    curfrom = x1
	curto = index
  else 
    curfrom = x2
	curto = x1
  end 

  if curto ~= curfrom and curfrom ~= nil and curto ~= nil then 
    if C(curto) ~= nil and C(curfrom) ~= nil then 
      k = (C(curto)- C(curfrom))/(curto- curfrom)  
      for i = curfrom, index  do
        curv = i*k + C(curto) - curto*k  		          
	    SetValue(i, 1, curv)
      end   	
	end 
  end 
  
  return vl, ema[index]
 
  
end

Сбер. Избушки держат цены. Толпа продает, крупняки тоже, но немного.

24 мая.
Факты. Сбер купили 350мр (до 10-30), продали 350мр. Фьючерс купили 350мр, продали 350мр. АДР в нулях.

Интерпретация. Амеры невнятно растут, простое давление денег (ФРС печатает без устали). Но «чувствуется усталость», готовится слив. ИМХО.
На РЦБ РФ небольшие продажи. Все ждут «указаний от амеров». А их пока нет. Если и дальше не будет сигналов амеров, начнется резкое снижение. Время с 14-30. ИМХО тоже.

Прогноз. Прежний. Цели 286-283. Срок 2-3 дня.

Подробности — Телеграм, t.me/sberanaliz


Критическая масса и критическое значение


Проведем небольшой тест — возьмем один случайный фьючерс, приращения которого представлены временным рядом случайных чисел, и набор случайных стратегий, представленный множеством N временных рядов случайных чисел (он же матрица признаков, фичей, пространство предикторов и т.д.) и попытаемся найти из этого большого набора тот признак, который будет лучше всего говорить нам когда покупать фьючерс, а когда продавать. Что это будет, мультипликатор P/E, фаза луны или MACD — не важно, главное чтобы на выходе получилась «идея» или, как ещё говорят, «грааль».


Хорошо известно, что случайная стратегия примененная к случайному инструменту даст случайное эквити, которое будет иметь гауссову плотность распределения коэффициента шарпа  с математическим ожиданием  0 и среднеквадратичным отклонением 


Критическая масса и критическое значение  

где L — число известных значений случайного фьючерса. 


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

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

Победим систему. Торговля из Wealth-Lab 7 через Quik живи!

Велс позволяет тестить торговые стратегии, но предусмотрены функциональные возможности и для торговли. Имеется API для реализации коннекторов к брокерскому ПО. Один из способов запилить коннеткор – сподвигнуть разработчиков это сделать. Они сделали виш-лист, куда можно закидывать задачи, ребята гибко смотрят на востребованность (по кол-ву лайков) и берут в работу самый востребованные запросы. Хотя вот прям недавно намекнули, что вообще-то за ними последнее слово здесь и могут и не взять в работу.

 

В общем есть в виш-листе задача запилить коннектор для Квика. Надо совсем немного лайков чтобы поднять задачу достаточно чтоб они её взяли в работу. Нужно зарегаться на форуме Wealth-lab 7 (ну или просто зайти если акк есть) и лайкнуть этот пост (который по совместительству запрос на разработку коннектора):

https://www.wealth-lab.com/Discussion/Request-a-broker-provider-for-Russian-market-QUIK-5473

 

Кому этот коннектор и сам велс могут быть интересны. Всем алго-трейдерам. И не очень алго – имеется возможность писать стратегии через конструктор – без кодинга, тестировать эти стратегии и потом вот торговать (если будет коннектор к Квику, то и Россию). По деньгам 300 или 400 баксов в год, что, кажется, дешевле выходит, чем TSLab.

 

Если интересна эта тема – лайкайте пост по ссылке. Если какие-то вопросы – пишите, я в теме.

Коннектор к Квику живи!


Кто такие программисты? С чего начать учить C#

Продолжаю писать видео для начинающих программистов и алготрейдеров.

В этот раз про то с чего начать учить C# и о том кто такие программисты.



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

Разгон $1->$1000. Хроника... [Пост 16]

Предыдущий пост

1. Что было сделано?

Ничего не делал. Смотрел...
Был прыжок доходности по портфелю более 45%, но просадка к концу недели нивелировала это достижение. Вот думаю — может прийти к фиксации дохода по портфелю?
Прошло 5 недель.

2. В каком состоянии сейчас?

Название (ссылка на мониторинг) Время жизни, дней Доход, % Старт, USC Текущий баланс, USC Максимальная просадка, %
Стратегия 1 26 13.3 400.0 453.4 52
Стратегия 2 23 52.8 200.0 305.66 53
Стратегия 3 23 27.4


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

2048

Нашел у себя тексты некогда популярной игрушки 2048, на скорую руку адаптировал к квику. Ловите, улыбайтесь )

local stopped

game = {
	cell = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
	best = 0,
--	key = nil,
-- t = nil,
	colors =	{	[0]	= QTABLE_DEFAULT_COLOR,
					[2]	= RGB(248,248,255),
					[4]	= RGB(255,239,213),
					[8]	= RGB(255,222,173),
					[8]	= RGB(255,218,185),
					[16]	= RGB(205,92,92),
					[32]	= RGB(255,69,0),
					[64]	= RGB(238,238,0),
					[128]	= RGB(238,118,33),
					[256]	= RGB(255,160,122),
					[512]	= RGB(255,0,0),
					[1028]= RGB(238,18,137),
					[2048]= RGB(139,0,0)
				},
	
	create_table =
		function(self)
			self.t = AllocTable()
			for i = 1,4 do
				AddColumn(self.t, i, "", true, QTABLE_INT_TYPE, 10)
			end
			CreateWindow(self.t)
			SetWindowPos(self.t,100,100,300,130)
			for i = 1,4 do
				InsertRow(self.t,i)
			end
			SetTableNotificationCallback(self.t, 		
												  function(_t, msg, _p, key)
													if msg == QTABLE_VKEY then
														self.key = key
													elseif msg == QTABLE_CLOSE then
														stopped = true
													end
												  end)
			SetWindowCaption(self.t, "2048 game by www.bot4sale.ru")
		end,
	
	draw = 
		function(self)
			local cell = self.cell
			for row=1,4 do
				for column=1,4 do
					local value = cell[(row-1)*4 + column]
					SetCell(self.t,row,column,value==0 and "" or tostring(value))
					SetColor(self.t,row,column,game.colors[value],0,game.colors[value],0)
				end
			end
	  end,
  
	incr = 
		function(self)
			local t,open = self.cell,{}
			for i=1,16 do 
				if t[i]==0 then 
					open[#open+1]=i 
				end
			end
			t[open[math.random(#open)]] = math.random()<0.1 and 4 or 2
		end,
  
	pack = 
		function(self,ofr,oto,ost,ifr,ito,ist)
			local t = self.cell
			for outer=ofr,oto,ost do
				local skip = 0
				for inner=ifr,ito,ist do
					local i = outer+inner
					if t[i]==0 then 
						skip=skip+1 
					else 
						if skip>0 then 
							t[i-skip*ist],t[i],self.diff = t[i],0,true 
						end 
					end
				end
			end
		end,
  
	comb = 
		function(self,ofr,oto,ost,ifr,ito,ist)
			local t = self.cell
			for outer=ofr,oto,ost do
				for inner=ifr,ito-ist,ist do
					local i,j = outer+inner,outer+inner+ist
					if t[i]>0 and t[i]==t[j] then 
						t[i],t[j],self.diff,self.best = t[i]*2,0,true,math.max(self.best,t[i]*2) 
					end
				end
			end
		end,
  
	move = 
		function(self,dir)
			local loopdata =	{	{0,12,4,1,4,1},
										{0,12,4,4,1,-1},
										{1,4,1,0,12,4},
										{1,4,1,12,0,-4}
									}
			local ofr,oto,ost,ifr,ito,ist = table.unpack(loopdata[dir])
			self:pack(ofr,oto,ost,ifr,ito,ist)
			self:comb(ofr,oto,ost,ifr,ito,ist)
			self:pack(ofr,oto,ost,ifr,ito,ist)
		end,
  
	full = 
		function(self)
			local t = self.cell
			for r=0,12,4 do
				for c=1,4 do
					local i,v = r+c,t[r+c]
					if (v==0) or (c>1 and t[i-1]==v) or (c<4 and t[i+1]==v) or (r>0 and t[i-4]==v) or (r<12 and t[i+4]==v) then
						return false
					end
				end
			end
		return true
	end,
  
	play = 
		function(self)
			math.randomseed(os.time())
			self:incr()
			self:incr()
			while not stopped do
				self:draw()
				if self.best == 2048 then 
					message("Поздравляю!\n\nwww.bot4sale.ru") 
					break 
				end
				if self:full() then 
					message("Game Over!")
					break 
				end
				
				self.diff = false
				if		 self.key==0x25 then 		-- Left
					self:move(1)
				elseif self.key==0x27 then			-- Right
					self:move(2)
				elseif self.key==0x26 then 		-- Up
					self:move(3)
				elseif self.key==0x28 then			-- Down
					self:move(4)
				end
				self.key = nil
				if self.diff then 
					self:incr() 
				end
				sleep(100)
			end
		end,
		
	rules = 
		function()
			message("Правила игры:\n\nВ каждом раунде появляется плитка номинала «2» или «4». Нажатием стрелки игрок может скинуть все плитки игрового поля в одну из 4 сторон. Если при сбрасывании две плитки одного номинала «налетают» одна на другую, то они превращаются в одну, номинал которой равен сумме соединившихся плиток. После каждого хода на свободной секции поля появляется новая плитка номиналом «2» или «4». Если при нажатии кнопки местоположение плиток или их номинал не изменится, то ход не совершается. Если в одной строчке или в одном столбце находится более двух плиток одного номинала, то при сбрасывании они начинают соединяться с той стороны, в которую были направлены.\nЛевый столбец с номерами строк участия в игре не принимает.\n\ns_mike@rambler.ru")
		end
}
local game = game

--------------------------------------------------

function main()
	game:create_table()
	game:rules()
	game:play()
end

 

 Оригинал здесь


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