Привет всем! Подскажите пожалуйста как можно красиво посчитать тики? Я имею ввиду если например мне понадобится узнать какая была цена Bid 30 тиков назад...
Я так прикинул на пару тройку тиков, но получилось как-то по колхозному и не практично вовсе:
а если мне 100 тиков понадобиться?! Не писать же 100 строк...
MT5?
MT5?
Нет, 4, извиняюсь, не в ту ветку влез... Перепостить?
Подозреваю что нужны массивы...
Как минимум или запись в файл или глобальные переменные терминала.
Через 5-ку проще , там тики можно запросить через штатную функцию.
Как один из быстрых вариантов. Создайте массив с размерностью 100 000 и к нему переменную curID.
Появился первый тик, записали Bid в ячейку с индексом 0, curID присвоили
значение 0
появился второй тик - записали Bid в ячейку с индексом 1, curID присвоили
значение 1
и т.д.
Записалось за полдня 50 000 тиков (т.е. curID = 50000-1), понадобилось узнать, что за цена была 30 тиков назад, идете в ячейку curID-30.
Если нужно сохранять, в конце дня можно обрубать массив по последнему заполненному индексу и сбрасывать массив в файл FileWriteArray().
Ну и предусмотреть, если достигнет curID 99 999, чтобы увеличить размерность
массива еще на 20-30 тысяч, смотрите максимумы по тиковым объемам инструмента.
Как один из быстрых вариантов. Создайте массив с размерностью 100 000 и к нему переменную curID.
Появился первый тик, записали Bid в ячейку с индексом 0, curID присвоили
значение 0
появился второй тик - записали Bid в ячейку с индексом 1, curID присвоили
значение 1
и т.д.
Записалось за полдня 50 000 тиков (т.е. curID = 50000-1), понадобилось узнать, что за цена была 30 тиков назад, идете в ячейку curID-30.
Если нужно сохранять, в конце дня можно обрубать массив по последнему заполненному индексу и сбрасывать массив в файл FileWriteArray().
Ну и предусмотреть, если достигнет curID 99 999, чтобы увеличить размерность
массива еще на 20-30 тысяч, смотрите максимумы по тиковым объемам инструмента.
Звучит не плохо, надо пробовать... Спасибо!
Используйте перезапись массива по кругу, это экономит ресурсы, время, всё экономит. Нужно учится программировать экономно :)
Код написал на коленке без отладки, попробуйте запустить:
//здесь задаёте размер максимального количества истории тиков int Size=50; double Ticks[]; //индекс следит за местом последнего тика в массиве int Index; int OnInit() { ArrayResize(Ticks,Size); ArrayInitialize(Ticks,0); Index=0; return(INIT_SUCCEEDED); } //здесь записываете новый тик в массив по кругу, то есть если дошли до конца массива, //то перезаписываете первый элемент, и так далее void WriteTick(double &eTicks[], int &eIndex, double eValue) { eIndex++; if(eIndex>=ArraySize(eTicks)) eIndex=0; eTicks[eIndex]=eValue; } //здесь получаете значение нужного тика от индекса последнего записанного //eShift-это количество тиков от текущего, он не должен превышать Size, который вы задали ранее double GetTick(double &eTicks[], int eIndex, int eShift) { return(eTicks[(eIndex-eShift)>=0?(eIndex-eShift):(eIndex-eShift+ArraySize(eTicks))]); } int OnCalculate (const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //записываем каждый приходящий тик WriteTick(Ticks,Index,MarketInfo(Symbol(),MODE_BID)); //здесь при каких-то условиях получаем цену нужного тика double Bid_5=GetTick(Ticks,Index,5); return(0); }
Используйте перезапись массива по кругу, это экономит ресурсы, время, всё экономит. Нужно учится программировать экономно :)
Код написал на коленке без отладки, попробуйте запустить:
Вы меня извините за вопрос, но вот это выражение: (eIndex-eShift)>=0?(eIndex-eShift):(eIndex-eShift+ArraySize(eTicks))
как его прочитать? Это же if else, нет?
Я просто далеко не профи...
да, это короткая запись if else. Здесь смысл в том что если от текущего индекса отнять смещение мы получаем неотрицательно число, значит по этому адресу и лежит цена искомого тика, иначе нужно прибавить размер массива, то есть его значение в массиве находится после текущего индекса. Т.е. мы уже начали перезапись массива по новой, а данные запрашиваются еще со старой партии.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Привет всем! Подскажите пожалуйста как можно красиво посчитать тики? Я имею ввиду если например мне понадобится узнать какая была цена Bid 30 тиков назад...
Я так прикинул на пару тройку тиков, но получилось как-то по колхозному и не практично вовсе:
а если мне 100 тиков понадобиться?! Не писать же 100 строк...