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

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

Страницы: Пред. 1 ... 54 55 56 57 58 59 60 61 62 63 64 ... 79 След.
Как экономнее написать код
 
А что в итоге хотите получить?
Перерисовка индикатора из кода, Перезапуск OnCalculate()
 
Выкладываю байт код для создания индикатора арбитража как на предыдущей картинке
https://yadi.sk/d/BsGPAXPn3HFfyY
его надо поместить в каталог ...\QUIK\LuaIndicators
параметры индикатора:
Settings={
sec ="SBERP",  -- идентификатор  для первого графика
Name = "*ar_nkx", --имя индикатора
mline=0, --номер линии с графиком цены на первом графике
}

Чтобы открыть индикатор, надо встать мышью на второй график и добавить график *ar_nkx
В результате будет создан график по разности close второго и первого графиков.
Функция фракталы
 
Цитата
Pavel написал:
Спасибо за ответ.
Попытаюсь объяснить по другому. Мне нужно вывести 4 значения максимумов или минимумов свечей последних фракталов. На настоящем этапе я не могу получить значение даже одного. Каким образом это можно сделать?
Что за индикатор дает такую картину?
Есть два варианта.
1) Читаете график с экрана и ищите не нулевое значение (не помню точно в каком из параметров )  это значение будет всегда на несколько свечей назад. Так двигаясь справа налево ищите ненулевые значения сколько надо .
-----------------------------------------------
2) Строите сами экстремумы функции цены ( это и есть "фракталы",  но это название математически безграмотное , поэтому правильно их называть экстремумами )  Как определить экстремум можно найти в любом справочнике по математике или в интернете.
Эти экстремумы строите слева направо и пишите их в массив.
В результате получите все экстремумы (я их называю экстремумы первого уровня).
Ну и так далее...
Перерисовка индикатора из кода, Перезапуск OnCalculate()
 
Сейчас нарисовал алгоритм арбитража
Вроде бы перерисовывается при смене масштабов в реале посмотрим в понедельник.
Суть алгоритма следующая
Поясняю на примере арбитража сбербанка
На 1 графике помещаем себрбанк -П и он его метим меткой т е его будет читать по getCandlesByIndex
На втором графике размещаем сбербанк обычка
На третьем графике размещаем разность цен (арибтраж) который связывается со сбербанком обычкой.
-------------------
в результате получается следующее:
арбитраж строится по обычке,
прием графиков в окне идет последовательно поэтому первым принимаются данные по префам.
вот такая картинка в итоге:

 
Перерисовка индикатора из кода, Перезапуск OnCalculate()
 
нашел в архиве эту задачу.
У меня для нее была написана специально dll колбека для обмена информацией между графиками.
Перерисовка индикатора из кода, Перезапуск OnCalculate()
 
Я решал подобную задачу для арбитража.
Давно это было, поэтому пишу примерно.
Способ решения примерно такой.
На каждом тике проверяется количество свечей на графиках и если оно изменилось то перерисовывается график до последней свечи с минимальным номером.
Функция фракталы
 
В качестве пример привожу картинку правильного индикатора, который не заглядывает в будущее и строит все возможные уровни сопротивления и поддержки для имеющейся истории.
Функция фракталы
 
Объясняю про фрактал.
Эта функция написана плохо по следующей причине, так как она заглядывает в будущее.
В ней как можно заметить используется поиск максимума и минимума на некотором интервале истории. т е функция работает назад.
А значения на график выставляет задним числом тоже назад.
-------------------------------
Т е например на графике 10 свечек.  фрактал нарисован над 5- той.
Но когда было 6 свечей фрактала над 5-ой не было и когда 7 и когда 8 и вот когда стало 9 фрактал появился над пятой свечой.
-----------------------------------
Т е функция найдет этот максимум после того как на графике нарисуются , например,  8 свечей и поставит фрактал на 5 свечу, когда нарисует уже 9-ю.
-----------------------------
Поэтому такие индикаторы называются - индикаторы заглядывающие в будущие.
Обычно на таких индикаторах очень хорошо работают торговые роботы на истории и потом плохо работают такие роботы в реале.
Поэтому и фрактал надо искать назад в прошлое.
Время сервера сильно отстает от эталонного
 
Цитата
Алексей написал:
Цитата
Sergey Gorokhov   написал:
Алексей  ,
Время сервера это время сервера брокера. А время на сервере брокера совершенно не обязано совпадать со временем на Вашем компьютере и временем в торговой системе. Тем более что разных торговых систем великое множество, а не только МБ.
Если время отставания всегда примерно одинаковое, можно судить о том что где-то часты отстают, либо на оборот спешат.
И что такое "эталонные часы"? Какой-то супер NTP сервер? Если так, то никто обещал, что все биржевые площадки и все брокера и все компьютеры мира синхронизируются именно с ним и добиться этого, при нынешнем уровне технологического развития, не представляется возможным.
Вопрос был не о том, почему Сбербанк не выставляет время на своих серверах по моему компьютеру , а о том, что, похоже, данные на клиентский QUIK поступают с задержкой в более 3 секунды?

"Эталонные часы" я действительно забыл взять в кавычки. Разумеется - это время какого-либо популярного NTP сервера (timeserver.ru, time.windows.com, time.nist.gov, *.vniiftri.ru или случайного из ru.pool.ntp.org и т.д.) Только вот друг от друга они не отличаются более, чем на 1 с, а часы 2-х серверов Сбера всегда отстают на 3-5 с.
На активно торгующихся инструментах видно, что свечки обновляются явно по часам "SERVERTIME".
Кроме того, насколько я понимаю, getInfoParam("SERVERTIME") ЭТО ВОВСЕ НЕ ВРЕМЯ НА СЕРВЕРЕ БРОКЕРА!
Это время заключения последней обезличенной сделки по часам БИРЖЕВОГО сервера (время торговой системы), информация о которой дошла наконец до клиентского терминала QUIK.
Другими словами, это getInfoParam("LASTRECORDTIME"), только без "отмотки" времени назад из-за запоздавших данных.

Отсюда и вопрос:
Клиентский терминал QUIK получает биржевую информацию с запаздыванием на 3-5 секунд от времени фактического заключения сделок на бирже или часы сервера брокера синхронизированы с часами серверов биржи и, значит, запаздывания нет, а просто они все скопом отстают от тех NTP серверов, которыми я пользуюсь?

P.S.
    Скрытый текст        Sergey Gorokhov   написал:
Если так, то никто обещал, что все биржевые площадки и все брокера и все компьютеры мира синхронизируются именно с ним и добиться этого, при нынешнем уровне технологического развития, не представляется возможным.
Цитата
Binary protocol TWIME for derivatives market specification:
2.1.4. Date and time
<type name="DeltaMillisecs" description="Milliseconds per one timeout" maxValue="60000" minValue="1000" presence="required" primitiveType="uint32"/>
<type name="TimeStamp" description="Time in number of nanoseconds since Unix epoch, UTC timezone" maxValue="18446744073709551614" minValue="0" nullValue="18446744073709551615"
presence="optional" primitiveType="uint64"/>
Если биржа на срочном рынке использует в протоколах выставления заявок Timestamp такой точности (10e-9 с), то я сильно сомневаюсь, что часы торговой системы выставлены "от балды". Уверен, что они действительно отклоняются от Эталонного (без кавычек) UTC не более, чем на 10мс.
Нынешний уровень технологического развития позволяет получить через интернет от Российских Stratum-1 ntp серверов (тот же vniiftri.ru) эталонное время с точностью не ниже +-1мс, а по специальным каналам связи на 1-2 порядка точнее.
При этом все мировые Stratum-1 серверы синхронизируются друг с другом с точностью до 1 мкс, иначе никакой GPS или Глонас не работали бы.
В действительности все немного иначе.
На основе собственных экспериментов могу сказать следующее:
----------------------------
1)  при синхронизации часов на компе с эталоном, ошибка удаляется постепенно.
На это порою уходит несколько часов (в винде для этого есть специальный алгоритм) , чтобы ошибка стала в пределах 100 ms.
-----------------------
2) реально ошибка часов компа с эталоном составить от 10 до 100 ms после нескольких часов работы после включения компа.
-----------------------
3) Отставание часто наблюдается при сильной загрузке компа
Проверить это можно посмотрев в диспетчере задач % использования ЦП
---------------------------
4) Отставание возможно при большом числе графиков на экране (будет большой процент ЦП)
------------------------
5) Отставание возможно при вялотекущем трафике (особо в вечернюю сессию)
-----------------------------
6) Отставание возможно при резком движении рынка и фактической перегрузке  сервера брокера
----------------------------
7) Есть отставание в формировании свечей как правило это 1-3 секунды,
полагаю это так работает сервер брокера при формировании свечей.
-------------------
Если указанных выше причин не наблюдается, то отставания практически нет.
После обновления квика в очередной раз перестал работать индикатор - что опять поменяли?
 
После обновления квика в очередной раз перестал работать индикатор - что опять поменяли?
 
Цитата
Sergey Gorokhov написал:
Николай  Камынин  ,
Ваш пример не работает на пустых интервалах.
Собственно это есть цель данной ветки форума, о чем и был мой пример выше, а не о том как считать SMA.
Ваш же пример на пустых  интервалах сразу же ломается.
Не говоря уже о том что Ваш индикатор рисует нулевую свечку в начале, да и вообще значения индикатора от чего-то больше оригинальных (сравните со встроенном SMA).
В общем не то.
После обновления квика в очередной раз перестал работать индикатор - что опять поменяли?
 
Код
Settings = {
   Name = "nk_SMA",
   Period = 9,
   line = {{Name = "SMA",Type = TYPE_LINE, Color = RGB(255, 255, 0)}}
}

function Init() return #Settings.line  end

local P,i1=0,999;  local SMA,SUM=0,0

function jget(Y,i)
local m=i;  while(m>1 and Y(m)==0) do m=m-1; end;  return m;
 end

 --расчет скользящей средней на закрытой свече
 --- расчет выполняется один раз в момент открытия новой свечи
function OnCalculate(i)
   if i~=i1 then
      if i1>i then
         SUM=C(i); i1=0; SMA=0; P=Settings.Period;
      else
         x=C(jget(C,i1)); SUM=SUM+x;
         if P>=i1 then    SMA=SUM/i1;
         else
            SUM=SUM-C(jget(C,i1-P)); SMA=SUM/P;
         end
      end
   i1=i;
   end
    return SMA;
end


После обновления квика в очередной раз перестал работать индикатор - что опять поменяли?
 
Пардон, действительно, что-то не то загрузил.
После обновления квика в очередной раз перестал работать индикатор - что опять поменяли?
 
s_mike@rambler.ru,
хочу обратить Ваше внимание на то, что "внутри свечи" находится невозможно, так как нет алгоритма расчета свечи (есть лишь картинка на графике четырех индикаторов).
Правильно говорить о количестве интервале времени от начала  истории (или сессии) и моменте времени внутри текущего интервала.
Если Вы будете придерживаться такой системы координат, то нет никакой разницы для вычислений, сколько свечей на графике нарисовано.
После обновления квика в очередной раз перестал работать индикатор - что опять поменяли?
 
Цитата
Sergey Gorokhov написал:
Цитата
Николай  Камынин   написал:
что скажите о таком решении:
Слишком много ошибок
На каком инструменте Вы проверяли.
Я на сбербанке. ошибок нет график совпадает со встроенным индикатором.
Правда в отличии от Вашего решения ресурсов на порядки надо меньше.
После обновления квика в очередной раз перестал работать индикатор - что опять поменяли?
 
Цитата
s_mike@rambler.ru написал:
Цитата
Николай  Камынин   написал:
Тут что-то не так.
При смене интервала или еще чего-то и повторной инициализации на первом индексе уже не будет тиков, поэтому ничто не умрет.
Для надежности можно поставить флаг и тем более ничего не умрет.
по-моему проблема больше недодуманная, т е надуманная.
Вы просто не поняли суть проблемы. Если количество свечей на графике == 1, то все приходящие тики имеют номер свечи == 1 в случае продолжения торгов в пределах этой же свечи.

Подумайте.
Понятно.
----------------
Я реально так не изгалялся, но для решения такой задачи могу предложить следующее.
В этой ситуации необходимо ввести некоторую систему координат,
которая позволяет нам определять место нахождения внутри этой свечи.
------------------------------
Например, можно определить начальную инициализацию и все остальные.
--------------------------
Т е инициализация при загрузки скрипта отличается от инициализации при пересчете.
-----------------------
Кроме того, при пересчете мы имеем  информацию о количестве тиков от начала свечи.
Это значение может быть системой координат внутри свечи.
Таким образом, каждый пересчет будет отличаться от предыдущего и поэтому будет управляемым.
Полагаю, что лишних телодвижений можно полностью избежать.
Примерно так.
После обновления квика в очередной раз перестал работать индикатор - что опять поменяли?
 
Цитата
Sergey Gorokhov написал:
Здравствуйте,
Пока видится рабочим такой вариант:
Код
  Settings  =  {
   Name  =   "*SMA Example" , 
   Period  =   9 , 
   line  =  {{Name  =   "SMA" ,Type  =  TYPE_LINE, Color  =   RGB ( 255 ,  0 ,  0 )}}
}

 local  Index_tbl  =  {}
 local  SUM_TMP = {}

 function   Init () 
    return   # Settings.line
 end 

 function   OnCalculate (I)
    if  I  =  =   1   then 
      SUM_TMP  =  {}
      Index_tbl  =  {}
    end 
    if  CandleExist(I)  then 
       if  (Index_tbl[ # Index_tbl]~ = I)  then  Index_tbl[ # Index_tbl +  1 ] = I  end 
    else   return   nil   end 
   I  =   # Index_tbl
   SUM_TMP[I] = (SUM_TMP[I -  1 ]  or   0 ) + C(Index_tbl[I])
    if  I  >  =  Settings.Period  then 
       return  (SUM_TMP[I] - (SUM_TMP[I - Settings.Period]  or   0 ))/Settings.Period
    end 
    return   nil 
 end   
что скажите о таком решении:
Код
Settings = {
   Name = "*nk_SMA",
   Period = 9,
   line = {{Name = "SMA",Type = TYPE_LINE, Color = RGB(255, 0, 0)}}
}

local SUM,i_,SMA,m=0,0,0,0;
function Init() return #Settings.line  end

function OnCalculate(I)
   if I == 1 then SUM=0; i_=0; SMA=C(I);m=0; end
   if I~=i_ then
      if m>Settings.Period then  m=Settings.Period;
         if C(i_-m) then SUM-C(i_-m) end
      end
      if C(I) then SUM_TMP=SUM +C(I); m=m+1; SMA=SUM/m; end
   end
      i_o=I;
   end
   return SMA;
end

После обновления квика в очередной раз перестал работать индикатор - что опять поменяли?
 
Цитата
s_mike@rambler.ru написал:

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

Тут что-то не так.
При смене интервала или еще чего-то и повторной инициализации на первом индексе уже не будет тиков, поэтому ничто не умрет.
Для надежности можно поставить флаг и тем более ничего не умрет.
по-моему проблема больше недодуманная, т е надуманная.
После обновления квика в очередной раз перестал работать индикатор - что опять поменяли?
 
Позвольте пару слов :
Формализуем задачу в общем виде.
-----------------------------------
Имеем исходные данные Y на множестве независимой переменной X.
Множества Y,,X имеют пропуски значений.
По исходному множеству Y рассчитываем дискретную функцию Z=f(Y,X);
Задача:
На новое множество  X1 ,  которое имеет пропуски Y1,  отобразить Z.
При этом начало множеств X и X1 совмещаются линейным сдвигом на X0.
---------------------------------
Решение в общем виде состоит в том,
чтобы  сравнивать X и X1
и либо считать новое значение Z, если его не было, либо не отображать Z на X1 если нет X1.
-------------------------------
Поправьте, если не так.
CreateDataSource только из main?, а вне main можно корректно подписаться?
 
Хотел помочь.
Все что Вы написали делается в индикаторах
Квик вообще многопоточный ( даже больше двух)
А вот надобности в  колбеках  в индикаторах вообще нет.
Но чувствую,
Вы любите создать трудности, чтобы потом их преодолевать , задавая кучу вопросов, вместо чтения документации.
Успехов в мечтаниях.
CreateDataSource только из main?, а вне main можно корректно подписаться?
 
green_X5,
Судя по вашим вопросам, Вы не очень понимаете назначение скриптов и индикаторов для задач создания роботов.
попробую пояснить.
Если Вы торгуете одним инструментом, то проще всего написать робота в виде индикатора.
При этом, не надо ничего заказывать и не надо использовать колбеки.
Т е программа получается безобразно простая и соответствует на 99% запросам начинающих биржевых миллионеров.
После того, как Ваш робот заработает (либо сольет первый миллион) можно смело приступать к созданию робота на скрипте.
Информация из таблицы текущих торгов
 
Цитата
V Y написал:
Николай  Камынин  , Эта идея не сработала, по крайней мере для Quik Junior, В Quik открыта одна таблица Текущих торгов с одной строкой. Из скрипта получаю таблицу securities. возвращается 3909 записей, и не в одной шаг цены и/или размер лота не равны нулю.
Я говорб всегда о боевом сервере, а на учебном вообще ничего не надо смотреть. Он просто так для тестирования буратин.
Изучаем Qlua., "hello world"
 
if bit.band(order.flags,1) + bit.band(order.flags,2)==0  then message("исполнена",1) end;
Изучаем Qlua., "hello world"
 
if bit.band(order.flags,1) + bit.band(order.flags,2)==0  then message("исполнена",1)
Использование данных при вызове OnParam, вопрос
 
LONGNAME
Время изменения стакана получаемого через OnQuotes, OnQuotes - есть ли возможность параллельно с чтением стакана, получить точное время торгового сервера, когда он возник/изменился
 
Цитата
Борис Гудылин написал:
О синхронизации локального времени с сервером точного времени.
 
Раз в час синхронизирую время с сервером точного времени ntp1.vniiftri.ru. Сразу после этого  локальное время и время биржи если и отличаются, то не слишком заметно.
Но за час расхождение достигает нескольких секунд.
Во-первых, биржа тоже синхронизируется по серверу точного времени. и гораздо точнее чем ваш комп.
Во-вторых, синхронизируйте на раз в час а как хотите быстрее. Я синхронизирую раз в пять минут.
В-третьих, в винде есть алгоритм автоподстройки времени, который обеспечивает погрешность указанную ранее.
Вот результаты моих исследований этого вопроса (по оси Y - погрешность в секундах):
Информация из таблицы текущих торгов
 
можно надежно выбрать все инструменты, которые заказаны.
для этого проверяем параметры шаг и размер лота на ноль.
Если ноль, то инструмент не заказан.
Использование данных при вызове OnParam, вопрос
 
Цитата
Александр Правилов написал:
Итак, имеем код:
Функция getstime уже вам известна.

1. Проверяем условие и получаем true
2. Рассчитываем LASTDEPTHT - всё ок
3. Выходим из условия
4. В Delta присваиваем LASTDEPTHT - не работает LASTDEPTHT = nil
Код
           if  getSTime() >  100000   and  getSTime() <  184003   then 

         local  LASTDEPTHT_T  =   getParamEx (class,  sec, «LAST»)
         local  LASTDEPTHT = tonumber(toPrice(sec, LASTDEPTHT_T.param_value))

        tbl: SetValue (line_count_table[sec],'LAST',  string.format (LASTDEPTHT))

         end 

         local  Delta  =  LASTDEPTHT  
сделайте так:
Код
 local LASTDEPTHT_T,LASTDEPTHT; 
 if getSTime()>100000 and getSTime()<184003 then
   LASTDEPTHT_T = getParamEx(class,  sec, «LAST»)
   LASTDEPTHT=tonumber(toPrice(sec, LASTDEPTHT_T.param_value))
        tbl:SetValue(line_count_table[sec],'LAST', string.format(LASTDEPTHT))
        end

        local Delta = LASTDEPTHT
Возможность реализации события on_idle()
 
Давно ставил таймеры из IUPLUA.
Но мне привычнее  добавлять свои dll на основе API C for Lua.
Таким же способом обеспечиваю синхронизацию потоков, если надо.
Возможность реализации события on_idle()
 
А чем вам не нравятся локальные часы?  
Либо сделать отдельно иконку часов прозрачную и повесить впереди всех.
Локальные часы я синхронизирую по серверу точного времени . погрешность при длительной синхронизации 10-100 мс.
Время изменения стакана получаемого через OnQuotes, OnQuotes - есть ли возможность параллельно с чтением стакана, получить точное время торгового сервера, когда он возник/изменился
 
стакан возникает в момент его создания на экране
потом сервер присылает изменения которые добавляются в стакан.
время обновления можно узнать при вызове колбека  OnQuote функцией
getInfoParam ("SERVERTIME")
-------------------------------
Замечу следующее. Если есть желание знать время биржи, которое может отличаться от времени сервера, то синхронизируйте часы своего компа по серверу точного времени и читайте локальное время. Погрешность составить 10-100 ms.
Возможность реализации события on_idle()
 
Цитата
aidan1387 написал:
Возникла следующая задача: хочется на чарте видеть текущее локальное время.

Не очень понятно, как обеспечить его стабильное обновление, например, в клир, когда поток данных не такой плотный.

Есть ли какая-то возможность сэмулировать ивент, который будет прилетать в том же потоке через определенный промежуток времени, что и все остальные ивенты во избежания гонки? Из main не хотелось бы апдейтить гуй, чтобы не вылавливать потом не понятные хипкарапшены. Так же, необходимо обойтись только средствами скрипта lua (без каких-либо сторонних бинарей, данное требование нельзя отменить).

Может кто сталкивался, или разработчики что посоветуют?
Много можно сделать вариантов.

Например,
1) в момент совершения сделки по любому ликвидному инструменту.
2) В момент обновления ТТП
3) В момент изменения стакана и т д
т е в момент вызова любого колбека.
----------------------
Кроме того можно добавить средствами луа таймер.
-------------------
Получение данный о своей позиции, Получение данный о своей позиции
 
Цитата
Optimus1 Optimus1 написал:
Здравствуйте,

Подскажите пожалуйста, какой функцией можно получить данные о своей позиции, то есть данные о своих текущих сделках - ну что то типа:

1)Buy, GAZP, 100 лотов, 1000 рублей
2)Sell, Sber, 50 лотов, 2547 рублей
Такой таблицы нет.
Вам надо самому на луа считать , например в колбеке onTrade, и сохранять значения в файле, если надо историю.
Идентификаторы торговой сессии биржи и виды лимитов в брокерских настройках рабочего места
 
Чтобы ответить на вопрос  "Почему",  надо знать  "Зачем".

 
Нужен архив котировок, Предлагаю создать раздел архива котировок
 
архивы котировок можно купить на бирже
Цитата
Роман написал:
Уважаемый сотрудники ARQA Techologies в связи с тем что данные отражаемые на ваших графиках имею индивидуальные параметры (я имею введу цены свечей отличаются от скажем финама), прошу вас создать раздел или меню в Квике от куда пользователи мог ли бы загружать архивы котировок и тестировать на них свои системы! Да сейчас вы предоставляете возможность вытаскивать с графиков 3000 свечей, но этого мало, мне бы было интересно брать ваш архив скажем часовик с 2000 года.
Прикольно, где это у ARQA Techologies нашли архивы реальных котировок ?
Архивы в студию!!!
 
Странный перенос стратегии с WLD в LUA
 
Цитата
Роман написал:
Решение одно стандартизировать разрядность.
Ну, во-первых, у меня нет разности доходности в амиброкере и квике.
во-вторых, у меня считает одинаково и в Амиброкере и в квике
В-третьих, я не виноват в том, что Вы воинствующий дилетант.
 
Момент появления свечи
 
Цитата
Егор Масалкин написал:
Т.е. я правильно понимаю, что отдельно события "открытие новой свечи" нет, и кроме пересчета времени способа открыть сделку с первой сделкой в свече нет?
правильно понимаете.
Но открою Вам секрет, отрывать сделку надо не по открытию , а по закрытию свечи.
 Тогда ваша сделка будет либо на открытии следующей свечи, либо в числе первых насколько это будет возможным.
Странный перенос стратегии с WLD в LUA
 
Цитата
Роман написал:
Николай Камынин  , при всём уважении я привёл здесь достаточно фактов!
Вполне допускаю, что примеров достаточно с Вашей точки зрения. так как Вы озабочены этой проблемой.
Но судя по ответам,  проблема либо  не понятна , либо проблемы вообще нет.
Если цель поста - сделать заявление о том, что все у Вас плохо, то цель достигнута.
но полагаю, что вы хотите получить какие-то ответы для решения проблемы. Верно?
Тогда попробуйте объяснить проблему подробнее и понятнее для других, если нужна помощь в ее решении.
простое сложение с 0.01
 
b = math.floor((a*1000)+100)/1000
простое сложение с 0.01
 
Цитата
Алексей написал:
a = 143.45
b = math.floor((a*100)+10)/100
c = 143.55
b = (math.floor(a*1000)+100)/1000
Странный перенос стратегии с WLD в LUA
 
Цитата
Роман написал:
print(string.format("x = %.15f", x)) - ну это так заплатка конечно временная, при каждом сложении её ставить. В программе нужно настройку поставить или с общими стандарты откорректировать.
Полагаю, что Вы не поняли.
Есть внутренний формат данных  и внешний.
Внутренний - это то как считается, а внешний - это то как смотрится.
Считается и WLD и в lua и в МТ4 в формате double.
В других языках, например на CИ либо на 64 битной машине можно считать еще в double dlouble формате, будет еще точнее.
А отображение на экране в каждом языке делается, еслм по умолчанию, то  как задумано автором языка.
-----------------------------
Но основная проблема у Вас, по-моему мнению, в том,
что если Ваш робот перестает работать при разности в ценах E-15, то это мертвый робот.
Он  будет сливать депозит на реальном счете.
getParamEx
 
Цитата
Старатель написал:
Код
  Price  =  tonumber( getParamEx ( 'FUTSPREAD' ,  'RIM7RIU7' ,  'last' ).param_value)
 message (tostring(Price))
 --> 0   

Вопрос к разработчикам:
Вы можете предложить надёжный способ убедиться, что getParamEx даёт действительно последнюю цену инструмента, а не её отсутствие?
Вообще-то странный вопрос.
это же цена последней сделки !!!
Если инструмент торгуется и была хотя бы одна сделка в сессии, то цена последней сделки не может быть равна нулю или nil.
следовательно, если цена последней сделки ноль - то информации о сделках в текущей сессии еще не поступало, что равноценно - сделок  нет.
---------------------------
Умным - горе от ума..
Момент появления свечи
 
Цитата
Егор Масалкин написал:
Всем доброго времени суток.
Пишу робота, столкнулся с таким нюансом. Изначально спроектировал его так, чтобы проверка на выполнение условий выставления заявки была по времени (допустим, раз в минуту, путём pause(X) ).

Дело в том, что таким образом если я запускаю робота на 46-ой секунде на сервере, то первая проверка будет осуществляться на 46-ой секунде; следующая на 1 минуте 46; потом 2 минуты 46 и т.д.

Надо сделать так, чтобы проверка отрабатывала всегда на моменте открытия новой свечи. И не могу найти инфу, как программно выцепить именно момент открытия. Могу конечно время подогнать, но это не то. Подскажите, может есть какая-то встроенная функция... из справки в разделе "функции обратного вызова" вроде нет ничего подходящего, либо я не понял это(
Для этого необходимо понять каким образом формируется свеча.
Поясняю.
--------------------------------
Свеча - это четыре индикатора. Ее основная задача сжать данные о сделках.
-----------------------------
Это сжатие осуществляется следующим образом:
Ось времени разбивается на одинаковые интервалы.
На каждом интервале формируются четыре индикатора.
Первый индикатор - открытие свечи (open) - это первая сделка, которая произошла на текущем интервале. - Это и есть правило определения начала сделки.
---------------------------------
Для его реализации Вы должны синхронизировать свои часы с часами биржи и обнаруживать первую сделку при наступлении нового интервала.
интервалы считаются от начала суток т е от 00:00.
--------------------
Странный перенос стратегии с WLD в LUA
 
Цитата
Роман написал:
Или даже так:

8,51999999999998 * 100 = 851,999999999998 равно 8,52 *100 = 852
Цитата
Роман написал:
Michael Bulychev  ,    т.е. по вашему 8,51999999999998 это тоже самое что и 8,52?
Роман,
правильно я вас понял.  Вы утверждаете, что  8,51999999999998 это не 8.52?
-------------------------------
Но если Вы посчитаете погрешность то получите 2.29342E-15.
Потом возьмете справочник по программированию и узнаете, что формат double, который используется в LUA, в МТ4, в WLD позволяет хранить числа с погрешностью 15 десятичных цифр, т е относительная погрешность E-15.
а вот отображение на экране оператором print выполняется в соответствии  с заданным Вами или заданным по умолчанию форматом.
----------------------------------
так в чем у вас проблема?
Ограничение 3000 свечек., Безумие.
 
Цитата
Руслан Сахаров написал:
Цитата
Николай  Камынин   написал:
если надо анализировать историю , то возьмите амиброкер. Обрабатывал в нем историю по сберу за 10 лет с таймом 5 минут.
10 лет ?))))))))) я вам открою маленькую тайну за 10 лет рынок поменялся минимум раз 20))) 2-3 квартала, дальше смысла смотреть нету очень много всего может произойти за это время и активность изменится и уже раньше активность которая способствовала заработку в  настоящее время не будет способствовать!  
    Вы всегда будете на шаг позади если слишком далеко будете уходить в историю задумайтесь над этим за 10 лет вы можете выявить общую тенденцию и логику сделок но подстроится грамотно чётко у вас не получится и сама по себе история это тоже малооинформативная информация нужно смотреть как торговалось как приходили объёмы в каком количестве на каком фоне но эту инфу я беру из другой программы там полностью торги все проигрываются, но есть минус я не могу отдалить график нормально в общем такая вот наша держава великая.. все кусками приходится собирать..

    Николай задумайтесь над этим! сегодня 1000 коней развернут рынок через квартал активность на активе будет гораздо выше он не почувствует эти 1000 коней... через квартал активность упадёт 1000 коней снова развернут... все в сравнении и вообще активность меняется каждый день иногда каждый час..)))
Есть активность которую работает трейдер это что то среднее.. надеюсь вам это поможет... когда то на сишке объёмы торгов были не такие большие соответственно другие деньги влияли на ценовое движение сегодня всё подругому,  это не 10 лет это 6 лет со дня  когда началось ралли на рубле, все начали покупать  и продавать доллары и активность актива выросла в разы!
Благодарю за рассказ Вашего видения рынка.
Но если Вы не видите в чем-то смысл, то это не значит , что в этом нет смысла. Смысла нет исключительно лишь для вас.
Например, могу предположить, что Вы не видите смысла и нейронных сетях и искусственном интеллекте.
Посмотрите мой сайт www.kamynin.ru , возможно Вы увидите смысл и в изучении больших интервалов.
------------------
В качестве информации к размышлению:
попробуйте ответить на вопросы:
1) почему рынок меняется, а для  технического анализа применяются методы которым в обед 100 лет, а вездесущим свечам так все двести.
2) Что изменилось в психологии людей за последние 1000 лет?
-------------------
Успехов в поиске смысла.
LUA и QPILE, Сравнение возможностей двух языков
 
Цитата
Boris Litvinov написал:
пишу на QPILE и луа, Перехожу на C++. Не заметил что бы QPILE умер.
он уже давно не поддерживается разработчиками, поэтому и умер.
LUA и QPILE, Сравнение возможностей двух языков
 
Цитата
Сергей Королев написал:
QUIK дает возможность писать программы для себя сразу на двух языках. Просмотрел форум, но не нашел сравнительного анализа. Прошу знатоков высказывать свое мнение о преимуществах и недостатках каждого.
Преимущества QPILE
простой язык.
проще освоить и писать на нем.
--------------------------------------------------
Недостатки QPILE
простой язык.
Переменный одного уровня видимости.
Программа исполняется интерпретатором, что существенно медленнее, чем VMLua.
Существенно ограничены возможности реализации сложных алгоритмов.
==================
В Lua есть возможность подключать любые библиотеки (dll), что позволяет реализовать алгоритмы на нативном коде и получить максимальное быстродействие,  создавать программы на любых языках программирования.
======================
QPILE - умер..
INDICATORS.ZIP
 
вообще-то свечи - это разделение сделок по одинаковым временным интервалам. Поэтому если в каком-то интервале нет сделок то и свеча нулевая.
Поэтому пустая свеча - это время без сделок. Если сделок нет, то свеча пустая и считать нечего.
Поэтому правильно - ничего не изменять на пустых свечах.
Но так как применение различных статистических методов к свечам вообще  не корректно,
то можно считать все, что угодно.
-----------------------------
Как говорится в анекдоте: Там висит кирпич, туда ехать нельзя, но вам можно.
Ограничение 3000 свечек., Безумие.
 
если надо анализировать историю , то возьмите амиброкер. Обрабатывал в нем историю по сберу за 10 лет с таймом 5 минут.
INDICATORS.ZIP
 
Цитата
Василий Петров написал:
Цитата
Nikolay   написал:
Ме помогли данные конструкции.

Нет свечки, тогда значению массива текущей даем предудыщее значение.
Код
      if     not   CandleExist(index)   then  
CC[index]   =   CC[index  -    1  ] 
  return     nil  
  end      

Если надо получить значение пршлой свечки, то сначала находим ближайшую существующую прошлую, через эту функцию
Код
      function    FindExistCandle (I)
     local   out   =   I
   
     while     not   CandleExist(out)   do  
   out   =   out   -    1  
     end     
   
     return   out
 
  end      
Код
      local   previous   =   index  -    1  
      
  if     not   CandleExist(previous)   then  
   previous   =   FindExistCandle(previous)
  end  
      
  if   C(index)   >   C(previous)   then      
Соорудил подобное при помощи рекурсивного вызова функции.
Код
   function   GetPrice (ind)
    if  ind ~ =   0   then 
       if  CandleExist(ind)  =  =   false   then 
          return  GetPrice(ind -  1 );
       else 
          return  С(ind)
       end 
    else 
       return   0 
    end 
 end 
  
Быстрее будет, если вместо поиска свечки назад, просто запоминать индекс последней существующей свечки.
При отсутствии свечки брать сохраненный индекс.
Страницы: Пред. 1 ... 54 55 56 57 58 59 60 61 62 63 64 ... 79 След.
Наверх