Виктор Столетов (Все сообщения пользователя)

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

Страницы: 1 2 След.
Функция SetRangeValue рисует лишнюю линию, Как убрать линию, соединяющую уровни, заданные SetRangeValue
 

Есть еще один  вопрос по линиям индикатора:

Если задать тип линии TYPE_DASH или  TYPE_POINT, то штрихи и точки идут очень близко  друг к другу. Когда сжимаешь график, то они сливаются в сплошную линию.

Можно ли как-то регулировать ширину пробелов между точками или штрихами, чтобы сделать их реже?

Американские акции и фьючерсы, Где скачать по ним минутные данные?
 

Раньше в Quick можно было вывести  графики по иностранным индексам,  акциям и фьючерсам. Но с начала этого года их нет в списке инструментов. Техподдержка брокера ВТБ говорит, что теперь эти данные им не поставляют.

Мне нужны минутные данные в виде таблицы. На американских сайтах такая информация платная (на одном  например подписка стоит $ 450 в  год).

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

Проблемы с math.random
 
Цитата
Sergey Gorokhov написал:
тогда так:

Еще раз спасибо за помощь.  Проверил - на положительных числах  работает правильно. Только надо помнить, что если шаг цены=1, то  надо задавать P=0 (а не  1).  

Я сделал по другому – см. код ниже.  При этом в качестве Р надо всегда задавать шаг цены, например если шаг цены=1, то  надо задавать P=1.  К остатку remnant добавляется +1.E-9 для корректировки. Дело в том, что иногда remnant принимает значения типа 0.3199999999999  вместо 0,32. Именно так получилось для числа 78.82 при step=0.5.  Если +1.E-9 не добавлять, то в случаях типа 0.3199999999999  могут получиться неверные (заниженные) результаты.

Код
function main()
 step=0.5
 v1=FROUND(78.15,step) -- дает 78
 v2=FROUND(78.25,step) -- дает 78.5 
 v3=FROUND(78.43,step) -- дает 78.5
 v4=FROUND(78.61,step) -- дает 78.5
 v5=FROUND(78.75,step) -- дает 79
 v6=FROUND(78.82,step) -- дает 79
end

function FROUND(v,step)
  remnant=math.fmod(v, step)
  v=v-remnant
  if (remnant+1.E-9)/step>=0.5 then 
   v=v+step
  end
  return v 
end
Проблемы с math.random
 
Цитата
Sergey Gorokhov написал:
Позвольте немного скорректировать.

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

Отрицательных чисел у меня нет, поэтому я написал по варианту  Майка и немного упростил - убрал tonumber, а  вместо (p or 0) написал просто p. Получилось так:

Код
function round(value, p)
   local e = 10 ^ p 
   return math.floor(value * e + 0.5) / e
end
x0=round(123.456,0) -- дает 123
x2=round(123.456,2) -- дает 123,46

Правда моя задача немного сложнее - надо округлить выражение (high+low+close)/3 до шага цены. Если шаг цены равен 1 или 0,01 или 0,0001, то проблем нет, т.к. каждому шагу цены легко сопоставить параметр p, например: шаг=1 - p=0; шаг=0,01 - p=2; шаг=0,0001 - p=4.

Но что если шаг цены равен к примеру 0,5? Тогда число 78.61 следовало бы округлить до 78,5, но при p=1 оно округлится до 78,6, а при p=0 до 79. Хотя это уже мои проблемы, если найду решение, то напишу.

Проблемы с math.random
 

У меня тоже вопрос по математическим функциям. В руководстве не нашел функции округления до целого. Например, как сделать, чтобы 5,7 округлялась до 6, а 5,2 - до 5?

math.ceil(5.2) округляет вверх и дает 6 (а неплохо бы иметь 5)

math.floor(5.7) округляет вниз и дает 5 (а неплохо бы иметь 6)

выражение 5.2-5.2%1 отбрасывает дробную часть и тоже дает 5.

Или надо  самому писать функцию округления по нормальным  математическим правилам?

Вопросы по LUA
 
Цитата
vgi написал:
Что Вы подразумеваете под "клеткой"?Если это "пробел", то сделайте в "Опции - Настройки... - Синтаксисы - Настройка Табуляции - Размер табул. 1 и √ Заменить пробелом" и табайте блоки на один пробел влево-вправо.
Спасибо за помощь. Да, мне как раз и нужно сдвигать на 1 пробел.
Вопросы по LUA
 
Чтобы не открывать новую тему, задам свой вопрос здесь.
В редакторе Notepad++ иногда нужно сдвинуть большие блоки текста вправо, например, когда добавил цикл и хочешь его выделить для облегчения восприятия.
Приходится делать это для каждой строки блока и на это уходит много времени.
Конечно, можно выделить блок текста и нажать Tab. Но тогда   сдвигает блок на целых четыре  клетки.

Вопрос:  можно ли сдвинуть блок текста вправо всего на одну клетку?
Глубина истории на графиках акций, Как увеличить количество свечей?
 
Да, с двоеточием работает. Чтобы таблица data_source содержала ненулевые значения, график должен быть открыт, интервал графика не важен.
Глубина истории на графиках акций, Как увеличить количество свечей?
 
Я вызывал функцию CreateDataSource из индикатора, а в списке доступных из индикатора функций ее нет. Видно в этом и есть причина, что не работает.
Однако функции getCandlesByIndex тоже нет в этом списке, но она в индикаторе работает нормально.
Если вызвать CreateDataSource из скрипта, то сообщения   "attempt to call global 'CreateDataSource' (a nil value)" уже нет, но извлечь элементы таблицы data_source не получается. Полный код приведен ниже.
Операторы message  и PrintDbgStr выдают сообщение  S=function: 152CAE70 Cl=nil
Пробовал получить цену close 1-й свечи так: Cl=data_source[1].С и тоже безуспешно.

Код
function main()
 data_source=CreateDataSource("TQBR","SBER",INTERVAL_M1) 
 S=data_source.Size -- кол-во свечей 
 Cl=data_source.C(1) -- Close 1-й свечи
 PrintDbgStr("Size=" .. tostring(S) .. " Close1=" .. tostring(Cl))  
 message("Size=" .. tostring(S) .. " Close1=" .. tostring(Cl))
end
Глубина истории на графиках акций, Как увеличить количество свечей?
 
Цитата
Egor Zaytsev написал:
Да это так.
А если это так,  то для накапливания  истории сверх 3000 свечей надо ежедневно вызывать графики всех интересующих  акций на всех интересующих интервалах, что трудоемко  и практически нереализуемо.
Если же  в течение дня график акции не просматривал, или не запускал терминал, то должна образоваться  дыра истории.
В Lua есть функция CreateDataSource для заказа данных по нужному интервалу. По идее если написать скрипт с перебором интересующих акций и интервалов и запускать его ежедневно 1 раз, то можно накопить историю.
Но и здесь я столкнулся с непонятной проблемой: функция не работает - выдает сообщение "attempt to call global 'CreateDataSource' (a nil value)".
Глубина истории на графиках акций, Как увеличить количество свечей?
 
Мне надо выполнить тестирование на исторических данных по акциям на 10 минутном графике, но не хватает глубины истории и из-за этого нельзя получить статистически значимые результаты.

В руководстве в разделе "перезаказ данных" написано, что на рабочем месте QUIK хранится до 65000 свечей. Такое количество свечей имеется только на минутном графике, а с увеличением периода оно уменьшается. На примере акций Сбербанка картина такая:
1 минута - 66061 свечей с 27.12.2017
5 минут - 21642 свечей с 10.05.2017
10 минут - 3106 свечей с 30.04.2018
1 час - 4270 свечей с 16.09.2016
1 день - 3142 свечей с 12.12.2005
В целом наблюдается закономерность: чем больше интервал графика, тем глубже история свечей. Поэтому непонятно, почему на 10 минутном графике  история начинается позднее, чем на 1 и 5 минутном графиках и свечей на порядок меньше. Может это связано с тем, что раньше я постоянно работал с 1м, 5м, 1ч и 1д, а 10 минутные графики никогда не вызывал?

Вопрос такой: можно ли увеличить глубину истории на 10 минутном графике соразмерно с другими периодами, скажем до 10000-15000 свечей?  может где-то есть архивы исторических данных?
Функция SetRangeValue рисует лишнюю линию, Как убрать линию, соединяющую уровни, заданные SetRangeValue
 
Цитата
s_mike@rambler.ru написал:
TYPE_CANDLE )
Спасибо за помощь. Если в Settings задать Type=TYPE_CANDLE, то уровни линией не соединяются. Уровни рисуются пунктиром и  хорошо видны при толщине 1. Странно, что в руководстве в списке типов линий TYPE_CANDLE вообще нет.
Функция SetRangeValue рисует лишнюю линию, Как убрать линию, соединяющую уровни, заданные SetRangeValue
 
Когда в индикаторе с помощью функции SetRangeValue задаю горизонтальные отрезки на разных уровнях, то эти отрезки почему-то соединяются линией. Если ввести такой блок:

sz=Size()
SetRangeValue(1,sz-3,sz,100)
SetRangeValue(1,sz-7,sz-5,200)

то получится картина, как на скане внизу слева, а по идее в точке sz-4 должно быть пусто. Попробовал  добавить оператор SetValue(sz-4,1,nil), который казалось бы должен стереть эту линию, но это ничего не дает.

Все-же от ненужной  линии можно избавится, если в Settings задать Type=TYPE_POINT. Тогда вместо линии будут точки, как показано на другом скане внизу справа.  
Вроде на этом можно и забить кол, однако разве душа трейдера может смириться с этим? - Точки то совсем блекнут при растягивании графика, то сливаются в яркую линию при сжатии графика, в отличие от нормальной линии.

Интересно, есть ли другое решение этой проблемы,  с использованием Type=TYPE_LINE?  



 
Доступ к свечам открытого интереса фьючерсов
 
Цитата
Egor Zaytsev написал:
Проверьте в пункте меню Система - Заказ данных - Поток обезличенных сделок, есть ли в списке данный режим торгов.
Если его нет, то брокер Вам не предоставил права на получение обезличенных сделок по данному классу.
Похоже, что не предоставил. Есть режим "РПС: Размещение: Адресные заявки (облигации)", но он к фьючерсам не относится. Других "РПС" нет.

Кстати биржа ответила на вопрос о  несоответствии трансляции открытого интереса и объема так:
"Термины SPBFUT и PSFUT относятся к работе QUIK, на бирже эти термины не используются. С данным вопросом вам следует обратиться к ARQA Technologies, разработчику ПО QUIK."

Вопрос был задан бирже в такой форме:
"В Quik биржа транслирует открытый интерес фьючерса без привязки к классу, т.е. суммарно по классам  SPBFUT и PSFUT, а объем транслирует только по классу SPBFUT.
Можно ли узнать открытый интерес только по классу SPBFUT , либо объем по классу PSFUT, либо суммарный объем по классам SPBFUT и PSFUT? А если да,
то возможно ли это в режиме реального времени на минутном графике? "

Видимо биржа не поняла вопрос или сделала вид, что не поняла.
Доступ к свечам открытого интереса фьючерсов
 
Цитата
Sergey Gorokhov написал:
известен, он в таблице обезличенных сделок транслируется, опять же по классу PSFUT
Вызвал таблицу обезличенных сделок в конце дня и ни одной сделки по фьючерсам класса PSFUT я в ней не нашел. Все сделки там только класса SPBFUT. Проверил это по нескольким фьючерсам, результат один и тот же.
При вызове таблицы обезличенных сделок я выбрал группу "FORTS: Фьючерсы", затем "Фильтр ценных бумаг" и добавил фьючерсы, потом добавил поле "Код класса". Может что-то сделал не так?
Доступ к свечам открытого интереса фьючерсов
 
Цитата
Sergey Gorokhov написал:
это режим переговорных сделок по фьючерсам.
По определению режим переговорных сделок – это режим сделок без предварительного депонирования средств с отложенной датой исполнения, предусматривающий возможность заключения адресных и безадресных сделок.
Заключать сделку с отложенной датой исполнения имеет смысл для хеджирования и тогда такие сделки должны быть крупными.  
Если запустить индикатор отношения изменения открытого интереса к объему F=dOI/V на дневном или часовом графике, то аномалия F>1 наблюдается только на старых барах, где объемы совсем малы. В то время  еще действовал другой более ближний контракт и спекулянтов на текущем контракте  было мало, а доминировали именно переговорные сделки. Это тоже  говорит в пользу того, что переговорщики - это хеджеры.
Как показывает расчет на минутном графике, неравенство F>1 выполняется на малом количестве  минутных баров, всего 6-14% от их общего количества, в зависимости от фьючерса. Если верно то, что переговорные сделки крупные, то они должны составлять примерно такой же небольшой процент от всех сделок.
Правда все эти наблюдения никак не решают проблему несоответствия dOI и V в трансляции данных биржей. Ведь объем переговорных сделок как я понимаю неизвестен.
Доступ к свечам открытого интереса фьючерсов
 
Цитата
Sergey Gorokhov написал:
Вопрос к бирже.
Она транслирует открытый интерес по инструменту без привязки к какому-либо классу.
А объем в разрезе конкретного класса.
Т.е. если инструмент в классе SPBFUT и PSFUT Вы увидите суммарный открытый интерес по обоим классам а объем только по инструменту из SPBFUT.
Тогда еще позволю себе задать 3 вопроса:
1. Что такое класс PSFUT?
2. Есть ли еще другие классы у фьючерсов кроме SPBFUT и PSFUT?
3. Где можно посмотреть какие бывают классы у фьючерсов?
Доступ к свечам открытого интереса фьючерсов
 
Случайно обнаружил, что у фьючерсов отношение F= OI / V, где OI- пределы изменения открытого интереса на баре (т.е. high - low), а V – объем, бывает больше 1.
По идее F должно быть не больше 1. F=1 может быть   только в 2-х случаях: если все контракты на баре заключаются между новым покупателем и продавцом, либо все они закрываются между старым покупателем и продавцом.
Если запустить приведенный ниже индикатор на минутном графике, то обычно F изменяется от 0 до 2, но у некоторых фьючерсов  достигает и 100 (чтобы индикатор работал, надо для графика указать идентификатор Open_int – об этом подробнее было написано раньше 19.02.18) . Получается, что изменение открытого интереса превышает объем.
Как такое может быть?

Код
Settings=
 {Name="voi",
  line={Name="F",
        Color= RGB(0,128,255),
        Type=TYPE_LINE,
   Width=1}  
  }

function Init()
 return 1
end

function OnCalculate(i)
  sz= Size()
  if i==1 then 
   Id="Open_int" 
   nc=getNumCandles(Id)
   t=getCandlesByIndex (Id, 0, 0, nc)
  end 
  if i<sz then
   i1=i-1 -- нумерация для доступа к свече открытого интереса начинается от 0, а к свече объема от 1  
   if V(i)>0 then
    F=(t[i1].high-t[i1].low)/V(i)
   else 
    F=0
   end    
  end 
  return F
end
Комиссия за клиринг по фьючерсам
 
Цитата
SG написал:
Это позиция, существующая несколько торговых дней. Для неё нужно рассчитывать вариационную маржу отдельно за каждый торговый день.

Спасибо за пример. По этой методике расчета  все сошлось.  Таким образом если позиция открыта несколько дней, то для контрактов, связанных с долларом (нефть, золото, индекс РТС), для расчета прибыли/убытка по позиции надо делать  расчет вариационной маржи за каждый день из-за разных индикативных курсов и стоимости  шага цены.  Расчетная цена – это цена закрытия в 18-44 на минутном графике или в 18 ч на часовом.  Архив расчетных цен содержится на сайте биржи в таблице фьючерсов по ссылке http://www.moex.com/ru/derivatives/contracts.aspx (надо нажать «итоги» по нужному фьючерсу).
Для остальных  контрактов достаточно просто вычесть из цены закрытия цену открытия.  
Доступ к свечам открытого интереса фьючерсов
 
Цитата
Sergey Gorokhov написал:
Да это возможно.
Доступ происходит по тому же принципу что и к графику цены и объема.
Если через getCandlesByIndex, то на нужном графике надо указать идентификатор.
Если через CreateDataSource, то в четвертом параметре надо указать имя параметра, для открытого интереса это "numcontracts"

Спасибо за помощь. Первым способом через  getCandlesByIndex получилось. На всякий случай поясню, если кто не знает как на графике указать  идентификатор (в свое время сам не сразу это понял): правой мышью  на графике жмешь «редактировать», в левом поле окна выбираешь диаграмму «кол-во открытых позиций», дальше  «дополнительно», в поле «идентификатор» задаешь его, например Open_int.  Код может быть такой:

Код
Id="Open_int"
nc=getNumCandles(Id)
t,n,l=getCandlesByIndex (Id, 0, 0, nc)
oi=t[nc-1].close  -- закрытие самой новой свечи открытого интереса

Не могу понять еще такую вещь - что показывает объем в свече на графике открытого интереса?  
Комиссия за клиринг по фьючерсам
 
Цитата
SG написал:
Сначала по терминологии: сделка не может длиться несколько дней, она совершается мгновенно, когда ваша заявка сводится в стакане с другой заявкой противоположного направления. В результате сделки появляется открытая позиция, которая будет существовать, пока вы её не закроете другой сделкой противоположного направления, или пока не наступит экспирация фьючерса. Комиссия за заключение сделки списывается в ближайший клиринг. Комиссия за исполнение фьючерса на экспирации - в клиринг, когда произошло исполнение. За удержание открытой позиции комиссия не берётся. Обратите внимание, комиссия за заключение сделки и комиссия за исполнение - это разные комиссии.
Спасибо за подробные разъяснения. Я думал, что кроме брокерской и биржевой комиссии за открытие и закрытие позиции берется еще комиссия за клиринг.  Получается, что комиссия за исполнение фьючерса   (согласно "Тарифы  *  организации ..."   п. 7 раздела V) берется только в случае, если  додержал контракт до исполнения.  А за перенос (удержание) открытой позиции комиссия не берется.

Все же при расчете прибыли/убытка по позиции у меня не сходится с остатком собственных средств, когда позиция закрывается после 19 ч (реальный остаток немного меньше расчетного).  Брокерскую и биржевую комиссию при этом учитываю в равной мере за открытие и закрытие. Может  беру в расчет не тот индикативный курс?  К примеру, если позиция по фьючерсу на нефть закрылась 15.02.2018 в 19-10, то какой индикативный курс надо брать для расчета прибыли/убытка – курс основного клиринга на 18-30 или промежуточного клиринга на 13-45 на  дату 16.02.2018?  По идее надо брать курс на 18-30.

Обратил внимание, что если позицию открыл до 14 ч, а закрыл после 14 ч того же дня, то в отчетах для  фьючерсов, связанных с долларом (нефть, золото, валюты) объем сделки вычисляется на основании разной стоимости шага цены. Это вводит в заблуждение при расчете прибыли/убытка. Ведь на самом деле при этом расчете надо брать одну и ту же стоимость шага цены по состоянию на 18-30.

В отчете по всем сделкам  в Quik биржевая комиссия присутствует дважды, даже если открытие и закрытие произошло в тот же день, что опять вводит в заблуждение. В брокерском отчете  и в реестре комиссий в личном кабинете  биржевая  комиссия в данном случае  встречается только один раз, как и должно быть.  
Доступ к свечам открытого интереса фьючерсов
 
У свечей  на графике открытого интереса фьючерса такие же параметры как у свечей цены - H,L,O,C,V,T.
Можно ли  в Lua получить доступ к  свечам открытого интереса, например к закрытию C?
Комиссия за клиринг по фьючерсам
 
Возможно, это вопросы к НКЦ (национальному клиринговому центру), но если кто знает, то просьба ответить  хотя бы на часть вопросов насчет  комиссии за клиринг по фьючерсам:
1) Когда начисляется и списывается со счета эта комиссия - в дату заключения сделки? в дату закрытия сделки? в каждый клиринг, включая дневной (если сделка длится несколько дней)?
2) Верно ли то, что комиссия за клиринг по фьючерсам на российские акции равна 0,00425% от суммы контракта?
3) Чему равна комиссия по фьючерсу на золото - 1 или 2 руб?
4) Где я могу посмотреть комиссию за клиринг по своим сделкам? (в брокерском отчете, в личном кабинете в реестре комиссий и в отчетах в Quik эта комиссия не указана)

На сайте http://www.moex.com/s93  в п. 4  даются ссылки, где смотреть  клиринговые тарифы по фьючерсам. В "Тарифах клирингового центра" в п. 36.4 на стр. 65 говорится, что комиссия начисляется в дату ЗАКЛЮЧЕНИЯ сделки. В другом документе "Тарифы  *  кредитной организации ..." в п. 7 раздела V говорится, что комиссия начисляется в дату ИСПОЛНЕНИЯ фьючерсного контракта. По золоту в упомянутом разделе V тарифов указано 1 руб., а в таблице "клиринговые сборы за исполнение срочных контрактов (вызывается по одноименной ссылке в п. 4 сайта) - 2 руб. Разобраться в этих замечательных документах не так то просто.
не отображаются данные на графике
 
Цитата
Egor Zaytsev написал:
Проверьте следующие настройки:
Зайдите в пункт меню Система/Настройки/Основные/Программа/Сохранение данных/

и выберите пункты "Данные, отражающие текущее состояние и всю историю изменений» и «Получать пропущенные данные"
Спасибо, это помогло.  Через пару минут данные подкачались и пробелы закрылись..  
не отображаются данные на графике
 
По теме отсутствия данных на графике еще 1 один вопрос:
На графике «кол-во открытых позиций» у фьючерсов не отображается часть данных с начала сессии, если вошел в терминал через некоторое время  после открытия сессии.
Если через какое-то время  выйти из терминала и снова войти, то картина не меняется, т.е. данные отсутствуют на том же самом интервале. На следующий день пробел в данных прошлого дня заполняется.
Так и должно быть или есть способ  получить пропущенные данные?
График с пропуском данных «кол-во открытых позиций» выглядит так:

 
Снятие всех заявок в Lua, Какой брать параметр trans_id?
 
Цитата
Sergey Gorokhov написал:
Что именно не понятно?
Спасибо, теперь после объяснения все понятно. Разобрался, как вставлять jpg-файлы и привожу функцию снятия всех заявок для данного класса по всем инструментам в более читаемом  виде:



Еще не могу разобраться, почему функция  getMoney выдает одни и же значения до выставления  заявок  и после превращения одной из них в сделку:  money_current_balance, money_limit_available и money_limit_locked не меняются.  Хотя в таблице лимитов по денежным средствам Квика они ("текущий остаток", "заблокировано" и "доступно") меняются .  
Снятие всех заявок в Lua, Какой брать параметр trans_id?
 
Цитата
Sergey Gorokhov написал:
Команды «KILL_ALL_ORDERS», «KILL_ALL_STOP_ORDERS», «KILL_ALL_NEG_DEALS» не поддерживаются в QLUA.
Нашел, что на этом форуме данная тема уже обсуждалась – см. ссылку https://forum.quik.ru/forum10/topic996/
Я взят оттуда за образец функцию снятия всех заявок и немного ее упростил.  
Она снимает все заявки для данного класса по всем инструментам – код см. ниже /не знаю как вставить скрин кода (jpg-файл), поэтому вставил просто текст программы/.
Судя по всему функция myFind ищет все активные заявки, а SearchItems выбирает их из таблицы заявок.  И все же я не совсем понимаю, как  работает  функция снятия всех заявок . Почему например в операторе local ord = "orders" стоит "orders", а не "order"? Ведь по идее таблица заявок  называется "order"  (см. описание функции OnOrder).  Но если написать local ord = "order" , то не работает.

function Close_all_order()
function myFind(F)
 return (bit.band(F, 0x1) ~= 0)
end
local ord = "orders"
local orders = SearchItems(ord, 0, getNumberOf(ord)-1, myFind, "flags")
if (orders ~= nil) and (#orders > 0) then
 for i=1,#orders do
  local transaction={
  TRANS_ID=tostring(1000*os.clock()),
  ACTION="KILL_ORDER",
  CLASSCODE=c_code,
  SECCODE=getItem(ord,orders[i]).sec_code,
  ORDER_KEY=tostring(getItem(ord,orders[i]).order_num)
  }
  local res=sendTransaction(transaction)
 end
end
end
Снятие всех заявок в Lua, Какой брать параметр trans_id?
 
В руководстве пользователя QUIK в разделе «Формат .tri-файла с параметрами транзакций» написано, что для снятия всех заявок обязательные параметры - «CLASSCODE», «TRANS_ID», «ACTION»,  «ACCOUNT».
Непонятно, как задавать TRANS_ID. Брать его для любой активной заявки? А если TRANS_ID будет соответствовать заявке, которая превратилась в сделку, то тогда функция снятия  всех заявок  не сработает? Правильно ли вообще написана у меня  эта функция?

function Close_all_order()
local Transaction={
ACCOUNT="L01-00000F00",
TRANS_ID=tostring(trans_id),
CLASSCODE="EQOB",
ACTION="KILL_ALL_ORDERS"}
local Res = sendTransaction(Transaction)
end

Идентификатор транзакции  trans_id  задается в основной программе и при открытии каждой заявки  увеличивается на 1:  trans_id=trans_id+1.
Откkючение маржинального кредитования в Quik
 
Цитата
s_mike@rambler.ru написал:
Придется написать небольшой робот, который после исполнения каждой заявки смотрит на ситуацию с деньгами и при необходимости снимает остальные заявки.

Только возникает проблема с отладкой робота. На демо-счете в таблице «Клиентский портфель» кредитное плечо 1,00 и я могу выставить заявку только в пределах собственных средств. К тому же на демо-счете интересующих меня облигаций ВТБ Б-1-1 и  ВТБ Б-1-2 просто нет (хотя  это не проблема, можно отладить на других облигациях ). Но не отлаживать же робот, который выставляет заявки,  на реальном счете!  Брокер – ВТБ24. Может у других брокеров демо-счета с плечом?  
Откkючение маржинального кредитования в Quik
 
Цитата
Alexandr Shumilin написал:
Данный вопрос можно адресовать Вашему брокеру, в его силах отключить Вам возможность маржинального кредитования. Но тогда и не получиться выставить сразу несколько заявок, т.к. покупательная способность будет ограничена размером собственных средств.
Понятно. Я думал, что объем средств на еще не исполненные заявки не ограничивается собственными и заемными средствами и заявок можно выставлять сколько угодно.

Цитата
s_mike@rambler.ru написал:
Придется написать небольшой робот, который после исполнения каждой заявки смотрит на ситуацию с деньгами и при необходимости снимает остальные заявки. Отключением маржинального кредитования ваш вопрос не решается.
Спасибо за совет.   Например, если на счете 1 млн. руб., то выставляю 2 заявки по 1 млн. руб. на разные облигации, при кредитном плече 1:2. Точнее, чуть меньше, чем на 1 млн. руб., чтобы не войти в маржу из-за комиссии при открытии.  Если одна заявка исполнится, то вторую робот должен снять. Если одна заявка исполнится частично, например на 300 тыс. руб., то объем второй заявки робот должен уменьшить до 700 тыс. руб.  
Откkючение маржинального кредитования в Quik
 
При покупке облигаций встает вопрос: можно ли отключить маржинальное кредитование в Quik?

Вопрос связан вот с чем: После отмены налога на доход с корпоративных облигаций доход по ним стал больше, чем по ОФЗ.  Однако корпоративные облигации неликвидны, спред между ценами покупки  продажи порядка 0,5 %. Пример – ВТБ Б-1-2.  Если для покупки этой облигации выставить лимитную заявку даже по  лучшей цене покупки в стакане, то не факт, что заявка в течение дня исполнится.  Поэтому неплохо бы выставлять сразу 2 или несколько заявок на разные облигации, для увеличения шансов на сделку. Но тогда может исполниться больше одной заявки  и войдешь в  маржу. Чтобы выйти из маржи, придется срочно продавать лишние облигации, а из-за большого спреда получишь значительный убыток. Если бы можно было отключить маржинальное кредитование, то данная проблема была бы решена, т.к. тогда после исчерпания собственных средств ненужные заявки не будут исполняться.
не отображаются данные на графике
 
Цитата
Egor Zaytsev написал:
Виктор, если на графике в истории вы видите пробелы, то помочь может перезаказ архива графиков.
Да, вы потеряете архив, который накопился локально, но к сожалению, по другому в текущей реализации никак.
Добавим, что возможно и перезаказ не поможет, все зависит от того, какие графики на стороне брокера на сервере, возможно там тоже некорректные, с пробелами.

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

Но есть еще одна более серьезная  проблема.  У меня якорем к таблице текущих торгов привязаны 2 графика с разным таймфреймом. Когда перехожу с одной акции на другую, то бывает  графики загружаются с большой задержкой (10-30 сек),  но это происходит недолго и потом   все нормализуется. Но сегодня 16.11.2017 графики загружались с задержкой по нескольку минут всю вторую половину дня! Даже если переключался между 2-мя одними и теми же акциями (казалось бы в этом случае графики должны храниться в памяти). При этом связь была и котировки менялись.  Интересно, кто в этом случае неправ -  брокер или  интернет?
не отображаются данные на графике
 
Вот 2 примера дыр истории на минутном графике акций Лукойла: дыры 20.06.-06-07, 27-07-07.08, 28.08, 06.09-11.09 и 27.10 и  ГМКНорНик: дыры 20.06-22.06, 28.07.-07.08, 25.08-11.09 и 20.09-25.10.  Брокер - ВТБ 24.




 
не отображаются данные на графике
 
У меня тоже вопрос по этой теме. Речь идет о торговле на реальном счете.
На минутных  графиках акций постоянно присутствует  несколько дыр истории. Дыры проявляются визуально как  гэпы, которые реально не существуют.  Например, сейчас на графике Лукойла дыры в периоды 27.07-16.08, 25.08-06.10 и 18.10-31.10. На графиках разных акций периоды дыр отличаются. На других таймфреймах, например  5-минутных, часовых  и дневных,   дыр нет. В help  в разделе "перезаказ данных" написано, что для перезаказа данных можно  выбрать флаг «Архив данных для построения графиков». Но дальше такое предупреждение:
"ВАЖНО! На Рабочем месте QUIK хранится до 65000 свечей. При перезаказе архива графиков с сервера QUIK загружается не более 3000 свечей, остальные свечи, хранившиеся на Рабочем месте QUIK, удаляются."
Получается, что если я перезакажу данные, то наоборот  потеряю большую часть истории?
Можно ли как-то убрать дыры на минутных графиках акций?  
Подскажите как создать папку, переименовать папку или файл, удалить файл?
 
Цитата
s_mike@rambler.ru написал:
закрыть файл и использовать os.remove()
Спасибо за помощь.  При этом аргумент функции надо брать в кавычки, а путь указывать с двумя // типа
os.remove("d:\\files\\filename.txt")
Подскажите как создать папку, переименовать папку или файл, удалить файл?
 
Можно ли  программно удалить текстовый файл, созданный оператором  f = io.open(getScriptPath().."\\file.txt","w") ?  А то приходится каждый раз удалять ненужные файлы вручную.
Информация из таблицы текущих торгов
 
Цитата
Sergey Gorokhov написал:
Есть функция getClassSecurities которая вернет список инструментов в классе.
Еще есть getClassesList которая вернет список классов
Спасибо за рекомендацию.  
Можно еще вывести таблицу текущих торгов через DDE-сервер в файл excel. (в меню «действия» выбрать «вывод через DDE-сервер).   Затем в файле  удалить лишние столбцы, оставить только столбцы кодов бумаги и кодов класса (если код класса один, то столбец кодов класса тоже удалить).  Дальше сохранить файл как текстовый с расширением .txt.  Теперь просто считать столбец кодов бумаги в массив, предварительно открыв файл:
i=1
for line in f:lines() do
 sec_code[i]=tostring(line)
 i=i+1
end  
Информация из таблицы текущих торгов
 
При использовании функции getParamEx (class_code,  sec_code,  param_name) для получения параметров param_name из таблицы текущих торгов надо задавать class_code и  sec_code.  Приходится для sec_code  создавать массив километровой длины типа  sec_code  ={"ALRS","AFLT", ...,"FEES"}. А если список акций в таблице текущих торгов меняется то этот массив приходится  тоже менять.

Вопрос: можно ли просто прочитать все строки таблицы текущих торгов подряд без задания  class_code и  sec_code и определить параметры param_name?  
Сделки совершённые по рынку
 
В предыдущем моем  сообщении ошибка:
Цитата
Виктор Столетов написал:
На демо-счете я делал так: в окне ввода заявок ставлю флаг "рыночная" и задаю цену на несколько пунктов выше текущей цены плюс опции  "по одной цене" и "полностью или отклонить".  
Правильно будет  так (без слов "ставлю флаг "рыночная" ):
"На демо-счете я делал так: в окне ввода заявок выбираю "покупка" и задаю цену на несколько пунктов выше текущей цены плюс опции "по одной цене" и полностью или отклонить".  
Сделки совершённые по рынку
 
Цитата
swerg написал:
Вот бы автор потрудился написать что он подразумевает под "сделками по рынку"
Сделка по рынку в моем понимании выполняется по рыночной заявке,  когда в окне ввода заявок активирую флаг "рыночная".

По рыночным заявкам  у меня тоже есть вопрос,  и если сможете, то помогите коллеги.  Мне надо, чтобы рыночные заявки  исполнялись  полностью без дробления. Если в окне ввода заявки выбрать опции "по одной цене" и "полностью или отклонить", то рыночная заявка не проходит.  На демо-счете я делал так: в окне ввода заявок ставлю флаг "рыночная" и задаю цену на несколько пунктов выше текущей цены плюс опции  "по одной цене" и "полностью или отклонить".  Тогда заявка исполнялась полностью по текущей цене. Однако на реале такой трюк почему-то не проходит, т.е. сделка не совершается. Причем не выдает никаких сообщений об ошибке.  Чтобы как-то быть уверенным, что рыночная заявка выполнится полностью, я смотрю на стакан, и если у лучшей цены на продажу достаточный объем, то открываю на покупку (при этом оставляю опции по умолчанию "по разным ценам" и "поставить в очередь").  Но прежде чем успею в окне ввода заявки нажать "Да",  этот объем  ведь может измениться, и тогда моя сделка может быть выполнена частично.  
Поэтому  хотелось бы понять, можно ли законно отправить рыночную заявку  полностью по одной цене?  
Сделки совершённые по рынку
 
Цитата
Антон Нету написал:
Подскажите пожалуйста возможно ли как-нибудь узнать какие сделки были совершены по рынку у того или иного эмитента?
К примеру есть таблица обезличенных сделок, которая показывает все сделки. И по рынку и нет.

А возможно ли как-нибудь вытаскивать информацию именно по сделкам, которые прошли по рыночным ценам?

Может быть нужно написать скрипт какой-нибудь?
Чисто теоретически могу предложить такой подход:
Написать скрипт, который параллельно анализирует таблицу обезличенных сделок и стакан. Если  в стакане изменилось количество лотов только для лучшей цены покупки (продажи) на величину N и одновременно в таблице обезличенных сделок появилась сделка с количеством лотов  N на продажу (покупку), то это рыночная сделка.  Остальные сделки лимитные. При совершении  лимитной  сделки в стакане должно меняться одновременно количество лотов для лучшей цены покупки и продажи. Исключение составляет случай, когда для второй после лучшей цены покупки или продажи стоит такое же количество лотов, этот случай надо отслеживать.
Возможно, что сделка в таблице обезличенных сделок появляется с  некоторой небольшой задержкой после изменения данных в стакане, и эту задержку надо учесть в скрипте, а предварительно определить ее экспериментально.
Так можно оценить, какая доля всех сделок приходится на рыночные и лимитные.
Обезличенные сделки за прошлые торговые сессии
 
Цитата
Сергей Николаев написал:
Насчет МаркетМейкера напишу пару слов.
МаркетМейкер устанавливает цену открытия торговой сессии.
МаркетМейкер может "придержать" движение цены в определённую сторону.
"Придержать" это значит, что он может размещать очень крупные ордера на покупку и/или на продажу с целью остановить мелких трейдеров и/или скальперов. Позиционщиков это не сильно остановит или испугает, если они увидят очень крупные объёмы против их позиции.
А что, такое  объяснение выглядит  правдоподобно. Если ММ выставил такой большой фиктивный ордер например на покупку, то это психологически может не только остановить внутридневных трейдеров от продажи, а наоборот подтолкнет их к покупке. Парни смотрят на стакан и думают: раз толстосумы покупают, значит время покупать, а не продавать.
Спасибо вам Сергей за подробные разъяснения.

Насчет стакана интересно узнать мнение бывалых:  кого больше -  тех, кто открывается по рынку или тех, кто выставляет лимитные ордера?  
У меня опыта по акциям нет, а есть некоторый опыт на  форексе. Там  имеется 4 типа отложенных ордеров  - buy stop, sell stop, buy limit и sell limit.  Аналогов первых двух в Quik нет. Смысл например  buy stop в том, чтобы установить цену покупки выше текущей, и когда цена  развернется  вверх, ордер сработает.  Это разумно и даже в help по Metatrader4 написано, что чаще всего выставляют именно ордера buy stop и sell stop.  Однако если в Quik выставить заявку  типа buy stop на покупку по цене выше рыночной, то она сработает сразу же по текущей цене!  
На мой взгляд выставлять ордера типа buy limit и sell limit или лимитные ордера по акциям – не очень умная стратегия. Потому что например при лимитном ордере на покупку цена боле вероятно опустится  еще ниже установленной в ордере цены, чем пойдет  вверх. Еще как то может быть оправдано  установить цену на покупку ниже рыночной цены у уровня поддержки, но все равно рискованно.   Так что стакан похоже не лучший показатель общей картины по акции.
Обезличенные сделки за прошлые торговые сессии
 
Цитата
Stanislav Tvorogov написал:
При работе с демо-версией QUIK Junior графики и цены действительно не соответствуют тем, что транслируются биржей, а эмулируются программно.
Я так и думал.  В Quik на демо-счете  похоже   много сюрпризов. Например,  если в конце торговой сессии  записать цену закрытия, то на следующий день на дневной свече того предыдущего дня будет уже другая цена закрытия.  Поэтому соответствие  котировок на демо-счете и реале вызывает сомнение, хотя внешне графики выглядят похоже.   Из-за того, что сделки на следующий день почему-то исчезают, их  приходится записывать в Excel. В общем отработать  долгосрочную стратегию на демо-счете в Quik  сложно.
К слову,   на Forex в Metatader4 таких проблем нет, а   графики на демо-счете   в выходные дни не исчезают (хотя торговли на Forex  в выходные дни тоже нет, как и по акциям).

Цитата
Denis написал:
прямой коррелляции между ценой и объемами нет. Можно нарисовать умопомрачительное падение или рост на малых объемах и наоборот. Какая цена нужна ММ такая и будет.
Это заметно. Например, на дневном графике акций «Башнефть» с 16 ноября и по сей день свечи как расплющенные, при довольно больших объемах. На Forex  такого паттерна не встречал.  Возможно многие мелкие держатели  продают эти акции, а компания «Башнефть» пытается  поддержать свои акции и выкупает их, вот цена и меняется мало.
Обезличенные сделки за прошлые торговые сессии
 
Пользуясь данной темой,  задам тоже  вопрос по таблице обезличенных сделок:

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

Реального счета у меня пока нет, и  все это вижу  на демо-счете? Может причина в этом?
Подскажите как создать папку, переименовать папку или файл, удалить файл?
 
Цитата
Constantin написал:
А если "," использовать?
Это я вчера немного заработался, видно устал. На самом деле метод с разделителями работает, причем с любыми, в т. ч. и с запятой. В моем случае надо было при вызове excel  после запроса, какой разделитель, установить флаг “точка с запятой”.   Расширение .csv присваивать нет необходимости.  На практике для вывода данных в таблицу для просмотра  в excel  надо написать что-то типа такого (предварительно открыть файл  .txt оператором io.open):

for i=1,3 do
f:write(i .. ";" ..i+1 .. ";” i+2 .. “\n")
end  
Подскажите как создать папку, переименовать папку или файл, удалить файл?
 
Здравствуйте уважаемые программеры!
У меня тоже вопрос по файлам и чтобы не создавать новую тему, решил написать здесь..  
Файловые операторы типа  f= io.open(...),   f:write(...)  выводят данные в обычный текстовый файл .txt. Если  данные разной длины, то они  "едут" и плохо читаются.  
Можно ли каким-то способом вывести данные в  файл  .csv, чтобы потом открыть его в excel, где данные разделены  нормально по столбцам?

P.S. пробовал вставить разделители ";"  в конце выводимых полей  типа f:write("fild1;" .. "fild2;" .. "fild1"), а потом присвоить файлу расширение .csv, но так обмануть программу конкретно не получилось (т.е .excel этого не понял)..
QLUA, вопросы начинающих.
 
Цитата
Sergey Denegin написал:
я тоже пользуюсь notepad++. Иногда при открытии даже ранее редактируемого в нем скрипта, он почему-то считает, что у него какая-то другая кодировка. Чтобы быть уверенным, идете в меню "Кодировки => кодировки => кирилица => windwos-1251.
После этого проверяете, что в тексте скрипта все по русски. Если нет, придется исправить на русский текст.
Спасибо, Сергей.  Все получилось.  Когда из Notepad++ выбрал кодировку win1251, то действительно все русские слова в тексте скрипта стали  иероглифами. После того, как перебил их снова на русский,  стал выводиться нормальный  русский текст.  
QLUA, вопросы начинающих.
 
Вот  это за пределами моего понимания . Как же убедится, что кодировка win1251?     Скрипт  был написан в редакторе Notepade. Он что, кодирует по другому, чем стандартная кодировка Windows?  
QLUA, вопросы начинающих.
 
Приветствую коллеги. Столкнулся вот с какой проблемой:
Когда в скрипте Lua  в операторах message и  PrintDbgStr  пишу русский текст, то выдает иероглифы.  Пробовал перезагружаться   и еще на другом компьютере, но это не помогло.  С латынью проблем нет.  В индикаторах эти  операторы выводят русский текст нормально.  Может кто знает, как  заставить скрипт говорить по-русски?  
Отладка скриптов Lua для Quik., Как произвести отладку скрипта?
 
Теперь я понял -  надо, чтобы одновременно было открыто оба графика.  Например, если индикатор  на часовом графике, и  в нем  выполняются  какие-то операции с минутными барами, то сначала открываем  минутный график и  задаем на нем на вкладке «дополнительно» идентификатор.  Затем кидаем индикатор на часовой график.  
Страницы: 1 2 След.
Наверх