Diubakin: Если сделать так, то все странности должны исчезнуть.
Чтобы убрать "лишнее" условие, можно сделать так:
int i, ot = OrdersTotal();
double min = 1000.0;
int min_ticket=0;
for (i=ot - 1; i>= 0; i--)
{
if (!OrderSelect (i, SELECT_BY_POS)) continue;
if (OrderType()!=OP_BUY) if (OrderType()!=OP_SELL) continue;
if (min <= OrderLots()) continue;
min = OrderLots();
min_ticket=OrderTicket();
}
Это как так... По мотивам Игоря Кима сделано нечто... Только одна из ваших функций... остальные - так же...
как-то так, наверное:
И вызываем её:
для подсчёта Buy и подсчёта Sell по текущему символу, с магиком Magic
Артём, конечно от Кима исхожу, убирая ненужные мне проверки и добавляя необходимые мне задачи. Не изобретать же велосипед! Благодарю Вас за корректировку, буду смелее убирать ненужное! А магик и символ мне проверять не нужно, т.к. иногда вмешиваюсь "ручками" и не до мультивалютников мне пока!
borilunad: Артём, конечно от Кима исхожу, убирая ненужные мне проверки и добавляя необходимые мне задачи. Не изобретать же велосипед! Благодарю Вас за корректировку, буду смелее убирать ненужное! А магик и символ мне проверять не нужно, т.к. иногда вмешиваюсь "ручками" и не до мультивалютников мне пока!
Тогда нужно делать проверку if (OrderMagicNumber()==0) ... это проверка на "ручками".
Если хотим вмешиваться в работу других экспертов, работающих с другим символом, то можно убрать проверку на OrderSymbol().
Я оставил минимально необходимые проверки для работы на одном символе, со своими позициями/ордерами. Если хотите ещё и трогать то, что "ручками", то нужно добавить проверку на магик==0.
Тогда нужно делать проверку if (OrderMagicNumber()==0) ... это проверка на "ручками".
Если хотим вмешиваться в работу других экспертов, работающих с другим символом, то можно убрать проверку на OrderSymbol().
Я оставил минимально необходимые проверки для работы на одном символе, со своими позициями/ордерами. Если хотите ещё и трогать то, что "ручками", то нужно добавить проверку на магик==0.
А меня и так допускает! Но приму к сведению, тем более с != и контину не тормозит совсем! Спасибо!
1. На некоторых пятиминутках открывается более 1 ордера.
2. Некоторые ордера закрываются по стоп-приказам,цена которых отличается от той,что прописана в коде.
Ну, что же Вы, дальше ведь все просто - сделать такую же проверку в закрытых ордерах) А насчет цены закрытия - уж извините, выставлена правильно, а дальше дело сервера по какой цене ее реально закрыть.
int start()
{
double Price=iOpen (Symbol (),PERIOD_M5,0)+300*Point;
double SL=NormalizeDouble (Price-300*Point, Digits);
double TP=NormalizeDouble (Price+150*Point, Digits);
int last_order_bar = 0;
int ot = OrdersTotal();
if (ot>0) //если есть ордера в рынке
{
if (OrderSelect (ot-1,SELECT_BY_POS)) //выбрали последний ордерif (OrderType ()==OP_BUY || OrderType ()==OP_SELL) //проверили тип
last_order_bar = iBarShift (Symbol (),PERIOD_M5,OrderOpenTime ()); //запомнили, на каком 5-минутном баре открыт последний ордер (если он есть)
}
int last_hist_order_bar = 0;
int oht = OrdersHistoryTotal();
if (oht>0) //если есть ордера в рынке
{
if (OrderSelect (oht-1,SELECT_BY_POS, MODE_HISTORY)) //выбрали последний закрытый ордерif (OrderType ()==OP_BUY || OrderType ()==OP_SELL) //проверили тип
last_order_bar = iBarShift (Symbol (),PERIOD_M5,OrderOpenTime ()); //запомнили, на каком 5-минутном баре открыт последний закрытый ордер (если он есть)
}
if (ot==0 || last_order_bar>0) //если ордеров нет либо последний открыт не на текущем бареif (oht==0 || last_hist_order_bar>0) //если закрытых ордеров нет либо последний из закрытых был открыт не на текущем бареif (Bid>=Price) //если текущая цена доползла до цены открытияint Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP );
}
alsu: Ну, что же Вы, дальше ведь все просто - сделать такую же проверку в закрытых ордерах) А насчет цены закрытия - уж извините, выставлена правильно, а дальше дело сервера по какой цене ее реально закрыть.
alsu: Ну, что же Вы, дальше ведь все просто - сделать такую же проверку в закрытых ордерах) А насчет цены закрытия - уж извините, выставлена правильно, а дальше дело сервера по какой цене ее реально закрыть.
Еще раз большое спасибо помощь. Но.....
За период равный году открыл только один,т.е.самый первый попавшийся ордер.
А свечей с параметрами для открытия ордера в этом периоде гораздо больше.
if (oht>0) //если есть ордера в рынке
{
if (OrderSelect (oht-1,SELECT_BY_POS, MODE_HISTORY)) //выбрали последний закрытый ордерif (OrderType ()==OP_BUY || OrderType ()==OP_SELL) //проверили тип
last_order_bar = iBarShift (Symbol (),PERIOD_M5,OrderOpenTime ()); //запомнили, на каком 5-минутном баре открыт последний закрытый ордер (если он есть)
}
Если сделать так, то все странности должны исчезнуть.
Чтобы убрать "лишнее" условие, можно сделать так:
Это как так... По мотивам Игоря Кима сделано нечто... Только одна из ваших функций... остальные - так же...
как-то так, наверное:
И вызываем её:
для подсчёта Buy и подсчёта Sell по текущему символу, с магиком Magic
Чтобы убрать "лишнее" условие, можно сделать так:
Игорь, Вы правы. Так как-то более читабельно...
Артём, конечно от Кима исхожу, убирая ненужные мне проверки и добавляя необходимые мне задачи. Не изобретать же велосипед! Благодарю Вас за корректировку, буду смелее убирать ненужное! А магик и символ мне проверять не нужно, т.к. иногда вмешиваюсь "ручками" и не до мультивалютников мне пока!
Тогда нужно делать проверку if (OrderMagicNumber()==0) ... это проверка на "ручками".
Если хотим вмешиваться в работу других экспертов, работающих с другим символом, то можно убрать проверку на OrderSymbol().
Я оставил минимально необходимые проверки для работы на одном символе, со своими позициями/ордерами. Если хотите ещё и трогать то, что "ручками", то нужно добавить проверку на магик==0.
Тогда нужно делать проверку if (OrderMagicNumber()==0) ... это проверка на "ручками".
Если хотим вмешиваться в работу других экспертов, работающих с другим символом, то можно убрать проверку на OrderSymbol().
Я оставил минимально необходимые проверки для работы на одном символе, со своими позициями/ордерами. Если хотите ещё и трогать то, что "ручками", то нужно добавить проверку на магик==0.
Большое Вам спасибо за помощь.Все ОК. Но......
1. На некоторых пятиминутках открывается более 1 ордера.
2. Некоторые ордера закрываются по стоп-приказам,цена которых отличается от той,что прописана в коде.
Ну, что же Вы, дальше ведь все просто - сделать такую же проверку в закрытых ордерах) А насчет цены закрытия - уж извините, выставлена правильно, а дальше дело сервера по какой цене ее реально закрыть.
Ну, что же Вы, дальше ведь все просто - сделать такую же проверку в закрытых ордерах) А насчет цены закрытия - уж извините, выставлена правильно, а дальше дело сервера по какой цене ее реально закрыть.
Еще раз большое спасибо помощь. Но.....
За период равный году открыл только один,т.е.самый первый попавшийся ордер.
А свечей с параметрами для открытия ордера в этом периоде гораздо больше.
Спасибо.
Еще раз большое спасибо помощь. Но.....
За период равный году открыл только один,т.е.самый первый попавшийся ордер.
А свечей с параметрами для открытия ордера в этом периоде гораздо больше.
Спасибо.
Исправьте мою опечатку - когда во второй раз
а надо
Исправьте мою опечатку - когда во второй раз
а надо