// ЗАДАЕМ ДВЕ ТОЧКИ ПРИВЯЗКИ ДЛЯ ГЛАВНОЙ ЛИНИИ: ТОЧКА1(ВРЕМЯ,ЦЕНА) и ТОЧКА2(ВРЕМЯ,ЦЕНА)// ЭТА ЛИНИИ ГЛАВНАЯdatetime Line1_Врем0=Time[0], Line1_Врем1=Time[10];
double Line1_Цена0=High[10], Line1_Цена1=Low[10];
ObjectCreate("Line1",OBJ_TRENDBYANGLE,0,Line1_Врем0,Line1_Цена0,Line1_Врем1,Line1_Цена1);
ObjectSetInteger(0,"Line1",OBJPROP_STYLE,STYLE_SOLID);
ObjectSetInteger(0,"Line1",OBJPROP_COLOR,Red);
ObjectSetInteger(0,"Line1",OBJPROP_WIDTH,2);
// СТРОИМ ПАРАЛЛЕЛЬНУЮ ЛИНИЮ ТОЛЬКО ПО ОДНОЙ ТОЧКЕ-ПРИВЯЗКЕObjectCreate("Line2",OBJ_TRENDBYANGLE,0,Time[15],Low[15],0,0);
ObjectSetInteger(0,"Line2",OBJPROP_STYLE,STYLE_SOLID);
ObjectSetInteger(0,"Line2",OBJPROP_COLOR,Lime);
ObjectSetInteger(0,"Line2",OBJPROP_WIDTH,2);
// ПРИСВАИВАЕМ ЛИНИИ Line2 ТАКОЙ ЖЕ САМЫЙ УГОЛ КАК В ЛИНИИ Line1 ЧТО БЫ ЛИНИИ БЫЛИ ПАРАЛЛЕЛЬНЫЕ ObjectSetDouble(0,"Line2",OBJPROP_ANGLE,ObjectGetDouble(0,"Line1",OBJPROP_ANGLE));
// РИСУЕМ ПЕРПЕНДИКУЛЯРНУЮ ЛИНИЮ К Line1 и Line2ObjectCreate("Value",OBJ_TRENDBYANGLE,0,Time[0],Low[15],0,0);
ObjectSetInteger(0,"Value",OBJPROP_RAY,false);
ObjectSetInteger(0,"Value",OBJPROP_COLOR,Gold);
ObjectSetInteger(0,"Value",OBJPROP_WIDTH,3);
ObjectSetDouble(0,"Value",OBJPROP_ANGLE,90+ObjectGetDouble(0,"Line1",OBJPROP_ANGLE));
// ЗАДАЧА: ПОЛУЧИТЬ РАЗМЕР ЖЕЛТОЙ ЛИНИИ МЕЖДУ Line1 и Line2. ОПТИМАЛЬНЫМ И УНИВЕРСАЛЬНЫМ ПАРАМЕТРОМ РАЗМЕРА НАВЕРНОЕ БУДУТ - ПИКСЕЛИ.
A seguir, através de ObjectGetValueByShift("Line1",a+++) e ObjectGetValueByShift("Value",a+++) e ObjectGetValueByShift("Line2",a+++) buscam a interseção
Itum: Parece simples ... mas não obtém o resultado que você quer
Sim, tudo é simples, exceto que sua tarefa não é solvível.... ))
Antes de mais nada, esqueça a funçãoObjectGetDouble(0,"Line1",OBJPROP_ANGLE), que sempre retornará 0, pois não pode ser aplicada a uma linha de tendência. Ela é necessária, em particular, para a linha de tendência "angular", que não depende da escala do gráfico MAS também não depende dos preços de barra. Ou seja, seu ângulo não mudará ao mudar a escala, mas a própria linha se afastará das barras...
Mas esse não é o maior problema... A questão é que você quer encontrar o tamanho da perpendicular entre 2 linhas de tendência paralelas, tente desenhar tal perpendicular no gráfico... E depois muda a escala do gráfico... a perpendicular torna-se não perpendicular... )))) Portanto, o problema é exatamente o que você considera uma perpendicular (dependência da escala e como VOCÊ a vê) e um perpendicular matemático.
A perpendicular em uma tabela escalonada de preços é uma ilusão ótica.
Usando a geometria, este problema em sua forma pura é resolvido de uma só vez... MAS o resultado matemático do cálculo nunca coincidirá com o que se vê no gráfico... E você precisa exatamente da partida, então o problema é insolúvel. Basta simplificar suas exigências, não procurar uma perpendicular, mas apenas a distância entre 2 linhas ao mesmo tempo...
da maneira que você quiser.
Como você pode ver, não há nada de complicado nisso. Basta pensar um pouco sobre isso.
Com uma resposta tão detalhada, acho que a TC será capaz de escrever o código sozinha.
Muitas pessoas aqui já esqueceram os problemas escolares porque não conseguiam entender seu significado na escola.
A saída é:
A seguir, através de ObjectGetValueByShift("Line1",a+++) e ObjectGetValueByShift("Value",a+++) e ObjectGetValueByShift("Line2",a+++) buscam a interseção
Estou lendo bem?A fim de resolver o problema, você precisa:
1. desenhar uma perpendicular às linhas paralelas dadas
2. Determinar os pontos de interseção da perpendicular com as linhas dadas
3. calcular a distância entre os pontos de interseção
Claramente em fotos:
(diferentes linhas e distâncias entre elas)
.............................................................................
.............................................................................
.............................................................................
.............................................................................
Não convincente.
Não convincente.
Abra seus livros didáticos e fique convencido
Sim
Infelizmente eu não sou matemático (ângulo azul = 90 - ângulo da linha
converter ângulo em radianos
cathetus vermelho oposto = hipotenusa verde * seno (ângulo azul)
Já encontramos a hipotenusa neste fio, cruzando verticalmente ambas as linhas
Se o ângulo da linha for 90 ou 0, então considere a distância de forma diferente, ou seja, cruzando linhas paralelas horizontal ou verticalmente.
Que tal pesquisar no Google?
ângulo azul = 90 - ângulo da linha
Converter ângulo em radianos
cathetus vermelho oposto = hipotenusa verde * seno (ângulo azul)
Já encontramos a hipotenusa neste fio, cruzando verticalmente ambas as linhas
Se o ângulo da linha for 90 ou 0, então conte a distância de outra forma, ou seja, cruzando linhas paralelas horizontal ou verticalmente.
Hmmm...
Por alguma razão, não funciona
Parece simples ... mas não obtém o resultado que você quer
Sim, tudo é simples, exceto que sua tarefa não é solvível.... ))
Antes de mais nada, esqueça a funçãoObjectGetDouble(0,"Line1",OBJPROP_ANGLE), que sempre retornará 0, pois não pode ser aplicada a uma linha de tendência. Ela é necessária, em particular, para a linha de tendência "angular", que não depende da escala do gráfico MAS também não depende dos preços de barra. Ou seja, seu ângulo não mudará ao mudar a escala, mas a própria linha se afastará das barras...
Mas esse não é o maior problema... A questão é que você quer encontrar o tamanho da perpendicular entre 2 linhas de tendência paralelas, tente desenhar tal perpendicular no gráfico... E depois muda a escala do gráfico... a perpendicular torna-se não perpendicular... )))) Portanto, o problema é exatamente o que você considera uma perpendicular (dependência da escala e como VOCÊ a vê) e um perpendicular matemático.
A perpendicular em uma tabela escalonada de preços é uma ilusão ótica.
Usando a geometria, este problema em sua forma pura é resolvido de uma só vez... MAS o resultado matemático do cálculo nunca coincidirá com o que se vê no gráfico... E você precisa exatamente da partida, então o problema é insolúvel. Basta simplificar suas exigências, não procurar uma perpendicular, mas apenas a distância entre 2 linhas ao mesmo tempo...
Eu não tenho palavras.
Eu conheço todas as letras, mas não consigo ler a palavra
Vamos lá, vamos lá, não desista, estude MQL, é só uma questão de tempo