Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Зарегистрируйся, чтобы опубликовать статью и получить 200 USD
hoz
1936
hoz 2012.09.16 14:23  
Всего навсего попались эти функции, и я решил понять логику этого программиста. Вот и задаю вопросы. Форум для этого же и существует.
qwanya
93
qwanya 2012.12.08 14:22  
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);

   }

   }

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

 

СПАСИБО 

Alekseu Fedotov
761
Alekseu Fedotov 2012.12.08 17:26  
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);
}
Fedor
2763
Fedor 2012.12.08 17:44  
Пожалуйста, комментарии оставляйте в исходной ветке. Дверь к исходникам (Полезные функции от KimIV).
Pavel
3
Pavel 2013.05.24 21:24  
Пожалуйста, комментарии оставляйте в исходной ветке. Дверь к исходникам (Полезные функции от KimIV).
DenisovOleg
21
DenisovOleg 2016.08.02 11:15  
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) 

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

Vladimir
38
Vladimir 2016.08.02 20:04  
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;

/ /1...4567891011
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий