Como posso aprender a criar objetos gráficos? MQL4. - página 2

 
barabashkakvn:
Se você sabe a hora e as datas de seus pontos, você só precisa ligar parabool TrendCreate()

Obrigado pelo conselho. Acabou sendo mais fácil do que isso.

Eu o fiz assim:

#property strict
#property script_show_inputs

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
  long   chart_ID=0;        // ID графика
  string name="TrendLine";  // имя линии
  int    sub_window=0;      // номер подокна
//--- сбросим значение ошибки
   ResetLastError();
//--- создадим трендовую линию по заданным координатам
   if(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,Time[41],1.0656,Time[65],1.0494))
     {
      Print(__FUNCTION__,
            ": не удалось создать линию тренда! Код ошибки = ",GetLastError());
      return;
     }
   
  }
//+------------------------------------------------------------------+

P.S. Uma coisa que eu não consigo entender é porque os números no exemplo são escolhidos assim:

InpDate1=35;        
InpPrice1=60;        
InpDate2=65;        
InpPrice2=40; 

A partir deles, a linha de tendência vai para algum lugar no meio da faixa.

 
Agora o próximo problema a resolver é como continuar a linha para a direita e obter o valor da linha na EA?
 
forexman77:

...

A partir deles, a linha de tendência é colocada em algum lugar no meio da faixa.

Portanto, é apenas um roteiro cuja tarefa principal é demonstrar como criar e trabalhar com o objeto OBJ_TREND. Os números foram tomados para fins ilustrativos.
 
forexman77:
Agora o próximo problema a resolver é como continuar a linha para a direita e obter o valor da linha na EA?

O código do roteiro tem tudo isso:

//+------------------------------------------------------------------+
//| Создает линию тренда по заданным координатам                     |
//+------------------------------------------------------------------+
bool TrendCreate(const long            chart_ID=0,        // ID графика
.
.
.
//--- включим (true) или отключим (false) режим продолжения отображения линии влево
   ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
   ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
.
.
.
 
barabashkakvn:

O código do roteiro tem tudo isso:

1. quando chamados do tester trade são abertos. Se eu executar a otimização, há zeros em todos os lugares. Quando eu lanço qualquer execução de otimização, os negócios estão lá. O que fazer?

2) Como posso fazer com que uma linha seja salva se um negócio ocorreu (em cada negócio), e se não ocorreu, ela é apagada?

  long   chart_ID=0;        // ID графика
  string name="TrendLine";  // имя линии
  int    sub_window=0;      // номер подокна
  ObjectDelete(chart_ID,name);
//--- сбросим значение ошибки
   ResetLastError();
//--- создадим трендовую линию по заданным координатам
   if(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,Time[minbar],Low[minbar],Time[IPMIN],Low[IPMIN]))
     {
      Print(__FUNCTION__,
            ": не удалось создать линию тренда! Код ошибки = ",GetLastError());
      return(0);
     }
    ObjectSet("TrendLine",OBJPROP_TIME1,Time[minbar]);
    ObjectSet("TrendLine",OBJPROP_PRICE1,Low[minbar]);
    ObjectSet("TrendLine",OBJPROP_TIME2,Time[IPMIN]);
    ObjectSet("TrendLine",OBJPROP_PRICE2,Low[IPMIN]);

   if (IPMIN!=0){ double uroven= ObjectGetValueByTime(chart_ID,name,Time[1],sub_window);}
   
}
Print("uroven=",uroven);
if (Time[0] > b && Close[1] < uroven){Opn_B=true;}
 
Você mesmo precisa controlar os negócios. Mas para que cada comércio tenha sua própria linha, você precisa dar a cada linha um nome único ao criá-la.
 
barabashkakvn:
Você mesmo precisa controlar os negócios. Mas para que cada comércio tenha sua própria linha, você precisa dar a cada linha um nome único ao criá-la.
Como? Você pode dar um exemplo?
 
forexman77:
Como? Posso lhe dar um exemplo?
Ajude quem tem exemplos, por favor.
 

Objetos gráficos durante os testes

Durante os testes de visualização, o Expert Advisor interage com o gráfico real. Em testes normais, sem visualização, o Expert Advisor opera com um gráfico "virtual" que não é apresentado; neste caso, algumas sutilezas são possíveis. Os objetos gráficos não são suportados quando o testador está em modo de otimização.

Dois dias para estudar, e se revela que é impossível realizar a otimização.

Será que eu crio um indicador? Serei capaz de obter o valor da linha no meu Expert Advisor através dela?

Quem tem a dizer o quê? Talvez, quem já tenha estudado esta questão?

 
forexman77:

...

Será que eu poderia fazer um indicador? Serei capaz de obter o valor da linha na EA através dela?

...

Se o indicador cria objetos gráficos e depois obtém seus parâmetros, não.

Mas ainda é mais fácil resolver tudo através do uso de um indicador. Os cálculos são feitos no indicador e seus resultados são exibidos através de buffers indicadores.

Há mais uma alternativa. Criar variáveis globais com parâmetros da linha ao invés de linhas, mas então a função GetValueByShift() não funcionará, você deve escrever seu análogo.