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

 
KimIV >> :

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.

 
KimIV >> :

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

???

 
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_window

extern int SignalBars=30;              // кол-во баров для сигнала
extern int TrendBars=300;              // кол-во баров для т. линий
extern color CostMaxColor=FireBrick;   // цвет максимальной цены
extern color CostMinColor=SteelBlue;   // цвет минимальной цены
extern color VLineColor=DarkSlateGray; // цвет минимальной цены
extern color TrendColor=Gray;          // цвет трендовых линий
extern color OrderColor=Green;         // цвет сигнала ордера
extern color 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     - значение, для которого вычислить Y

  if( x2== x1)return( y1);
  else
  return(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);
}
 

foto da tela

adicionado via ópera, não adicionado no explorer

 
como você pode determinar o tempo final (a partir da esquerda) que é visível no gráfico?
 
DECIDE писал(а) >>
Como posso determinar o tempo final (a partir da esquerda) que é visível no gráfico?

TimeCurrent()

 
KimIV писал(а) >>

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()]