Нужен модуль который опредиляет последнию закрытую зделку

 
Мне нужен модуль который опредиляет последнию закрытую зделку и если она убыточная делает лот следущей зделки минемальной а если прибыльная делает лот болше может кто напишит помогит бедному юзеру!!!
 
// возвращает индекс последнего закрытого ордера
int LostCloseOrderIndex(string symbol, bool checkMagic=true)
{
   int i, Total=OrdersHistoryTotal();
   int result = -1;
   datetime LastTime;
   if (Total > 0)
    {
      for (i=0; i<Total; i++)
       {    
         if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == true)
          { 
            if (OrderAccess(symbol, checkMagic)) // или вставле свое определение что ордер нужный вам
             if (OrderCloseTime() > LastTime)
              result = i;
          }
       }
    }
  return (result);
}

Получите индекс последнего оредера делайте ему селект и смотрите какой у него профит

 
scorpionk:
// возвращает индекс последнего закрытого ордера
int LostCloseOrderIndex(string symbol, bool checkMagic=true)
{
   int i, Total=OrdersHistoryTotal();
   int result = -1;
   datetime LastTime;
   if (Total > 0)
    {
      for (i=0; i<Total; i++)
       {    
         if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == true)
          { 
            if (OrderAccess(symbol, checkMagic)) // или вставле свое определение что ордер нужный вам
             if (OrderCloseTime() > LastTime)
              result = i;
          }
       }
    }
  return (result);
}

Получите индекс последнего оредера делайте ему селект и смотрите какой у него профит

Спосибо справку читал но не получилась!!!!ПОМОГИТЕ ААААА!!!!
 

Традиционно предлагаю свою функцию

//+----------------------------------------------------------------------------+
//|  Возвращает флаг убыточности последней позиции.                            |
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1 - любая позиция)                    |
//|    mn - MagicNumber                (-1 - любой магик)                      |
//+----------------------------------------------------------------------------+
bool isLossLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      i, j=-1, k=OrdersHistoryTotal();
 
  if (StringLen(sy)==1 && StringGetChar(sy, 0)==48) sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    if (OrderProfit()<0) return(True);
  }
  return(False);
}
 

нет не то я прозьбу поправил так может понятней !!!!

 
int OpenOrder(int type, double volume, double stoploss, double takeprofit, int magic)
{
 int historytotal=OrdersHistoryTotal();
 for (int i=historytotal-1;i>=0;i--)
 {
  if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
  {
   if (OrderMagicNumber()!=magic) continue;
   if (OrderProfit()<0) volume=MarketInfo(Symbol(),MODE_MINLOT);
   break;
  }
 }
 double price;
 int slippage=1,step=0,ticket=-1;
 while (ticket<0)
 {
  step++;
  if (step>5) break;
  RefreshRates();
  if (type==OP_BUY) price=Ask;
  if (type==OP_SELL) price=Bid;
  ticket=OrderSend(Symbol(),type,volume,price,slippage,stoploss,takeprofit,NULL,magic);
  if (ticket<0) {Print("OrderSend failed with error #",GetLastError()); Sleep(1000);}
  else
  {
   Sleep(5000);
   return(1);
  }
 }
 return(0);
}
Александр, Вы опять уроки прогуливаете))
 
Xupypr:
int OpenOrder(int type, double volume, double stoploss, double takeprofit, int magic)
{
 int historytotal=OrdersHistoryTotal();
 for (int i=historytotal-1;i>=0;i--)
 {
  if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
  {
   if (OrderMagicNumber()!=magic) continue;
   if (OrderProfit()<0) volume=MarketInfo(Symbol(),MODE_MINLOT);
   break;
  }
 }
 double price;
 int slippage=1,step=0,ticket=-1;
 while (ticket<0)
 {
  step++;
  if (step>5) break;
  RefreshRates();
  if (type==OP_BUY) price=Ask;
  if (type==OP_SELL) price=Bid;
  ticket=OrderSend(Symbol(),type,volume,price,slippage,stoploss,takeprofit,NULL,magic);
  if (ticket<0) Print("OrderSend failed with error #",GetLastError());
  else
  {
   Sleep(5000);
   return(1);
  } 
 }
 return(0);
}
Александр, Вы опять уроки прогуливаете))
Спосибо у меня с русским нопряк!!!!!в паспорте русский!!!!новерно учил плохо!!!!!)))
 
Xupypr:
int OpenOrder(int type, double volume, double stoploss, double takeprofit, int magic)
{
 int historytotal=OrdersHistoryTotal();
 for (int i=historytotal-1;i>=0;i--)
 {
  if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
  {
   if (OrderMagicNumber()!=magic) continue;
   if (OrderProfit()<0) volume=MarketInfo(Symbol(),MODE_MINLOT);
   break;
  }
 }
 double price;
 int slippage=1,step=0,ticket=-1;
 while (ticket<0)
 {
  step++;
  if (step>5) break;
  RefreshRates();
  if (type==OP_BUY) price=Ask;
  if (type==OP_SELL) price=Bid;
  ticket=OrderSend(Symbol(),type,volume,price,slippage,stoploss,takeprofit,NULL,magic);
  if (ticket<0) {Print("OrderSend failed with error #",GetLastError()); Sleep(1000);}
  else
  {
   Sleep(5000);
   return(1);
  }
 }
 return(0);
}
Александр, Вы опять уроки прогуливаете))
if (OrderMagicNumber()!=magic) continue
А вот строку поподробней можа описать!!!!!
 

Если у выбранного ордера "мейджик" не совпадает с текущим, то переходим к следующей итерации. Эта строчка нужна для контроля "своих" ордеров.

 
Александр, я письмо сегодня отправил. Проверь почту.
 
KimIV:

Традиционно предлагаю свою функцию

  if (StringLen(sy)==1 && StringGetChar(sy, 0)==48) sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }

Красиво :)