Sergey Gorokhov пишет: в OnTransReply едут ответы на все транзакции и не важно от куда они до этого отправлялись.
Ерунда! OnTransReply не приходят на транзакции, поданные вручную.
Да, действительно следует уточнить . Туда едут ответы на все транзакции имеющие trans_id, не важно от куда они до этого отправлялись. Транзакции поданные через интерфейс не имеют trans_id и соответственно в колбэк не попадут
в OnTransReply едут ответы на все транзакции и не важно от куда они до этого отправлялись. И это правильное поведение.
Если нужно фильтровать ответы на транзакции только LUA скрипта, отправляйте транзакции с каким-нибудь особенным TRANS_ID и в OnTransReply уже фильтруйте ответы по параметру trans_id
Старатель пишет: Переключился на тиковый интервал: секунды появились. Но милисекунды не транслируются.
А теперь переключитесь с демо спотана демо фортс или на боевые торги.
Я имел ввиду для параметров из ТТП. На боевом сервере мс не транслируются для параметров.
Ещё такой вопрос.
Код
function main()
tDS = CreateDataSource('QJSIM', 'SBER', INTERVAL_M1)
tDS:SetUpdateCallback(function(nIndex) end)
message('[main] '..tostring((tDS:Close())), 2)
end
Результат: [main] true
Код
local bRun, tDS = true
function OnStop()
bRun = nil
end
function main()
tDS = CreateDataSource('QJSIM', 'SBER', INTERVAL_M1)
tDS:SetUpdateCallback(function(nIndex) end)
while bRun do sleep(200) end
message('[main] '..tostring((tDS:Close())), 2)
end
Результат: [main] nil
Код
local bRun, tDS = true
function OnStop()
message('[OnStop] '..tostring((tDS:Close())), 2)
bRun = nil
end
function main()
tDS = CreateDataSource('QJSIM', 'SBER', INTERVAL_M1)
tDS:SetUpdateCallback(function(nIndex) end)
while bRun do sleep(200) end
end
Результат: [OnStop] nil
Код
local bRun, tDS = true
function OnStop()
message('[OnStop] '..tostring((tDS:Close())), 2)
bRun = nil
end
function main()
tDS = CreateDataSource('QJSIM', 'SBER', INTERVAL_M1)
tDS:SetUpdateCallback(function(nIndex) end)
while bRun do sleep(200) end
message('[main] '..tostring((tDS:Close())), 2)
end
Результат: [OnStop] nil [main] false
Можете объяснить результаты?
Здравствуйте!
Информация получена, проблема изучается. Постараемся в ближайшее время дать ответ.
Добрый день,
Ошибка будет исправлена в одной из следующих версий программы.
Сравните с примером -Раздел 6. Совместная работа с другими приложениями --Импорт транзакций ---Формат .tri-файла с параметрами транзакций ----Примеры строк, которые могут содержаться в файле -----"Тэйк-профит и стоп-лимит"
Цитата
Валентин пишет: ["TYPE"] = "M", ["PRICE"] = "0", эти поля нужны?
Еще раз повторяю, поле TYPE, НЕ для стоп заявок Поле PRICE да нужно, посмотрите пример
Sergey Gorokhov пишет: Здравствуйте, Да верно на ФОРТС не существует рыночных заявок. Но QUIK умеет их эмулировать. Для этого нужно поставить Type=M и указать цену 0
почему в данном случае не происходит эмуляция?
Здравствуйте, Параметр "TYPE" для лимитированных заявок. Для стоп заявки "TAKE_PROFIT_AND_STOP_LIMIT_ORDER" используются параметры MARKET_STOP_LIMIT или MARKET_TAKE_PROFIT
Если считаете наш выбор одного из способов не правильным, выберете свой и реализуйте его на LUA
p.s. так проблема в этом и есть что вашего способа реализации тоже нет, в википедии не написано где возведение в целое требуется, а где нет - если использовать LUA, я в принципе понял - если в формуле есть что то типа 100*.. нужно в Луа болты крутить.
Роман, При чем тут LUA когда мы говорим о математике? Если считаете виноватым LUA воспроизведите формулу из википедии на excel увидите те же самые цифры.
Наша реализация аналогична реализации википедии, за исключением двух моментов, это умножение -M и +M на 100 и округление значений (ADX, +DI, -DI ) до целых
Роман пишет: Ладно ну его в баню, там может быть косяк с чем угодно связан, учитывая что Луа с заплатками работает - там в сотые могут все сбить. Потом сяду сравню расчёт и ADX в ТА с самых основ и там уже найду в чём проблема.
Роман, "косяк" в том что существуют разные способы в расчета ADX Уже было сказано что в QUIK формула аналогична формуле в википедии. Если не верите википедии посмотрите другие сайты average-directional-index Если считаете наш выбор одного из способов не правильным, выберете свой и реализуйте его на LUA
Роман пишет: Сразу в глаза кидается ATR - зачем оно там.
Роман, Я Вам уже три раза повторил причину. Существует ДВЕ формулы ADX И тот пример который я написал НЕ по той формуле которая в QUIK А по той формуле которая указана по ссылке
local dHigh = H(Index) - H(Index-1)
local dLow = L(Index-1) - L(Index)
На сайте написано так:
у меня так:
Код
if ((dHigh < 0) and (dLow < 0)) or (dHigh==dLow) then
pDM[Index-1] = 0
mDM[Index-1] = 0
end
if (dHigh > dLow) then
pDM[Index-1] = dHigh
mDM[Index-1] = 0
end
if (dHigh < dLow) then
pDM[Index-1] = 0
mDM[Index-1] = dLow
end
На сайте написано так:
у меня так:
Код
--Average Directional Move Indicator
local pAMD = pDM_MA(Index-1, {Period=N, Metod=M}, pDM, idp)
local mADM = mDM_MA(Index-1, {Period=N, Metod=M}, mDM, idp)
--где для EMA
--EMA_TMP[Index]=round((EMA_TMP[Index-1]*(Period-1)+2*ds[Index]) / (Period+1),idp)
--Average True Range
local ATR = ATR_MA(Index-1, {Period=N, Metod=M}, TR, idp)
--где для EMA
--EMA_TMP[Index]=round((EMA_TMP[Index-1]*(Period-1)+2*ds[Index]) / (Period+1),idp)
На сайте написано так:
у меня так:
Код
local pDI = round(100 * pAMD / ATR, idp)
local mDI = round(100 * mADM / ATR, idp)
на сайте написано так:
у меня так:
Код
DX[Index-N] = 100 * math.abs(pDI-mDI) / (pDI+mDI)
и наконец, на сайте написано так
а у меня так:
Код
return ADX_MA(Index-N, {Period=N, Metod=MetodADX}, DX, idp),pDI,mDI
--где для EMA
--EMA_TMP[Index]=round((EMA_TMP[Index-1]*(Period-1)+2*ds[Index]) / (Period+1),idp)
Я Вам уже говорил, LUA примера ADX по формуле как в QUIK у нас уже нет, и делать я его не буду. Попробуйте сделать его самостоятельно (формула у Вас уже есть), готов помочь при возникновении проблем.
Эта формула НЕ такая как в QUIK о чем также было явно сказано. Так что причин удивляться тому что этот индикатор НЕ такой как в QUIK совершенно нет. Так как именно об этом и идет разговор последние 20 постов.
Роман пишет: Самое интересное что этот вариант с EMA, отличается от графика ADX Квика.
Вам явно и не двусмысленно было сказано, что тот код который я привел воспроизводит ту формулу которую Вы привели. Эта формула НЕ такая как в QUIK о чем также было явно сказана. Так что причин удивляться тому что этот индикатор НЕ такой как в QUIK совершенно нет. Так как именно об этом и идет разговор последние 20 постов.
Цитата
Роман пишет: Этот код немного отличается о того что я сделал, в преобразовании в целое round - упоминаний об этом не встречал не где.
Округление было добавлено по моей личной инициативе в процессе исследования. Если оно Вам мешает, не вопрос просто выключите его: Round = "-1",
Sergey Gorokhov пишет: наша формула совпадает с формулой метастока. В то время как например в том же метатрейдере используется формула приведенная Вами
Опечатка, перепутал метасток и метатрейдер, следует читать так:
Цитата
наша формула совпадает с формулой метатрейдера. В то время как например в том же метастоке используется формула приведенная Вами
Роман пишет: 1. на EMA - он же на финаме, у вас не верный
Роман, нашу формулу я Вам приводил, да она отличается от той что привели Вы. Покопавшись в истории выяснилось что наша формула совпадает с формулой метастока. В то время как например в том же метатрейдере используется формула приведенная Вами На счет сайта финама ничего не могу сказать. Так вот, оказывается эти различия заметили не только Вы http://forum.mql4.com/ru/47825
И как оказалось единого мнения не нашлось. Также в процессе исследования, я воспроизвел расчеты приведенные Вами, может оказаться полезным:
Код
SMA="SMA"
EMA="EMA"
SMMA="SMMA"
Settings= {
Name = "!LUA_ADX",
Period=14,
Metod = EMA, --Metod: SMA, EMA, SMMA
MetodADX = EMA, --Metod: SMA, EMA, SMMA
Round = "0", --округление
line = {
{
Name = "LINE_ADX",
Type = TYPE_LINE,
Width = 1,
Color = RGB(0, 0, 255)
},
{
Name = "LINE_ADX +DI",
Type = TYPE_LINE,
Width = 1,
Color = RGB(0, 255, 0)
},
{
Name = "LINE_ADX -DI",
Type = TYPE_LINE,
Width = 1,
Color = RGB(255, 0, 0)
}
}
}
function Init()
F=ADX()
return #Settings.line
end
function OnCalculate(Index)
return F(Index, Settings)
end
--Average Directional Movement Index (ADX)
function ADX()
local pDM_MA=MA()
local mDM_MA=MA()
local ATR_MA=MA()
local ADX_MA=MA()
local pDM={}
local mDM={}
local TR={}
local DX={}
return function (Index, Settings)
local Settings=(Settings or {})
local N = (Settings.Period or 14)
local M = (Settings.Metod or EMA)
local MetodADX = (Settings.MetodADX or M)
if (Settings.Round=="") or (tonumber(Settings.Round)<0) then idp=nil else idp=tonumber(Settings.Round) end
if Index>1 then
local dHigh = H(Index) - H(Index-1)
local dLow = L(Index-1) - L(Index)
if ((dHigh < 0) and (dLow < 0)) or (dHigh==dLow) then
pDM[Index-1] = 0
mDM[Index-1] = 0
end
if (dHigh > dLow) then
pDM[Index-1] = dHigh
mDM[Index-1] = 0
end
if (dHigh < dLow) then
pDM[Index-1] = 0
mDM[Index-1] = dLow
end
--Average Directional Move Indicator
local pAMD = pDM_MA(Index-1, {Period=N, Metod=M}, pDM, idp)
local mADM = mDM_MA(Index-1, {Period=N, Metod=M}, mDM, idp)
--True Range
TR[Index-1] = math.max(math.abs(H(Index) - L(Index)), math.abs(H(Index) - C(Index-1)), math.abs(C(Index-1) - L(Index)))
--Average True Range
local ATR = ATR_MA(Index-1, {Period=N, Metod=M}, TR, idp)
if Index > N then
--Directional Index
local pDI = round(100 * pAMD / ATR, idp)
local mDI = round(100 * mADM / ATR, idp)
--Directional Movement Index
DX[Index-N] = 100 * math.abs(pDI-mDI) / (pDI+mDI)
return ADX_MA(Index-N, {Period=N, Metod=MetodADX}, DX, idp),pDI,mDI
else
return nil,nil,nil
end
else
return nil,nil,nil
end
end
end
function MA()
local t_SMA=fSMA()
local t_EMA=fEMA()
local t_SMMA=fSMMA()
return function(Index, Settings, ds, idp)
local Settings=(Settings or {})
local P = (Settings.Period or 9)
local M = (Settings.Metod or EMA)
if M == SMA then
return t_SMA(Index, P, ds, idp)
elseif M == EMA then
return t_EMA(Index, P, ds, idp)
elseif M == SMMA then
return t_SMMA(Index, P, ds, idp)
else
return nil
end
end
end
------------------------------------------------------------------
--Скользящие средние (SMA, EMA, VMA, SMMA)
------------------------------------------------------------------
--[[Simple Moving Average (SMA)
SMA = sum(Pi) / n
]]
function fSMA()
return function (Index, Period, ds, idp)
local Out = nil
if Index >= Period then
local sum = 0
for i = Index-Period+1, Index do
sum = sum +ds[i]
end
Out = sum/Period
end
return round(Out,idp)
end
end
--[[Exponential Moving Average (EMA)
EMAi = (EMAi-1*(n-1)+2*Pi) / (n+1)
]]
function fEMA()
local EMA_TMP={}
return function(Index, Period, ds, idp)
local Out = nil
if Index == 1 then
EMA_TMP[Index]=round(ds[Index],idp)
else
EMA_TMP[Index]=round((EMA_TMP[Index-1]*(Period-1)+2*ds[Index]) / (Period+1),idp)
EMA_TMP[Index-2]=nil
end
if Index >= Period then
Out = EMA_TMP[Index]
end
return round(Out,idp)
end
end
--[[Smoothed Moving Average (SMMA)
SMMAi = (sum(Pi) - SMMAi-1 + Pi) / n
]]
function fSMMA()
local SMMA_TMP={}
return function(Index, Period, ds, idp)
local Out = nil
if Index >= Period then
local sum = 0
for i = Index-Period+1, Index do
sum = sum +ds[i]
end
if Index == Period then
SMMA_TMP[Index]=round(sum / Period, idp)
else
SMMA_TMP[Index]=round((sum - SMMA_TMP[Index-1] + ds[Index]) / Period, idp)
end
SMMA_TMP[Index-2]=nil
Out = SMMA_TMP[Index]
end
return round(Out,idp)
end
end
------------------------------------------------------------------
--Вспомогательные функции
------------------------------------------------------------------
function round(num, idp)
if idp and num then
local mult = 10^(idp or 0)
if num >= 0 then return math.floor(num * mult + 0.5) / mult
else return math.ceil(num * mult - 0.5) / mult end
else return num end
end
Евгений_2 пишет: Или я неправильно рассуждаю? Поправьте...
Про отрицательный спрэд и отступ. Дело в том, что формулы описывающие работу take-profit оказались универсальными и независящими от знака спрэда и отступа, поэтому мы решили сохранить такую универсальность и в реализации. Другое дело, что тяжело придумать жизненный пример где бы такую возможность можно было применить по делу. Отрицательный защитный спрэд служит для того, чтобы выставить лимитированную заявку по цене «хуже» рынка. Отрицательный отступ служит для того, чтобы take-profit сработал как только лучшая цена перестанет улучшаться на его значение. То есть, после того как take-profit начал насчитывать min/max, лучшая цена должна на каждой сделке улучшаться на заданный отступ (точнее на его модуль) и как только она так сильно не улучшилась take-profit срабатывает выставляя лимитированную заявку. В классическом применении эти два параметра должны быть больше или равны нулю - независимо от операции. Если вы зададите отрицательный отступ, то лимитированная заявка выставится в рынок немедленно после совершения на нем какой-нибудь сделки. Отрицательный спред приведет к тому, что заявка выставится по цене хуже той, из-за которой сработало условие.
Роман пишет: Я уже достаточно стар что бы верить в светлое будущее, я думаю проблему нужно решить не зависимо от верыисповедывания.
Я говорю о конкретной проблеме, которая есть в вашем продукте, отображаемый индикатор АДX показывать не корректные данные, сомневаюсь что там округление виновато, так как отличаются они не сотыми и на вашем индикаторе можно наблюдать длительный рос, в отличии от других где идёт длительное падение, в целом единственное что ваш АДX связывает с остальными - это то что он колеблется в приделах 0 - 100
Наша формула такая же как здесь Система_направленного_движения За двумя исключениями, первое это то что значения округляются, второе то что значения +DM и -DM умножаются на 100. Могу Вас заверить других отличий нет
Может быть дело в том что у нас ADX считается как Экспоненциальная скользящая средняя?
Роман пишет: Я уже достаточно стар что бы верить в светлое будущее, я думаю проблему нужно решить не зависимо от верыисповедывания.
Я говорю о конкретной проблеме, которая есть в вашем продукте, отображаемый индикатор АДX показывать не корректные данные, сомневаюсь что там округление виновато, так как отличаются они не сотыми и на вашем индикаторе можно наблюдать длительный рос, в отличии от других где идёт длительное падение, в целом единственное что ваш АДX связывает с остальными - это то что он колеблется в приделах 0 - 100
Наша формула такая же как здесь Система_направленного_движения За двумя исключениями, первое это то что значения округляются, второе то что значения +DM и -DM умножаются на 100. Могу Вас заверить других отличий нет
К сожалению уже нет, все было удалено безвозвратно.
В наше время это сложно сделать.
Вроде все серьёзные дяди, а ребячитесь на эмоциях забывая о том чем мы здесь занимаемся ...
Проблема в том что ваш ADX отличается от всех остальных ADX используемых в ТА и его нужно подправить и я не могу понять где. Если у вас есть идея, скиньте через личку, я самостоятельно проработаю эту проблему.
Просто поверьте, что примеров больше нет. Даю подсказку в ADX показатели округляются по математическим правилам для всех методов кроме SMMA
Роман пишет: Sergey Gorokhov - а есть ADX в LUA? а то я запарился с ним, не как не могу его к стандарту Wealth-lab или Финама подогнать, то ли формулы разные то ли сделаны не так.
з.ы. вообще если честно, поставьте в форуме голосование - какие индикаторы нужно реализовывать, а какие нет. А так реализация в скриптах она хороша, просто что бы не пиать постоянно то что уже есть, а за инклидить и вставил в скрипт нужного индюка. Я же говорил с.м. архитектуру ТА, зачем велосипед заново изобретать.
Роман, К сожалению уже нет, все было удалено безвозвратно. Примеров индикаторов на LUA нет и не будет. Есть только пример скользящей средней, который выложен ранее на сайте http://www.quik.ru/depot/quik_lua.zip
s_mike@rambler.ru пишет: Было бы неплохо также распространить автомасштабирование на установленные метки.
Михаил, Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
сергей пишет: 3. Величины «отступа» и «защитного спрэда» могут указываться как в значениях цены, так и в процентах. Исходя из п2. - отрицательное значение в процентах допустимо?
Да отрицательные значения в процентах также являются допустимыми
Что понять? Что воспроизведение индикаторов не является нашей задачей? Это очевидно. Если требуется частная реализация, делайте сами, не можете сами есть фрилансеры.
Sergey Gorokhov пишет: Я забочусь об остальных клиентах
а обо мне значит, НЕТ??? вот всегда - я так и знал... ((
(шутка.)
Вы считаете что я должен собрать все известные индикаторы и реализовать их на LUA только чисто из своей доброты? Ужи извините, но мне жизни не хватит. Да и кушать на что то нужно.
Собственно после общения с Вами у меня вообще отпало какое-либо желание воспроизводить индикаторы. Забудьте о моем жесте доброй воли, я просто удалю все что создал. Остальные пользователи будут Вам благодарны.
сергей пишет: Сергей, я - сергей. Запомните. Если вы уверены что я не смогу найти "огрехов" в этих 16ти страницах - кидайте. 9137731391@mail.ru
сергей, Документацию отправил
Да, что-то новенькое в примерах. Но! 1. В работе тэйк-профита, даже на этих 20ти страницах, не нашёл описание "неблагоприятного" исхода срабатывания тэйка на покупку. 2. Опять же, с чего и началась данная ветка....Даю рубль за два что большинство сотрудников техподдержки не знают как работает тэйк при использовании отрицательных отступа и спрэда, а пользователи квика и подавно. 3. Величины «отступа» и «защитного спрэда» могут указываться как в значениях цены, так и в процентах. Исходя из п2. - отрицательное значение в процентах допустимо?
НАЗНАЧЕНИЕ: Закрытие позиции по инструменту с максимальной прибылью. А как же открытие позиции по самой выгодной цене? )
Sergey Gorokhov пишет: Я забочусь об остальных клиентах
а обо мне значит, НЕТ??? вот всегда - я так и знал... ((
(шутка.)
Вы считаете что я должен собрать все известные индикаторы и реализовать их на LUA только чисто из своей доброты? Ужи извините, но мне жизни не хватит. Да и кушать на что то нужно.
Sergey Gorokhov пишет: Если Вы хотите новые индикаторы, можете сделать самостоятельно.
это понятно ))))) но ведь, а как же забота об остальных клиентах???))))))
Я забочусь об остальных клиентах и именно поэтому решил воспроизвести расчеты имеющихся индикаторов. Но делать новые я не буду, просто потому что это не является моей задачей. Если у Вас есть на это свободное время займитесь вопросом, люди Вам скажут спасибо.
Дмитрий пишет: Заметил также еще одну особенность работы функций SetValue и SetRangeValue - если с их помощью установить значения индикатора (индикатор рисовал в отдельном окне), которые выходят за границы минимальных/максимальных значений индикатора, установленных ранее с помощью return в OnCalculate, то новые значения в итоге не видны, так как оказываются за границами окна (автомасштабирование на такую смену значений индикатора не реагирует).
Здравствуйте! Удалось ли воспроизвести проблему с помощью приведенного мною скрипта?
Да, описанное поведение воспроизводится. Ответа по проблеме пока нет.
Sergey Gorokhov пишет: определенная работа по созданию примеров для всех индикаторов уже ведется. Некоторые примеры уже готовы
А как можно ознакомиться с уже готовыми примерами?
Выкладывать не готовый комплект я не буду, по вполне объективным причинам. Но если нужен какой-то определенный индикатор, можете спросить, если он готов то я его выложу.
Собственно, а зачем Вам перекодировка ради одного единственного результата команды ping? Цифровые значения Вы выдернуть можете, а весь остальной текст там является константой. Просто произведите замену текста на читаемый и все.
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Viktor MMM пишет: 1. Ситуация - ждем ответ, его все нет. Что вы, как разработчики, посоветуете делать? Если просто дальше ждать, то может вообще моя транзакция не дошла? Если еще одну отправить - две могут в результате исполнится. Какой алгоритм действий вы можете предложить в ситуации долгого ответа?
Если ответа нет, наверное следует вывести ошибку в лог и остановить работу. Но решать Вам.
Цитата
Viktor MMM пишет: 2. Кроме бесконечного цикла в скрипте, сами по себе настройки квика могут повлиять на скорость и качество обмена инф с сервером? Нагруженость, так сказать, квика повлияет на это?
Настройки могут повлиять на нагрузку процессора, а нагрузка процессора может привести к зависанию, так что да. Есть соответствующие рекомендации по оптимизации: http://www.quik.ru/user/faq/optimization/
Цитата
Viktor MMM пишет: 3. Как через клуа пинговать сервер?
Либо os.execute, либо параметр "Задержка данных при обмене с сервером" информационного окна, работает при включенной галке "Проверять связь с сервером каждые … секунд" в меню Связь - Доступные соединения
Старатель пишет: Переключился на тиковый интервал: секунды появились. Но милисекунды не транслируются.
А теперь переключитесь с демо спотана демо фортс или на боевые торги.
Я имел ввиду для параметров из ТТП. На боевом сервере мс не транслируются для параметров.
Ещё такой вопрос.
Код
function main()
tDS = CreateDataSource('QJSIM', 'SBER', INTERVAL_M1)
tDS:SetUpdateCallback(function(nIndex) end)
message('[main] '..tostring((tDS:Close())), 2)
end
Результат: [main] true
Код
local bRun, tDS = true
function OnStop()
bRun = nil
end
function main()
tDS = CreateDataSource('QJSIM', 'SBER', INTERVAL_M1)
tDS:SetUpdateCallback(function(nIndex) end)
while bRun do sleep(200) end
message('[main] '..tostring((tDS:Close())), 2)
end
Результат: [main] nil
Код
local bRun, tDS = true
function OnStop()
message('[OnStop] '..tostring((tDS:Close())), 2)
bRun = nil
end
function main()
tDS = CreateDataSource('QJSIM', 'SBER', INTERVAL_M1)
tDS:SetUpdateCallback(function(nIndex) end)
while bRun do sleep(200) end
end
Результат: [OnStop] nil
Код
local bRun, tDS = true
function OnStop()
message('[OnStop] '..tostring((tDS:Close())), 2)
bRun = nil
end
function main()
tDS = CreateDataSource('QJSIM', 'SBER', INTERVAL_M1)
tDS:SetUpdateCallback(function(nIndex) end)
while bRun do sleep(200) end
message('[main] '..tostring((tDS:Close())), 2)
end
Результат: [OnStop] nil [main] false
Можете объяснить результаты?
Здравствуйте!
Информация получена, проблема изучается. Постараемся в ближайшее время дать ответ.
Viktor MMM пишет: Подписаться на изменение конкретного параметра не возможно.
Можно, как вам уже указали, используя CreateDataSource и SetUpdateCallback. Но, если необходимо отслеживать много параметров, то неизвестно, как это отразится на производительности
Здравствуйте, При всем нормальном ответ на транзакцию должен быть всегда. Если по каким-то причинам его нет или он приходит с ощутимой задержкой это повод обратиться к брокеру, возможно есть проблемы на его стороне.
Рабочее место пользователя тоже может привести к таким последствиям, если привести к зависанию терминала. Например если сделать бесконечный цикл в событии.
sam063rus пишет: в общем. как я понял - биржу можно сравнить с файлообменником с возможностью докачки. Врядли история ведётся по каждому брокеру. Логичней было бы предположить, что есть некий общий биржевой кеш, в структуре биржевого потока - есть поля временных меток. Квиковский сервер мониторит пакеты с биржевого шлюза, и если есть изменение метки времени в структуре пакета - принимает данные. Брокеры - являются подписчиками на информацию теперь уже через квиковский сервер - тут уже - единый биржевой поток разбирается на части и к реально биржевым данным примешиваются чисто исторические - свечи и т. д. Теперь уже брокер является своего рода биржевым каналом (через выделенный квиковский сервер) и главным арбитром предоставления информации. Старина квик же - делает тоже самое, что и квиковский сервер с биржей: есть изменение метки времени в структуре пакета - есть и так называемы срезы в OnParam и другие коллбеки. серверное время стоит на месте - значит квик замирает. Если разница между изменениями превышает квантум - запрос на пропущенные данные. (что нетрудно понять/заметить потому как квик, как ошпаренный потом начинает "догонять" информацию на графиках и даже в стаканах котировок).
tech support - поправьте где я ошибся.
Я не буду комментировать описание поведения биржи, так как вопрос явно к специалистам биржи. Могу только порекомендовать ознакомиться с технической биржевой документацией если таковая есть в публичном доступе
Такому пожеланию нет, так как нет возможности автоматически определить к какому именно индикатору должен быть привязан другой индикатор. Представьте что на графике у Вас 200 разных индикаторов привязанных к цене и Вы хотите добавить еще один привязанный к одному из этих 200 индикаторов, как по Вашему программа должна определить автоматически к какому именно?
Меню тоже! Ну, а как во всех ТА это делают? Просто поставьте функцию, применить к чему, к закрытию, открытию, EMA который уже есть на графике и зачем применять к 200 индикатором, просто создаём индикатор и у указываем применить к чему (то что уже там стоит) на графике?
Цитата
Эту часть предложения не не понял, поясните.
Если говорить о цене, то к примеру максимальный максимум за пять свечей или минимум за 10 свечей и т.д.
Все что Вы описываете уже можно сделать через Lua индикаторы. К тому же Вы так и не ответили на поставленную задачу с 200 индикаторами и вопрос НЕ касается "к закрытию, открытию", так как во всех индикаторах где это возможно, уже можно установить привязку к закрытию, открытию.
Старатель пишет: Зарегистрируйте также, чтобы функцию getDataSourceInfo() можно было использовать в Settings
Здравствуйте!
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Sergey Gorokhov пишет: быстрее и надежней это и есть pricemin pricemax, но они же самые невыгодные.
Не понял. Заявка все равно будет исполняться не по этим а по лучшим ценам в стакане на текущий момент. Разве нет. Или вы намекаете на некие особенности исполнения заявок типа микро аукцион?
Чем дешевле Вы продаете или чем дороже покупаете тем быстрее найдете встречное предложение, это и есть pricemin pricemax.