[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 213

 
Top2n:
чет не догнал.

Познакомьтесь с флагами.
 
каких стран) Напишите пожалуйста что за флаги. Ключи какие чтоб в поисковик вбить и ознакомиться.
 
если вы про false true, то че то я не пойму как можно в аккурат именно один ордер открыть.
 
Подскажите, советник открывается сетку ордеров. Написал функцию которая определяем ордер с самой большой ценой и самой низкой. Но мне нужна еще информация о втором ордере с самой низкой ценой или самой высокой. вот в общем 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." - это разве не множество раз? Вам же это вроде не надо... В общем играйтесь флагами.

 
Roman.:


Да. Я про них. См. учебник здесь. У Вас будут ещё какие-то условия, как Вы пишете: "Внимание вопрос!) А как сделать так, чтоб он открылся один раз за (sig1) при этом может быть так sig1-открываем BAY, следующая команда, sig0-допустим вкл. трал (не важно), следующая команда опять, sig1-открываем второй BAY." - это разве не множество раз? Вам же это вроде не надо... В общем играйтесь флагами.

А у Кими нет случайно подходящей функции? Чтоб программу не засорять. Надо чтоб он ордер открыл и успокоился, а то "тыщу" за одну сек. открывает
 
Top2n:
А у Ким И.В. нет случайно подходящей функции? Чтоб программу не засорять. Надо чтоб он ордер открыл и успокоился, а то "тыщу" за одну сек. открывает
Выбирайте.
 

Хочу записать результаты теста (сделок ) в файл после тестирование

в блоке deinit() помещаю функцию tofile ()(те запись после окончания работы)

а вот сама функция

// Запись профитов в файл
void toFile( )
{
int handle=FileOpen("OrdersReport.csv",FILE_WRITE|FILE_CSV,"\t");
  if(handle<0) return(0);
  // запишем заголовок в файл
  FileWrite(handle,"#","проф");
 
  int total=OrdersTotal();
  // записываем в файл только закрытые ордера
  for(int pos=0;pos<total-1;pos++)
    {
     //FileSeek(handle, 0, SEEK_END);
     if(OrderSelect(pos,SELECT_BY_POS, MODE_HISTORY)==false) continue;
     FileWrite(handle,OrderTicket(),OrderProfit());
    }
  FileClose(handle);
  return;
не работает, записывет только заголовок
Причина обращения: