сравнение балансов - страница 4

 
Еще вопрос. Ни у кого не было опыта вытаскивания элементов из индикатора Ишимоку и вставки в виде отдельной функции в советник. Интересует Senkou Span B.
 
Jequile:
Еще вопрос. Ни у кого не было опыта вытаскивания элементов из индикатора Ишимоку и вставки в виде отдельной функции в советник. Интересует Senkou Span B.
iIchimoku(Symbol(),Period(),tenkan_sen,kijun_sen,senkou_span_b,MODE_SENKOUSPANB,shift);
 
Что-то я туплю совсем) Не знал про эту функцию ichimoku. спасибо еще раз.
 
Jequile:
Что-то я туплю совсем) Не знал про эту функцию ichimoku. спасибо еще раз.
Да ладно... со всеми случается... Не за что ;)
 

Здравствуйте! Подскажите простой способ реализовать алгоритм. Если один ордер достиг уровня профита определенного, то остальные ордера закрываются, а этому подтягивается стоплосс.

два выбора orderselect под одной крышей чего-то работать не хотят)

 
Jequile:

Здравствуйте! Подскажите простой способ реализовать алгоритм. Если один ордер достиг уровня профита определенного, то остальные ордера закрываются, а этому подтягивается стоплосс.

два выбора orderselect под одной крышей чего-то работать не хотят)

И не будут. Будет выбран тот, который выбран последним.

Если я правильно понял, что "уровень профита определённый" - это позиция достигла какого-то заданного уровня профита, то алгоритм такой:

Сначала, собсно, ищется в цикле по всем позициям достижение заданного профита. Если такое нашлось - запоминаем тикет позиции и подтягиваем стоп на нужную величину.

Далее, опять же в цикле (в обратном), проверяем позиции на равенство с запомненным тикетом и, если тикеты не равны, закрываем эту позицию и переходим к следующей.

 
void CheckForClose()
  {

int tiket=0;

   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
      //---- check order type 
      if(OrderType()==OP_BUY)
        {
        if((Ask-OrderOpenPrice())>TrailingStop) tiket=OrderTicket();
        }
      if(OrderType()==OP_SELL)
           {      
         if ((OrderOpenPrice()-Bid)>TrailingStop) tiket=OrderTicket();
           }
      }    
      
       
         for(int j=0;j<OrdersTotal();j--)
     {
      if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol() || OrderTicket()!=tiket) continue;
      //---- check order type 
      if(OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
       
      if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
     }   
               
 }              
Пока без ModifyOrders. Не хочет второй закрывать. где сморозил.
 
Jequile:
Пока без ModifyOrders. Не хочет второй закрывать. где сморозил.

Второй цикл должен быть обратным: от OrdersTotal()-1; до >=0;

Ну и... что-то нагромоздили, не? Иль только так кажется на первый взгляд?

А TrailingStop чему равен и какой у него тип?

А если будут две и более позиций, которые удовлетворяют требованию "больше определённой величины профита", то какую из них нужно не закрывать?

 
void CheckForClose()
  {

int tiket=0;

   





   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
      //---- check order type 
      if(OrderType()==OP_BUY)
        {
        if((Ask-OrderOpenPrice())>TrailingStop*Point) tiket=OrderTicket();
        
        }
      if(OrderType()==OP_SELL)
           {      
         if ((OrderOpenPrice()-Bid)>TrailingStop*Point) tiket=OrderTicket();
           }
      }    
      
         
         for(int j=OrdersTotal()-1;j>=0;j--)
     {
      if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol() || OrderTicket()!=tiket) continue;
      //---- check order type 
      if(OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
       
      if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
     }   
               
 }          
     

с профитом закрывается, а минусовый висит.

extern double TrailingStop = 200;

да забыл на point TrailingStop стоп умножить.

 
ps. ордера открываются без СЛ и ТП. тест проводится на одновременном открытии разнонаправленных позиций.
Причина обращения: