Айдар (Автор тем)

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

Страницы: 1
Снятие заявки от администратора (брокера)
 
Кто может подсказать, как отследить заявку от администратора, и моментально снять ее? А то брокер совсем ... . До исполнения опционов еще два торговых дня, а он делает что хочет... Тут даже дело не в отслеживании конкретного номера заявки, можно простой код для снятия всех заявок (буду ночью запускать скрипт от вредителей)  Примерно так: отследит колбек черер OnTransReply() и далее снять все активные заявки. Вот со снятием всех активных заявок нужно разобраться.
переход c lua 5.3.5 --> lua 5.4.1
 
Где почитать подробое руководство по этой версии? Какие ошибки могут возникнуть, и особенно интересует поддерживает ли комментарии, имена переменных и т.д. на русском языке?
Открытый интерес
 
Скорее всего, многие в курсе, как брать инфу по открытому интересу. Допустим в моменте 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 и уже смотреть как будет работать (пока проверяю даже не на демо счете
- а просто при помощи меток, результат норм).

Спустя год мозго***бства хотелось бы понять, может у кого-то все по-проще и не нужно еб***т себе мозг?
Сдвиг массива без цикла for или while, Возможно ли сдвинуть массив без цикла for или while, если количество строк массива может изменяться?
 
Подскажите, пожалуйста, для понимания вот полный код:
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 на пользавательскую
 
Добрый день. Иногда на форуме встречается рекомендация не использовать стандартные таблицы 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() для понижения нагрузки процессора
 
Эффективно ли применять фунцкию 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
Массив (таблица) в OnCalculate
 
Помогите разобраться с кодом.
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
Линия тренда
 
Помогите начинающему привести пример кода нарисовать линию тренда, к примеру от Hi свечи №500 до Lo свечи №510.

Settings =
{  
Name = "*пример",
    line =
    {    { Name = "Line",
         Color = RGB(128, 128, 255),
         Type = TYPE_LINE,
         Width = 1
          }
    }
}

function Init()
    --не понятно что здесь нужно делать
end


function OnCalculate(index)
--не понятно что здесь нужно делать
end
Страницы: 1
Наверх