[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 309

 

Por favor, ajude!

Apenas duas linhas MAH são exibidas, embora o código seja equivalente para todas as quatro linhas. Qual é o problema?

#Janela_de_industrialização_separate_window // Indicador é desenhado em uma janela separada
#Número de tampões indicadores de propriedade 4 // Número de tampões
#Indicador de propriedade_color1 Azul // Cor da primeira linha
#Indicador de propriedade_color2 Vermelho // Cor da segunda linha
#indicador de propriedade_color3 Olive
#indicador de propriedade_color4 Teal


duplo Buf_ROC_MA40[],Buf_ROC_MA20[],Buf_MA40[],Buf_MA20[]; // declaração de matriz (para buffers indicadores)
//--------------------------------------------------------------------
int init() // Função especial init()
{
SetIndexBuffer(0,Buf_MA40); // Atribuição de uma matriz para o buffer
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);// Estilo de linha
SetIndexBuffer(1,Buf_MA20); // Atribuição de uma matriz para o buffer
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);//Line style
SetIndexBuffer(3,Buf_ROC_MA40); // Atribuição de uma matriz para o buffer
SetIndexStyle(3,DRAW_LINE,STYLE_SOLID,2);//Line style
SetIndexBuffer(4,Buf_ROC_MA40); // Atribuição de uma matriz para o buffer
SetIndexStyle(4,DRAW_LINE,STYLE_SOLID,2);// Estilo de linha
retorno; // Sair função init() especial init()
}
//--------------------------------------------------------------------
int start() // Início de função especial()
{
int i, // índice de barras
História=3000,
barras_contadas; // número de barras calculadas
double ma20,ma40,MA40[],MA20[],MA40_s[],MA20_s[],ma40_s,ma20_s,ROC_MA40[],ROC_MA20[];
//--------------------------------------------------------------------
// Barras_contadas=IndicadorContado(); // Número de barras contadas
i=barras;//Counted_bars-1; // Índice da primeira não contada
while(i>=0) //Cycle através das barras não contadas
{
ma20=iMA("EURUSD",PERÍODO_M1,20,0,MODE_SMA,PREÇO_CLOSE,i);
ma20_s=iMA("EURUSD",PERÍODO_M1,20,0,MODE_SMA,PREÇO_CLOSE,i+20);
ma40=iMA("EURUSD",PERÍODO_M1,40,0,MODE_SMA,PREÇO_CLOSE,i);
ma40_s=iMA("EURUSD",PERÍODO_M1,40,0,MODE_SMA,PREÇO_CLOSE,i+40);
Alerta("ma20=",ma20, " ma20_s=",ma20_s, " ma40_s=",ma40_s, " ma40=",ma40);
MA40_s[i]=ma40_s;
MA40[i]=ma40;
MA20[i]=ma20;
MA20_s[i]=ma20_s;
Buf_MA40[i]=ma40;
Buf_MA20[i]=ma20;
ROC_MA40[i]=MA40[i]-MA40_s[i];
Buf_ROC_MA40[i]=ROC_MA40[i];
ROC_MA20[i]=MA20[i]-MA20_s[i];
Buf_ROC_MA20[i]=ROC_MA20[i];
i--;
//Calcule o próximo índice de barras
}
//--------------------------------------------------------------------
retorno; // Sair da função especial início()
}

 

1.recomendar, por favor, um depurador (de preferência com depuração passo a passo para que você possa ver os valores intermediários das variáveis).

2.Como posso exibir dados de depuração e onde (em que janela), porque é inconveniente usar alertas.

3) Como posso atualizar a versão MQL?

 

Por favor, avise!

Como posso fazer meu Expert Advisor negociar somente na sessão européia?

 
VNG писал(а) >>

Por favor, ajude!

Apenas duas linhas MAs são emitidas, embora o código seja equivalente para todas as quatro linhas. Qual é o problema?

int init() // Специальная функция init()
{
SetIndexBuffer(0, Buf_MA40); // Назначение массива буферу
SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
SetIndexBuffer(1, Buf_MA20); // Назначение массива буферу
SetIndexStyle (1,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
SetIndexBuffer(2, Buf_ROC_MA40); // Назначение массива буферу
SetIndexStyle (2,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
SetIndexBuffer(3, Buf_ROC_MA40); // Назначение массива буферу
SetIndexStyle (3,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
return; // Выход из спец. ф-ии init()
}

Eu encontrei um erro. Depois do buffer 1 foi imediatamente o buffer 3. O Buffer 2 foi pulado.

Você simplesmente não deveria ter produzido os mashes e a diferença em uma janela. Eles têm mais de uma ordem de magnitude de diferença.

 
KoDi писал(а) >>

Por favor, avise!

Como faço meu comércio de EA somente na sessão européia?

Basta colocar a partida no início do módulo

if(Hora()<7 || Hora()>15)return(0);

 

Por favor, olhe o código novamente. Eu removi os MAs porque os novos valores recebidos têm uma escala completamente diferente.

Ainda nada é exibido.

#Janela_de_industrialização_separate_window // Indicador é desenhado em uma janela separada
#Número de tampões indicadores de propriedade 2 // Número de tampões
#Indicador de propriedade_color1 Azul // Cor da primeira linha
#Indicador de propriedade_color2 Vermelho //cor da segunda linha
//# indicador de propriedade_color3 Olive
//# indicador de propriedade_color4 Teal


duplo Buf_ROC_MA40[],Buf_ROC_MA20[],Buf_MA40[],Buf_MA20[]; // Declaração de arrays (para amortecedores indicadores)
//--------------------------------------------------------------------
int init() // Função especial init()
{
//SetIndexBuffer(0,Buf_MA40); // Atribuição de uma matriz para o buffer
//SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);// Estilo de linha
//SetIndexBuffer(1,Buf_MA20); // Atribuir array ao buffer
//SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);//Line style
SetIndexBuffer(0,Buf_ROC_MA40); // Atribuição de uma matriz para o buffer
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);//Line style
SetIndexBuffer(1,Buf_ROC_MA20); // Atribuição de uma matriz para o buffer
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);//Line style
retorno; // Função init() especial de saída
}
//--------------------------------------------------------------------
int start() // Início de função especial()
{
int i, // índice de barras
História=3000,
barras_contadas; // número de barras calculadas
double ma20,ma40,MA40[],MA20[],MA40_s[],MA20_s[],ma40_s,ma20_s,ROC_MA40[],ROC_MA20[];
//--------------------------------------------------------------------
// Barras_contadas=IndicadorContado(); // Número de barras contadas
i=barras;//Counted_bars-1; // Índice da primeira não contada
while(i>=0) //Cycle através das barras não contadas
{
ma20=iMA("EURUSD",PERÍODO_M1,20,0,MODE_SMA,PREÇO_CLOSE,i);
ma20_s=iMA("EURUSD",PERÍODO_M1,20,0,MODE_SMA,PREÇO_CLOSE,i+20);
ma40=iMA("EURUSD",PERÍODO_M1,40,0,MODE_SMA,PREÇO_CLOSE,i);
ma40_s=iMA("EURUSD",PERÍODO_M1,40,0,MODE_SMA,PREÇO_CLOSE,i+40);
MA40_s[i]=ma40_s;
MA40[i]=ma40;
MA20[i]=ma20;
MA20_s[i]=ma20_s;
Buf_MA40[i]=ma40;
Buf_MA20[i]=ma20;
ROC_MA40[i]=MA40[i]-MA40_s[i];
Buf_ROC_MA40[i]=ROC_MA40[i];
ROC_MA20[i]=MA20[i]-MA20_s[i];
Buf_ROC_MA20[i]=ROC_MA20[i];
i--;
//Calcule o próximo índice de barras
}
//--------------------------------------------------------------------
retorno; // Sair da função especial início()
}

 
VNG писал(а) >>

Por favor, olhe o código novamente. Eu removi os MAs porque os novos valores recebidos têm uma escala completamente diferente.

Ainda nada é exibido.

#Janela_de_industrialização_separate_window // Indicador é desenhado em uma janela separada
#Número de tampões indicadores de propriedade 2 // Número de tampões
#Indicador de propriedade_color1 Azul // Cor da primeira linha
#Indicador de propriedade_color2 Vermelho //cor da segunda linha
//# indicador de propriedade_color3 Olive
//# indicador de propriedade_color4 Teal


duplo Buf_ROC_MA40[],Buf_ROC_MA20[],Buf_MA40[],Buf_MA20[]; // Declaração de arrays (para amortecedores indicadores)
//--------------------------------------------------------------------
int init() // Função especial init()
{
//SetIndexBuffer(0,Buf_MA40); // Atribuição de uma matriz para o buffer
//SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);// Estilo de linha
//SetIndexBuffer(1,Buf_MA20); // Atribuir array ao buffer
//SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);//Line style
SetIndexBuffer(0,Buf_ROC_MA40); // Atribuição de uma matriz para o buffer
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);//Line style
SetIndexBuffer(1,Buf_ROC_MA20); // Atribuição de uma matriz para o buffer
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);//Line style
retorno; // Função init() especial de saída
}
//--------------------------------------------------------------------
int start() // Início de função especial()
{
int i, // índice de barras
História=3000,
barras_contadas; // número de barras calculadas
double ma20,ma40,MA40[],MA20[],MA40_s[],MA20_s[],ma40_s,ma20_s,ROC_MA40[],ROC_MA20[];
//--------------------------------------------------------------------
// Barras_contadas=IndicadorContado(); // Número de barras contadas
i=barras;//Counted_bars-1; // Índice da primeira não contada
while(i>=0) //Cycle através das barras não contadas
{
ma20=iMA("EURUSD",PERÍODO_M1,20,0,MODE_SMA,PREÇO_CLOSE,i);
ma20_s=iMA("EURUSD",PERÍODO_M1,20,0,MODE_SMA,PREÇO_CLOSE,i+20);
ma40=iMA("EURUSD",PERÍODO_M1,40,0,MODE_SMA,PREÇO_CLOSE,i);
ma40_s=iMA("EURUSD",PERÍODO_M1,40,0,MODE_SMA,PREÇO_CLOSE,i+40);
MA40_s[i]=ma40_s;
MA40[i]=ma40;
MA20[i]=ma20;
MA20_s[i]=ma20_s;
Buf_MA40[i]=ma40;
Buf_MA20[i]=ma20;
ROC_MA40[i]=MA40[i]-MA40_s[i];
Buf_ROC_MA40[i]=ROC_MA40[i];
ROC_MA20[i]=MA20[i]-MA20_s[i];
Buf_ROC_MA20[i]=ROC_MA20[i];
i--;
//Calcule o próximo índice de barras
}
//--------------------------------------------------------------------
retorno; // Sair da função especial início()
}

Há muitos erros.

Principalmente erro no trabalho com arrays.

Arquivos anexados:
proba.mq4  2 kb
 

Ajude-me a resolver este problema - há um sinal de compra/venda, a EA abre um negócio, estabelece um lucro e uma parada. E se o negócio for fechado na mesma vela, então o conselheiro abre o negócio novamente, e eu preciso que ele não abra, ou seja, em um sinal, um negócio foi aberto.

Como fazer isso?

 
KoDi >> :

Como fazer isso?

O tempo de fechamento do último pedido deve ser menor do que o tempo de abertura do bar atual.

Se este não for o caso, não abra o comércio.

 
TheXpert >> :

O tempo de fechamento do último pedido deve ser menor do que o tempo de abertura do bar atual.

Se não o fizer, não abrimos um acordo.

>> Estou confuso.

Bem, como ele abrirá o PRIMEIRO comércio se a condição é escrever que ele não entre até que haja pelo menos um comércio?

Razão: