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

 
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();
    }
 
artmedia70:

Это как так... По мотивам Игоря Кима сделано нечто... Только одна из ваших функций... остальные - так же...

как-то так, наверное:

И вызываем её:

для подсчёта Buy и подсчёта Sell по текущему символу, с магиком Magic

Артём, конечно от Кима исхожу, убирая ненужные мне проверки и добавляя необходимые мне задачи. Не изобретать же велосипед! Благодарю Вас за корректировку, буду смелее убирать ненужное! А магик и символ мне проверять не нужно, т.к. иногда вмешиваюсь "ручками" и не до мультивалютников мне пока!
 
TarasBY:

Чтобы убрать "лишнее" условие, можно сделать так:



Игорь, Вы правы. Так как-то более читабельно...
 
borilunad:
Артём, конечно от Кима исхожу, убирая ненужные мне проверки и добавляя необходимые мне задачи. Не изобретать же велосипед! Благодарю Вас за корректировку, буду смелее убирать ненужное! А магик и символ мне проверять не нужно, т.к. иногда вмешиваюсь "ручками" и не до мультивалютников мне пока!

Тогда нужно делать проверку if (OrderMagicNumber()==0) ... это проверка на "ручками".

Если хотим вмешиваться в работу других экспертов, работающих с другим символом, то можно убрать проверку на OrderSymbol().

Я оставил минимально необходимые проверки для работы на одном символе, со своими позициями/ордерами. Если хотите ещё и трогать то, что "ручками", то нужно добавить проверку на магик==0.

 
artmedia70:

Тогда нужно делать проверку if (OrderMagicNumber()==0) ... это проверка на "ручками".

Если хотим вмешиваться в работу других экспертов, работающих с другим символом, то можно убрать проверку на OrderSymbol().

Я оставил минимально необходимые проверки для работы на одном символе, со своими позициями/ордерами. Если хотите ещё и трогать то, что "ручками", то нужно добавить проверку на магик==0.

А меня и так допускает! Но приму к сведению, тем более с != и контину не тормозит совсем! Спасибо!
 
solnce600:

Большое Вам спасибо за помощь.Все ОК. Но......

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:
Ну, что же Вы, дальше ведь все просто - сделать такую же проверку в закрытых ордерах) А насчет цены закрытия  - уж извините, выставлена правильно, а дальше дело сервера по какой цене ее реально закрыть.

Еще раз большое спасибо помощь. Но.....

За период равный году открыл только один,т.е.самый  первый попавшийся ордер.

А свечей с параметрами для открытия ордера в этом периоде гораздо больше.

http://clip2net.com/s/2ToEo


Спасибо.

 
solnce600:

Еще раз большое спасибо помощь. Но.....

За период равный году открыл только один,т.е.самый  первый попавшийся ордер.

А свечей с параметрами для открытия ордера в этом периоде гораздо больше.

http://clip2net.com/s/2ToEo


Спасибо.


Исправьте мою опечатку - когда во второй раз

 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-минутном баре открыт последний закрытый ордер (если он есть)
 }

а надо

last_hist_order_bar = iBarShift (Symbol (),PERIOD_M5,OrderOpenTime ());
 
alsu:

Исправьте мою опечатку - когда во второй раз

а надо


ОК.Большое спасибо.
Причина обращения: