Кто может подсказать, как отследить заявку от администратора, и моментально снять ее? А то брокер совсем ... . До исполнения опционов еще два торговых дня, а он делает что хочет... Тут даже дело не в отслеживании конкретного номера заявки, можно простой код для снятия всех заявок (буду ночью запускать скрипт от вредителей) Примерно так: отследит колбек черер OnTransReply() и далее снять все активные заявки. Вот со снятием всех активных заявок нужно разобраться.
Где почитать подробое руководство по этой версии? Какие ошибки могут возникнуть, и особенно интересует поддерживает ли комментарии, имена переменных и т.д. на русском языке?
Скорее всего, многие в курсе, как брать инфу по открытому интересу. Допустим в моменте 5 секунд он = + 500. Возможно ли в моменте как-то вычислить поподробнее, например что стало с участниками - кого больше прибавилось, кто в ЛОНГ или в ШОРТ, и т.д.?
Допустим, крайняя сделка была по цене ask - в данном случае цена поднялась вверх. Но может ли такое быть, что если далее сделка тоже по ask - но цена опустилась вниз? При просмотре сохраненных данных иногда выявляются такие моменты. Вот хочу понять, или у меня в коде косяк или что-то другое
Чтобы изменить параметры действующей стоп-заявки я удаляю действующую и выставляю новую. Но иногда происходит так, что во время удаления эта стоп-заявка успевает сработать - и в этом случае новая уже не требуется, но в алгоритме это не прописано и все-равно выставляется новая-стоп заявка. Как можно это исправить? Спасибо
У меня значит так. 1. "Напридумывал" кучу формул и переменных, данные берутся: - из стакана (getQuoteLevel2()), - из ф-ции getParamEx() - количество общих заявок на покупки и продажи, - из таблицы сделок (OnAllTrade()). Все это считается и обновляется каждый тик. И затем идет вычисление разницы этих значений: - за крайние 30 сек, - за крайнюю минуту, - за крайнюю 01:30 мин, -... - за крайнюю 03:30 минуты.
2. Все данные на каждый тик сохраняются в txt файл. И чтобы дальше решить, какие значения этих переменных должны быть идеальными для long или short - все определяется уже при помощи VBA макросов в EXCEL. Там тоже напридумывано куча всего. Если коротко объяснить - там на каждый тик (по истории) расчитано какова будет цена через 10 секунд, минуту и т.д. и на основе этого уже подбираются нужные значения переменных. Для статистики берется крайние 3-4 дня. Готовый скрипт создается по нажатию кнопки (в EXCEL). Даже если данные из QUICK передаются с тормозами - то статистика же будет на основе этих данных, а значит мини запоздания уже не играет важную роль (то есть статистика уже предусматривает эти тормоза)
В общем, осталось добить пару макросов в EXCEL и уже смотреть как будет работать (пока проверяю даже не на демо счете - а просто при помощи меток, результат норм).
Спустя год мозго***бства хотелось бы понять, может у кого-то все по-проще и не нужно еб***т себе мозг?
Подскажите, пожалуйста, для понимания вот полный код: time_0=0 time_now=0 Price={}--массив сумм цен инструмента --всего в массиве пусть для примера будет 5 строк: max_rows_arr_Price=5 --в каждой строке массива сохраняется сумма сделок за 30 секунд n_sec=30 --счетчик строк n_rows=0 --================================================================================================ function OnAllTrade(alltrade) if alltrade.sec_code==instr1 then time_now=os.date("%X") local t1=os.time(Vremya_v_tablicu(time_now)) local t2=os.time(Vremya_v_tablicu(time_0)) if os.difftime(t1,t2)>=n_sec or t1.min~=t2.min or time_0==0 then n_rows=n_rows+1 time_0=os.date("%X") if max_rows_arr_Price <= 2 then Price[n_rows]=alltrade.price else --!И ВОТ ЗДЕСЬ НУЖНО ПРОПИСАТЬ КОД КАК СДВИНУТЬ МАССИВ НА 1 СТРОКУ ЖЕЛАТЕЛЬНО БЕЗ ЦИКЛА FOR???
end else Price[n_rows]=Price[n_rows]+alltrade.price end end end --================================================================================================ --c этой пользовательской функцией мне легче выполнять операции со временем function Vremya_v_tablicu(priem) priem=tostring(priem) local otpravka=os.date("!*t",os.time()) local len=string.len(priem) if len>6 then otpravka.hour,otpravka.min,otpravka.sec=string.match(priem,"(%d%d)%p(%d%d)%p(%d%d)") elseif len==6 then otpravka.hour,otpravka.min,otpravka.sec=string.match(priem,"(%d%d)(%d%d)(%d%d)") elseif len==5 then otpravka.hour,otpravka.min,otpravka.sec=string.match(priem,"(%d)(%d%d)(%d%d)") end return otpravka end --================================================================================================
Добрый день. Иногда на форуме встречается рекомендация не использовать стандартные таблицы QUICK потому, что они тормозят терминал, и вместо этого использовать пользовательские. Но как реализовать потом функцию обратного вызова, к примеру, как в OnAllTrade()?
Из функции OnTrade() я хочу узнать, активна ли заявка, для этого использую эту пользовательскую функцию: if bit_set(TABLE_trade.flags, 0)==true then --то есть, если в бите 0 флаг установлен, значит заявка активна end
Теперь вопрос к этой функции. function bit_set(flags,index) local n=1 --Вопрос 1. Не могу догнать, зачем тут сдвигают бит влево (что это дает)? n=bit.lshift(1,index) if bit.band(flags,n)~=0 then return true else return false end end
Эффективно ли применять фунцкию Sleep() для понижения нагрузки процессора? Или, к примеру, если написать код, время которого будет равно времени Sleep() - ресурс процессора будет затрачен одинаково?
Возможно при помощи скрипта добавить/удалить индикатор на график? Вообще сама цель - перерисовать линии которые уже были изначально нанесены на график. Функция SetValue в данном случае не помогает - то что было нанесено ранее до выполнения этой функции - не перерисовывается. Нужны такие же действия, как добавить индикатор, изменить параметры индикатора, изменить время графика и т.д. Можете как-нибудь помочь?
Добрый день. Создаю индикатор, он рисует линию только тогда, когда в заданном периоде (Period) есть определенное число совпадений (Sovpadeniya) Hi или Low свеч. Вопрос. Как чертить линии не от начала периода и до конца графика, а только в промежутке, от первого совпадения до Sovpadeniya. Думаю вопрос понятен. Прилагаю код и скриншот. Подозреваю, что нужно как то создать массив в массиве, но не могу до этого додуматься. Settings = { Name = "*Sovpadeniya_cen_po_Hi_i_Low", Sovpadeniya = 3, Period = 150 }
function Init() --объявляем нужные переменные arr1={} schetchik_1=0 skolko_lin=0 --эта переменная нужна для: 1) подсчета линий (передачи их в функцию Init); 2) определения количества элементов в массиве
--вызываем функцию - один раз перед загрузкой OSN_1() if skolko_lin>0 then --если совпадений не будет, то вернуть 1 линию, а то вернет 0 и выскочит ошибка return skolko_lin else return 1 end end
function OSN_1() n_bars = getNumCandles('SBER_5_MINUT') moy_grafik, NUMBER, STRING = getCandlesByIndex ('SBER_5_MINUT', 0, 0, n_bars) --[[все, нужный график определили, теперь ищем количество нужных совпадений, если они найдутся - запоминаем их цену в массив. Ищем не во всем графике, а на определенном периоде, указанном в Settings:]]
for i = (n_bars-Settings.Period), n_bars-Settings.Sovpadeniya-1 do schetchik_1=0 --каждый раз обнуляем счетчик for n = (i+1), (n_bars-1) do if moy_grafik[i].high == moy_grafik[n].high or moy_grafik[i].high == moy_grafik[n].low then schetchik_1=schetchik_1+1 -- если есть совпадения - то считаем их количество end --[[если нашли количество нужных совпадений набралось - запоминаем значение цены в массив и выходим из цикла, дальше нет смысла искать:]] if schetchik_1 == Settings.Sovpadeniya then skolko_lin = skolko_lin + 1 arr1[skolko_lin]=moy_grafik[i].high break end end end end
function OnCalculate(index) if index-1 < (Size()-(Settings.Period)-1) then return nil else return unpack(arr1) end end
Помогите разобраться с кодом. Settings = { Name = "*Primer123", }
function Init() Settings.line = {} for i = 1, 5 do Settings.line[i] = {} Settings.line[i] = { Color = RGB(20, 255, 20), Type = TYPE_LINE, Width = 1 } end return 5 --'это означает, что в графике всего будет 5 линий end
--объявляем массив для возврата значений линии arr1={} for i = 1, 5 do arr1[i]=i+185 end
function OnCalculate(index) return ---как правильно прописать весь массив? return arr1[1] это понятно, возвращается 1 элемент массива. А как прописать, что бы возвращалось 5 элементов массива? ---можно конечно вот так return arr1[1],arr1[2],arr1[3],arr1[4],arr1[5] - но если в массиве элементов будет 1000? ---просто return arr1 - не работает end