Discussão do artigo "Indicador de posições históricas no gráfico em forma de diagrama de lucro/prejuízo"
- www.mql5.com
É lamentável que o MQ não tenha adicionado a função HistoryPositionGet à lista de funções de histórico. Teria sido muito mais fácil com ela.
É por isso que temos que fazer isso nós mesmos
Olá,
Como posso fazer com que o indicador mostre não cada lucro/perda, mas um total acumulado?
E, se possível, com uma linha?!
Olá,
Como posso fazer com que o indicador mostre não cada lucro/perda, mas o total acumulado?
E, se possível, com uma linha?!
Com base em um palpite e sem verificar, você só precisa adicionar o lucro ao já recebido, e não registrá-lo sempre que for retirado das posições.
Éassim que funciona:
//+------------------------------------------------------------------+ //| Função de iteração de indicador personalizado //+------------------------------------------------------------------+ 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[]) { //--- Definir a indexação das matrizes close e time como em séries temporais ArraySetAsSeries(close,true); ArraySetAsSeries(time,true); //--- Sinalizador para a criação bem-sucedida da lista de itens static bool done=false; //--- Se o objeto de dados de posição for criado if(history!=NULL) { //--- Se a lista de itens ainda não tiver sido criada if(!done) { //--- Se a lista de posições do instrumento atual for criada com sucesso, if(history.CreatePositionList(Symbol())) { //--- imprimir posições no diário e definir o sinalizador para a criação bem-sucedida da lista de posições history.Print(); done=true; } } } //--- Número de barras necessárias para o cálculo do indicador int limit=rates_total-prev_calculated; //--- Se o limite for maior que 1, significa que essa é a primeira execução ou uma alteração nos dados históricos if(limit>1) { //--- Definir o número de barras para cálculo igual a todo o histórico disponível e inicializar os buffers com valores "vazios". limit=rates_total-1; ArrayInitialize(BufferFilling1,EMPTY_VALUE); ArrayInitialize(BufferFilling2,EMPTY_VALUE); } //--- No loop da barra de histórico de símbolos static double profit=0; for(int i=limit;i>=0;i--) { //--- obter o lucro das posições presentes na barra com índice de ciclo i e gravar o valor obtido no primeiro buffer profit+= Profit(close[i],time[i]); BufferFilling1[i]=profit; //--- Sempre escreva zero no segundo buffer. Dependendo do fato de o valor no primeiro buffer ser maior ou menor que zero, //--- a cor do preenchimento desenhado mudará entre as matrizes 1 e 2 do buffer do indicador BufferFilling2[i]=0; } //--- valor de retorno de prev_calculated para a próxima chamada return(rates_total); }
Bem, e com o buffer como uma linha - são eles mesmos. Aí você precisa remover um buffer extra, porque o preenchimento sempre usa dois buffers. E para uma linha você precisa de um.
Acho que está funcionando.
Fiz suas alterações e especifiquei apenas o tipo - gráficos de linha.
Não removi os buffers.
https://www.mql5.com/ru/charts/18738352/nzdcad-d1-roboforex-ltd
- www.mql5.com
Tudo parece estar bem com as moedas, mas com a prata ele está sendo constantemente redesenhado por algum motivo.
É necessário verificar quais dados o indicador recebe e por que eles não são calculados. O redesenho pode ser causado pelo valor limite maior que 1. Esse valor é calculado como a diferença entre rates_total e prev_calculated. Você precisa examinar esses valores para ver o que eles contêm em cada tick
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Novo artigo Indicador de posições históricas no gráfico em forma de diagrama de lucro/prejuízo foi publicado:
Vamos falar sobre como obter informações sobre posições fechadas usando o histórico de negociações. Vamos criar um indicador simples que mostra um diagrama aproximado de lucro/prejuízo das posições em cada barra.
A função recebe o preço (fechamento da barra) em relação ao qual o número de pontos de lucro da posição deve ser obtido, e o tempo em que se verifica a existência da posição (tempo de abertura da barra). Em seguida, o lucro de todas as posições, obtido de cada objeto de posições históricas, é somado e retornado.
Após a compilação, o indicador pode ser executado no gráfico de um símbolo onde houve muitas posições abertas, e ele desenhará um diagrama de lucro de todas as posições históricas:
Autor: Artyom Trishkin