[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 651

 
xtonic:

Enigmas noturnos do metha:

Eu importei citações do arquivo de citações, diz em 1 minuto: Base de dados: 0 / 3665972, a janela está vazia - o que pode significar ?

Quando abro o gráfico autônomo EURUSD,M1 - ele mostra letras grandes: "Atualização pendente" - o que isso pode significar?

Estou realizando um teste - TestGenerator: nenhum dado histórico 'EURUSD1'.

Recarregue o terminal. Se tudo foi feito corretamente, deve aparecer.

 

onde ler como é desenhado um indicador com os seguintes parâmetros

SetIndexStyle(0,DRAW_HISTOGRAM, 0, 1, cor1)

SetIndexStyle(1,DRAW_HISTOGRAM, 0, 1, color2)

Não entendo porque às vezes não desenha - entendo se você desenhar uma linha normal DRAW_LINE - o valor do buffer indicador irá definir o eixo y, mas o número do elemento corresponde ao número de barras no gráfico

porque o segmento horizontal na barra aparece quando dois buffers indicadores estão na mesma barra, mas quando um dos buffers indicadores é EMPTY_VALUE - nada, e eu não entendo a lógica de coloração

 
ToLik_SRGV:

Recarregue o terminal. Se tudo tiver sido feito corretamente, deve aparecer.


Já fiz tudo isso, até mesmo reinicializei o sistema, essa é a questão.

 
xtonic:


Eu já fiz tudo isso, mesmo reiniciando o sistema, essa é a questão.


Você já importou citações de onde?

Se você pudesse explicar exatamente o que estava fazendo, passo a passo, então seria mais provável que você conseguisse ajuda aqui.

 

Boa gente, tenha piedade - não consigo: comprar/vender depois de outro pico de CCI alisado.

Tentei declarar o segundo tampão (faz mais sentido para mim), sem erros, registro - silencioso, impresso, provavelmente como um bode - não entendo nada.

 // Торговые критерии
   double c1b[];
   ArrayResize(c1b,PeriodB);
   double c1b_1[];
   ArrayResize(c1b_1,AvgB);
   for(i=1;i<=PeriodB;i++)
   {
   c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);
   {
   c1b_1[i]=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i);
   }
   }
   
   double c1s[];
   ArrayResize(c1s,PeriodS);
   double c1s_1[];
   ArrayResize(c1s_1,AvgS);
   for(i=1;i<=PeriodS;i++)
   {
   c1s[i]=iCCI(NULL,0,PeriodS,PRICE_TYPICAL,i);
   {
   c1s_1[i]=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i);
   }
   }

if (NormalizeDouble(c1b_1[i],4)<NormalizeDouble(c1b_1[i+2],4)&&NormalizeDouble(c1b_1[i+2],4)>NormalizeDouble(c1b_1[i+3],4))
     {                                          // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
if (NormalizeDouble(c1s_1[i],4)>NormalizeDouble(c1s_1[i+2],4)&&NormalizeDouble(c1s_1[i+2],4)<NormalizeDouble(c1s_1[i+3],4))
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

O anexo contém todo o Expert Advisor. Após testes na visualização, a CCI é desenhada tanto nesta versão como na antiga (o arquivo anexo é plotado), mas não é suavizada e, portanto, as negociações não são abertas.

Variante antiga:

// Торговые критерии
   double c1b[];
   for(i=1;i<=PeriodB;i++)
   {
   c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);
   }
   double c1b_1=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,1);
   double c1b_2=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,2);
   double c1b_3=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,3);
   
   double c1s[];
   for(i=1;i<=PeriodS;i++)
   {
   c1s[i]=iCCI(NULL,0,PeriodS,PRICE_TYPICAL,i);
   }
   double c1s_1=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,1);
   double c1s_2=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,2);
   double c1s_3=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,3);

if (NormalizeDouble(c1b_1,4)<NormalizeDouble(c1b_2,4)&&NormalizeDouble(c1b_2,4)>NormalizeDouble(c1b_3,4))
     {                                          // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
if (NormalizeDouble(c1s_1,4)>NormalizeDouble(c1s_2,4)&&NormalizeDouble(c1s_2,4)<NormalizeDouble(c1s_3,4))
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

Entendo que ninguém tem tempo para limpar os outros, me aconselhe pelo menos onde exatamente inserir a Impressão e onde procurar por feedback no diário ou registros e o que você precisa prestar atenção.

Arquivos anexados:
21.mq4  15 kb
 

Boa tarde!

Tenho uma pergunta sobre o fechamento parcial, porque cada corretora tem suas próprias regras. Eu não entendo como fazer a contabilidade do pedido corretamente:

O problema: Precisamos encontrar um carrapato de um novo pedido neste TS particular sem usar um mágico.

1) Notei que uma ordem parcialmente fechada tem um comentário, você deve ser capaz de ler o comentário // Não estou certo de que todas as corretoras escrevam comentários

2) procurar por data de abertura do pedido // não tenho certeza se vai funcionar para todas as corretoras

3) procurar um novo tick logo após um fechamento parcial e verificar o volume, etc., para ver se é a ordem correta

4) algo mais

 
wenay:

como fazer melhor a contagem da ordem:

leia a ajuda:
comment - Order comment text. A última parte do comentário pode ser alterada pelo servidor comercial.

mágica - O número mágico do pedido. Pode ser usado como um identificador definido pelo usuário.

A magia é uma boa maneira de ajudar você

Para buscar uma ordem, faça o seguinte

if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {

.......

 
Craft:

Por favor, informe onde exatamente Imprimir deve ser inserido e onde procurar por feedback no diário de bordo ou arquivos de log e o que você precisa prestar atenção.

Imprima onde você deseja verificar a situação (por exemplo, se você fizer um pedido - imprima o fato de colocar o pedido ou um erro de colocação do pedido no diário).

Se você não tiver certeza de que sua função pode ser chamada, ou seja, a condição de chamada de função nunca será atendida, adicione a impressão à entrada da função.

Imprimir lido no terminal na guia "Especialistas".

 
IgorM:

onde ler como é desenhado um indicador com os seguintes parâmetros

SetIndexStyle(0,DRAW_HISTOGRAM, 0, 1, cor1)

SetIndexStyle(1,DRAW_HISTOGRAM, 0, 1, color2)

Não entendo porque às vezes não desenha - entendo se você desenhar uma linha normal DRAW_LINE - o valor do buffer indicador irá definir o eixo y, mas o número do elemento corresponde ao número de barras no gráfico

quais são os parâmetros no buffer do indicador quando seu tipo é DRAW_HISTOGRAM?? por que quando dois buffers indicadores terminam em uma barra, aparece um segmento horizontal na barra, mas quando um dos buffers indicadores é igual a EMPTY_VALUE - nada, e eu não entendo a lógica de coloração

Oestilo do DRAW_HISTOGRAM não é fundamentalmente diferente de outros estilos de linhas de desenho, o eixo X é representado pelos números de barra, o eixo Y - pelos valores da matriz de indicadores, mas como se diz, há uma nuança.
Tomemos como exemplo um simples indicador:

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
#property indicator_width1 2
double SIMPLE[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0, SIMPLE);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){
   for(int shift = Bars-IndicatorCounted()-1; shift >= 0; shift--){
      SIMPLE[shift] = 1;
   }
}
//+------------------------------------------------------------------+

Uma matriz indicadora, janela separada, todos os elementos recebem o valor 1. Atire-a na tabela e o que vemos (Figura 1 à esquerda):

A "Janela de Dados" mostra as leituras dos indicadores, mas não há nada em sua janela. Esta é a nuance, o MT4 não sabe quão alto é 1? Até que altura a barra deve ser puxada? Não tem nada de que se tirar, ou seja, simplesmente, não há preço de divisão para as barras. Como você notou, não há nenhum parâmetro separado que defina a altura das barras, sua altura é definida automaticamente, em relação a outros elementos. Vamos ajudar a MT4 e definir o preço de divisão, podemos fazer isso de forma programática:

#property indicator_minimum 0
#property indicator_maximum 2

Você pode simplesmente fixar mínimos (digamos 0) e máximos (digamos 2) nas configurações do indicador.
E tudo se encaixa instantaneamente (Fig. 2, à direita), agora o terminal sabe a que altura a barra deve ser puxada, 1 está no meio entre 0 e 2 :))) Neste exemplo, a matriz de indicadores tem um valor (especialmente para mostrar "nuance") e devemos indicar ao terminal o quanto ou pouco é. Se substituirmos os dados da matriz por 1, por exemplo, Close[shift], o terminal não estabelecerá nenhuma restrição rígida e desenhará um quadro "ala MAKD".

Um pouco diferente se você desenhar o histograma não em uma janela separada, mas em geral. Vamos deixar o valor de Close[shift] para a primeira matriz de indicadores, basta alterar o parâmetro:

#property indicator_chart_window

Ficamos novamente com a mesma imagem (Fig. 3, à esquerda). Os valores estão presentes, mas não são exibidos.

O terminal precisa de alguma base para o cálculo automático da altura da barra, e como os mínimos e máximos não podem ser fixados na janela geral, aparecerá a segunda matriz de indicadores. Acrescentamos a segunda linha e a fixamos em 0.

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_width1 2
#property indicator_color2 Red
#property indicator_width2 2
double SIMPLE[];
double SIMPLE2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0, SIMPLE);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(1, SIMPLE2);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){
   for(int shift = Bars-IndicatorCounted()-1; shift >= 0; shift--){
      SIMPLE[shift] = Close[shift];
      SIMPLE2[shift] = 0;
   }
}
//+------------------------------------------------------------------+

As matrizes indicadoras começam a ser exibidas em relação umas às outras. E tudo será como deve ser (Fig. 4, à direita). As colunas são desenhadas de SIMPLE[shift] para SIMPLE2[shift].

E finalmente, há o código de indicador que preenche as velas, azul se estiver para cima e rosa se estiver para baixo. Novamente duas matrizes para cada cor (o desenho é de casa para o fim (de Aberto para Fechado)).

//+------------------------------------------------------------------+
//|                                                       SIMPLE.mq4 |
//|                        Copyright © 2010,Анатолий Сергеев  |
//|                                            mql.sergeev@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, Анатолий Сергеев"
#property link      "mql.sergeev@yandex.ru"

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Blue
#property indicator_width1 2
#property indicator_color2 Blue
#property indicator_width2 2
#property indicator_color3 Pink
#property indicator_width3 2
#property indicator_color4 Pink
#property indicator_width4 2
double Blue_home[];
double Blue_end[];
double Pink_home[];
double Pink_end[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0, Blue_home);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(1, Blue_end);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   SetIndexBuffer(2, Pink_home);
   SetIndexStyle(3,DRAW_HISTOGRAM);
   SetIndexBuffer(3, Pink_end);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){
   for(int shift = Bars-IndicatorCounted()-1; shift >= 0; shift--){
      if(Close[shift] > Open[shift]){
         Blue_home[shift] = Open[shift];
         Blue_end[shift] = Close[shift];
      }else{
         Pink_home[shift] = Open[shift];
         Pink_end[shift] = Close[shift];
      }
   }
}
//+------------------------------------------------------------------+

 
IgorM:
leia a ajuda lá:
comentário - Encomendar texto de comentário. A última parte do comentário pode ser alterada pelo servidor comercial.

mágica - O número mágico do pedido. Pode ser usado como um identificador definido pelo usuário.

Use a magia para ajudar você

Para verificar uma ordem, faça o seguinte:

if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {

.......



Tarefa: Você precisa encontrar o carrapato de uma ordem recente para este TS em particular sem usar um magik .