Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Então, onde funciona? Desenha linhas em cada barra, não na TF. Ou na figura acima está TF=H1?
Calcule em um pedaço de papel qual será o limite e eu em cada iteração dos ciclos.
Meu exemplo mostrado acima nunca é contabilizado, como eu o entendo.
As setas de seleção podem ser desenhadas usando amortecedores indicadores, assim como linhas que conectam as sombras dos castiçais.
PERÍODO_H;. Abaixo do período H4, tudo está bem desenhado.
i = 0;
O limite é variável externa por padrão = 5;
barras int externasToProcess = 5; //--- Número de períodos (linhas) a serem exibidos .
"As setas de seleção podem ser desenhadas usando amortecedores indicadores, assim como linhas que conectam as sombras dos castiçais. "
Eu entendo assim.
No buffer com o índice [Limite] são atribuídos os valores de alto do Array.
duplo Buf_High[Limit] =mqlRates[0].high;
Eu entendo como circular em cada barra. Mas eu não entendo como fazer isso em cada barra H4.
PERÍODO_H;. Abaixo do período H4, tudo está desenhando bem.
i = 0;
O limite é uma variável externa por padrão = 5;
barras int externasToProcess = 5; //--- Número de períodos de exibição (linhas) .
"As setas de seleção podem ser desenhadas usando amortecedores indicadores, assim como linhas que conectam as sombras dos castiçais. "
Eu entendo assim.
No buffer com o índice [Limite] são atribuídos os valores de alto do Array.
duplo Buf_High[Limit] =mqlRates[0].high;
Eu entendo como circular em cada barra. Mas eu não entendo como fazer isso em cada barra H4.
Descubra como funcionam os laços antes de usá-los.i = 0 apenas na primeira vez, depoisi++, até o limite.
Ao executar pela primeira vez o indicador limite=Bars-counted_bars=Bars-0=Bars.
O para loop neste caso deveria teoricamente contar de 0 até o número de barras no gráfico. MAS!!! O segundo enquanto o loop interfere aqui e recalcula tanto i como limite.
Não consigo entender porque deveria tê-lo feito e quem me ensinou a fazê-lo...
Aqui está um exemplo: barras - 100, barrasToProcess = 5.
Durante a primeira execução do indicador, counted_bars=0, ainda não foram contados, portanto limite=100. Isso significa que o loop para o início deve ser executado 100 vezes, de 0 a 99.
Iterações do for loop:
1. i=0, limit=barsToProcess=5, while(i<5) - o laço interno com linhas e carrapatos desenhados é executado 5 vezes, de 0 a 4, toda vez que i++, ao terminar enquanto - i=5, limit=5.
2. i=5=limite - para loop está completo.
ISTO É ISTO! O indicador não faz mais nada até o próximo tique. Um tick vem, counted_bars=99, limit=Bars-counted_bars= 100-99=1.
O loop for é executado uma vez, o loop while não é executado (uma vez que a condição se (limite>barrasParaProcesso) não é cumprida). Continuaremos até que o indicador seja descarregado do gráfico ou até que o cronograma seja alterado, em geral, até a reinicialização do indicador.
Na verdade, o indicador desenha suas linhas de seleção uma vez quando é carregado na tabela, e permanece ocioso até a reinicialização. A questão é: por que precisamos de um indicador desse tipo? O roteiro pode lidar com uma única resposta.
Eu reescrevi o código. Tudo parece estar correto com o laço.
Há ainda a questão de traçar a linha "tampão".
#property strict
#property indicator_chart_window
extern int Total_bars = 5; //--- Кол-во отображаемых Элементов в истории
//--- Глобальные переменные
string Name_VLine; //--- Имя Элементов
string Name_CHECK; //--- Имя Элементов
MqlRates mqlRates[1]; //Структура для хранения информации
#property indicator_buffers 1
#property indicator_type1 DRAW_LINE // тип графического построения - линия
#property indicator_color1 clrRed // цвет линии
#property indicator_style1 STYLE_SOLID // стиль линии
#property indicator_width1 1 // толщина линии
double Buff_High[];
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
SetIndexBuffer(0,Buff_High);
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(0,DRAW_SECTION);
//+------------------------------------------------------------------+
int limit; //--- переменная старт кол-во баров. Линии рисуем о по всем барам
int counted_bars = IndicatorCounted(); //--- перем counted_bars = функц. Возвращает количество баров
if(counted_bars > 0) counted_bars --; //--- последний посчитанный бар будет пересчитан
//--- основной цикл
limit = Bars - counted_bars;
for(int i = 0; i <= limit; i ++)
{
if(limit > Total_bars) //--- Если кол-во баров на графике > Кол-ву выбранных элементов
{
limit = Total_bars-1; //--- тогда кол-во баров на графике = Кол-ву выбранных элементов
}
datetime t_Line = iTime(Symbol(),PERIOD_H4,i); //--- В ПЕРЕМ t_Line Будет Присваиваться значение времени открытия бара
CopyRates(_Symbol, PERIOD_H4, t_Line, 1, mqlRates); //--- Структура для хранения информации
//+------------------------ Рисуем вертикальную линии -----------------------------------------------------+
ObjectCreate (Name_VLine + " VLine" + DoubleToStr(i,0),OBJ_VLINE,0,t_Line,0); //--- Создаём обьект вертикальную линию
ObjectSet (Name_VLine + " VLine" + DoubleToStr(i,0),OBJPROP_STYLE,2); //--- Со стилем
ObjectSet (Name_VLine + " VLine" + DoubleToStr(i,0),OBJPROP_COLOR,DimGray); //--- Со цветом
ObjectSet (Name_VLine + " VLine" + DoubleToStr(i,0),OBJPROP_WIDTH,0); //--- С толщиной
ObjectSet (Name_VLine + " VLine" + DoubleToStr(i,0),OBJPROP_BACK,0); //--- С типом отображения. Объект на заднем плане
//--- кубики по хай (В место галочек нужно подставить кубики)
ObjectCreate (0,Name_CHECK + "H_CHECK" + DoubleToStr(i,0), OBJ_ARROW_CHECK, 0, t_Line, mqlRates[0].high, t_Line,mqlRates[0].high);
ObjectSetInteger(0,Name_CHECK + "H_CHECK" + DoubleToStr(i,0), OBJPROP_COLOR, clrGreen);
//--- кубики по лоу (В место галочек нужно подставить кубики)
ObjectCreate (0,Name_CHECK + "L_CHECK" + DoubleToStr(i,0), OBJ_ARROW_CHECK, 0, t_Line, mqlRates[0].low, t_Line,mqlRates[0].low);
ObjectSetInteger(0,Name_CHECK + "L_CHECK" + DoubleToStr(i,0), OBJPROP_COLOR, clrGreen);
// На ТФ Н4 линии рисуются по хайям,
// При смене ТФ линия рисуется на растоянии параметра Total_bars.
//--- Заполнение буфера
Buff_High[i] = mqlRates[0].high ;
}
return(rates_total);
}
//+------------------------------------------------------------------+
Por que eu fiz isso, quem me ensinou, eu não entendo...
Encontrei um indicador adequado e "desmontei-o", até que o fragmento que eu precisava permaneceu. Depois reuni os fragmentos do código e consegui o que precisava. É assim.
"Estou aprendendo".
Eu reescrevi o código. Tudo parece estar correto com o laço.
Há ainda a questão de traçar a linha "tampão".
Para colar o código há um botão SRC no painel superior da janela de edição de mensagens, ele insere o código de forma agradável e sem linhas vazias.
A linha provavelmente terá que ser desenhada também por objetos (tendência), armazenar o tempo/preço anterior em variáveis separadas e usar como segundo ponto de coordenadas.
Para substituir um tick por outro símbolo -OBJ_ARROW e ARROW_CODE.
Para inserção de código há um botão SRC no painel superior da janela de edição de mensagens, insere o código de forma agradável e sem linhas vazias.
A linha provavelmente terá que ser desenhada também por objetos (tendência), armazenar o tempo/preço anterior em variáveis separadas e usar como segundo ponto de coordenadas.
Para substituir um tick por outro símbolo -OBJ_ARROW e ARROW_CODE.
O que não é gostar
1
Segmentos de linha entre valores de linha não vazios
А чем не нравится
1
Отрезки между непустыми значениями линии
Eu não sei como aplicá-lo.
O que não deve ser gostado em
1
Segmentos de linha entre os valores não vazios da linha
A linha provavelmente teria que ser desenhada também por objetos (tendência), armazenar o tempo/preço anterior em variáveis separadas e usar como segundo ponto de coordenadas.
A idéia é boa. Vou tentar se funcionar.
De fato, não há necessidade de desenhá-la. Desde que funcione corretamente.
Alex_Profit:
Eu não sei como aplicá-lo.
Simplesmente no OnInit() em vez de
SetIndexStyle(0, DRAW_LINE);
escreva
SetIndexStyle(0, DRAW_SECTION);
De alguma forma nenhuma mudança