[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 105

 

Olá a todos,

Eu fiz um indicador, ele desenha duas linhas a 45 graus. Quando ele se cruza, eu quero que seja horizontal.

Então, como calcular o cruzamento?

Eu desenhei com Baixo/Alto do dia anterior, através de um ponto.

Para conseguir tal linha eu traço de um ponto ao início do dia e do outro lado a partir do ponto do raio.

Como faço para escrever o código para recalculá-lo? Eu ainda não o fiz:

Вот начну искат как цена двигается-толко надо увидет ее-первая ест,но вторая 0:
price1 = NormalizeDouble(ObjectGet("Dn",OBJPROP_PRICE1),Digits);
price2 = NormalizeDouble(ObjectGet("Dn",OBJPROP_PRICE2),Digits);
Time_start - ето синяя вертикалная линия
double b3=iBarShift(Symbol(),0,Time_start);      
double b4=iBarShift(Symbol(),0,TimeCurrent());
ну и цикл поиска
for(int j = b4;j <= b3;j++){
Ну що искат,если я не вижу то,что ищу?
Застрял.
 
bond007:
.... e como eles podem descobrir isso????)
eu simplesmente não entendo.... eles dizem que você pode negociar com EAs, outros dizem que você não pode - se por exemplo uma corretora permite que você use um EA, então como?

a empresa de corretagem não pode ver o código.... eles só vêem a intensidade da colocação de pedidos e comentários nos pedidos ... há alguns DTs onde o trabalho de EAs no terminal é proibido ... significa que quando você cola um EA a um gráfico ele simplesmente não negocia ... se não for permitido pelas configurações do servidor, seu corretor lhe dará um erro xxx ou algo como 2013.01.18 22:45:03 '30xxxxx': a negociação por especialistas é proibida



ou seja, não sei por que fiquei tão preocupado com o código?

 
hoz:

Obrigado, agora você vai ter apetite :)
Bom para você, e gradualmente do simples ao complexo, você programará sua compreensão, que é necessária para escrever qualquer programa. Boa sorte!
 
mario065:

Olá a todos,

Eu fiz um indicador, ele desenha duas linhas a 45 graus. Quando ele se cruza, eu quero que seja horizontal.

Então, como calcular o cruzamento?

Eu desenhei com Baixo/Alto do dia anterior, através de um ponto.

Para conseguir tal linha eu traço de um ponto ao início do dia e do outro lado a partir do ponto do raio.

Como faço para escrever o código para recalculá-lo? Eu ainda não o fiz:

Para ajudar.
 
drknn:

O que você quer dizer com o termo "gráfico logarítmico"? Por favor, me dê um exemplo. Eu, por exemplo, apenas encontrei o conceito de uma escala logarítmica. O terminal MT4 já possui esta escala.
Refiro-me à escala logarítmica. Como posso encontrá-la na MT? Eu a uso há tantos anos e não sei o que já está lá.
 
mario065:

Olá a todos,

Eu fiz um indicador, ele desenha duas linhas a 45 graus. Quando ele se cruza, eu quero que seja horizontal.

Então, como calcular o cruzamento?

Eu desenhei com Baixo/Alto do dia anterior, através de um ponto.

Para conseguir tal linha eu traço de um ponto ao início do dia e do outro lado a partir do ponto do raio.

Como faço para escrever o código para recalculá-lo? Eu ainda não o fiz:



Igor Kim's:

Função CrossPointOfLines()

 

Alexei, Artem, obrigado.

Vou aprender as funções de Igor Kim.

 

Portanto, eu não tenho dois pontos, tenho apenas um.

Aqui estão os sors:

//+------------------------------------------------------------------+
//|                                                     TRIANGLE.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2013,mario"
#property link      ""

#property indicator_chart_window
extern string   TimeStart  = "Час за начало";
extern datetime Time_start = D'17.01.2013';
extern int      Days       = 1;
bool            New_Bar    = false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){return(0);}
int deinit(){
   ObjectsDeleteAll(0,OBJ_TRENDBYANGLE);
   ObjectsDeleteAll(0,OBJ_VLINE);
   Comment("");return(0);}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  { 
   datetime New_Time,time_next,time_barh,time_barl;
   time_next = Time_start + Days*86400;
   datetime new_day = iTime(Symbol(),PERIOD_D1,0);
//+------------------------------------------------------------------+
   if(New_Time != new_day)                        
           {
           New_Time = new_day;                         
           New_Bar  = true;
           }
//+------------------------------------------------------------------+ 
//Шифтвам 
   double b1=iBarShift(Symbol(),0,Time_start);      
   double b2=iBarShift(Symbol(),0,time_next);
   double min = 3,max = 0;
   for(int i = b2;i <= b1;i++){
      if(iHigh(Symbol(),0,i)>max){ max=iHigh(Symbol(),0,i);time_barh = Time[i];}
      if(iLow (Symbol(),0,i)<min){ min=iLow (Symbol(),0,i);time_barl = Time[i];}
      }
   if(New_Bar == true){ 
      ObjectsDeleteAll(0,OBJ_TRENDBYANGLE);
      ObjectsDeleteAll(0,OBJ_VLINE);
      DrawLine("Start",0,Time_start,0,Time_start,0,0,0,2,Aqua,false);
      DrawLine("Up",3,time_barh,max,0,0,315.0,0,2,DeepSkyBlue,true);
      DrawLine("Up1",3,time_barh,max,Time_start,0,315.0,0,2,DeepSkyBlue,false);
      DrawLine("Dn",3,time_barl,min,0,0,45.0,0,2,Orange,true);
      DrawLine("Dn1",3,time_barl,min,Time_start,0,45.0,0,2,Orange,false);
    }
//+------------------------------------------------------------------+
   double spead = MarketInfo(Symbol(),MODE_SPREAD);
//+------------------------------------------------------------------+ 
   Comment("\nВреме на брокера: ",TimeToStr(TimeCurrent(),TIME_SECONDS),", Локално време: "+TimeToStr(TimeLocal(),TIME_SECONDS),
           "\nТекущ спред: ",DoubleToStr(spead/10,1),
           "\n min:        ",DoubleToStr(min,Digits),
           "\n max:       ",DoubleToStr(max,Digits)
           );
   return(0);
  }
//+------------------------------------------------------------------+
void DrawLine(string name,int lines,datetime time1,double value,datetime time2,double value1,double grd,int style,int wid,color col,bool ray)
{
   ObjectCreate(name,lines,0,time1,value,time2,value1);
   ObjectSet(name,OBJPROP_ANGLE,grd);
   ObjectSet(name,OBJPROP_COLOR,col);
   ObjectSet(name,OBJPROP_STYLE,style);
   ObjectSet(name,OBJPROP_WIDTH,wid);
   ObjectSet(name,OBJPROP_RAY,ray);
}
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Вычисляет координаты точки пересечения двух прямых.            |
//|             Каждая прямая задаётся парой координат своих точек.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив абсцисс              x[0], x[1] - первая прямая              |
//|                                    x[2], x[3] - вторая прямая              |
//|    y - массив ординат              y[0], y[1] - первая прямая              |
//|                                    y[0], y[1] - вторая прямая              |
//|    t - массив искомых координат    t[0]       - абсцисса                   |
//|                                    t[1]       - ордината                   |
//+----------------------------------------------------------------------------+
void CrossPointOfLines(double& x[], double& y[], double& t[]) {
  double z=(y[3]-y[2])*(x[1]-x[0])-(y[1]-y[0])*(x[3]-x[2]);
  ArrayResize(t, 2);
  ArrayInitialize(t, 0.0);

  if (z==0) Print("CrossPointOfLines(): Не удалось найти точку пересечения!");
  else {
    double xy1=x[1]*y[0]-x[0]*y[1];
    double xy2=x[3]*y[2]-x[2]*y[3];
    t[0]=NormalizeDouble((xy1*(x[3]-x[2])-xy2*(x[1]-x[0]))/z, 0);
    t[1]=(xy1*(y[3]-y[2])-xy2*(y[1]-y[0]))/z;
  }
}

O código em si é muito simples, mas há apenas um ponto.

 

Quem sabe por que o indicador DailyPivotPoints no testador em modo visual mostra apenas os dados de hoje em todas as datas?

E se possível, o que deve ser acrescentado a ela para mostrar o que estava na história? Obrigado!

 
lenalebedeva:
Refiro-me especificamente à escala logarítmica, como você a encontra na MT? Eu a uso há tantos anos e não sei o que já está lá.

Ver

P.S.

Por exemplo, você olha para uma tendência passada baixa no gráfico e vê que, em direção à borda do gráfico, ele se desloca ainda mais para fora da janela. Você desce o gráfico para o futuro e observa como o gráfico se desloca automaticamente para cima, liberando espaço para ver as velas do gráfico subjacente. E o que antes era visível no topo da janela do gráfico agora é movido ainda mais alto, para fora da janela do gráfico. Esta é a implementação de uma escala de preços logarítmica no gráfico. Se não existisse, você teria que percorrer o gráfico não apenas da direita para a esquerda, mas também para cima e para baixo. É por isso que a escala de tempo é linear e a escala de preço é logarítmica, a fim de exibir os dados na janela do gráfico facilmente.

No passado, quando os computadores não estavam disponíveis, os comerciantes usavam um gráfico milimétrico e traçavam preços sobre ele para prever tendências e pontos de inflexão. Portanto, existiam duas escalas no papel - preço e tempo. Estas são duas escalas lineares. Você consegue imaginar quão grande teria que ser uma folha de papel milimétrica para conter todos os castiçais de quinze minutos do ano passado? Certamente seria tão grande quanto a parede de uma sala (se não maior). Assim, quando você estiver rolando o gráfico na tela, você pode imaginar este modelo: um gráfico de preços em castiçal é desenhado na parede. Há também uma moldura retangular (por exemplo, vermelha) - é o seu monitor. Movimentar-se ao longo do gráfico nada mais é do que mover este retângulo vermelho ao longo da tendência. Mas então você diria que ambas as escalas em seu monitor são lineares. Isto é verdade, mas apenas parcialmente - observe que ao rolar a carta, a vela que era grande (visualmente percebida como grande) torna-se menor após um leve deslocamento, embora se medirmos a distância entre seus extremos, o número de pontos permanece o mesmo.

Veja, aqui estão 2 screenshots do mesmo gráfico. A primeira captura de tela é apenas uma captura de tela. A segunda é uma imagem da mesma tela, mas depois de girar a roda do mouse com um clique, o gráfico deslocou algumas velas para trás. Pegue um pedaço de papel, prenda-o ao primeiro screenshot e marque os preços altos e baixos da vela marcada em vermelho. Em seguida, mover os riscos marcados para a mesma vela na segunda captura de tela. Você entenderá do que estamos falando e o que é uma mudança na escala logarítmica (qual é a essência do uso desigual das escalas aqui).

E por que você precisa entrar nas nuances das escalas logarítmicas? O que você esperava encontrar neles?

Razão: