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

 
Все равно ничего не выходит... Может для совсем тупых поподробней напишите? Давайте так.. Что перед кодом моим должно стоять? Какие переменные? Функцию вызвать не получается... Вы мне написали несколько способов решения или это все один способ? Я же лошара в этом деле...
 
r772ra:

Вот так можно.....
Такой вариант будет не совсем верно работать, т.к. NewBar дает true только на первом тике бара. Для правильной работы необходимо строки FunNewBar(); if(!NewBar) return; размещать внутри условия открытия сделки, причем после успешного открытия.
 
alsu:
Такой вариант будет не совсем верно работать, т.к. NewBar дает true только на первом тике бара. Для правильной работы необходимо строки FunNewBar(); if(!NewBar) return; размещать внутри условия открытия сделки, причем после успешного открытия.
Хотя так тоже будет не совсем верно. Короче, вариант r772ra надо править, а лучше воспользоваться принципиально другим подходом, например, смотреть время открытия последнего в истории ордера и сравнивать его со временем текущего бара - это будет гораздо надежнее
 
alsu:
Хотя так тоже будет не совсем верно. Короче, вариант r772ra надо править, а лучше воспользоваться принципиально другим подходом, например, смотреть время открытия последнего в истории ордера и сравнивать его со временем текущего бара - это будет гораздо надежнее

Примерно так

int BarOfLastOrder(int magic)
{
   int i,ot=OrdersTotal();
   
   for(i=ot-1; i>=0; i--);
   {
      OrderSelect(i,SELECT_BY_POS);
      if(OrderMagicNumber()==magic) return(iBarShift(0,0,OrderOpenTime()));
   }
   
   return(-1);
}

int start()
{

   ........

   int bar_of_last_order = BarOfLastOrder(magic); // указать магик, который использует советник

   switch(bar_of_last_order)
   {
      case 0:
         //последний ордер открыт на текущем баре
         ...
         break;
      case -1:
         //ордеров нет
         // здесь break не ставим, если ситуация "нет ордеров" и "последний ордер открыт не на текущем баре" нужно обрабатывать одинаково
         // в противном случае написать обработку и break;
      default:
         //последний ордер открыт не на текущем баре
         ...
         break;
   }

   .........

}
 
Спасибо! Буду пробовать...
 
7sintez:
Спасибо! Буду пробовать...
подправил код
 
alsu:
подправил код
Ага!!! Сейчас попробую намудрить чего-нибудь...
 

Ура!!! Получилось через

{
static datetime New_Time=0;
New_Bar=false;
if(New_Time!=Time[0])
{
New_Time=Time[0];
New_Bar=true;
}
}

 
7sintez:
Спасибо огромное!!! А если я ставлю сигнал на минус первом баре от открытого это сработает?

 
Спасибо огромное всем за помощь! Коды которые пока не использовал - скопировал в блокнот! Поковыряю их когда будет время! Еще и еще и еще раз спасибо Друзья!
Причина обращения: