Как присвоить значение бару?

Страницы: 1
RSS
Как присвоить значение бару?, Это можно реализовать в скрипте или обязательно делать через написание индикатора?
 
Необходимо при выполнении нескольких условий произвести расчет и присвоить результат конкретной свече так, чтобы потом обращаясь к номеру свечи эту информацию получить. Это можно реализовать в скрипте или обязательно делать через написание индикатора?
 
Создать в скрипте таблицу candleInfo = {}, записывать туда время бара и своё расчётное значение table.insert(candleInfo, {currentCandle["datetime"] ,calcValue}), ну а потом сделать функцию для поиска по таблице. Перебирать бары, брать их datetime и через SearchItems искать в таблице candleInfo.
зы. На практике не проверял, но вроде как годный алгоритм и без всяких индикаторов
 
Цитата
Александр написал:
Создать в скрипте таблицу candleInfo = {}, записывать туда время бара и своё расчётное значение table.insert(candleInfo, {currentCandle["datetime"] ,calcValue}), ну а потом сделать функцию для поиска по таблице. Перебирать бары, брать их datetime и через SearchItems искать в таблице candleInfo.
зы. На практике не проверял, но вроде как годный алгоритм и без всяких индикаторов
Смысл понятен. Начинаю лепить)) Спасибо за совет.
 
Поступил следующим образом:
При выполнении ряда условий производится расчет который записывается в массив. Ключом является время бара в формате posix.
Array3Min[os.time(t[N-2].datetime)] = KF
По этому ключу, т.е. по времени бара легко достаю нужный мне, ранее сохраненный расчет.
Подскажите каким образом удалять все данные из массива (это я буду делать ежедневно по времени).
Как удалить первый элемент? Я так понимаю, что table.remove(Array3Min, 1) здесь не прокатит?
 
Цитата
sav 312 написал:
Array3Min[os.time(t[N-2].datetime)] = KF
Как удалить первый элемент? Я так понимаю, что table.remove(Array3Min, 1) здесь не прокатит?
Присвоить ему значение nil:
Array3Min[os.time(t[N-2].datetime)] = nil
 
Цитата
Suntor написал:
Присвоить ему значение nil:
Array3Min[os.time(t[N-2].datetime)] = nil
Спасибо.
А как удалить первое значение? Дело в том, что ключом каждого значения, в моем случае, является время бара в секундах, т.е. данные идут не строго одни за другими (как например Array3Min[1] = KF, потом  Array3Min[2] = KF и т.д.).  
 
Возможно я не правильно объяснил задачу... Мне нужно удалить именно первую ячейку не ссылаясь на ее ключ.
 
Цитата
sav 312 написал:
Мне нужно удалить именно первую ячейку не ссылаясь на ее ключ.
Первая ячейка есть только для индексированных таблиц, то-есть для массивов. Для них же работают ф-ции table.insert и table.remove, которые понимают этот индекс, и умеют сдвигать остальные элементы таблицы при вставке и удалении элемента, что занимает время и ресурсы, особенно для больших таблиц. Поэтому сама идея, удалить первый элемент таблицы, а потом ждать, пока вся таблица перестроится, не слишком удачная, где она не является самоцелью... так сказать. Когда же вы присваиваете nil, элементу таблицы, то вне зависимости от того, индексная эта таблица или нет, никакого перестроения таблицы не происходит.

Поскольку в качестве ключа вы используете number возвращаемый ф-цией os.time, то ваша таблица индексная, но начинается не с первого элемента, а с 1,5 млрд.-ого... поэтому, особого смысла удалять 1,5 млрд.-ый элемент через table.remove, чтобы 1,5 млрд.+1 элемент и все остальные сдвинулись на его место нет. Заведите переменные хранящие начало и конец вашего массива, и сдвигайте их вперёд по мере удаления старых через nil сначала таблицы и добавления новых к концу вашей таблицы.
 
Цитата
Suntor написал:
Первая ячейка есть только для индексированных таблиц, то-есть для массивов. Для них же работают ф-ции table.insert и table.remove, которые понимают этот индекс, и умеют сдвигать остальные элементы таблицы при вставке и удалении элемента, что занимает время и ресурсы, особенно для больших таблиц. Поэтому сама идея, удалить первый элемент таблицы, а потом ждать, пока вся таблица перестроится, не слишком удачная, где она не является самоцелью... так сказать. Когда же вы присваиваете nil, элементу таблицы, то вне зависимости от того, индексная эта таблица или нет, никакого перестроения таблицы не происходит.

Поскольку в качестве ключа вы используете number возвращаемый ф-цией os.time, то ваша таблица индексная, но начинается не с первого элемента, а с 1,5 млрд.-ого... поэтому, особого смысла удалять 1,5 млрд.-ый элемент через table.remove, чтобы 1,5 млрд.+1 элемент и все остальные сдвинулись на его место нет. Заведите переменные хранящие начало и конец вашего массива, и сдвигайте их вперёд по мере удаления старых через nil сначала таблицы и добавления новых к концу вашей таблицы.
Мысль понятна. Не буду заморачиваться с удалением 1-го элемента.
Поскольку данных за торговую сессию будет немного, буду обнулять массив в начале следующего дня. Всем спасибо за советы.
 
Цитата
sav 312 написал:
Мысль понятна. Не буду заморачиваться с удалением 1-го элемента.
Поскольку данных за торговую сессию будет немного, буду обнулять массив в начале следующего дня. Всем спасибо за советы.
Оно и не получится логически. Если удалите индексный элемент, индекс которого время в секундах, то остальные элементы сдвинутся и поменяют свои индексы, а значит и время. Поэтому, последующие обращения по времени вернут данные не для тех свечей... собственно, поэтому, как я и написал в первом сообщении, просто присваивайте nil элементу таблицы с соответствующим индексом.
 
Цитата
Suntor написал:
Оно и не получится логически. Если удалите индексный элемент, индекс которого время в секундах, то остальные элементы сдвинутся и поменяют свои индексы, а значит и время. Поэтому, последующие обращения по времени вернут данные не для тех свечей... собственно, поэтому, как я и написал в первом сообщении, просто присваивайте nil элементу таблицы с соответствующим индексом.
Я понял. Спасибо!
Страницы: 1
Читают тему
Наверх