Подскажите, советник открывается сетку ордеров. Написал функцию которая определяем ордер с самой большой ценой и самой низкой. Но мне нужна еще информация о втором ордере с самой низкой ценой или самой высокой. вот в общем 2-ой а не крайний. подскажите функцию.
Top2n: если вы про false true, то че то я не пойму как можно в аккурат именно один ордер открыть.
А почему бы не проверить "а есть ли уже открытая позиция того типа, которую нужно открыть по сигналу?"... Если таковая уже существует, то не открывать.
Если нет в рынке позиции такого типа, то открыть её.
Ну и вместе с этой проверкой можно проверить ещё какие-либо условия. Например: если такая позиция уже есть, но после её открытия прошло заданное количество времени, то можно ещё одну открыть... и т.д. и т.п. ...
DimaMA: Подскажите, советник открывается сетку ордеров. Написал функцию которая определяем ордер с самой большой ценой и самой низкой. Но мне нужна еще информация о втором ордере с самой низкой ценой или самой высокой. вот в общем 2-ой а не крайний. подскажите функцию.
Перебирайте в цикле все ордера, сохраняйте их в двумерный массив. В первое измерение массива заносите время установки ордера, во второе - его тикет. Сортируйте массив по дате установки ордеров (по первому измерению) в порядке убывания. Второй элемент массива в первом измерении будет хранить дату установки предпоследнего ордера (второго с конца), во втором измерении будет лежать тикет нужного ордера. Выбираете ордер по этому тикету и... делаете уже с ним что душе угодно.
Как-то для заказного советника писал функцию для расчёта безубытка для N-го количества последних позиций. Расчёт нужно было делать для нескольких последних позиций, начиная с предпоследней. Можете посмотреть как это организовано и для себя что-нить выдрать от-туда:
//+----------------------------------------------------------------------------+// Уровень безубытка по символу для N последних позиций, начиная с предпоследнейdouble LevelPreWLforNpos(int op, int mn1, int mn2, int num) {
double lots=0;
double sum=0;
int n=0;
int mass[1][2];
ArrayInitialize(mass,0);
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i,SELECT_BY_POS)) {
if (OrderSymbol()!=sy) continue;
if (OrderType()!=op) continue;
if (OrderMagicNumber()==mn1 || (OrderMagicNumber()==mn2 || OrderMagicNumber()<0)) {
n++;
if (n>ArrayRange(mass,0)) ArrayResize(mass, n);
mass[n-1][0]=OrderOpenTime();
mass[n-1][1]=OrderTicket();
}
}
}
ArraySort(mass,WHOLE_ARRAY,0,MODE_DESCEND);
if (ArrayRange(mass,0)>num+1) ArrayResize(mass,num+1);
for (i=1; i<ArrayRange(mass,0); i++) {
if (OrderSelect(mass[i][1],SELECT_BY_TICKET)) {
if (OrderCloseTime()==0) {
if (OrderType()==OP_BUY) {
lots+=OrderLots();
sum+=OrderLots()*OrderOpenPrice();
}
if (OrderType()==OP_SELL) {
lots-=OrderLots();
sum-=OrderLots()*OrderOpenPrice();
}
}
}
}
double price=0;
if (lots!=0) price=sum/lots;
return(NormalizeDouble(price,dg));
}
//+----------------------------------------------------------------------------+
Top2n: если вы про false true, то че то я не пойму как можно в аккурат именно один ордер открыть.
Да. Я про них. См. учебник здесь. У Вас будут ещё какие-то условия, как Вы пишете: "Внимание вопрос!) А как сделать так, чтоб он открылся один раз за (sig1) при этом может быть так sig1-открываем BAY, следующая команда, sig0-допустим вкл. трал (не важно), следующая команда опять, sig1-открываем второй BAY." - это разве не множество раз? Вам же это вроде не надо... В общем играйтесь флагами.
Да. Я про них. См. учебник здесь. У Вас будут ещё какие-то условия, как Вы пишете: "Внимание вопрос!) А как сделать так, чтоб он открылся один раз за (sig1) при этом может быть так sig1-открываем BAY, следующая команда, sig0-допустим вкл. трал (не важно), следующая команда опять, sig1-открываем второй BAY." - это разве не множество раз? Вам же это вроде не надо... В общем играйтесь флагами.
А у Кими нет случайно подходящей функции? Чтоб программу не засорять. Надо чтоб он ордер открыл и успокоился, а то "тыщу" за одну сек. открывает
Top2n: А у Ким И.В. нет случайно подходящей функции? Чтоб программу не засорять. Надо чтоб он ордер открыл и успокоился, а то "тыщу" за одну сек. открывает
чет не догнал.
Познакомьтесь с флагами.
если вы про false true, то че то я не пойму как можно в аккурат именно один ордер открыть.
Если таковая уже существует, то не открывать.
Если нет в рынке позиции такого типа, то открыть её.
Ну и вместе с этой проверкой можно проверить ещё какие-либо условия. Например: если такая позиция уже есть, но после её открытия прошло заданное количество времени, то можно ещё одну открыть... и т.д. и т.п. ...
Подскажите, советник открывается сетку ордеров. Написал функцию которая определяем ордер с самой большой ценой и самой низкой. Но мне нужна еще информация о втором ордере с самой низкой ценой или самой высокой. вот в общем 2-ой а не крайний. подскажите функцию.
Перебирайте в цикле все ордера, сохраняйте их в двумерный массив. В первое измерение массива заносите время установки ордера, во второе - его тикет. Сортируйте массив по дате установки ордеров (по первому измерению) в порядке убывания. Второй элемент массива в первом измерении будет хранить дату установки предпоследнего ордера (второго с конца), во втором измерении будет лежать тикет нужного ордера. Выбираете ордер по этому тикету и... делаете уже с ним что душе угодно.
Как-то для заказного советника писал функцию для расчёта безубытка для N-го количества последних позиций. Расчёт нужно было делать для нескольких последних позиций, начиная с предпоследней. Можете посмотреть как это организовано и для себя что-нить выдрать от-туда:
если вы про false true, то че то я не пойму как можно в аккурат именно один ордер открыть.
Да. Я про них. См. учебник здесь. У Вас будут ещё какие-то условия, как Вы пишете: "Внимание вопрос!) А как сделать так, чтоб он открылся один раз за (sig1) при этом может быть так sig1-открываем BAY, следующая команда, sig0-допустим вкл. трал (не важно), следующая команда опять, sig1-открываем второй BAY." - это разве не множество раз? Вам же это вроде не надо... В общем играйтесь флагами.
Да. Я про них. См. учебник здесь. У Вас будут ещё какие-то условия, как Вы пишете: "Внимание вопрос!) А как сделать так, чтоб он открылся один раз за (sig1) при этом может быть так sig1-открываем BAY, следующая команда, sig0-допустим вкл. трал (не важно), следующая команда опять, sig1-открываем второй BAY." - это разве не множество раз? Вам же это вроде не надо... В общем играйтесь флагами.
А у Ким И.В. нет случайно подходящей функции? Чтоб программу не засорять. Надо чтоб он ордер открыл и успокоился, а то "тыщу" за одну сек. открывает
Хочу записать результаты теста (сделок ) в файл после тестирование
в блоке deinit() помещаю функцию tofile ()(те запись после окончания работы)
не работает, записывет только заголовока вот сама функция