Características úteis da KimIV - página 116

 

A função SetChannel().

Esta função coloca o objetoOBJ_CHANNEL em um canal equidistante no gráfico atual.

  • cl- Cor do objeto. Parâmetro obrigatório.
  • t[]- Conjunto de três valores no eixo do tempo.Parâmetro obrigatório.
  • p[]- Conjunto de três valores no eixo do preço. Parâmetroobrigatório.
  • nm- Nome do objeto. Quando o valor padrão é passado -"", o tempo atual de abertura da barra é usado como o nome.
  • ry- Bandeira da propriedadeBOW. O valor padrão éFalso.
  • st- Estilo de linha. Os valores válidos sãoSTYLE_SOLID(padrão),STYLE_DASH,STYLE_DOT,STYLE_DASHDOT.
  • wd- Espessura da linha. O padrão é1.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 21.03.2013                                                     |
//|  Описание : Установка объекта OBJ_CHANNEL Равноудаленный канал.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl  - цвет линии                                                        |
//|    t[] - время открытия бара                                               |
//|    p[] - ценовой уровень                                                   |
//|    nm  - наименование              (  ""  - время открытия текущего бара)  |
//|    ry  - луч                       (False - по умолчанию)                  |
//|    st  - стиль линии               (  0   - простая линия)                 |
//|    wd  - ширина линии              (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetChannel(color cl, datetime& t[], double& p[],
                string nm="", bool ry=False, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t[0]<=0) t[0]=Time[20];
  if (p[0]<=0) p[0]=High[20];
  if (t[1]<=0) t[1]=Time[0];
  if (p[1]<=0) p[1]=High[0];
  if (t[2]<=0) t[2]=Time[15];
  if (p[2]<=0) p[2]=Low[15];
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_CHANNEL, 0, 0,0, 0,0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1 , t[0]);
  ObjectSet(nm, OBJPROP_PRICE1, p[0]);
  ObjectSet(nm, OBJPROP_TIME2 , t[1]);
  ObjectSet(nm, OBJPROP_PRICE2, p[1]);
  ObjectSet(nm, OBJPROP_TIME3 , t[2]);
  ObjectSet(nm, OBJPROP_PRICE3, p[2]);
  ObjectSet(nm, OBJPROP_COLOR , cl);
  ObjectSet(nm, OBJPROP_RAY   , ry);
  ObjectSet(nm, OBJPROP_STYLE , st);
  ObjectSet(nm, OBJPROP_WIDTH , wd);
}
ZZY. anexado um script para testar a função SetChannel().
Arquivos anexados:
 

Boa tarde.

Estou usando a função SetTLine() da KimIV https://forum.mql4.com/ru/38949/page6#434255 . O problema é que eu preciso de duas linhas (superior e inferior), mas não funciona para mim. Fez outra função SetTLine1() com outras variáveis, mas ainda não funciona. Como fazer isso?

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
datetime d0=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));
datetime d1=TimeCurrent()-24*60*60;
while (TimeDayOfWeek(d1)==0 || TimeDayOfWeek(d1)==6) d1-=24*60*60;
d1=StrToTime(TimeToStr(d1, TIME_DATE));
datetime d2=d1-24*60*60;
while (TimeDayOfWeek(d2)==0 || TimeDayOfWeek(d2)==6) d2-=24*60*60;
d2=StrToTime(TimeToStr(d2, TIME_DATE));
int b2=iBarShift(NULL, 0, d2);     // номер бара начала второго дня
int b1=iBarShift(NULL, 0, d1);     // номер бара начала первого дня
int b0=iBarShift(NULL, 0, d0);     // номер бара начала текущего дня
int n2=iLowest(NULL, 0, MODE_LOW, b2-b1-1, b1);
int n1=iLowest(NULL, 0, MODE_LOW, b1-b0-1, b0);
datetime t1=Time[n2];
double   p1=Low[n2];
datetime t2=Time[n1];
double   p2=Low[n1];
SetTLine(Magenta, "", t1, p1, t2, p2, True, STYLE_SOLID, 3);   


datetime di0=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));
datetime di1=TimeCurrent()-24*60*60;
while (TimeDayOfWeek(di1)==0 || TimeDayOfWeek(di1)==6) di1-=24*60*60;
di1=StrToTime(TimeToStr(di1, TIME_DATE));
datetime di2=di1-24*60*60;
while (TimeDayOfWeek(di2)==0 || TimeDayOfWeek(di2)==6) di2-=24*60*60;
di2=StrToTime(TimeToStr(di2, TIME_DATE));
int bi2=iBarShift(NULL, 0, di2);     // номер бара начала второго дня
int bi1=iBarShift(NULL, 0, di1);     // номер бара начала первого дня
int bi0=iBarShift(NULL, 0, di0);     // номер бара начала текущего дня
int ni2=iHighest(NULL, 0, MODE_HIGH, bi2-bi1-1, bi1);
int ni1=iHighest(NULL, 0, MODE_HIGH, bi1-bi0-1, bi0);
datetime t1i=Time[ni2];
double   p1i=High[ni2];
datetime t2i=Time[ni1];
double   p2i=High[ni1];
SetTLine1(Magenta, "", t1i, p1i, t2i, p2i, True, STYLE_SOLID, 3);
//----
   return(0);
  }
//+------------------------------------------------------------------+

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка объекта OBJ_TREND трендовая линия                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               (  ""  - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10]                       |
//|    p1 - ценовой уровень            (  0   - Low[10])                       |
//|    t2 - время открытия бара        (  0   - текущий бар)                   |
//|    p2 - ценовой уровень            (  0   - Bid)                           |
//|    ry - луч                        (False - по умолчанию)                  |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetTLine(color cl, string nm="",
              datetime t1=0, double p1=0, datetime t2=0, double p2=0,
              bool ry=False, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[10];
  if (p1<=0) p1=Low[10];
  if (t2<=0) t2=Time[0];
  if (p2<=0) p2=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TREND, 0, 0,0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1 , t1);
  ObjectSet(nm, OBJPROP_PRICE1, p1);
  ObjectSet(nm, OBJPROP_TIME2 , t2);
  ObjectSet(nm, OBJPROP_PRICE2, p2);
  ObjectSet(nm, OBJPROP_COLOR , cl);
  ObjectSet(nm, OBJPROP_RAY   , ry);
  ObjectSet(nm, OBJPROP_STYLE , st);
  ObjectSet(nm, OBJPROP_WIDTH , wd);
}


void SetTLine1(color cli, string nmi="",
              datetime t1i=0, double p1i=0, datetime t2i=0, double p2i=0,
              bool ryi=False, int sti=0, int wdi=1) {
  if (nmi=="") nmi=DoubleToStr(Time[0], 0);
  if (t1i<=0) t1i=Time[10];
  if (p1i<=0) p1i=Low[10];
  if (t2i<=0) t2i=Time[0];
  if (p2i<=0) p2i=Bid;
  if (ObjectFind(nmi)<0) ObjectCreate(nmi, OBJ_TREND, 0, 0,0, 0,0);
  ObjectSet(nmi, OBJPROP_TIME1 , t1i);
  ObjectSet(nmi, OBJPROP_PRICE1, p1i);
  ObjectSet(nmi, OBJPROP_TIME2 , t2i);
  ObjectSet(nmi, OBJPROP_PRICE2, p2i);
  ObjectSet(nmi, OBJPROP_COLOR , cli);
  ObjectSet(nmi, OBJPROP_RAY   , ryi);
  ObjectSet(nmi, OBJPROP_STYLE , sti);
  ObjectSet(nmi, OBJPROP_WIDTH , wdi);
}
 

Você não precisa fazer duas funções. Você precisa chamar um com parâmetros diferentes. Você chamou duas funções, mas passou um nome vazio para o objeto LINE a ambas. Por padrão, a função SetTLine() define o tempo atual de abertura da barra como o nome. No seu caso, isto faria com que não importa quantas vezes você chamasseSetTLine(), cada vez que você criasse um objeto com o mesmo nome, ou seja, um objeto de UMA LINHA.

Eu retrabalhei seu código. Ver anexo. E para um exemplo do que seu código desenha, uma imagem

Arquivos anexados:
 
KimIV:

Você não precisa fazer duas funções. Você precisa chamar um com parâmetros diferentes. Você chamou duas funções, mas passou um nome vazio do objeto LINHA a ambas. Por padrão, a função SetTLine() define o tempo atual de abertura da barra como o nome. No seu caso, isto faria com que não importa quantas vezes você chamasseSetTLine(), cada vez que você criasse um objeto com o mesmo nome, ou seja, um objeto de UMA LINHA.

Eu retrabalhei seu código. Ver anexo. E para um exemplo do que seu código desenha, uma imagem


Estou vendo, obrigado.

 

Olá!

Quero dizer um GRANDE OBRIGADO por seu trabalho. Eu baixei 2 arquivos(ByMarketBuy(Sell)+e-SARTrailing) de seu website para construir meu sistema comercial. Envio o scriptByMarketBuy(Sell) no par EUR/USD em 1 tela, prescrevendo MAGIC 30 para um pedido eMAGIC 60 para outro (respectivamente M30 e H1) e oe-SARTrailing advisor em 2 e 3 telas comSAR.TF=30 e 60 configurações, respectivamente. E como duas ordens estão abertas no mesmo par de moedas, elas são co-rotadas e acontece que sem oMagicNumber Advisorse-SARTrailing em duas telas entrarão em conflito uma com a outra. Eu tenho um GRANDEPEDIDOpara vocêse você pudesse alterar o advisor (para escrever) um recurso como oMagicNumber pode ser um tal suplemento apreciaria muitos. E isto funcionará em todos os prazos aomesmo tempo, sem conflito entre si, independentemente da direcionalidade.

Muito obrigado de antemão!

 
tim-time:

Eu tenho um GRANDE PEDIDO para você se você pudesse ajustar seu consultor especializado com afunçãoMagicNumber.

Obrigado pela dica. Acrescentei um filtro para mágicos...
 

Função GetTimeOpenBar().

Esta função retorna o tempo aberto de um símbolo arbitrário e de uma barra de tempo arbitrária. Geralmente, é apenas uma combinação de funções básicas iBarShift() e iTime(). Portanto, não há nada de novo aqui, e o uso de uma variante em particular é uma questão de conveniência. Você pode passar os seguintes parâmetros opcionais para a função

  • sy- Nome do instrumento comercial (símbolo). Valores "" e NULL significam o símbolo atual. O valor padrão é "".
  • tf- Prazo. Valor padrão - 0 - prazo atual.
  • dt- Data e hora. Valor padrão - 0 - hora atual.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 25.01.2012                                                     |
//|  Описание : Возвращает время открытия бара.                                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий)                 |
//|    dt - дата/время                 (    0       - текущее)                 |
//+----------------------------------------------------------------------------+
datetime GetTimeOpenBar(string sy="", int tf=0, int dt=0) {
  if (sy=="" || sy=="0") sy=Symbol();
  if (tf==0) tf=Period();
  if (dt==0) dt=TimeCurrent();
  
  int sh=iBarShift(sy, tf, dt, False);

  return(iTime(sy, tf, sh));
}

 
KimIV:
Obrigado pela dica. Acrescentei um filtro para mágicos...

HELLO!

UAU!!! ESSE É O RITMO!!!! (Eu mesmo faço isso ou digo NÃO!)

UmGRANDE RESPEITOPARA PROFISSIONAIS!(Um profissional deve conhecer todos os menores detalhes + trabalho árduo em sua área e, claro, a experiência que se acumula ao longo dos anos).

Estou engajado nos móveis embutidos já há 4 5 anos e 1 5 anos termina o comércio Forex (trabalho árduo+experiência de momentos de sucesso e insucesso no comércio, resta aprender os menores detalhes).

MEU OBJETIVO É ME TORNAR UM PROFISSIONAL DE COMÉRCIO.

AGRADEÇOSUA AJUDA!

COM RESPEITO!

 

Eu criei a função ErrorRU(), que retorna uma breve ou detalhada descrição russa de um erro por seu código. Ambos os erros retornados pelo servidor comercial e erros de execução dos programas MQL são detectados. Nem todos os erros, entretanto, têm uma descrição detalhada com recomendações "O que fazer", mas é assim que as coisas são.

Estou publicando a função no roteiro para testá-lo.

Se alguém precisar de uma variação na forma de arquivo MQH, você pode obtê-la em meu website.

Arquivos anexados:
 

Olá!

É possível adicionar notificações PUSH à sua EAe-SignalOfTrade?

https://www.mql5.com/ru/forum/6960

https://www.mql5.com/ru/docs/common/sendnotification

(O servidorVPS alugado recusa-se a fornecer o servidor SMTP-server de dados que deve ser especificado nas configurações de correio MT4 para o trabalho do consultor comUseSendMail=True- e-mail. )

Obrigado de antemão!