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

по

Судак-Тудак (робот) 1.1

Судак-Тудак (робот) 1.1

Слегка доработал простой бот по усреднению и скальпингу Bollinger Bands для QUIK от Turbo Pascal, выложенный тут.


1) Я разделил алго на 2 отдельных: на лонг и на шорт. В оригинале был только лонг и я его использовал для акций. Версия на шорт торгует Mini MIX фьючерс (вы можете любой набор фьючей настроить)
2) Добавил проверку на поступление котировок. Без неё утром выключался бот, приходилось стартовать руками.
3) В версии на шорт добавил усреднение с коэффициентом. Каждый следующий уровень будет на fibo больше предыдущего.
4) Добавил временные рамки (стартуем с 10:00), чтобы не работал когда рынок закрыт.
Хотел подсчёт прибыли добавить, но это уже сложновато сводить концы с концами, поскольку набор и сброс неравномерен. Тут без программиста не справиться.

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

О математике в трейдинге

Прочитал у известного персонажа вот такое заблуждение 

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

Написана полная ерунда. Позволю себе процитировать фразу, с которой я начинал свой курс «Алгоритмическая торговля. Научный подход» :
Математика в общем случае не даст Вам ответа на вопрос КАК ДЕЛАТЬ? Но она даст Вам ответ на другой важный вопрос ЧТО ДЕЛАТЬ, А ЧТО НЕ ДЕЛАТЬ?

Что из этого следует? А то, что математика не может быть «эффективна» в поиске паттернов, она лишь может точно сказать: найденные Вами паттерны — это реальные закономерности или чушь собачья.

Как правильно заметил мальчик BuyBuy в своём топике: самый простой способ это сделать, это проверить свои паттерны на качественно (!) смоделированом случайном блуждании и если окажется, что и там все лучше самой доходной пассивной стратегии, то значит это чушь собачья.

Как сделать качественное случайное блуждание для последовательности свечей реального актива?

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

Индикатор Zigzag_channel_inc с добавлением наклонных уровней

Индикатор Zigzag_channel_inc с добавлением наклонных уровней


--[[
индикатор: 
канал на последнем зигзаге
индикатор строит канал по зигзагу, показывает слом тренда при выходе цены за границы канала
параметры:
  Procent - величина зигзага в %
  k - коэффизиент ширины канала
  Ext - =0-канал стоится по средним =1-канал стоится по экстремуму
--]]
Settings=              
        {                          
            Name = "Zigzag_channel_inc",   -- название индикатора
            Procent=5,               -- величина зигзага в % 
            k=2,			         -- коэффизиент ширины канала
            Ext=1, -- =0-канал стоится по средним =1-канал стоится по экстремуму
            shif=0,			
            line=                                     
                {                               
                    {  
                        Name = "zigzagline",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(120,90, 140)
                    },
					{  
                        Name = "cur1",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,0, 0)
                    },
					{  
                        Name = "cur2",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(0,200, 200)
                    },
					{  
                        Name = "cur3",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(200,200, 0)
                    },
					{  
                        Name = "cur4",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,0, 0)
                    },
					{  
                        Name = "cur5",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(0,0, 255)
                    },
					{  
                        Name = "cur6",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(255,0, 0)
                    },
					{  
                        Name = "cur7",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(255,0, 0)
                    },
					{  
                        Name = "cur8",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(255,0, 0)
                    },
					{  
                        Name = "cur9",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(255,0, 0)
                    },
					{  
                        Name = "cur10",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(255,0, 0)
                    },
					{  
                        Name = "cur11",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(0,0, 0)
                    },
					{  
                        Name = "cur12",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(0,0, 0)
                    }
                }
       }


function Init()

  y1 = nil
  y2 = nil
  y3 = nil  
  y4 = nil  
  x1 = 1
  x2 = 1
  x3 = 1
  x4 = 1  
  
  oldindex = 1
  
  a_01 = 0
  b_01 = 0
  a_02 = 0
  b_02 = 0
  
  vminus_01 = 0
  vplus_01 = 0  
  vminus_02 = 0
  vplus_02 = 0  
  vFrom_01 = 1
  vTo_01 = 1
  vFrom_02 = 1
  vTo_02 = 1
  
  vminus = 0
  vplus = 0
  vminus_n = 0
  vplus_n = 0  
  
  ret = 0
  
  last_ind = 1

  v1=nil
  v2=nil
  v3=nil
  v4=nil
  v5=nil
  v6=nil
  v7=nil
  v8=nil
  v9=nil
  v10=nil
  v11=nil
  v12=nil
  v13=nil  
  
  return 13
end

function recalcline(num, index, rec)

 if index == Size()-sh and rec == 0 then
   for i = 1, index do
     if m == 1 then 		
	   SetValue(i, 3, nil)
	   SetValue(i, 4, nil)
	 end
     if m == 2 then 		
	   SetValue(i, 6, nil)
	   SetValue(i, 7, nil)
	 end 	 
   end 
 end 

 if index == Size()-sh or rec == 1 then
	
  if num == 1 then 
	  vFrom = 0 --[[ --]] 
	  vTo = 0
	if x3 < x2 then 
	    vFrom = x3
	    vTo = x2
	  else
	    vFrom = x2
	    vTo = x3
	  end 
  end
  if num == 2 then 
	  vFrom = 0
	  vTo = 0
	  if x1 < x2 then 
	    vFrom = x1
	    vTo = x2
	  else
	    vFrom = x2
	    vTo = x1
	  end 
  end    
  
      if vFrom < 1 then
	    vFrom = 1
	  end 	
  
	  a1 = 0
	  a2 = 0
	  a3 = 0
	  a4 = 0
	  n = 0
	  a = 0
	  b = 0
      for i = vFrom, vTo do
        n=n+1	  
	    a1 = a1+i*C(i)
	    a2 = a2+i
	    a3 = a3+C(i)
	    a4 = a4+i*i	
	  end
	  if((n*a4 - a2*a2) ~= 0) then	  
	  
	  -- if oldindex ~= Size() then
	   a = (n*a1 - a2*a3)/(n*a4 - a2*a2)
	   b = (a3 - a*a2)/n

	   vminus = 0
	   vplus = 0
	   vminus_n = 0
	   vplus_n = 0
       for i = vFrom, index do
        y = a*i + b		
		if C(i) < y and i <= vTo then
		  if ex == 0 then 
	        vminus = vminus + y - C(i)
            vminus_n = vminus_n + 1	
		  else 
		    if i == vFrom then 
			  vminus = 0
			end
            if y-C(i) > vminus then
              vminus = y-C(i) 			
            end				
		  end 
        end		  
		if C(i) > y and i <= vTo then
		  if ex == 0 then 
	        vplus = vplus + C(i) - y
	        vplus_n = vplus_n + 1
		  else 
		    if i == vFrom then 
			  vplus = 0
			end		  
            if C(i)-y > vplus then
              vplus = C(i)-y 			
            end			
		  end 
		end 
        m = 0
        if C(vTo) >	C(vFrom) and y < C(vTo)+0.1*(C(vTo)-C(vFrom)) and y > C(vFrom)-0.1*(C(vTo)-C(vFrom)) then
          m = 1
		end 	
        if C(vTo) <	C(vFrom) and y < C(vFrom)+0.1*(C(vFrom)-C(vTo)) and y > C(vTo)-0.1*(C(vFrom)-C(vTo)) then
          m = 1
		end 
        if m == 1 then 		
	      --SetValue(i, 2, y)
        end 		
	   end
	   --end
	  
	   if ex == 0 then  
	    if vminus_n ~= 0 then
	     vminus = kk*vminus/vminus_n          
	    end 
	    if vplus_n ~= 0 then
	     vplus = kk*vplus/vplus_n          
	    end 
	   end 	  
      end

  if num == 1 then 
    a_01 = a
    b_01 = b 
    vminus_01 = vminus
    vplus_01 = vplus
	vFrom_01 = vFrom
    vTo_01 = vTo
  end
  if num == 2 then 
    a_02 = a
    b_02 = b  
    vminus_02 = vminus
    vplus_02 = vplus
	vFrom_02 = vFrom
    vTo_02 = vTo	
  end  
  return 1 
 end
 
 return 0
end 

function levels(x, y, num, index, rec)

  if y ~= nil and x ~= 1 and (index ==Size() or rec==1) then 
  
    for i = 1, index do	
	  if i >= x then 
	    SetValue(i, num, y)
      else 		
	    SetValue(i, num, nil)
	  end 
    end
	
  end 

end

function inclevels(x_1, y_1, x_2, y_2, y_3, index, num, rec)

  if y_2 ~= nil and x_2 ~= 1 and (index ==Size() or rec==1) then 
  
   need = 1
   for i = x_2+1, x_1-1 do	  
     y = ((y_2 - y_1)*i - x_1*y_2 + x_2*y_1 )/(x_2-x_1)
     if (y_1 < y_3 and C(i) < y ) or (y_1 > y_3 and C(i) > y ) then 
	   need = 0
	   break
	 end 	 
   end 
   --need = 1
   if need == 1 then 
    for i = x_2, index do	  
	
	  y = ((y_2 - y_1)*i - x_1*y_2 + x_2*y_1 )/(x_2-x_1)
	
	  if i >= x_2 then 
	    if i > x_1 and (C(Size())*1.3 < y or C(Size())*0.7 > y) then 
	      SetValue(i, num, nil)
        else 		
	      SetValue(i, num, y)
	    end 
      else 		
	    SetValue(i, num, nil)
	  end 
    end
   end 
   
  end 

end

function OnCalculate(index)
  
  de = Settings.Procent
  kk = Settings.k 
  ex = Settings.Ext
  sh = Settings.shif
  
  v1=nil
  v2=nil
  v3=nil
  v4=nil
  v5=nil
  v6=nil
  v7=nil  
  v8=nil
  v9=nil
  v10=nil  
  v11=nil  
  v12=nil    
  
  if index > Size()-sh then  
    --return nil, nil, nil, nil, nil, nil, nil 	 
    return v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11 , v12, v13  
  end 
  
  vl = C(index)
  if index == 1 then 
	y1 = vl
    y2 = vl
  else   
	  if C(index) > y1*(1+de/100) and y1 < y2 then 
	    x4 = x3
	    x3 = x2
	    x2 = x1
		y4 = y3
		y3 = y2
	    y2 = y1	
	    x1 = index 
	    y1 = C(index)	
        ret = recalcline(1, index, 0)
        ret = recalcline(2, index, 0)   
        levels(x1, y1, 8, index, 0)		
		levels(x2, y2, 9, index, 0)
		levels(x3, y3, 10, index, 0)
		levels(x4, y4, 11, index, 0)
		inclevels(x1, y1, x3, y3, y2, index, 12, 0)
		inclevels(x2, y2, x4, y4, y3, index, 13, 0)
	  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 
	    x4 = x3
	    x3 = x2
	    x2 = x1
		y4 = y3
		y3 = y2		
	    y2 = y1
	    x1 = index 
	    y1 = C(index)	  	
        ret = recalcline(1, index, 0)
        ret = recalcline(2, index, 0)
        levels(x1, y1, 8, index, 0)		
		levels(x2, y2, 9, index, 0)
		levels(x3, y3, 10, index, 0)
		levels(x4, y4, 11, index, 0)
		inclevels(x1, y1, x3, y3, y2, index, 12, 0)
		inclevels(x2, y2, x4, y4, y3, index, 13, 0)		
	  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 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 
  	--]] 




	if index == Size()-sh and ret == 0 then
    
        ret = recalcline(1, index, 1)
        ret = recalcline(2, index, 1)	
		
		levels(x1, y1, 8, index, 1)		
		levels(x2, y2, 9, index, 1)
		levels(x3, y3, 10, index, 1)
		levels(x4, y4, 11, index, 1)

		inclevels(x1, y1, x3, y3, y2, index, 12, 1)
		inclevels(x2, y2, x4, y4, y3, index, 13, 1)
		
    end 	
	
	
	
	if index == Size()-sh  then  --- and index ~= last_ind
		  
	   if vTo_01 - vFrom_01 > 500 then
         vFrom_01 = vTo_01-500 
       end 	  
		  
       for i = vFrom_01, index do
        y = a_01*i + b_01 + vplus_01		
        m = 0
        if C(vTo_01) >	C(vFrom_01) and y < C(vTo_01)+0.3*(C(vTo_01)-C(vFrom_01)) and y > C(vFrom_01)-0.3*(C(vTo_01)-C(vFrom_01)) then
          m = 1
		end 	
        if C(vTo_01) <	C(vFrom_01) and y < C(vFrom_01)+0.3*(C(vFrom_01)-C(vTo_01)) and y > C(vTo_01)-0.3*(C(vFrom_01)-C(vTo_01)) then
          m = 1
		end 
        if m == 1 then 		
	      SetValue(i, 3, y)
		  if i == index then 
		    v3 = y 
		  end 
        end 	
		
        y = a_01*i + b_01 - vminus_01		
        m = 0
        if C(vTo_01) >	C(vFrom_01) and y < C(vTo_01)+0.3*(C(vTo_01)-C(vFrom_01)) and y > C(vFrom_01)-0.3*(C(vTo_01)-C(vFrom_01)) then
          m = 1
		end 	
        if C(vTo_01) <	C(vFrom_01) and y < C(vFrom_01)+0.3*(C(vFrom_01)-C(vTo_01)) and y > C(vTo_01)-0.3*(C(vFrom_01)-C(vTo_01)) then
          m = 1
		end 
        if m == 1 then 		
	      SetValue(i, 4, y)
		  if i == index then 
		    v4 = y 
		  end 
        end 			
	   end	  
	    
	   if vTo_02 - vFrom_02 > 500 then
         vFrom_02 = vTo_02-500  
       end 	 
	  
       for i = vFrom_02, index do
        y = a_02*i + b_02 + vplus_02		
        m = 0
        if C(vTo_02) >	C(vFrom_02) and y < C(vTo_02)+0.1*(C(vTo_02)-C(vFrom_02)) and y > C(vFrom_02)-0.1*(C(vTo_02)-C(vFrom_02)) then
          m = 1
		end 	
        if C(vTo_02) <	C(vFrom_02) and y < C(vFrom_02)+0.1*(C(vFrom_02)-C(vTo_02)) and y > C(vTo_02)-0.1*(C(vFrom_02)-C(vTo_02)) then
          m = 1
		end 
        if m == 1 then 		
	      SetValue(i, 6, y)
		  if i == index then 
		    v6 = y 
		  end 
        end 	
		
        y = a_02*i + b_02 - vminus_02		
        m = 0
        if C(vTo_02) >	C(vFrom_02) and y < C(vTo_02)+0.1*(C(vTo_02)-C(vFrom_02)) and y > C(vFrom_02)-0.1*(C(vTo_02)-C(vFrom_02)) then
          m = 1
		end 	
        if C(vTo_02) <	C(vFrom_02) and y < C(vFrom_02)+0.1*(C(vFrom_02)-C(vTo_02)) and y > C(vTo_02)-0.1*(C(vFrom_02)-C(vTo_02)) then
          m = 1
		end 
        if m == 1 then 		
	      SetValue(i, 7, y)
		  if i == index then 
		    v7 = y 
		  end 
        end 			
	   end	
	  
	  last_ind = index 
	end 
  
 
    return v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11 , v12, v13 

end

Как я заработал с 1 млн. рублей 3 млн. долларов

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

  1. Знакомство с рынком;
  2. Резкий взлет;
  3. Стремительное падение.

Основано на реальных событиях, все имена вымышленные. За давностью лет могут быть небольшие неточности.

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

Часть 1. Знакомство с рынком.

Шел 2003 год. Мне было каких-то 20 лет. Днем я благополучно просиживал время на парах, вечером играл в бильярд, а ночью прижимался к упругой женской попке. Гонял тогда на старенькой Дэу Нексия и беззаботно жил на родительские дотации, в размере 500 баксов в месяц. Но 12 сентября, после звонка дяди Богдана, размеренное течение жизни резко изменилось. “Эй олух, хорош пинать бананы, завтра берешь паспорт и дуешь по адресу Невский 60 с целью открытия брокерского счета. Я договорился с ребятами из Финама — откроешь счет на 100 тыс., а они обучат тебя как сделать из них миллион”.



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

Неожиданное открытие: Обмен валюты на ММВБ занимает 20 минут

я на валютном рынке не торгую, но обменивать валюту там выгоднее. Думаю, об этом люди тут знают.

Друг попросил купить ему $2000 на отпуск. Мне не жалко, хотя предупредил, что наличными отдать смогу не сразу… Последний раз я менял года два назад и от сделки до получения долларов в банкомате ушло пол-дня, не смотря на режим TOD.

Сейчас (брокер Альфа-банк) обменял быстрее, чем за 20 минут. Т.е. друг перевёл на текущий рубли, я их на брокерский валютный (руб). Затем, обменял и перевёл на текущий $. всё. снял в банкомате — отдал. Экономия 1000 руб.



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

С Нуля до Алготрейдра, подарок для трейдеров.

Доброго времени суток коллеги. Я редко пишу на форуме с 2012 года всего несколько статей (сообщений), надеюсь они были полезными и помогли Вам. Наступил новый 2020 год, время подарков…  

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

Подарок – это видеоуроки по программированию торговых роботов на языке С# через торговую платформу Quik. Используется библиотека с открытым исходным кодом которая лежит на GitHub https://github.com/finsight/QUIKSharp 

Сами уроки лежат на YouTube вот ссылка на плейлист https://clck.ru/LRGZB 



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

Long 1M

Я всего лишь одолжил тебе своё тело.
Ты вложил в него мечту.

Long 1M

Сегодня, 02.01.2020, я стал миллионером.

Мне понадобились долгие 5 лет, чтобы прийти в эту точку. Немногие добираются сюда, но у меня получилось. Пять долгих лет ошибок, раздумий и борьбы с самим собой. Каждый торговец в глубине души знает, что главный его враг — он сам. Отсутствие иной занятости, желание иметь всё здесь и сейчас, недостаток терпения, малодушие и глупость в конце-концов — вот наши препятствия на пути успеху.

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

Знаете, почему у вас ничего не получается? Вы не хотите страдать ради своих мечт.

Long 1M

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

SWT-метод: 1. Базовый индикатор SWT.

Немного упростил программы и подкорректировал описание.

1. Базовый индикатор SWT.

Базовый индикатор SWT  — предназначен для разделения и отображения трендов анализируемого финансового инструмента, а также для расчета текущего значения волатильности каждого тренда. На основе значений базового индикатора рассчитываются параметры трендов, каналов, волатильности, объемов и рисков торговли. Показания базового базового индикатора также являются основой для расчета параметров работы торгового советника (робота) SWT-метода.

В режиме по умолчанию на экране отображается картинка следующего вида:

SWT-метод: 1. Базовый индикатор SWT.

Рис.1.1. Отображение индикатора SWT в режиме по умолчанию

По волновым трендам особого пояснения не требуется. Собственно говоря каждая волна это и есть тренд и движение волны по направлению соответствует движению рынка в рамках этого тренда. На графике в режиме по умолчанию отображаются три волны: W2, W3 и W4, значение которых будет описано ниже, а также вспомогательные линии, отображающие параметры и характер движения трендов. Дополнительно к отображаемым волнам можно также включить показ волны W1, включающей все движения рынка, более быстрые по отношению к волне W2, а также показ суммы всех волн: W1+W2+W3+W4.

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

ТОП-25 самых популярных фильмов для инвесторов для просмотра на новогодних праздниках

ТОП-25 самых популярных фильмов для инвесторов для просмотра на новогодних праздниках:

1. «Игра на понижение», 2015
История нескольких человек, которые предсказали кризис 2008 года

2. «Волк с Уолл-стрит», 2013
Безумная история биржевого махинатора Д. Белфорта

3. «Миллиарды», 2016-...
Сериал о противостоянии амбициозного финансиста и принципиального прокурора

4. «Области тьмы», 2011
История писателя по имени Эдди, раскрывшего 100% потенциала своего мозга с помощью специальной таблетки 

5. «Аферист», 1999
Реальная история банкира Ника Лисона, махинации которого обрушили один из крупных мировых банков

6. «Стать Уорреном Баффетом», 2017
Документальный фильм об одном из самых скромных миллиардеров планеты

7. «В погоне за счастьем», 2006
Биографический фильм о Крисе Гарднере, который прошёл путь от бедняка до успешного брокера

8. «Силиконовая долина», 2014-2019
Сериал о группе «гиков», готовящих запуск высокотехнологичных стартапов



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

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