Помогите с условием ?

 

Есть функция определения по какому сигналу закрылась позиция.

Но как сделать так чтобы значение функции обнулялось с TRUE на FALSE после очередного срабатывания.

Привожу код программы:

//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 19.05.2008 |
//| Описание : Возвращает флаг закрытия последней позиции по стопу. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" - любой символ, |
//| NULL - текущий символ) |
//| op - операция (-1 - любая позиция) |
//| mn - MagicNumber (-1 - любой магик) |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByStop(string sy="", int op=-1, int mn=777) {
  datetime t;
  double ocp, osl;
  int dg, i, j=-1, 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 (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)) {
  dg=MarketInfo(sy, MODE_DIGITS);
  if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
  ocp=NormalizeDouble(OrderClosePrice(), dg);
  osl=NormalizeDouble(OrderStopLoss(), dg);
  if (ocp==osl) return(True);
  }
  return(False);
}
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 19.05.2008 |
//| Описание : Возвращает флаг закрытия последней позиции по тейку. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" - любой символ, |
//| NULL - текущий символ) |
//| op - операция (-1 - любая позиция) |
//| mn - MagicNumber (-1 - любой магик) |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=777) {
  datetime t;
  double ocp, otp;
  int dg, i, j=-1, 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 (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)) {
  dg=MarketInfo(sy, MODE_DIGITS);
  if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
  ocp=NormalizeDouble(OrderClosePrice(), dg);
  otp=NormalizeDouble(OrderTakeProfit(), dg);
  if (ocp==otp) return(True);
  }
  return(False);
}

 
jonrus >>:

Есть функция определения по какому сигналу закрылась позиция.

Но как сделать так чтобы значение функции обнулялось с TRUE на FALSE после очередного срабатывания.




Объвить статическую переменную типа bool. Прежде чем вызывать функцию проверять эту самую переменную на true и присвоить ей false при очередном срабатывании, т.е. в самом начале тела функции.

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