Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 1091

 
FiVik:

Boa tarde. Tenho uma pergunta: onde posso ver um exemplo de código para produzir os valores de um indicador a partir de diferentes períodos de tempo em um gráfico de preços?

Não posso procurar no Google, talvez esteja fazendo um pedido errado.

Desejo produzir na segunda coluna do gráfico de preços o desvio padrão das Bandas de Bollinger de H1 para W1. A segunda coluna mostra valores obtidos pela multiplicação do desvio padrão pelos coeficientes.

Bandas de Bollinger modificadas.

Palavras-chave para a busca por codobase "Multi temporal".

O texto pode ser exibido usando OBJ_LABEL.

 
LRA:

1. Experimente no MetaEditor: File --> Abrir pasta de dados compartilhados. Você verá o caminho para a pasta. Esta questão tem sido discutida muitas vezes, aqui está um link, por exemplo

2. Experimente sem incluir no início. Quando você o depurar, você começará a incluí-lo.

3. insira suas fontes aqui usando o botão SRC acima, ou usando o botão Anexar arquivo abaixo.

Muito obrigado.
 

Favor aconselhar como traçar uma linha horizontal ao preço de abertura do bar às 07:00 horas.

Eu escrevi este código, mas a linha não está traçada por algum motivo. Onde está o erro?

extern string StartTime = "07:00";          //Начальное время для анализа, 00:00 EST
extern string AlTime = "18:55";          //Время для трейдинга
extern string EndTime   = "20:00";          //Время экспирации
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {       
   ObjectCreate(ChartID(),"CORDON",OBJ_HLINE,0,0,Ask);        //созд гор линию по цене Ask
   
   ObjectSetInteger(ChartID(),"CORDON",OBJPROP_COLOR,clrDarkBlue);  //цвет темно-сиий
      
   ObjectSetInteger(ChartID(),"CORDON",OBJPROP_WIDTH,1);  //толщина линии 1
      
   ObjectSetInteger(ChartID(),"CORDON",OBJPROP_STYLE,STYLE_SOLID);  //линия сплош
   
   int IndexOfBar = iBarShift(ChartID(),PERIOD_H1, StringToTime(StartTime), true); //Считаем индекс бара по заданному времени StartTime
   double StartPrice = Open[IndexOfBar];                    //Получаем цену по индексу
   
   ObjectMove(ChartID(),"CORDON", 0, 0, StartPrice);          // меняем распол линии   
   return(0);
   }
 
RichLux:

Favor aconselhar como traçar uma linha horizontal ao preço de abertura do bar às 07:00 horas.

Eu escrevi este código, mas a linha não está traçada por algum motivo. Onde está o erro?

Se você remover ObjectMove, a linha é visível? Tente Alerta(StartPrice);
 
LRA:
Se você remover ObjectMove, a linha é visível? Tente Alerta(StartPrice);

Se você remover ObjectMove, não poderá ver a linha, mas sevocê escrever um valor numérico em vez de "IndexOfBar", por exemplo, "double StartPrice = Open[5];" ele desenha a linha ao preço de abertura da quinta barra.

Obrigado pela idéia com Alerta - mostra o valor "0".

A propósito, a linha também existe na lista de objetos com o valor 0.

 
RichLux:

Favor aconselhar como traçar uma linha horizontal ao preço de abertura do bar às 07:00 horas.

Eu escrevi este código, mas a linha não está traçada por algum motivo. Onde está o erro?

Não se pode sacar e calcular no inite, é um erro grosseiro. O inite deve terminar seu trabalho o mais rápido possível.

O erro aqui -int IndexOfBar = iBarShift(ChartID()_Symbol,PERIOD_H1, StringToTime(StartTime), true); //ler o índice da barra pelo tempo de início dado

A hora pode ser definida diretamente no formato de data e hora, não há necessidade de perder tempo de máquina na conversão, funciona assim:

#property strict
#property  show_inputs

extern datetime StartTime = D'07:00';          //Начальное время для анализа, 00:00 EST
extern datetime AlTime = D'18:55';          //Время для трейдинга
extern datetime EndTime   = D'20:00';          //Время экспирации
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
{       
   ObjectCreate(0,"CORDON",OBJ_HLINE,0,0,Ask);        //созд гор линию по цене Ask
   
   ObjectSetInteger(0,"CORDON",OBJPROP_COLOR,clrDarkBlue);  //цвет темно-сиий
      
   ObjectSetInteger(0,"CORDON",OBJPROP_WIDTH,1);  //толщина линии 1
      
   ObjectSetInteger(0,"CORDON",OBJPROP_STYLE,STYLE_SOLID);  //линия сплош
   
   int IndexOfBar = iBarShift(_Symbol,0, StartTime, false); //Считаем индекс бара по заданному времени StartTime
   double StartPrice = Open[IndexOfBar];                    //Получаем цену по индексу
   Print(IndexOfBar,", ",StartPrice);
   ObjectMove(0,"CORDON", 0, 0, StartPrice);          // меняем распол линии   
}
   
 
evillive:

Não se pode desenhar e calcular no init, é um erro grosseiro. O init deve concluir seu trabalho o mais rápido possível.

O erro aqui -int IndexOfBar = iBarShift(ChartID()_Symbol,PERIOD_H1, StringToTime(StartTime), true); //ler o índice da barra pelo tempo especificado StartTime

A hora pode ser definida diretamente no formato de data e hora, não há necessidade de perder tempo de máquina na conversão, funciona assim:

Obrigado pelas dicas valiosas para mim.

E um agradecimento especial por elevar meu moral ao encontrar o erro. Estou começando a acreditar novamente que posso fazer amizade com a MQL4

 
RichLux: versão do código não funciona. A linha no gráfico ainda não aparece...
// Вставил такой код в скрипт - линию рисует синюю на черном графике слабо видно
#property strict                                                       // -------- Возможно, Дело в этой строке
        
extern string StartTime = "07:00";          //Начальное время для анализа, 00:00 EST
extern string AlTime = "18:55";          //Время для трейдинга
extern string EndTime   = "20:00";          //Время экспирации
void OnStart()
{
   ObjectCreate("CORDON",OBJ_HLINE,0,0,Ask);    //созд гор линию по цене Ask   --- Для текущего графика ID пропускаем
   ObjectSetInteger(0,"CORDON",OBJPROP_COLOR,DarkBlue);  //цвет темно-сиий  --- 0 = текущий график   DarkBlue - то же самое
   ObjectSetInteger(0,"CORDON",OBJPROP_WIDTH,1);  //толщина линии 1
   ObjectSetInteger(0,"CORDON",OBJPROP_STYLE,STYLE_SOLID);  //линия сплош

   // Первый параметр нужен типа string, а функция ChartID возвращает long
   int IndexOfBar = iBarShift(NULL,PERIOD_H1, StringToTime(StartTime), true); //  --- NULL = текущий график  ЗДЕСЬ И БЫЛА ОШИБКА???
   double StartPrice = Open[IndexOfBar];                    //Получаем цену по индексу
   ObjectMove(ChartID(),"CORDON", 0, 0, StartPrice);          // меняем распол линии   
}
 
evillive:

Não se pode desenhar e calcular no init, é um erro grosseiro. O init deve ser concluído o mais rápido possível.


E se você pegar os cálculos do inite em uma função separada e depois inserir essa função no inite, não será um erro grosseiro?

LRA:

Já funciona.

 
RichLux:

E se você pegar os cálculos do inite em uma função separada, e depois inserir essa função no inite, não será um erro grosseiro?

Se o código for executado por muito tempo, o inite terminará à força e o código simplesmente não terá tempo para ser executado. O código executado, incluindo chamadas de funções secundárias, deve estar nas funções predefinidas de MQL - OnTick() para Expert Advisors, OnStart() para scripts, OnCalculate() para indicadores.

O inite deve conter o mínimo de código, apenas aquelas coisas que devem ser executadas uma vez, imediatamente antes do início do programa. Por exemplo, inicialização de variáveis globais, matrizes, amortecedores de indicadores.

Razão: