Você não precisa acrescentar nada... Já está na fila.
Gostaria de perguntar a Igor e a todos que escrevem regularmente neste tópico. Naveguei pelo ramo e não encontrei a função que determina o ângulo da tendência. Você tem uma função que irá determinar o ângulo da tendência em uma vela de 15 minutos a 6 ou mais velas?
mazepa писал(а)>> Gostaria de perguntar a Igor e a todos que escrevem regularmente neste tópico. Procurei no ramo e não encontrei a função que determina o ângulo da tendência. Você tem uma função que vai determinar o ângulo da tendência em uma vela de 15 minutos a 6 ou mais velas?
Podemos falar não sobre o ângulo, mas sobre a taxa de mudança no preço
Saudações! Obrigado por seu trabalho, você está fazendo um bom trabalho.
Estou fazendo um indicador, mas a função EquationDirect às vezes calcula o ponto de cruzamento incorretamente :(
Calculei os pontos das linhas em minha tabela e os anexei em um indicador de teste para maior clareza. A função não calcula corretamente a interseção com um offset, ou seja, em algum ângulo a fórmula na função não é apropriada e precisa ser corrigida de alguma forma, então quando isso acontecer os cálculos serão feitos por uma fórmula diferente IMHO
#define CPR "DECIDE"#define mName "Signal"#property indicator_chart_windowexternint SignalBars=30;// кол-во баров для сигналаexternint TrendBars=300;// кол-во баров для т. линийexterncolor CostMaxColor=FireBrick;// цвет максимальной ценыexterncolor CostMinColor=SteelBlue;// цвет минимальной ценыexterncolor VLineColor=DarkSlateGray;// цвет минимальной ценыexterncolor TrendColor=Gray;// цвет трендовых линийexterncolor OrderColor=Green;// цвет сигнала ордераexterncolor LabelColor=Navy;// цвет меток// Инициализация - функция начальных установокint init(){if(!IsDemo())return(0);if( SignalBars<30) SignalBars=30;}// ДеИнициализация - функция завершения работыint deinit(){ObjectDelete("UpTrend");ObjectDelete("DownTrend");ObjectDelete("MaxCost");ObjectDelete("MinCost");ObjectDelete("SignOrder");ObjectDelete("Trend");ObjectDelete("Volume");}// СТАРТ - основная функция обработкиint start(){int bar;double val, upb, t1, t2, h1, h2;
val=173;
bar=iHighest(NULL,0,MODE_HIGH,100,0);
t1=Time[0]-273600;
h1=High[ bar];
t2= t1-518400;
h2=High[ bar]- val*Point;
SetTLine( TrendColor,"DownTrend", t2, h2, t1, h1, True,STYLE_SOLID,2);
upb= EquationDirect( t1, h1, t2, h2,Time[0]);
SetArrow(6,DarkViolet,"UpBorder",Time[0], upb,2);
SetVLine( VLineColor,"VLine",Time[0],STYLE_SOLID);}// --- ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ ---// вертикальная временная линияvoid SetVLine(color cl,string nm="",datetime t1=0,int st=0,int wd=1){// Параметры:// cl - цвет линии// nm - наименование ("" - время открытия текущего бара)// t1 - время (0 - время открытия текущего бара)// st - стиль линии (0 - простая линия)// wd - ширина линии (1 - по умолчанию)if( nm=="") nm=DoubleToStr(Time[0],0);if( t1<=0) t1=Time[0];if(ObjectFind( nm)<0)ObjectCreate( nm,OBJ_VLINE,0,0,0);ObjectSet( nm, OBJPROP_TIME1, t1);ObjectSet( nm, OBJPROP_COLOR, cl);ObjectSet( nm, OBJPROP_STYLE, st);ObjectSet( nm, OBJPROP_WIDTH, wd);}// установка трендовой линии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){// Параметры:// cl - цвет линии// nm - наименование ( "" - время открытия текущего бара)// t1 - время открытия бара ( 0 - Time[10]// p1 - ценовой уровень ( 0 - Low[10])// t2 - время открытия бара ( 0 - текущий бар)// p2 - ценовой уровень ( 0 - Bid)// ry - луч (False - по умолчанию)// st - стиль линии ( 0 - простая линия)// wd - ширина линии ( 1 - по умолчанию)if( nm=="") nm=DoubleToStr(Time[0],0);if( t1<=0) t1=Time[10];if( t2<=0) t2=Time[0];if( p1<=0) p1=Low[10];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);}// вычисление точки пересеченияdouble EquationDirect(double x1,double y1,double x2,double y2,double x){// Параметры:// x1,y1 - координаты первой точки,// x2,y2 - координаты второй точки,// x - значение, для которого вычислить Yif( x2== x1)return( y1);elsereturn(NormalizeDouble(( y2- y1)/( x2- x1)*( x- x1)+ y1,Digits));}// установка значькаvoid SetArrow(int cd,color cl,string nm="",datetime t1=0,double p1=0,int sz=0){// Параметры:// cd - код значка// cl - цвет значка// nm - наименование ("" - время открытия текущего бара)// t1 - время открытия бара (0 - текущий бар)// p1 - ценовой уровень (0 - Bid)// sz - размер значка (0 - по умолчанию)if( nm=="") nm=DoubleToStr(Time[0],0);if( t1<=0) t1=Time[0];if( p1<=0) p1=Bid;if(ObjectFind( nm)<0)ObjectCreate( nm,OBJ_ARROW,0,0,0);ObjectSet( nm, OBJPROP_TIME1, t1);ObjectSet( nm, OBJPROP_PRICE1, p1);ObjectSet( nm, OBJPROP_ARROWCODE, cd);ObjectSet( nm, OBJPROP_COLOR, cl);ObjectSet( nm, OBJPROP_WIDTH, sz);}
não é por causa da função EquationDirect, o cálculo está correto, é por causa de um bug no terminal, a linha é desenhada com um offset
por isso tive que primeiro determinar o ponto de cruzamento com o Tempo[0] e depois traçar uma linha de tendência do ponto inicial para o ponto de cruzamento com o Tempo[0], neste caso tudo funciona bem
o tempo mais à direita no gráfico é necessário para posicionar o ícone do interruptor indicador (quando a escala do gráfico é alterada), ou seja, se você mover o ícone do interruptor além do tempo mais à direita, ou seja, ainda não alcançado, o ícone muda (o sinal para colocar um pedido liga ou desliga, significa que você pode proibir ou permitir que a EA troque trocando o sinal)
O tempo restante é determinado da seguinte forma: obtemos a barra mais externa visível no gráfico
WindowFirstVisibleBar() e obter o tempo [WindowFirstVisibleBar()]
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Você não precisa acrescentar nada... Já está na fila.
Muito obrigado!
Seu fio condutor é um tesouro na internet. Não me canso do que encontrei.
Você não precisa acrescentar nada... Já está na fila.
Gostaria de perguntar a Igor e a todos que escrevem regularmente neste tópico. Naveguei pelo ramo e não encontrei a função que determina o ângulo da tendência. Você tem uma função que irá determinar o ângulo da tendência em uma vela de 15 minutos a 6 ou mais velas?há alguma função que permita acionar (gatilho)
perfil
modelo
???
Gostaria de perguntar a Igor e a todos que escrevem regularmente neste tópico. Procurei no ramo e não encontrei a função que determina o ângulo da tendência. Você tem uma função que vai determinar o ângulo da tendência em uma vela de 15 minutos a 6 ou mais velas?
Podemos falar não sobre o ângulo, mas sobre a taxa de mudança no preço
Saudações! Obrigado por seu trabalho, você está fazendo um bom trabalho.
Estou fazendo um indicador, mas a função EquationDirect às vezes calcula o ponto de cruzamento incorretamente :(
Calculei os pontos das linhas em minha tabela e os anexei em um indicador de teste para maior clareza. A função não calcula corretamente a interseção com um offset, ou seja, em algum ângulo a fórmula na função não é apropriada e precisa ser corrigida de alguma forma, então quando isso acontecer os cálculos serão feitos por uma fórmula diferente IMHO
foto da tela
adicionado via ópera, não adicionado no explorer
Como posso determinar o tempo final (a partir da esquerda) que é visível no gráfico?
TimeCurrent()
TimeCurrent()
Isto parece estar à direita.
Eu já descobri isso.
não é por causa da função EquationDirect, o cálculo está correto, é por causa de um bug no terminal, a linha é desenhada com um offset
por isso tive que primeiro determinar o ponto de cruzamento com o Tempo[0] e depois traçar uma linha de tendência do ponto inicial para o ponto de cruzamento com o Tempo[0], neste caso tudo funciona bem
o tempo mais à direita no gráfico é necessário para posicionar o ícone do interruptor indicador (quando a escala do gráfico é alterada), ou seja, se você mover o ícone do interruptor além do tempo mais à direita, ou seja, ainda não alcançado, o ícone muda (o sinal para colocar um pedido liga ou desliga, significa que você pode proibir ou permitir que a EA troque trocando o sinal)
O tempo restante é determinado da seguinte forma: obtemos a barra mais externa visível no gráfico
WindowFirstVisibleBar() e obter o tempo [WindowFirstVisibleBar()]