одна сделка в день.

 

Такой вопрос:

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

Как это решается программно? Помогите пожалуйста.

 
ищешь последний открытый ордер, смотришь дату/время открытия, сравниваешь с текущей датой/временем
 
zelazny:

Такой вопрос:

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

Как это решается программно? Помогите пожалуйста.

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

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (op<0 || OrderType()==op) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (TimeDay  (OrderOpenTime())==Day()
            &&  TimeMonth(OrderOpenTime())==Month()
            &&  TimeYear (OrderOpenTime())==Year()) return(True);
          }
        }
      }
    }
  }
  return(False);
}
 
Большое спасибо.
 
datetime Ti;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
   Ti=iTime(NULL,PERIOD_D1,0);
return(0);
}
start()
{
//......................
   if(Long)
   {
      if(Ti>=iTime(Symbol(),PERIOD_D1,0))return;
      Ti=iTime(Symbol(),PERIOD_D1,0);
      res=OpenOrders(OP_BUY,NormalizeLots (Lot,MarketInfo(Symbol(),MODE_LOTSTEP)),Slippage,StopLost,0,MAGIC," BUY "," ");
   }
//......................
}
Причина обращения: