Как узнать профит или лось? - страница 2

 

посмотрите еще функции Игоря Кима. Думаю будут полезны:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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=-1) {
  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(OrderSymbol(), 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=-1) {
  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(OrderSymbol(), 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);
}
 
Ьф
Necron:

посмотрите еще функции Игоря Кима. Думаю будут полезны:


mn - MagicNumber 
- указывать какой? Который я могу указать в команде OrderSend при открытии позиции?
 
modestuz:
Ьф
- указывать какой? Который я могу указать в команде OrderSend при открытии позиции?
магик той позиции, которую хотите проверить. Он как раз задается при открытии сделки командой OrderSend()
 
Necron:
магик той позиции, которую хотите проверить. Он как раз задается при открытии сделки командой OrderSend()

Хорошо. Спасибо большое.
 

А Зачем нужен вообще этот Магик? Он привязывается к типу открываемой позиции? Ну чтобы можно было определить бай,селл, селллимит или селлстоп мы собираемся открыть...Или нет?

Или просто к открываемому одному ордеру? Хотя мы ведь может 10 раз открыть бай и магик у всех баев будет один и тот же?...

 
Магический номер используется для контроля позиций. Это просто удобство для вас при сортировке и переборе позиций. У позиций открытых вручную магик равен 0, а своим позициям вы можете присвоить любой магик.
 
modestuz:

prc - это цена? Цена какая?

MGK - это magic number? который указывается в OrderSend при открытии ордера? Его указывать тут?

err - ставить ноль всегда?

SYMBL - это символ

OrdType - Это тип ордера...


Думаю, Вам немного еще теории почитать надо: это не тот вариант при котором сразу с наскока получится.

prc -  это цена, которую проверяете. В Вашем случае стоп или профит

MGK - это magic number о Магике Вам сказали

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

SYMBL - это символ

OrdType - Это тип ордера...

Удачи. 

 

 
modestuz:
А как запретить открытие покупки 2й раз?
bool OrderExist(datetime TimeOpenCandle, int fMagic=0){
   //Возвращает true, если позиция с определённым магическим числом
   //открыта после TimeOpenCandle
   int j = OrdersTotal();
   for(int i=0; i<j; i++){
      if(OrderSelect(i, SELECT_BY_POS)){
         if(OrderMagicNumber()==fMagic || fMagic==0){
            if(OrderOpenTime()>=TimeOpenCandle){
               return(true);
            }
         }
      }
   }//Next i
   return(false);
}//OrderExist()


В параметр TimeOpenCandle следует вводить значение времени открытия текущей свечи, т.е.

iTime(Symbol(), 0, 0)

При этом, если  функция OrderExist вернёт вам true, то вторую сделку открывать не следует.

 
если стоп лост не тралиться то просто посмотреть на профит, если больше 0 то профит, иначе лось.
Причина обращения: