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

 
vovan-gogan:
Люди, помогите разобраться с кодом: Почему этот советник не выставляет отложник при пресечении MA.


Это Вы так задумали?

if (OrdersTotal()<= 1)
   return;
Он будет открывать ордера только начиная со второго. Даже не со второго, а с третьего.
 
DhP, Roman, спасибо!!!!!!
 
Dimka-novitsek:
DhP, Roman, спасибо!!!!!!

Чистка была успешной?
 
Здравствуйте, подскажите пожалуйста. В следующем коде получаю время закрытия последнего ордера для определенной бумаги:

for(j=0; j<OrdersHistoryTotal(); j++)
if (OrderSelect(j,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol()==Symbol())
{
datetime ctm=OrderCloseTime();
break;
}

Я хотел бы, что бы следующий ордер по этой бумаге можно было бы открыть только спустя три бара, то есть на четвертом, но не раньше. Как сделать проверку?
 
first_may:
Здравствуйте, подскажите пожалуйста. В следующем коде получаю время закрытия последнего ордера для определенной бумаги:

for(j=0; j<OrdersHistoryTotal(); j++)
if (OrderSelect(j,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol()==Symbol())
{
datetime ctm=OrderCloseTime();
break;
}

Я хотел бы, что бы следующий ордер по этой бумаге можно было бы открыть только спустя три бара, то есть на четвертом, но не раньше. Как сделать проверку?

А вы уверены, что это последний закрытый? А если это первый встреченный? Вы же из цикла вываливаетесь.

 
artmedia70:

А вы уверены, что это последний закрытый? А если это первый встреченный? Вы же из цикла вываливаетесь.




Я перебираю историю, там же все ордера?
 
first_may:

Я перебираю историю, там же все ордера?

вы перебираете историю до первого ордера на символе, после чего break - вываливаетесь из цикла.

Если у вас было 100 ордеров вы увидите только один

 
first_may:

Я перебираю историю, там же все ордера?

Вот. Функция вернёт вам номер бара последней закрытой данным советником позиции:

int BarLastClosePose() {
datetime t;
for (int i=0; i<OrdersHistoryTotal(); i++) {
   if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) {
      if (OrderMagicNumber()!=Magic)   continue;
      if (OrderSymbol()!=Symbol())     continue;
      if (OrderType()>1)               continue;
      if (t<OrderCloseTime()) t=OrderCloseTime();
      }
   }
   return(iBarShift(Symbol(), Period(), t, True));
}

Вызываете, например int BarClose=BarLastClosePose();

В переменной BarClose будет храниться номер бара последней закрытой позиции, либо -1 (если нет таковых). Magic - магик советника - там свою переменную пропишите.
Или удалите эту строчку, если хотите вообще все ордера смотреть (даже те, которые выставил другой советник или вручную сами открыли)
Далее уже по ней сверяете когда можно открыть следующую (через сколько баров)

 
Вообще цель - это открыть ордер только спустя как минимум три бара, то есть на четвертом, но не раньше, после последнего закрытого ордера по бумаге. Для этого, я перебираю историю и если вижу ордер по этой бумаги из истории, то считаю что он закрыт и последний. Я ошибаюсь в том, что будут выбираться ордера в хронологической последовательности?
 
first_may:
Вообще цель - это открыть ордер только спустя как минимум три бара, то есть на четвертом, но не раньше, после последнего закрытого ордера по бумаге. Для этого, я перебираю историю и если вижу ордер по этой бумаги из истории, то считаю что он закрыт и последний. Я ошибаюсь в том, что будут выбираться ордера в хронологической последовательности?
Вы ошибаетесь в том, что не желаете изучить пример выше
Причина обращения: