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().
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
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
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.
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.
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.
(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. )
A função SetChannel().
Esta função coloca o objetoOBJ_CHANNEL em um canal equidistante no gráfico atual.
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?
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
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!
Eu tenho um GRANDE PEDIDO para você se você pudesse ajustar seu consultor especializado com afunçãoMagicNumber.
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
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.
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!