Избранное трейдера Денис Е.

по

Доработал zigzag5

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

Доработал zigzag5
код индикатора:
Settings=              
        {                          
            Name = "Zigzag5",   -- название индикатора
            delta=2,                  -- параметр индикатора                          
            deltaY=1,                  -- параметр индикатора   			
            linedeltaY=0.75,                  -- параметр индикатора   				
            line=                                     
                {                               
                    {  
                        Name = "zigzagline3",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(0,255, 0)
                    },
                    {  
                        Name = "upline",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(255,0, 0)
                    },
                    {  
                        Name = "lowline",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(0,0, 255)
                    },
                    {  
                        Name = "declineline",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(255,0, 0)
                    },
                    {  
                        Name = "upline2",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(255,0, 0)
                    },
                    {  
                        Name = "lowline2",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,0, 255)
                    },
                    {  
                        Name = "declineline2",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(255,0, 0)
                    }				
                }
       }
	
	
function getradius(x, y)
  return math.sqrt(Settings.deltaY*y*y+x*x)
end

function koef(val)
  return 1 - 1/(1-1/val)
end


function Init()

  vMin = 0
  vMax = 0
  vMinindex = 0
  vMaxindex = 0
  voldMinindex = 0
  voldMaxindex = 0
  upval = 0
  lowval = 0
  upindex = 1
  lowindex = 1  
  veu = nil
  vel = nil
  curfrom = 1
  curto = 1

  return 7
end


function OnCalculate(index)
  local printz = 0
  vsize = Size()	  

  ve = nil
  veu = nil
  vel = nil 
  curv = nil 
  veu2 = nil
  vel2 = nil 
  curv2 = nil  
  
  if index == 1 then
    vMin = C(index)
    vMax = C(index)
    vMinindex = index
    vMaxindex = index
    voldMinindex = index
    voldMaxindex = index
    ve = C(index)  
	  
  else
         
    if voldMaxindex >= voldMinindex then
        
       
	  if C(index) > (1 + Settings.delta/100)*vMin then
         
        vMin = C(index)  
        vMax = C(index) 
        vMaxindex = index
        voldMinindex = vMinindex 
        vFrom = voldMaxindex  
        vTo = vMinindex
        printz = 1		
		
        if (C(vMinindex) > C(vsize)) and (upval > koef(getradius(vsize - vMinindex, C(vMinindex) - C(vsize)))) then
		  upval = koef(getradius(vsize - vMinindex, C(vMinindex) - C(vsize)))
		  upindex = vMinindex
		end
        if (C(vMinindex) < C(vsize)) and (lowval > koef(getradius(vsize - vMinindex, C(vMinindex) - C(vsize)))) then
		  lowval = koef(getradius(vsize - vMinindex, C(vMinindex) - C(vsize)))
		  lowindex = vMinindex
	   end	
	   
	    curfrom = voldMaxindex
	    curto = voldMinindex	  	   
	      	    
      else      
	  
        if vMin > C(index) then
          vMin = C(index)
          vMinindex = index
          vFrom = voldMaxindex      
          vTo = index
          printz = 0
		  curto = index		
        else
          vFrom = vMinindex 
          vTo = index
          printz = 0
        end 		
	  
	    curfrom = voldMaxindex	
		
      end
	 
 	 
    else
     
    if voldMaxindex <= voldMinindex then
	  
      if C(index) < (1 - Settings.delta/100)*vMax then
	     	  
        vMax = C(index) 
        vMin = C(index)  
        vMinindex = index
        voldMaxindex = vMaxindex
        vFrom = voldMinindex
        vTo = vMaxindex
        printz = 1
	
        if (C(vMaxindex) > C(vsize)) and (upval > koef(getradius(vsize - vMaxindex, C(vMaxindex) - C(vsize)))) then
		  upval = koef(getradius(vsize - vMaxindex, C(vMaxindex) - C(vsize)))
		  upindex = vMaxindex
		end                   
        if (C(vMaxindex) < C(vsize)) and (lowval > koef(getradius(vsize - vMaxindex, C(vMaxindex) - C(vsize)))) then
		  lowval = koef(getradius(vsize - vMaxindex, C(vMaxindex) - C(vsize)))
		  lowindex = vMaxindex
		end		
		
	    curfrom = voldMinindex		
	    curto = voldMaxindex
		
      else 
	    	    
        if vMax < C(index) then
          vMax = C(index)
          vMaxindex = index
          vFrom = voldMinindex    
          vTo = index
          printz = 0
		  curto = index		
        else  
          vFrom = vMaxindex  
          vTo = index        
          printz = 0
        end
		
	    curfrom = voldMinindex
		
      end  

	
    end
    end
 
    if (printz == 1) or (Size() == index) then
      for i = vFrom, vTo do
        k = (C(vTo)- C(vFrom))/(vTo- vFrom)
        v = i*k + C(vTo) - vTo*k
        SetValue(i, 1, v)
        ve = v
      end   
      if (Size() == index) then
        ve = C(index)
        if voldMaxindex >= voldMinindex then
          vFrom = voldMaxindex 
          vTo = vMinindex
        end 
        if voldMaxindex <= voldMinindex then  
          vFrom = voldMinindex
          vTo = vMaxindex
        end 
        for i = vFrom, vTo do
          k = (C(vTo)- C(vFrom))/(vTo- vFrom)
          v = i*k + C(vTo) - vTo*k
          SetValue(i, 1, v)
        end  
           
        -- up level line 
        if upindex ~= nil then
		  if C(upindex) > C(index) then		
            for i = upindex, index do
              SetValue(i, 2, C(upindex))
              SetValue(i, 5, C(upindex)-Settings.linedeltaY*C(vsize)/100)			  
            end  	
            veu = C(upindex)	
          end 		  
		end
		
		-- low level line 
		if lowindex ~= nil then
		  if C(lowindex) < C(index) then
            for i = lowindex, index do
              SetValue(i, 3, C(lowindex))
              SetValue(i, 6, C(lowindex)+Settings.linedeltaY*C(vsize)/100)				  
            end  			
            vel = C(lowindex)
         end
       end		
        
       if voldMaxindex >= voldMinindex then     
	    vsign = -1
		if curfrom == voldMinindex then
		  vsign = -1
		end
		if curfrom == voldMaxindex then
		  vsign = 1
		end		

        -- inclined line
	    if curto- curfrom > 0 then
	     maxcurv = 0
	     k = (C(curto)- C(curfrom))/(curto- curfrom)
         for i = curfrom, curto  do        
          curv = i*k + C(curto) - curto*k	
          if vsign == -1 then  		  
 		    if L(i) < curv then
		      if maxcurv < curv - L(i) then
		        maxcurv = curv - L(i)
              end
            end
		  else
 		    if H(i) > curv then
		      if maxcurv < H(i) - curv then
		        maxcurv = H(i) - curv
              end
            end		  
		  end
         end   		
         for i = curfrom, index  do
          curv = i*k + C(curto) - curto*k + vsign*maxcurv	  
          SetValue(i, 4,curv)
		  curv2 = curv+ vsign*Settings.linedeltaY*C(vsize)/100
		  SetValue(i, 7,curv2)		  
         end   		
	    end
	    curv = nil	
	   end 
	  
       if voldMaxindex <= voldMinindex then
	    vsign = -1
		if curfrom == voldMaxindex then
		  vsign = 1
		end		
		if curfrom == voldMinindex then
		  vsign = -1
		end			
  
        -- inclined line
        if curto- curfrom > 0 then
         maxcurv = 0
         k = (C(curto)- C(curfrom))/(curto- curfrom)
         for i = curfrom, curto  do        
          curv = i*k + C(curto) - curto*k		  
          if vsign == -1 then  		  
 		    if L(i) < curv then
		      if maxcurv < curv - L(i) then
		        maxcurv = curv - L(i)
              end
            end
		  else
 		    if H(i) > curv then
		      if maxcurv < H(i) - curv then
		        maxcurv = H(i) - curv
              end
            end		  
		  end
         end   		
         for i = curfrom, index  do
          k = (C(curto)- C(curfrom))/(curto- curfrom)
          curv = i*k + C(curto) - curto*k + vsign*maxcurv	  		
          SetValue(i, 4,curv)
		  curv2 = curv+ vsign*Settings.linedeltaY*C(vsize)/100
		  SetValue(i, 7,curv2)
         end   		     
        end
	    curv = nil		
       end	  
	          
      end
    end

  end  
  
  return ve, veu, vel, curv, veu2, vel2, curv2  
  
end



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

12 причин открыть брокерский счет в Interactive Brokers

DTI Algorithmic — финансовый советник на платформе Interactive Brokers (IB). За 10 лет на рынке мы успели поработать со многими российскими и иностранными брокерами, и в 2013 г. осознанно сделали выбор в пользу IB.

#справка Interactive Brokers LLC — американский онлайн—брокер. Материнская компания IB работает с 1978 года, ее номер в Комиссии по ценным бумагам и биржам США (SEC) — 0001381197. Данные о компании:

  • кратко и подробно о брокере на сайте американской Службы регулирования отрасли финансовых услуг (FINRA),
  • регуляторная информация об Interactive Brokers Group на сайте SEC,
  • данные о руководителях, финансовой устойчивости и рисках IB для Комиссии по торговле товарными фьючерсами (CFTC) и Национальной фьючерсной ассоциации (NFA).


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

Робот "Два Боллинджера" с исходниками

Хорош философствовать. Давайте писать более полезные посты.
Итак, робот на двух графиках Боллинджера.
Общий принцип:
1) На цену накладываются два графика Боллинджера: с периодами 20 и 120 (назовем их local и global).
2) В зависимости от параметра внутри робота, входим либо когда цена входит внутрь local-Боллинджера (ContrTrendFlag=1), либо выходит из него (ContrTrendFlag=0).
3) Дополнительный фильтр: Лонг только когда когда мы в верхней половине global-Боллинджера, шорт — если в нижней.
Данные робот берет из графиков, так что график должен быть открыт, и прописаны идентификаторы.

График с двумя Боллинджерами выглядит примерно так:

Робот "Два Боллинджера" с исходниками

Настройки на цене и индикаторах не забудьте:

Робот "Два Боллинджера" с исходниками

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

КОНКУРС: На случайном блуждании заработать невозможно - ответы и выводы

Добрый день, коллеги!

Огромное спасибо всем, кто откликнулся!
Плодотворную дискуссию (пока) устроить не удалось, т.к. (как обычно):
— кто-то написал полную ересь
— кто-то написал умные вещи, но не в кассу
— кто-то бодро начал (за здравие), но не закончил (за упокой)
Отдельно очень приятно, что в ветке не было срача и хамства. Видимо, у всех горячих голов я давно в ЧС — и это не может не радовать.

Поскольку на верный ответ никто не набрел (ну или недобрел...), позволю себе его опубликовать.

1. Пусть S — обычное случайное блуждание процесс с нулевым МО и дисперсией sigma
    Тогда он описывается стохастическим уравнением

    dS = sigma*S*dW

2. Пусть L — логнормальное случайное блуждание
    Тогда по лемме Ито он описывается стохастическим уравнением

    dL = (-(sigma^2)/2)*dt + sigma*dW

    т.е. имеем обобщенный винеровский процесс со средним -((sigma^2)/2)*T и дисперсией (sigma^2)*T

3. Отсюда получаем формулу плотности для логнормального распределения (можно и в лоб посчитать, если нелениво)

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

Торгую случайный процесс. 314% прибыли в подтвержденной торговле за четыре месяца методом торговли случайного процесса.

Главное: гораздо проще и легче выучить раздел Теории вероятностей и прибыльно торговать случайный процесс, чем бесконечно искать неизвестно что и неизвестно где в надежде найти «ВОЛШЕБНУЮ ЗАКОНОМЕРНОСТЬ РЫНКА и всегда зарабатывать».
------------------------------------------------
Вот отрывок из моей дискуссии с одним трейдером:
------------------------------------------------
Многие как бы трейдеры всё пытаются придумать какую-нибудь фишку или хитрую хитрость и обмануть-обыграть рынок и взять приз-бабки.
Ну уже понятно давно, что это не работает.
Оглянитесь вокруг себя — везде, вся техника и все вещи — всё создано и работает на научной основе. Почему то никто не будет строить самолет на основе своих догадок и придумок.

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

Основные мысли —
1)сумма множества случайных величин (процессов) дает неслучайный, практически детерминированный, как бы предопределенный результат.
2) сумма множества случайных величин (процессов) имеет нормальное распределение, что на обычном языке означает «практически неслучайное поведение» случайной величины (процесса), что дает в результате нормальную работу «скользящих средних».



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

Поднимаю старые темы Мы торгуем Евро-Бакс на смартлабе по математике

Добрый вечер всем у кого вечер… и Добрый день у кого ещё не вечер..
Все знают, что последний год я усиленно бился над математической системой.
Любые отрицательные результаты это тоже результаты..
Ну вот вроде как бы и нашёл то, что искал, поэтому перелажу на срочный рынок.Чесно скажу переход болезненный, видимо я долго сидел на Форе.
Интересны опционы счёт открыт пока изучаю(кухню)...
Хочу представить новую формулу.Объяснять ничего не буду… Сейчас Евро-Бакс надеюсь уже встал в бычий тренд остаётся проверить систему на тренде.
Развороты она торгует точно....
Поднимаю старые темы Мы торгуем Евро-Бакс на смартлабе по математике
На графике как то так..
Поднимаю старые темы Мы торгуем Евро-Бакс на смартлабе по математике

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

Прибыльные паттерны

Всем привет!

Сделал еще один вариант сервиса по поиску похожих паттернов — ТОП текущих прибыльных паттернов.

Работает это примерно так:

1. Берем текущий сформировавшийся паттерн на графике:
Прибыльные паттерны



2. Для него ищем 100 наиболее похожих паттерна в прошлом на разных инструментах:
Прибыльные паттерны

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

Мал золотник, да дорог | Полезные мелочи | Трейдинг. Торговые роботы. Идеи.

   С 18 по 29 марта прошел «Полигон для новичка» №16. Победителем в нем стала ТС «Рассвет» с результатом +9.60%. Но данное видео на другую тему.
   Уже четыре «Полигона для новичка» подряд (13, 14, 15 и 16) удачно выступает моя торговая система «B&W». На вышеуказанных Полигонах она заработала +5.53%, +2.37%, +2.36% и +2.47% соответственно.
   В данном видео я рассказываю про торговую идею, которую я использовал при создании ТС «B&W».
   Что такое «Полезные мелочи» можно посмотреть здесь https://smart-lab.ru/blog/473161.php


Налоги в Interactive Brokers!

Собираюсь сделать серьезный депозит в этого брокера. Но так как я торгую интрадей ( покупаю в открытии сессии и продаю к закрытию) то неохота мне для налоговой пересчитывать каждую свою позицию по курсу ЦБ РФ на дату сделки. Даже целую конференцию нашел на ютюбе посвященную этому вопросу-  www.youtube.com/watch?v=0C8gpvtt1YI 

И не хочу такого геморроя. Сумма капитала у меня серьезная, поэтому скрываться от налоговой риск нецелесообразный (сумма налогов по любому подпадет под УК). 

Вопрос, что с этим делать, чтобы невольно не переквалифицироваться в бухгалтера для центрального банка? Наверняка же здесь есть те, кто уже столкнулся с этой бедой и нашел какое-нибудь посильное решение. Я рассматривал вариант открытия своего мини-хедж фонда (что-то типа фонда в фонде) по деньгам выходит сопоставимо с наймом личного бухгалтера, а может и дешевле, ведь работы по расчетам явно много.

Какие еще могут быть варианты, кроме иммиграции? И, конечно, кроме отечественных брокеров. Спасибо.

STATDIVPROF индикатор с эквити

STATDIVPROF показывает прибыл от свое торговли
если поставить параметр showprof=1, если showprof=0, то будет показывать профит иначе сам индикатор
STATDIVPROF индикатор с эквити

код индикатора
Settings={
Name="STATDIVPROF",
period=30,
showprof=0,
  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
    }
  } 
}

function Init()
  prof=0    
  bp=0
  prevval=0    
  return 2
end

function OnCalculate(index)
  local sum1=0
  local sum2=0  
  local j=0    
  local dprof=0     
  
  if index < Settings.period then
    return nil, nil
  else   	
    for i=index-Settings.period+1, index do  
	  j = j + 1 
      if C(i) > O(i) then
        sum1 = sum1 + (C(i) - O(i))*V(i)*j
        sum2 = sum2 + (C(i) - O(i))*V(i)*j
      else
        sum2 = sum2 + (O(i) - C(i))*V(i)*j
      end  
    end 
    sum1 = sum1/sum2 
  end
  
  if index > Settings.period+1 then
     
    if prevval < 0.5 and sum1 >= 0.5 then
      bp=C(index)   	  
	end
    if prevval > 0.5 and sum1 <= 0.5 then
      if bp ~= 0 then
	    prof=prof+C(index)-bp
		bp=0
	  end 
	end	
	if bp ~= 0 then
	  dprof = C(index) - bp
	else
	  dprof = 0
	end
     
  end
  prevval=sum1   
  
  if Settings.showprof == 0 then
    return sum1, 0.5
  end

  if Settings.showprof == 1 then
    return prof+dprof, nil
  end

end






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