Здравствуйте, подскажите пожалуйста. В следующем коде получаю время закрытия последнего ордера для определенной бумаги:
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; }
Я хотел бы, что бы следующий ордер по этой бумаге можно было бы открыть только спустя три бара, то есть на четвертом, но не раньше. Как сделать проверку?
А вы уверены, что это последний закрытый? А если это первый встреченный? Вы же из цикла вываливаетесь.
Вот. Функция вернёт вам номер бара последней закрытой данным советником позиции:
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: Вообще цель - это открыть ордер только спустя как минимум три бара, то есть на четвертом, но не раньше, после последнего закрытого ордера по бумаге. Для этого, я перебираю историю и если вижу ордер по этой бумаги из истории, то считаю что он закрыт и последний. Я ошибаюсь в том, что будут выбираться ордера в хронологической последовательности?
Вы ошибаетесь в том, что не желаете изучить пример выше
Люди, помогите разобраться с кодом: Почему этот советник не выставляет отложник при пресечении MA.
Он будет открывать ордера только начиная со второго. Даже не со второго, а с третьего.Это Вы так задумали?
DhP, Roman, спасибо!!!!!!
Чистка была успешной?
for(j=0; j<OrdersHistoryTotal(); j++)
if (OrderSelect(j,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol()==Symbol())
{
datetime ctm=OrderCloseTime();
break;
}
Я хотел бы, что бы следующий ордер по этой бумаге можно было бы открыть только спустя три бара, то есть на четвертом, но не раньше. Как сделать проверку?
Здравствуйте, подскажите пожалуйста. В следующем коде получаю время закрытия последнего ордера для определенной бумаги:
for(j=0; j<OrdersHistoryTotal(); j++)
if (OrderSelect(j,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol()==Symbol())
{
datetime ctm=OrderCloseTime();
break;
}
Я хотел бы, что бы следующий ордер по этой бумаге можно было бы открыть только спустя три бара, то есть на четвертом, но не раньше. Как сделать проверку?
А вы уверены, что это последний закрытый? А если это первый встреченный? Вы же из цикла вываливаетесь.
А вы уверены, что это последний закрытый? А если это первый встреченный? Вы же из цикла вываливаетесь.
Я перебираю историю, там же все ордера?
Я перебираю историю, там же все ордера?
вы перебираете историю до первого ордера на символе, после чего break - вываливаетесь из цикла.
Если у вас было 100 ордеров вы увидите только один
Я перебираю историю, там же все ордера?
Вот. Функция вернёт вам номер бара последней закрытой данным советником позиции:
Вызываете, например int BarClose=BarLastClosePose();
В переменной BarClose будет храниться номер бара последней закрытой позиции, либо -1 (если нет таковых). Magic - магик советника - там свою переменную пропишите.
Или удалите эту строчку, если хотите вообще все ордера смотреть (даже те, которые выставил другой советник или вручную сами открыли)
Далее уже по ней сверяете когда можно открыть следующую (через сколько баров)
Вообще цель - это открыть ордер только спустя как минимум три бара, то есть на четвертом, но не раньше, после последнего закрытого ордера по бумаге. Для этого, я перебираю историю и если вижу ордер по этой бумаги из истории, то считаю что он закрыт и последний. Я ошибаюсь в том, что будут выбираться ордера в хронологической последовательности?