[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 591

 
vik-777:

Помогите решить задачу

делаю выборку по всем закрытым позициям

for (int i=0; i<OrdersHistoryTotal(); i++)// По всем ордерам терминала
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true)

после фильтрую по магическому номеру

if (OrderMagicNumber()==12)

фильтр удовлетворяет 3 позициям, а мне нужна только последняя закрытая

не могу понять как оставить только последнею?

Спасибо

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара закрытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersHistoryTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) t=OrderCloseTime();
            }
          }
        }
      }
    }
  }
  return(iBarShift(sy, tf, t, True));
}
То, что относится к Вашему вопросу, подчеркнул.
 

повторюсь очень надо

Помогите решить задачу

делаю выборку по всем закрытым позициям

for (int i=0; i<OrdersHistoryTotal(); i++)// По всем ордерам терминала
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true)

после фильтрую по магическому номеру

if (OrderMagicNumber()==12)

фильтр удовлетворяет 3 позициям, а мне нужна только последняя закрытая

не могу понять как оставить только последнею?

Спасибо

 
- хорошо быть тупым ! тумц-тумц (слова из песни)
 

 Помогите пожалуйста! Нужно чтоб Ордер открывался сразу после закрытия старого, по цене Tp или SL

#property copyright "Copyright © 2010, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property show_confirm  
extern int MaxRisk=3;
extern bool Buy=false; //для открытия ордера на покупку
extern bool Sell=true; //для открытия ордера на продажу
extern int MagicNumber=7749;
extern int TP=210;
extern int SL=420;

  {
  double point =MarketInfo(Symbol(),MODE_POINT);//Запрос Point
  double Free=AccountFreeMargin();  
  double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
  double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
  double Lot =MathFloor(Free*MaxRisk/100/One_Lot/Step)*Step;
  int pos,total=OrdersTotal();
//----

if(Buy==true && OrdersTotal()<=1)
{
OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask-SL*Point,Ask+TP*Point,"777"+ Symbol(), MagicNumber, 0, DarkGreen);

Buy=false;

if(Sell==true && OrdersTotal()<=1)
{
OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Bid+SL*Point,Bid-TP*Point,"4949"+ Symbol(), MagicNumber, 0, DarkGreen);

Sell=false;
}

for (pos=0; pos<total; pos++)  
 if(OrderSelect(pos,SELECT_BY_POS )==true)   
 

if(OrdersTotal()==OP_BUY) 
  if(PRICE_CLOSE==OrderTakeProfit())  Buy=true;
  if(PRICE_CLOSE==OrderStopLoss()) Sell=true;

  }  
  }  
   
if (OrderSelect(pos,SELECT_BY_POS )==true)  
   if (OrdersTotal()==OP_SELL)
  {  
  if(PRICE_CLOSE==OrderStopLoss())  Buy=true;
  if(PRICE_CLOSE==OrderTakeProfit())  Sell=true;

  }  
  } }

//----
  return(0);
  }
//+------------------------------------------------------------------+




 

Парни вот такой вопрос вот поступил сигнал на бай, советник пытается открыть ордер но цена меняется и вылазит ошибка неверная цена, как можно это обойти, что бы он пытался купить пока не купит ?

void CLOSEORDER(string ord)
{
   for (int i=0; i<OrdersTotal(); i++)
   {                                               
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {
         if (OrderSymbol()!=Symbol()) continue;
         if (OrderType()==OP_BUY && ord=="Buy")
            OrderClose(OrderTicket(),OrderLots(),Bid,30,CLR_NONE);// Закрываем Buy
         if (OrderType()==OP_SELL && ord=="Sell")
            OrderClose(OrderTicket(),OrderLots(),Ask,30,CLR_NONE);// Закрываем Sell
      }   
   }
}
//--------------------------------------------------------------------
void OPENORDER(string ord)
{
   int error;
   if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, LOT,Ask,20,SL,TP,"", 1,3);
   if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,LOT,Bid,20,SL,TP,"",-1,3);
   if (error==-1) //неудачная покупка OK
   {  
      ShowERROR(error,0,0);
   }

раньше стояли

Bid,3,CLR_NONE

я добавил 30 так как у меня 5 знак но толку нет

 
vik-777:

повторюсь очень надо

Помогите решить задачу

делаю выборку по всем закрытым позициям



Начни с конца, тогда первая подходящая и есть та самая.

for (int i=OrdersHistoryTotal()-1;i>=0; i--)//
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true)


 

 
Craft:

Остался ещё одна неприятность, встречаются участки на которых происходит только закрытие позиции, а не переворот, хотя условия для стопа и открытия новой позиции равны.


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

if(Time[0]=='время_нужного_бара') //чтоб не засорять логи берем на конкретном баре - посмотрите на картинке, где именно ошибка
{
   Print("переменная=", значение);
}
 
Pyxlik2009:

Парни вот такой вопрос вот поступил сигнал на бай, советник пытается открыть ордер но цена меняется и вылазит ошибка неверная цена, как можно это обойти, что бы он пытался купить пока не купит ?

раньше стояли

я добавил 30 так как у меня 5 знак но толку нет

зацикли открытие ордера while(true), сделай проверку на 135 ошибку, потом RefreshRates(). Посмотри, в комплекте с терминалом идут скрипты с примерами, там все расписано.
 
alsu:

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

Ок, в какую часть кода это надо вставить, как практически применить?
 
SergNF:

То, что относится к Вашему вопросу, подчеркнул.
так выбираеться последний закрытый ордер а мне нужно последний закрытый с магиком, к примеру это строки 3,6 и 9 следовательно мне нужна 3 строка тк она последняя закрытая с магиком
Причина обращения: