[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 159

 
1Rakso >>:

1) А как сделать ее отключаемой, через внешние переменные?

2) Можно там задать так, что бы закрывался по ОrderClose первый открытый ордер, а последующие ордера 2, 3 итд не закрывались? Допустим открыл ордер Бай - это первый ордер, далее открываю еще один ордер бай - второй ордер, итд., и вот из этой серии ордеров закрывался бы только 1-й ордер по ОrderClose ?

Полистайте странички адреса https://www.mql5.com/ru/forum/105913

1) Примерно, так - 

extern bool      AutoClose =True;
.......................................


//********* Закрытие позиций ****************************************
if (AutoClose) {  
//----переменные для закрытия позиций ----
double Stochast_0 =iStochastic(NULL,0,Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN,0);
double Stochast_1 =iStochastic(NULL,0,Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN,1);
//----------------------------------------------------------------------
  for (int v=0; v<OrdersTotal(); v++)                             {       
      if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES))               {           
        if (OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicNum)   { 
//-----------------------------------------------------                  
if (OrderType() == OP_BUY) { 
      if(Stochast_1>75 && Stochast_0<75)     {
           OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // закрываем позицию
                // return(0); // выходим
                }       
     }  
 //--------------------------------------------------------
if (OrderType() == OP_SELL) { 
      if(Stochast_1<25 && Stochast_0>25)    {
                 OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // закрываем позицию
                // return(0); // выходим
                }       
     }  
 //-------------------------------------------------------                       
    }  // Symbol()  
  } // select
 } //total
} //Close_

2)

Уберите блокировку ( // ) перед

 // return(0); // выходим

и тогда будут закрываться только первые(или последние) позиции.

 
PyMbIH >>:

привет, всем )))

Помогите.

mql4 только начал програмировать.

пишу эксперта..возник такой вопросик

как сделать так.

хочу чтоб эксперт у меня работал только по понедельникам. 

//Открытие и закрытие  позиций только в понедельник  
      if (TimeDayOfWeek(TimeCurrent()) == 1)
         return (0);  
 
rid писал(а) >>

спасибо!!

 
Vinin >>:

Спасибо, Vinin =)

 
rid >>:

Полистайте странички адреса 'Закрытие позиций. По сигналу индикатора.'

1) Примерно, так -

2)

Уберите блокировку ( // ) перед

// return(0); // выходим

и тогда будут закрываться только первые позиции.

Спасибо, rid !

Вы мне очень помогли, есть все таки добрые люди)

Все понял пойду читать мат часть, надеюсь не отнял у Вас много времени)

 

Пожалйста помогите.

Если при визуальном тестировании советника 1.mq4(прилагается) натянуть на график индикатор 3-cci-h3(прилагается), то, какзалось бы, при абсолютно одинаковых параметрах расчитываемых cci сигналы индикатора и фактические cci(объектным текстом в правом верхнем углу) не совпадают.

ПОЧЕМУ?

И почему то не работают алерты в этом индюке.

Код советника:

double lasthigh,lastlow,lasthigh2=200000,lastlow2=0,lastpos=0,t[2];

int start()
{Comment("");
lasthigh=High[1];lastlow=Low[1];
if(lasthigh<lasthigh2)lasthigh2=lasthigh;
if(lastlow>lastlow2)lastlow2=lastlow;
t[0]=lasthigh2;
t[1]=lastlow2;  
string s1="lasthigh2 *** "+DoubleToStr(t[0],5);
string s2="lastlow2 *** "+DoubleToStr(t[1],5);
string str[2];
str[0]=s1;
str[1]=s2;
color col=Lime;
     for(int y=0;y<2;y++)
     {ObjectCreate("textSignal"+y,OBJ_LABEL,0,0,0,0,0);    
      ObjectSet("textSignal"+y,OBJPROP_CORNER,1);
      ObjectSet("textSignal"+y,OBJPROP_XDISTANCE,35-25);
      ObjectSet("textSignal"+y,OBJPROP_YDISTANCE,y*(20)+20+8);
      ObjectSetText("textSignal"+y,str[y],15,"Tahoma",col);
     }
  
  if(lastpos==0){if(lastlow2>lasthigh){
  Comment("PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!",
  "PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   PRODAGA!!!   ");lasthigh2=2000000;lastlow2=0;lastpos=1;}}
  else {if(lasthigh2<lastlow){Comment("POKUPKA!!!   POKUPKA!!!   POKUPKA!!!   POKUPKA!!!   POKUPKA!!!   POKUPKA!!!   POKUPKA!!!",
  "   POKUPKA!!!   POKUPKA!!!   POKEPKA!!!   POKEPKA!!!   POKEPKA!!!");lasthigh2=2000000;lastlow2=0;lastpos=0;}}

}


Код индикатора:

//+------------------------------------------------------------------+
//|                                                     i-3CCI-h.mq4 |
//|                                               johnfantom & KimIV |
//|                                              http://www.kimiv.ru |
//|                                                                  |
//|  02.01.2006  CCI с 3-х ТФ в одном флаконе.                       |
//+------------------------------------------------------------------+
#property copyright "johnfantom & KimIV"
#property link      "http://www.kimiv.ru"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 DodgerBlue
#property indicator_maximum 1.4
#property indicator_level1  0
#property indicator_minimum -1.2

//------- Внешние параметры индикатора -------------------------------
extern int CCI_Period_0 = 14;     // Период CCI для текущего ТФ
extern int Level_0      = 100;    // Уровень CCI для текущего ТФ
extern int TF_1         = 60;     // Количество минут первого ТФ
extern int CCI_Period_1 = 14;     // Период CCI для первого ТФ
extern int Level_1      = 100;    // Уровень CCI для первого ТФ
extern int TF_2         = 240;    // Количество минут второго ТФ
extern int CCI_Period_2 = 14;     // Период CCI для второго ТФ
extern int Level_2      = 100;    // Уровень CCI для второго ТФ
extern int NumberOfBars = 1000;  // Количество баров обсчёта (0-все)
extern int ExtBars=3; 
int per;


//------- Буферы индикатора ------------------------------------------
double buf0[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void init() {
  IndicatorDigits(1);

  SetIndexBuffer(0, buf0);
  SetIndexLabel (0, "i-3CCI-h");
  SetIndexStyle (0, DRAW_HISTOGRAM, STYLE_SOLID, 2);
  SetIndexEmptyValue(0, 0);
}

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void deinit() {
  Comment("");
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
void start() {
  double cci0, cci1, cci2;
  int    nb1, nb2,count;
  int    LoopBegin, sh;


 	if (NumberOfBars==0) LoopBegin=Bars-1;
  else LoopBegin=NumberOfBars-1;
  LoopBegin=MathMin(Bars-1, LoopBegin);
  count=IndicatorCounted();
  for (sh=count; sh>=0; sh--) {
    nb1=iBarShift(NULL, TF_1, Time[sh+1], False);
    nb2=iBarShift(NULL, TF_2, Time[sh+1], False);

    cci0=iCCI(NULL, 0   , CCI_Period_0, PRICE_CLOSE, sh+1);
    cci1=iCCI(NULL, TF_1, CCI_Period_1, PRICE_CLOSE, nb1);
    cci2=iCCI(NULL, TF_2, CCI_Period_2, PRICE_CLOSE, nb2);
    
   /* double cci[3];
    cci[0]=cci0;
    cci[1]=cci1;
    cci[2]=cci2;
    string s1="cci-0 *** "+DoubleToStr(cci[0],3);
    string s2="cci-1 *** "+DoubleToStr(cci[1],3);
    string s3="cci-2 *** "+DoubleToStr(cci[2],3);
    string str[3];
    str[0]=s1;
    str[1]=s2;
    str[2]=s3;
    color col=Lime;
     for(int y=0;y<3;y++)
     {ObjectCreate("textSignal"+y,OBJ_LABEL,0,0,0,0,0);    
      ObjectSet("textSignal"+y,OBJPROP_CORNER,1);
      ObjectSet("textSignal"+y,OBJPROP_XDISTANCE,35-25);
      ObjectSet("textSignal"+y,OBJPROP_YDISTANCE,y*(20)+20+8);
      if(cci[y]>=0)col=Lime;else col=Red;
      if(cci[y]>Level_0) col=Aqua;
      if(cci[y]<-Level_0) col=DarkViolet;
      ObjectSetText("textSignal"+y,str[y],15,"Tahoma",col);
     }
*/
    if (cci0>Level_0 && cci1>Level_1 && cci2>Level_2) {buf0[sh]=1;
    if (per != Time[0]) {per = Time[0];
    if(sh<=ExtBars && ExtBars!=-1)
    Alert(Symbol(),Period()," ",
                              TimeYear(Time[sh]),".",
                              TimeDay(Time[sh]),".",
                              TimeMonth(Time[sh]),"; ",
                              TimeHour(Time[sh]),":",
                              TimeMinute(Time[sh])," ",
                              "Покупка");}}
    if (cci0<-Level_0 && cci1<-Level_1 && cci2<-Level_2) {buf0[sh]=-1;
    if (per != Time[0]) {per = Time[0];
    if(sh<=ExtBars && ExtBars!=-1)
    Alert(Symbol(),Period()," ",
                              TimeYear(Time[sh]),".",
                              TimeDay(Time[sh]),".",
                              TimeMonth(Time[sh]),"; ",
                              TimeHour(Time[sh]),":",
                              TimeMinute(Time[sh])," ",
                              "Продажа");}}
  }
}
//+------------------------------------------------------------------+
 
sergeev >>:

например так для байстоп:




А как сам отложенник от открытой позиции поставить?

 
ArtY0m >>:

А как сам отложенник от открытой позиции поставить?

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

Для этого вам можно использовать соотв. уже готовую функцию, - 

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

//-------

Саму функцию  вставляете в самый конец кода.

А в функции СТАРТ вызываете её и задаете цену открытия нужной вам посл.позиции (бай или селл), напр., -

double OpenPrice=PriceOpenLastPos(NULL,OP_BUY, MAGIC) ;

 
rid >>:

Сначала надо програмно определить цену последней открытой позиции. 

Для этого вам можно использовать соотв. уже готовую функцию, - 

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

'Полезные функции от KimIV'

//-------

Саму функцию  вставляете в самый конец кода.

А в функции СТАРТ вызываете её и задаете цену открытия нужной посл.позиции (бай или селл), напр., -

double OpenPrice=PriceOpenLastPos(NULL,OP_BUY, MAGIC) ;

Большое спасибо!))

 

В Индикаторе, если выполняется условие, я хочу внести строчку с пометкой в текстовый файл (не важно что, допустим дату и время).

Файл создаётся, строка дописывается, но только в реальном времени. Я же хочу вносить пометки при работе на истории. Кто-нибудь знает как это сделать?

Спасибо!





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