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

по

Карта рынка - мой первый прототип надстройки над Quik(Квик)

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

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

На самом деле в этой идее больше вопросов, чем ответов, точнее чем больше ты вникаешь в задачу, тем больше вопросов возникает. Обычный пользователь как должное воспринимает что квик загружается очень быстро (например в сравнении с «Альфа Директ»), хранит и отражает данные за требуемый период, имеет относительно гибкий внутренний скриптовый язык ну и т.п.



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

Разные мысли

Заметки из блокнота. Пятничное.

Регулярно и бездумно «инвестируют» дураки. Нужно уметь ждать.

Чего ты хочешь добиться? Не работать? Возьми отпуск на год (да хоть на пару месяцев) и попробуй — оно тебе надо?

Меньше движений — лучше результат.

Флет вероятнее чем тренд. Продолжение тренда вероятнее разворота. Этого уже достаточно, чтобы заработать.

Просадка 90% в Экселе и на депозите размером с три квартиры — это разные вещи.

Как сказал один дед, которому стукнуло 83 — опыт, как и половое бессилие, приходит с годами.

Входи пока тихо. Космонавт, опоздавший на ракету — это огарок от дюз.

Про рыдания кинутых форекс-кухнями: «А ты о чем думал, когда его туда совал? Что он у тебя в меду будет?»

ETF — это всего лишь юрлицо. С рисками юрлица.

Чужая конфигурация QUIK бесполезна так же, как и чужая стратегия. Нужно выстрадать свою.

Чешутся руки? Заведи на отдельный счет 200 рублей и делай сделки с FXWO/FXRW.

Что делает нормальный интрадейщик в полдень?

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

Таблица "Портфель" в QUIKе


    Представляю таблицу для портфельных инвестиций. В квике до сих пор такого нет. Цвет строки меняется если Прибыль%<>5%. Обновление каждые 5 сек.
Таблица "Портфель" в QUIKе

Для её создания необходимо:
1. Создать файл «tablePortfolio.txt» в папке «C:\QUIK\Scripts». Если папки нет, создать её.
2. Скопировать туда код скрипта
3. Сохранить, выбрав кодировку «ANSI», иначе вместо русских букв могут быть кракозябры.
4. Сменить расширение файла с ".txt" на ".lua"
5. Запустить скрипт командой Сервисы->Lua  скрипты->Добавить (выбрать файл tablePortfolio.lua) ->Запустить

Код скрипта:
IsRun = true
class_code="TQBR"

function main()
   -- Получает доступный id для создания
   t_id = AllocTable()   
   
   -- добавить столбцы
   AddColumn(t_id, 1, "Бумага",       true, QTABLE_STRING_TYPE, 20)
   AddColumn(t_id, 2, "Кол-во",       true, QTABLE_INT_TYPE,     7)
   AddColumn(t_id, 3, "Цена покупки", true, QTABLE_DOUBLE_TYPE, 14)
   AddColumn(t_id, 4, "Цена текущая", true, QTABLE_DOUBLE_TYPE,   14)
   AddColumn(t_id, 5, "Прибыль, р",   true, QTABLE_DOUBLE_TYPE,   14)
   AddColumn(t_id, 6, "Прибыль, %",   true, QTABLE_DOUBLE_TYPE, 14)
   t = CreateWindow(t_id)

   for iRow=1, getNumberOf("depo_limits")-1, 1 do
      rowInPortfolioTable = getItem("depo_limits", iRow) -- получить текущую строку из таблицы "Лимиты по бумагам"            
      qtyBoughtLots  = tonumber(rowInPortfolioTable.currentbal)         
      limitKind = rowInPortfolioTable.limit_kind          
      if qtyBoughtLots>0 and limitKind<1 then      
         InsertRow(t_id, iRow)-- добавить новую строку вниз таблицы   
      end
   end
   local rows, columns = GetTableSize (t_id)
   InsertRow(t_id, rows+1) -- добавить новую строку вниз таблицы для "Итого"
   
   SetWindowCaption(t_id, "Портфель: прибыли и убытки    © ramirzaev@mail.ru") 

   -- исполнять цикл, пока пользователь не остановит скрипт или не закроет окно таблицы
   while IsRun do 
      if IsWindowClosed(t_id)==true then
         IsRun=false
      end

      local currentPrice=0
      local qtyBoughtLots=0
      local profitAbs = 0
      local profitPerc = 0
      local currentSecCode= ""
      local fullNameOfInstrument = ""
      local limitKind = 0
      local rowInPortfolioTable = {}    -- строка из таблицы "Лимиты по бумагам"
      local tableInstrument = {}    -- данные "Таблицы текущих торгов"
      local iRowInOutTable = 1
	  local totalInvest = 0
	  local totalPortfolio = 0
	  local totalProfit = 0
	  local totalPercent = 0

      for iRow=0, getNumberOf("depo_limits")-1, 1 do
         rowInPortfolioTable = getItem("depo_limits", iRow) -- получить текущую строку из таблицы "Лимиты по бумагам"         
         
         qtyBoughtLots  = tonumber(rowInPortfolioTable.currentbal)
         
         limitKind = rowInPortfolioTable.limit_kind 
         
         if qtyBoughtLots>0 and limitKind<1    then      -- если кол-во лотов >0 и тип лимита T0
            currentSecCode = rowInPortfolioTable.sec_code
            fullNameOfInstrument =  tostring(getParamEx(class_code, currentSecCode, "SHORTNAME").param_image or "0") --"LONGNAME"
            avgPrice       = tonumber(rowInPortfolioTable.awg_position_price)                  
            currentPrice = GetAskPrice(currentSecCode)   
            profitAbs = (currentPrice-avgPrice)*qtyBoughtLots      
            profitPerc    = 100*currentPrice/avgPrice   - 100
			
			totalInvest = totalInvest + avgPrice*qtyBoughtLots  
			totalPortfolio = totalPortfolio + currentPrice*qtyBoughtLots   
            
            SetCell(t_id, iRowInOutTable, 1, fullNameOfInstrument) -- "Бумага"
            SetCell(t_id, iRowInOutTable, 2, tostring(qtyBoughtLots)) -- "Кол-во"RemoveZero(tostring(qtyBoughtLots)))
            SetCell(t_id, iRowInOutTable, 3, tostring( math_round(avgPrice, 3) ))  -- tostring(avgPrice))   -- "Цена покупки"
            SetCell(t_id, iRowInOutTable, 4, RemoveZero(tostring(currentPrice)))   -- "Цена текущая"
            SetCell(t_id, iRowInOutTable, 5, tostring( math_round( profitAbs, 0)) ) -- "Прибыль, р"
            SetCell(t_id, iRowInOutTable, 6, tostring(math_round(profitPerc, 1)) .."%") -- "Прибыль, %"
            
            if profitPerc >5 then       -- окрашиваем
               ColourRowInGreen(iRowInOutTable)
            elseif profitPerc<-5 then 
               ColourRowInRed(iRowInOutTable)
            else 
               ColourRowInYellow(iRowInOutTable)
            end   
            iRowInOutTable = iRowInOutTable+1
         end
      end
      totalProfit = totalPortfolio - totalInvest 
      totalPercent   = 100*totalProfit/totalInvest  
	  SetCell(t_id, iRowInOutTable, 1, "Итого") 
      SetCell(t_id, iRowInOutTable, 3, tostring( math_round(totalInvest, 0) ))  
      SetCell(t_id, iRowInOutTable, 4, tostring( math_round(totalPortfolio, 0)))  
      SetCell(t_id, iRowInOutTable, 5, tostring( math_round( totalProfit, 0)) ) 
      SetCell(t_id, iRowInOutTable, 6, tostring(math_round(totalPercent, 1)) .."%") 
	  
	  if profitPerc >5 then       -- окрашиваем
               ColourRowInGreen(iRowInOutTable)
            elseif profitPerc<-5 then 
               ColourRowInRed(iRowInOutTable)
            else 
               ColourRowInYellow(iRowInOutTable)
            end   
            iRowInOutTable = iRowInOutTable+1
      sleep(5000) -- пауза 5 сек.
      end
   --message("script table portfolio finished")
end


function ColourRowInRed(num_row)
   SetColor(t_id, num_row, QTABLE_NO_INDEX, RGB(255,150,150), RGB(0,0,0), RGB(255,150,150), RGB(0,0,0))
end
function ColourRowInYellow(num_row)
   SetColor(t_id, num_row, QTABLE_NO_INDEX, RGB(255,255,200), RGB(0,0,0), RGB(255,255,200), RGB(0,0,0))
end
function ColourRowInGreen(num_row)
   SetColor(t_id, num_row, QTABLE_NO_INDEX, RGB(150,255,150), RGB(0,0,0), RGB(150,255,150), RGB(0,0,0))
end
function GetAskPrice(inp_Sec_Code )
   local ask = tostring(getParamEx(class_code, inp_Sec_Code, "OFFER").param_value or 0)
   return ask
end
-- Округляет число до указанной точности
function math_round (num, idp)
   local mult = 10^(idp or 0)
   return math.floor(num * mult + 0.5) / mult
end
-- удаление точки и нулей после нее
function RemoveZero(str)
   while (string.sub(str,-1) == "0" and str ~= "0") do
      str = string.sub(str,1,-2)
   end
   if (string.sub(str,-1) == ".") then 
      str = string.sub(str,1,-2)
   end   
   return str
end
function OnStop()
   DestroyTable(t_id)
   IsRun = false   
end
  • обсудить на форуме:
  • QUIK

ТОРГОВЛЯ ВРЕМЕНЕМ (часть2)

Часть №1 -тут http://smart-lab.ru/blog/135633.php
 
 Торговля временем.
Часть 2.
В которой я покажу, что любая, успешно  работающая на рынке стратегия – работает на принципах ТОРГОВЛИ ВРЕМЕНЕМ!
В первой части статьи я показал лишь основные, базовые приемы работы на факторе Торговли Временем. Эти приемы в первую очередь для применения на споте, на рынке акций и для трейдеров с начальным опытом ( до 5-и лет на рынке). На самом деле, Торговля Временем может выглядеть и более сложно, для более продвинутых управляющих и для других рынков. Более того – я уверен в том, что ВСЕ стабильно работающие стратегии на ВСЕХ финансовых рынках ( от облигаций до деривативов) в своей основе имеют мои принципы Торговли Временем, когда прибыль является впрямую следствием ОЖИДАНИЯ нужного исхода, а не следствием верного ПРОГНОЗА будущего изменения цены. Причем это происходит даже тогда, когда автор или пользователь той или иной биржевой стратегии не формулирует для себя эти принципы и более того – доже тогда, когда он УВЕРЕН, что зарабатывает на точности своих прогнозов. Ниже я готов показать ряд подобных примеров))


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

ТОРГОВЛЯ ВРЕМЕНЕМ (В унисон Тимофею Мартынову)

В данном топе, http://smart-lab.ru/company/smartlabru/blog/135265.php Тимофей сказал буквально следующее:
«Долгосрочные диверсифицированные инвестиции без плечей — это то, что в долгосрочном плане совершенно точно не даст вам потерять деньги.»

Если позволите, я бы хотел  дополнить эту мысль статьей, которая расширяет принцип инвестиций до понимания того, что не только долгосрочные инвестиции, но буквально ВСЕ успешные стратегии на ВСЕХ рынках в своей основе имеют базовые принципы, которые я назвал принципы «Торговля Временем».
Советую внимательно прочитать этот текст, поскольку опыт публикации на других ресурсах показал, что многим поначалу кажется написанное в статье тем, что они уже давно знали (например, многие путают эту стратегию с байэндхолд).Но спустя какое то время, многие люди перечитывая текст по 2-3 раза, с удивлением обнаруживали, что этот подход КАРДИНАЛЬНО меняет их представление о рынке и принципах работы на нем.
Могу сказать, что в этой статье содержится выжимка выводов, к которым я пришел за 20 лет работы на очень разных рынках в очень разных качествах по обе стороны прилавка ( от руководителя брокерской компании и создателя клиенского форекса на базе своего банка до скальпера на ММВБ, от ваучеров и ГКО до опционщика на Фортсе).

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

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