LongTrade = TRUE;

 

Не мог бы мне кто-нибудь разъяснить этот скрипт (взят из IlanDinamic)
LongTrade = TRUE; - означает что Sell уже открыт или это как команда к открытию Sell? (тоже самое для Buy)

Заранее благодарю

int start()
  {
//----
   total = CountTrades();
   if (total == 0) flag = FALSE;
   for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
         if (OrderType() == OP_BUY) {
            LongTrade = TRUE;
            ShortTrade = FALSE;
            break;
         }
      }
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
         if (OrderType() == OP_SELL) {
            LongTrade = FALSE;
            ShortTrade = TRUE;
            break;
         }
      }
   }
   return(0);
  }
//+------------------------------------------------------------------+  
   int CountTrades() {
   int count = 0;
   for (int trade = OrdersTotal() - 1; trade >= 0; trade--) {
      OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++;
   }
   return (count);
} 
  
  
//+------------------------------------------------------------------+
 
liana:

Не мог бы мне кто-нибудь разъяснить этот скрипт (взят из IlanDinamic)
LongTrade = TRUE; - означает что Sell уже открыт или это как команда к открытию Sell? (тоже самое для Buy)

Заранее благодарю


  total = CountTrades();
   if (total == 0) flag = FALSE;
   for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
         if (OrderType() == OP_BUY) {   // открыт OP_BUY
            LongTrade = TRUE;           // TRUE= разрешить открытие Sell
            ShortTrade = FALSE;         // FALSE=запретить открытие Biu
            break;
         }
      }
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
         if (OrderType() == OP_SELL) {
            LongTrade = FALSE;
            ShortTrade = TRUE;
            break;
         }
      }
   }
 
r772ra:


Я так и подумала в начале, но потом меня смутило вот это:

if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++;

Я подумала, что раз count++; то ордера открыты.

 
liana:

LongTrade = TRUE; - означает


что уже есть открытые ордера BUY!!!!
 

Все я поняла - это для открытия противоположного ордера.

Спасибо!

 

Я все играюсь с этим скриптом.
Скажите, что нужно сюда добавить, чтобы открывался только один ордер?

int start()
  {
   total = CountTrades();   
   if (total ==0){ 
  OrderSend(Symbol(),OP_BUY,0.10,Ask,3,0,0,"",1234,0,CLR_NONE);
   }

   return(0);
  }
//+------------------------------------------------------------------+  
   int CountTrades() {
   int count = 0;
   for (int trade = OrdersTotal() - 1; trade >= 0; trade--) {
      OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++;
   }
   return (count);
} 
  
  
//+------------------------------------------------------------------+
 
liana:

Все я поняла - это для открытия противоположного ордера.

Спасибо!


Верно!!!

А это общее кол. открытых позиций = count;

if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++;
 

Ещё вопрос.
Если функция CountTrades() уже проверила вот это:

if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)

и вернула значение count, то зачем ещё раз проверять это внутри функции int start()?

int start()
  {
//----
   total = CountTrades();
   if (total == 0) flag = FALSE;
   for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
         if (OrderType() == OP_BUY) {
            LongTrade = TRUE;
            ShortTrade = FALSE;
            break;
         }
      }
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
         if (OrderType() == OP_SELL) {
            LongTrade = FALSE;
            ShortTrade = TRUE;
            break;
         }
      }
   }
   return(0);
  }
//+------------------------------------------------------------------+  
   int CountTrades() {
   int count = 0;
   for (int trade = OrdersTotal() - 1; trade >= 0; trade--) {
      OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++;
   }
   return (count);
} 
  
  
//+------------------------------------------------------------------+
 
r772ra:


Верно!!!

А это общее кол. открытых позиций = count;


А если добавить сюда: if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++;
еще отложенные то это будет равно OrdersTotal()?

А можно этим проверить только отложенные?

 
liana:

А если добавить сюда еще отложенные if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++;
еще отложенные то это будет равно OrdersTotal()?


Вот функция Игоря Ким

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

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) kp++;
          }
        }
      }
    }
  }
  return(kp);
}

Вызываем из советника

int countSELL = NumberOfPositions(NULL, OP_SELL); //Кол. OP_SELL

и все....

 
r772ra:


Вот функция Игоря Ким

Вызываем из советника

и все....

Spasibo!
Причина обращения: