Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
fxsaber, 2016.10.04 11:28
long LastTime = 0; // time_msc-время последнего тика (самого свежего), полученного из истории int Count = 0; // Количество тиков в последенем запросе, у которых time_msc == LastTime // Возвращает свежие тики, пришедшие после предыдущего вызова int GetFreshTicks( MqlTick &Ticks[], const uint flags = COPY_TICKS_TRADE, const uint count = 100000 ) { int Res = 0; MqlTick NewTicks[]; const int NewAmount = CopyTicks(Symbol(), NewTicks, flags, LastTime, count); if ((NewAmount > 0) && (Count < NewAmount)) { Res = ArrayCopy(Ticks, NewTicks, 0, Count); // Взяли крайнее время из текущей истории LastTime = NewTicks[NewAmount - 1].time_msc; Count = 1; // Находим (Count) в текущей истории количество тиков со временем LastTime for (int i = NewAmount - 2; i >= 0; i--) { if (NewTicks[i].time_msc < LastTime) break; Count++; } } return(Res); } 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[] ) { if (prev_calculated == 0) { // возьмем тики с начала утренней сессии LastTime = (TimeCurrent() - (TimeCurrent() % (24 * 3600))) * 1000; Count = 0; } MqlTick Ticks[]; // Взяли свеженькие тики const int Amount = GetFreshTicks(Ticks); if (Amount > 0) {
Как это сделать наиболее красиво?
напишите структуру в которой будет храниться Ваш массив тиков (ну может быть флаг новый тик? ) и перезагрузите операции != и ==
в теле программы красивее == или != не придумаешь :)
ЗЫ: не знаю как сейчас, раньше единственным способом не пропускать тики было написание зацикленного скрипта черезwhile(!IsStopped()) - (Sleep(100) обязателен в теле ибо терминалу лучше передавать иногда управление), а из скрипта уже раздавайте тики... "на лево и на право" :)
напишите структуру в которой будет храниться Ваш массив тиков (ну может быть флаг новый тик? ) и перезагрузите операции != и ==
в теле программы красивее == или != не придумаешь :)
ЗЫ: не знаю как сейчас, раньше единственным способом не пропускать тики было написание зацикленного скрипта черезwhile(!IsStopped()) - (Sleep(100) обязателен в теле ибо терминалу лучше передавать иногда управление), а из скрипта уже раздавайте тики... "на лево и на право" :)
Вы точно код выше смотрели???
Для справки: CopyTicks - получение РЕАЛЬНЫХ ТИКОВ прямо в терминале.
Вы точно код выше смотрели???
Для справки: CopyTicks - получение РЕАЛЬНЫХ ТИКОВ прямо в терминале.
не смотрел, но на вопрос "как красиво" я ответил?
вот у себя нашел, про что пишу:
#define HIGHFR 0 #define LOWFR 1 #define MAXFR 100 struct FR { int HLF[MAXFR,2]; int count; bool operator!=(const FR &x)const { bool res=true; for(int i=0;i<MAXFR;i++) { if(this.HLF[i,HIGHFR] != x.HLF[i,HIGHFR]){res = false; break;} if(this.HLF[i,LOWFR] != x.HLF[i,LOWFR]) {res = false; break;} } return(!res); } bool operator==(const FR &x)const { bool res=true; for(int i=0;i<MAXFR;i++) { if(this.HLF[i,HIGHFR] != x.HLF[i,HIGHFR]){res = false; break;} if(this.HLF[i,LOWFR] != x.HLF[i,LOWFR]) {res = false; break;} } return(res); } };
в моем пример перезагрузка == и != написаны одинаково - когда писал, боялся накосячить и не хотел потом искать ошибки )))) - можно из != вызвать == и код будет еще красивее ))))
зато потом в теле программы пишите обычное сравнение
FR x,y;
if(x==y)...
конструктор специально не стал писать - мне нужно присваивать и сравнивать структуры, с присвоением структур mql отлично справился - проверил, а сравнение перезагрузил, зато в теле программы теперь так красиво! ))))
ЗЫ: я вроде и ЗЫ пишу ибо офтоплю
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
CopyTicks предполагаю получать ИЛИ только в OnCalculate() ИЛИ в OnBookEvent().
Вот пример, когда в OnCalculate() получаю тики (получаю в индикаторе и использую только два первых захода после запуска индикатора). Параметры индикатора:
Заход №1
Заход №2
Понятно, что нужно сравнивать два массива данных - поэлементно. Как это сделать наиболее красиво?