Только "Полезные функции от KimIV". - страница 11

 
Всего навсего попались эти функции, и я решил понять логику этого программиста. Вот и задаю вопросы. Форум для этого же и существует.
 
satop:

Функция DistMarketAndPos().

Ну вот! Пошли функции поинтереснее! Например, такая, которая возвращает расстояние в пунктах между рынком и ближайшей позицей. Более точный отбор проверяемых позиций задаётся внешними параметрами:

  • sy - Наименование инструмента. Если задать этот параметр, то функция проверит позиции только заданного инструмента. "" или NULL означает текущий инструмент.
  • op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 - означает любую позицию.
  • mn - Идентификатор позиции (MagicNumber). Значение по умолчанию -1 - любой магик.


satop:

Функция DistMarketAndPos().

Ну вот! Пошли функции поинтереснее! Например, такая, которая возвращает расстояние в пунктах между рынком и ближайшей позицей. Более точный отбор проверяемых позиций задаётся внешними параметрами:

  • sy - Наименование инструмента. Если задать этот параметр, то функция проверит позиции только заданного инструмента. "" или NULL означает текущий инструмент.
  • op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 - означает любую позицию.
  • mn - Идентификатор позиции (MagicNumber). Значение по умолчанию -1 - любой магик.


Уважаемый Игорь Ким, это очень хорошая функция, пытаюсь сделать так, чтобы она работала туда сюда  и с помощью нее открывались ордера туда сюда, у меня одна ошибка ни как не могу от нее избавится, помогите ее исправить. комментарий к ошибке ниже

 extern  int     TakeProfit = 150;

      extern  double  Lot        = 0.01;

      extern  int     MAGIC=1234;

      int    start()

{

      if (DistMarketAndPos()>150)

{                                     

      OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,Ask+TakeProfit*Point);

   }     

      return(0);

   }

      int DistMarketAndPos(string sy="", int op=OP_BUY, int mn=-1) 

{

      double d, p;

      int i, k=OrdersTotal(), r=1000000;


      if (sy=="" || sy=="0") sy=Symbol();

      p=MarketInfo(sy, MODE_POINT);

      if (p==0) if (StringFind(sy, "")<0) p=0.00001; else p=0.01;

      for (i=0; i<k; i++) 

{

      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 

{

      if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) 

{

      if (mn<0 || OrderMagicNumber()==mn) 

{

      if (OrderType()==OP_BUY) 

{

      d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;

      if (r>d) r=NormalizeDouble(d, 0);

   }

      if (OrderType()==OP_SELL) 

{

      d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;

      if (r>d) r=NormalizeDouble(d, 0);

   }

   }

   }

   }

   }

 

//----------------------------------------------------------------------------------------------------------------------------------------------


      if (DistMarketAndPos()>150)

{                                     

      OrderSend(Symbol(),OP_SELL,Lot,Ask,3,0,Ask-TakeProfit*Point);

   }     

      return(0);


{

         int DistMarketAndPos(string sy="", int op=OP_SELL, int mn=-1) //эта строка даёт 1 ошибку,

                                                                                                    //если эту строку убрать, 

                                                                                                    //то компилируется, но тогда 

                                                                                                    //я не выставлю op=OP_SELL,

                                                                                                    //а без неё советник будет думать,

                                                                                                    //что ордер от которого нужно вычислить 

                                                                                                    //дистанцию - OP_BUY 

      if (sy=="" || sy=="0") sy=Symbol();

      p=MarketInfo(sy, MODE_POINT);

      if (p==0) if (StringFind(sy, "")<0) p=0.00001; else p=0.01;

      for (i=0; i<k; i++) 

{

      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 

{

      if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) 

{

      if (mn<0 || OrderMagicNumber()==mn) 

{

      if (OrderType()==OP_BUY) 

{

      d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;

      if (r>d) r=NormalizeDouble(d, 0);

   }

      if (OrderType()==OP_SELL) 

{

      d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;

      if (r>d) r=NormalizeDouble(d, 0);

   }

   }

   }

   }

   }

       return(r);

           return(r);

   }

   }

//-------------------------------------------------------------------------------------------

 

СПАСИБО 

 
qwanya:


Уважаемый Игорь Ким, это очень хорошая функция, пытаюсь сделать так, чтобы она работала туда сюда  и с помощью нее открывались ордера туда сюда, у меня одна ошибка ни как не могу от нее избавится, помогите ее исправить. комментарий к ошибке ниже

 

СПАСИБО 


Пробуй: 

И с вопросами сюда ...

extern  int     TakeProfit = 150;
extern  double  Lot        = 0.01;
extern  int     MAGIC=1234;
      
      
//=====================================================================
  int    start()
      {
     if (DistMarketAndPos(NULL,OP_BUY)>150)
            {                                     
            OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,Ask+TakeProfit*Point);
            }
          
     if (DistMarketAndPos(NULL,OP_SELL)>150)
            {                                     
         OrderSend(Symbol(),OP_SELL,Lot,Ask,3,0,Ask-TakeProfit*Point);   
            }            
       return(0);
       }
          
//========================================================================          
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает расстояние в пунктах между рынком и ближайшей       |
//|             позицей                                                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    op - торговая операция          (    -1      - любая позиция)           |
//|    mn - MagicNumber                (    -1      - любой магик)             |
//+----------------------------------------------------------------------------+
int DistMarketAndPos(string sy="", int op=-1, int mn=-1) {
  double d, p;
  int i, k=OrdersTotal(), r=1000000;

  if (sy=="" || sy=="0") sy=Symbol();
  p=MarketInfo(sy, MODE_POINT);
  if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (OrderType()==OP_BUY) {
            d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
          if (OrderType()==OP_SELL) {
            d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
        }
      }
    }
  }
  return(r);
}
 
Пожалуйста, комментарии оставляйте в исходной ветке. Дверь к исходникам (Полезные функции от KimIV).
 
Пожалуйста, комментарии оставляйте в исходной ветке. Дверь к исходникам (Полезные функции от KimIV).
 
satop:
 

Функция MovingInWL().

Кто-нибудь может объяснить зачем выкладывать неработающие функции?

'LevelWLoss' - undeclared identifier 
'LevelProfit' - undeclared identifier 
'ModifyOrder' - function not defined 
'LevelWLoss' - undeclared identifier 
'LevelProfit' - undeclared identifier 
'ModifyOrder' - function not defined 
6 error(s), 0 warning(s) 

и это внутри самой функции 

 
DenisovOleg:

Кто-нибудь может объяснить зачем выкладывать неработающие функции?

'LevelWLoss' - undeclared identifier 
'LevelProfit' - undeclared identifier 
'ModifyOrder' - function not defined 
'LevelWLoss' - undeclared identifier 
'LevelProfit' - undeclared identifier 
'ModifyOrder' - function not defined 
6 error(s), 0 warning(s) 

и это внутри самой функции 

Функция рабочая, но она вызывает функцию ModifyOrder которую надо добавить в код советника, и добавить также в советник переменные LevelWLoss и LevelProfit, типа так примерно

extern int LevelProfit = 1000;

extern int LevelWLoss = 50;

 
Виктор
Iurii Tokman

Огромное Вам спасибо за ТАКУЮ ветку на форуме. Самая большая благодарность lurii Tokman за функции. Лично я готов его почти приравнять к Страуструпу.
Спасибо Вам!

 
Iurii Tokman:

Функция GetAmountLotFromOpenPos().

Данная функция возвращает сумму лотов открытых позиций. Более точный отбор учитываемых позиций задаётся внешними параметрами:

  • sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. NULL означает текущий инструмент.
  • op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
  • mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.

Не возвращает!!!

как ни делаю, либо нули либо "event handling function not found    4.mq4    1    1
"

 
Aleksey Maryaskin:

Огромное Вам спасибо за ТАКУЮ ветку на форуме. Самая большая благодарность lurii Tokman за функции. Лично я готов его почти приравнять к Страуструпу.
Спасибо Вам!

Не забудьте поблагодарить и автора функций.
Причина обращения: