Привет! Я почему-то нигде не встречал цикл перебора ордеров в цикле перебора ордеров. Такое практикуется? Можно так делать?
У меня такая задача: первый цикл ищет последний ордер а подцикл должен найти предпоследний ордер, вот с этим предпоследним проблема... незнаю как эго найти, может кто не пожалеет времени и даст наводку на мысль?
В одном цикле соберите в массив все нужные ордера. По окончании цикла отсортируйте массив по времени открытия/закрытия (смотря что ищете). Ну и далее - уже из массива - берёте по индексу массива нужный вам ордер. Хоть первый, хоть последний-предпоследний, хоть пятый-десятый
В одном цикле соберите в массив все нужные ордера. По окончании цикла отсортируйте массив по времени открытия/закрытия (смотря что ищете). Ну и далее - уже из массива - берёте по индексу массива нужный вам ордер. Хоть первый, хоть последний-предпоследний, хоть пятый-десятый
Я чет заработался: а у отложек OrderOpenTime()==0 или нет?
Это время её установки будет.
В одном цикле соберите в массив все нужные ордера. По окончании цикла отсортируйте массив по времени открытия/закрытия (смотря что ищете). Ну и далее - уже из массива - берёте по индексу массива нужный вам ордер. Хоть первый, хоть последний-предпоследний, хоть пятый-десятый
Как то так?
void OpenTime(int cmd)
{
datetime OT[];
for(int i=0;i<=OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==cmd)
OT[i]=OrderOpenTime();
}
}
}
Как то так?
void OpenTime(int cmd) { datetime OT[]; for(int i=0;i<=OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==cmd) OT[i]=OrderOpenTime(); } } }
А размер массива? А тикеты ордеров?
И, пожалуйста, используйте для вставки кода кнопочку SRC
а так можно инициализировать?:
datetime OT[OrdersTotal()];
и еще вопрос: а тикеты зачем? мне же только время открытия нужно...
for(int i=0;i<=OrdersTotal();i++) {-//-//-//-}
Возможно для поиска предпоследнего достаточно начать цикл так:
for(int i=0;i<=OrdersTotal()-1;i++) {-//-//-//-}
??
а так можно инициализировать?:
и еще вопрос: а тикеты зачем? мне же только время открытия нужно...
Нельзя. Либо нужно определиться с максимальным размером массива, либо динамически его изменять:
datetime arrdtTime[]; if (ArrarResize(arrdtTime, OrdersTotal()) < 0) return;
Только после этого массив можно заполнять.
У меня первый цикл который ищет последний ордер начинается так:
Возможно для поиска предпоследнего достаточно начать цикл так:
??
Тоже не так. Тогда уж так:
for (int i = 0; i < OrdersTotal(); i++) {-//-//-//-}
Ну а лучше так:
int nTotal = OrdersTotal(); for (int i = 0; i < nTotal; ++i) {-//-//-//-}
или, чтобы короче было:
for (int i = OrdersTotal() - 1; i >= 0; --i) {-//-//-//-}А чтобы найти последний/предпоследний/первый, в любом случае нужно сортировать по времени, т. к. список активных ордеров может быть отсортирован пользователем вовсе не по времени или тикету.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Привет! Я почему-то нигде не встречал цикл перебора ордеров в цикле перебора ордеров. Такое практикуется? Можно так делать?
У меня такая задача: первый цикл ищет последний ордер а подцикл должен найти предпоследний ордер, вот с этим предпоследним проблема... незнаю как эго найти, может кто не пожалеет времени и даст наводку на мысль?