Jouriм66 (Автор тем)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Мелкие утилиты и индикаторы, Может кому пригодится
 
В процессе разбирательства с АПИ написал несколько полезных для меня утилит.
Скорее всего они примитивные, но возможно кому-то понадобятся.
Или пригодятся как примеры.

Я не знаю как прицепить к сообщению аттач, поэтому воткну тут самый примитивный из индикаторов
Остальное уже большевато для вставки в текст, а как прицепить файл я не нашел.
Если кому понадобится что-нить - свистите.

Предназначен для показа всех параметров свечи в одном индикаторе, чтобы не добавлять\убирать если что-то надо.
[URL=http://radikal.ru/fp/50b20ef2e0af4ae298ceeb4ae6d04b98][IMG]http://s020.radikal.ru/i709/1502/3d/17d1f53f8d02t.jpg[/IMG][/URL]


Код
 -- ********************************************************************
-- Can displays every candle field as separate graph (see "Settings" for details)

-- ********************************************************************
-- Stupid QUIK: dofile() doesnt work in Indicators :-/
-- ********************************************************************
LOG_FILE = "..\\quick_lua.log";

function log(fmt, ... )
-- Decomment next line to allow global logging
--  _log( fmt, ... )
end

function _log( fmt, ... )
  local f = io.open( LOG_FILE, "a+" );
  if not f then
    f = io.open( LOG_FILE, "w" );
  end
  if not f then
    out( "Error write log file: %s", LOG_FILE );
    abort();
  end
  f:write( strtime(os.date("*t")) .. " " .. string.format( fmt, ... ) .. "\n" );
  f:close();
end

function out( fmt, ... )  message( string.format( fmt, ... ), 3) end
function abort(fmt, ... ) out( fmt, ... ); PROGRAMM_ABORT(); end
function iif( cond, y, n ) if cond then return y; else return n; end end
function strtime( tm ) return string.format("%4d-%02d-%02d %02d:%02d:%02d", tm.year, tm.month, tm.day, tm.hour, tm.min, tm.sec) end

-- ********************************************************************
-- ********************************************************************
Settings={
 Name = "!__Values",
 line = {
  { Name = "High",   Color = RGB( 112,112,112 ), Width = 1, Type = TYPE_LINE },
  { Name = "Low",    Color = RGB( 112,112,112 ), Width = 1, Type = TYPE_LINE },
  { Name = "Open",   Color = RGB( 112,255,255 ), Width = 1, Type = TYPE_LINE },
  { Name = "Close",  Color = RGB( 112,255,255 ), Width = 1, Type = TYPE_LINE },
  { Name = "Vol",    Color = RGB( 128,128,255 ), Width = 6, Type = TYPE_HISTOGRAM },
  { Name = "Median", Color = RGB( 100,215,0 ),   Width = 1, Type = TYPE_LINE },
  { Name = "Triple", Color = RGB( 200,67,22 ),   Width = 1, Type = TYPE_LINE },
  { Name = "Wide",   Color = RGB( 190,30,170 ),  Width = 1, Type = TYPE_LINE },
  nil
 },

 Open     = "n",    -- If set to 'y' will display candle.open graph
 Close    = "n",    -- If set to 'y' will display candle.close graph
 High     = "y",    -- If set to 'y' will display candle.high graph
 Low      = "y",    -- If set to 'y' will display candle.low graph
 Vol      = "n",    -- If set to 'y' will display candle.volume graph
 Median   = "y",    -- If set to 'y' will display calculated "median" graph
 Triple   = "n",    -- If set to 'y' will display calculated "triple" graph
 Wide     = "n",    -- If set to 'y' will display calculated "wide" graph

 Margin   = 0.01,   -- Additional bounds added to High, Low, Open and Close fields on display
                    -- Used just for better graph view
 nil
}

function Init()
    return 8
end

function OnCalculate(idx)
  local h = H(idx)
  local l = L(idx)

  if not h or h < 10 then
    return nil
  end

  if h < l then h,l = l,h; end

  local o = O(idx)
  local c = C(idx)
  if o < c then o,c = c,o; end

  local v = V(idx)
  local m = (h+l)/2
  local t = (h+l+C(idx))/3
  local w = (h+l+C(idx)*2)/4

  if Settings.Open   ~= "y" then o = nil; else o = o + Settings.Margin; end
  if Settings.Close  ~= "y" then c = nil; else c = c - Settings.Margin; end
  if Settings.High   ~= "y" then h = nil; else h = h + Settings.Margin; end
  if Settings.Low    ~= "y" then l = nil; else l = l - Settings.Margin; end
  if Settings.Vol    ~= "y" then v = nil; end
  if Settings.Median ~= "y" then m = nil; end
  if Settings.Triple ~= "y" then t = nil; end
  if Settings.Wide   ~= "y" then w = nil; end

  return h,l, o,c, v,m,t,w;
end

Вот еще один, которым постоянно пользуюсь
Предназначен за рисованием коридора для средне-взвешенного значения инструмента по всем сделкам.
Т.е. после установки сделки начинает рисовать коридор профит\лос (там на графике треугольники сделки и горизонтальные линии границы).
[URL=http://radikal.ru/fp/eb4e1ac6826140a5a48423cc46bb1377][IMG]http://s018.radikal.ru/i520/1502/39/3bb965470ed2t.jpg[/IMG][/URL&#93;

Из утилит сделал экспорт данных свечей с графиков в CSV т.к. не смог найти средство как это сделать штатно.
И еще утилитка рассчета суммарной прибыльности по сделкам:
[URL=http://radikal.ru/fp/6f660bd4842941e7842e2ddd37026b6f][IMG]http://s010.radikal.ru/i313/1502/a2/a9d90aa9df2at.jpg[/IMG][/URL&#93;
Страницы: 1
Наверх