Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 402
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
Evento de clique do mouse sobre objeto gráfico
CHARTEVENT_OBJECT_CLICK
Coordenada X
Coordenada Y
Nome do objeto gráfico onde o evento ocorreu
Ugh, eu acho que já descobri tudo)
Obrigado pela ajuda!
Não sei como ligar o resultado "r" a um buffer para mostrá-lo em um gráfico, por favor, avise.
Não consigo entender os exemplos nos livros didáticos, perguntei às pessoas
Eles escrevem - "Escreva o valor de "r" no buffer, e ele aparecerá no gráfico" e "Normalmente você escreve no buffer através de um loop for. "
mas isso não me diz nada!
Um resultado é apenas a letra "r" e é isso, não consigo encontrá-la em nenhum lugar.
E mais uma coisa
como suavizar o resultado "r", por exemplo.
Obrigado por sua atenção!Qual é o erro? Ao funcionar no testador, a função apaga a ordem pendente e às vezes não. Por quê? O princípio de operação é o seguinte: quando a ordem de compra é fechada pela TP, o BuyLimit é removido. Favor informar
Qual é o erro? Ao correr no testador, a função apaga a ordem pendente e às vezes não. Por quê? O princípio de operação é o seguinte: quando a ordem de compra é fechada pela TP, o BuyLimit é removido. Favor aconselhar .
OrderTotal() != OrderHistoryTotal()
Obrigado.
Olá a todos.
Fez um simples Expert Advisor baseado em Stochstick (vende no pico superior, compra no pico inferior), e o compilador dá um erro no local.
Alguém pode me dizer qual é a razão e o que significa este erro? No início, pensei que tinha esquecido de colocar um parêntese em algum lugar.
Mas não, eu verifiquei algumas vezes e tudo parece estar bem. Serei muito grato a vocês pela ajuda.
Aqui estão os erros que o compilador gera: ')' - nem todos os caminhos de controle retornam um valor Stohastic-Signals-33.mq4 177 3
Aqui está o próprio Expert Advisor e um arquivo mq4 anexado também:
Favor aconselhar como anexar o Expert Advisor a este arquivo (no editor com letras coloridas)
//+------------------------------------------------------------------+
//| Stohastic-Signals-33.mq4
//| Copyright 2017, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#direitos autorais "Copyright 2017, MetaQuotes Software Corp."
#link da propriedade "https://www.mql5.com"
#propriedade versão "1.00"
#propriedade rigorosa
//+------------------------------------------------------------------+
bool New_Bar=false; // bandeira de um novo bar.
linha externa dupla H_line=80; // Linha superior estocástica (overbought)
linha externa dupla L_line=20; // Linha inferior (sobre-vendida) de estocástico
Slippage externo interno=2; // Slippage externo
externo int SL; // SL da ordem que está sendo definida
externo int TP; // TP da ordem que está sendo definida
Lts duplos externos; //Lote do tamanho do pedido sendo definido
bool B_Flag=falso; // bandeira de sinal para COMPRAR
S_Flag=falso, // Bandeira para um sinal de SELL
ORD_Buy=falso, // Bandeira aberta Posição de compra
ORD_Sell=false; // Bandeira aberta Posição de venda
bool Work=true; // Bandeira que permite que o especialista trabalhe. true-no critical error, false-existent.
Symb; // Nome do instrumento financeiro
int Crit_Error=1111111111; // Número de erro crítico
//+------------------------------------------------------------------+
//| função tick expert |
//+------------------------------------------------------------------+
nulo OnTick()
{
int
Total, // Número de pedidos na janela
Dica=-1, // Tipo de pedido selecionado (B=0,S=1)
Bilhete; // Número do pedido
duplo
M_1, M_2, M_3, // valor PRINCIPAL em 1, 2 e 3 barras
Lote; // Número de lotes na ordem selecionada
bool Ans_Close; // Bandeira de fechamento de pedido bem sucedido(1-fechado, 0-não fechado)
bool Ans_Open; // Bandeira se a ordem é aberta com sucesso (1-fechada, 0-não aberta)
//--------------------------------------------------------------- 1 --
// Verificar a existência de um erro crítico
if(Trabalho==falso) // Erro crítico
{
Alerta("Erro crítico. Conselheiro especializado não funciona;)
retornar; // Sair do início()
}
//--------------------------------------------------------------- 2 --
// Novo bar
Fun_New_Bar(); // Chamada da função
se (New_Bar==false) // Se a barra não for nova
voltar; // ...depois sair
//------------------------------------------------------------- 3 --
// Contagem de pedidos
Symb=Símbolo(); // Nome do instrumento financeiro.
Total=0; // Número de pedidos
for(int i=1; i<=OrdensTotal(); i++) // Laço de encomenda
{
if(OrderSelect(i-1,SELECT_BY_POS)==verdadeiro) // Se o seguinte
{ // Análise de pedidos:
se (OrderSymbol()!=Symb)continuar; // Não nosso instrumento financeiro
Ticket=OrderTicket(); // Número do pedido selecionado.
Dica =OrderType(); // Tipo da ordem selecionada.
Lote =OrderLots(); // Número de lotes
}
senão
{
Alerta("OrderSelect() retornou um erro - ",GetLastError()); // Se a ordem não pôde ser selecionada, então .
retorno; // Saída
}
}
//------------------------------------------------------------- 4 --
// Critérios comerciais Análise da situação
M_1=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,1);// 1 bar
M_2=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,2);// 2 bar
M_3=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,3);// 3 bar
//------------------------------------------------------------- 5 --
if(M_2>=H_line) // se a Stohastic cruzou a linha de sobre-compra
{
if(M_3 <= M_2 && M_2 > M_1) // Stohastic cruzou a linha de overbought {...
{
if(S_Flag==verdadeiro) // If(Sell position opened, then ...
retorno; // Saída início()
// Se a posição de Venda não for aberta, então ...
S_Flag=true; // colocamos uma bandeira indicando que o sinal para Vender apareceu
B_Flag=falso; // verificar se o sinal para COMPRAR não apareceu
if(ORD_Buy==verdadeiro) // Se uma ordem de compra tiver sido aberta,...
{
if(Tip!=0) // Verifique: a ordem TYPE não corresponde à ordem em aberto...
{
Trabalho=falso; // O Consultor Especialista não funcionará
Alerta ("A ordem TYPE não corresponde à ordem aberta FLAG. Exit start"); // Se a partida não existir, o Expert Advisor deixa de funcionar
retornar; // Sair do início
}
Ans_Close=Fechar_Ordem(Ticket,Lote,Slippage,Dica); // Fechar a ordem de compra aberta
if(Ans_Close==falso) // Se não conseguir fechar, então...
{
Alerta ("Falha no fechamento do pedido"). O Expert Advisor deixa de funcionar.\n Número de erro crítico ", Crit_Error);
retorno; // Saída
}
}
Ans_Open=Open_Order(Symb,Lts,SL,TP,1); // PONTOS ABERTOS
if(Ans_Open===false) // se não conseguiu abrir Sell
{
Alerta("Falha na ordem de abertura. O Expert Advisor deixa de funcionar.\n Número de erro crítico ", Crit_Error);
retornar; // Sair do início
} // Se a Sell foi aberta com sucesso
ORD_Sell=true; // colocamos uma bandeira de que uma posição CURTA foi aberta
ORD_Buy=falso; // Marcar a posição LONG como desaparecida
}
retorno; // Saída início
}
//------------------------------------------------------------------------ 6 --
if(M_2<=L_line) // Se Stohastic tiver cruzado a linha sobre-vendida
{
if(M_3 >= M_2 && M_2 < M_1) // O pico inferior aparece (BUY CALL)
{
if(B_Flag==verdadeiro) // Se a posição Comprar estiver aberta
retorno; // Saída início()
// Se nenhuma posição de compra for aberta, então...
B_Flag=true; // Bandeira positiva para posição de compra aberta
S_Flag=falso; // verificar se não há sinal de SELL
if(ORD_Sell==verdadeiro) // Se houver uma ordem de venda em aberto,...
{
if(Tip!=1) // Verifique: a ordem TYPE não corresponde à ordem em aberto...
{
Trabalho=falso; // O Consultor Especialista não funcionará
Alerta ("A ordem TYPE não corresponde à ordem aberta da FLAG. Sair do início"); // Se a partida não existir, o Expert Advisor deixa de funcionar
retornar; // Sair do início
}
Ans_Close=Fechar_Ordem(Bilhete,Lote,Página de deslizamento,Dica); // Fechar a ordem de venda aberta
if(Ans_Close==falso) // Se não conseguir fechar
{
Alerta ("Falha no fechamento do pedido"). O Expert Advisor deixa de funcionar.\n Número de erro crítico ", Crit_Error);
retorno; // Saída
}
}
Ans_Open=Open_Order(Symb,Lts,SL,TP,0); // OPEN LONG POSITION
if(Ans_Open==false) // se não conseguir abrir Comprar
{
Alerta("Falha na ordem de abertura. O Expert Advisor deixa de funcionar.\n Número de erro crítico ", Crit_Error);
retornar; // Sair do início
} // Se a ordem de compra foi aberta com sucesso
ORD_Sell=false; // verificar se não há posição curta
ORD_Buy=true; // Bandeira aberta LONG posição
}
retorno; // Saída início
}
}
//+------------------------------------------------------------------ 7 --
void Fun_New_Bar() // A torta de detecção .
{ // ... novo bar.
data/hora estática New_Time=0; // hora da barra atual
New_Bar=false; // Nenhuma barra nova
if(New_Time!=Time[0]) // compare o tempo
{
New_Time=Time[0]; // Agora o tempo é
New_Bar=true; // Nova barra é apanhada
}
}
//--------------------------------------------------------------- 8 --
bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip) // Encomenda de fechamento
{
duplo Close_Price=0; // Preço de fechamento do pedido
enquanto (verdadeiro)
{
RefreshRates(); // Atualizar dados
if(F_Tip==0) // Se o pedido for Comprar, ...
Fechar_Preço=Licitações; // Preço fechado Licitações
Close_Price=Ask; // Se o pedido for Vender, fechar preço Perguntar
bool Ans_Close=OrderClose(F_Ticket,F_Lot,Close_Price,F_Slippage); // Fechar Compra ou Venda
se (Ans_Close==verdadeiro) // Funcionou :)
retornar(true); // Sair da função de fechamento
Crit_Error=GetLastError(); // Corrigir número de erro
if (Fun_Error(Crit_Error)==1) // Tratamento de erros
continuar; // Tente novamente; // Tente novamente.
retornar(falso); // Sair da função
}
}
//--------------------------------------------------------------- 9 --
//Ordem de abertura
bool Open_Order(string F_Symb,double F_Lts,int F_SL,int F_TP,int F_Tip)
{
preço duplo Open_Price; // preço aberto
string Tip_Deal; // Direção comercial(Comprar ou Vender)
f_sl duplo; // Ordem de Stop Loss
duplo f_tp; // Tirar Lucro
int Ticket; // Ticket da ordem aberta
while(true) // Encomendas fecham ciclo.
{
RefreshRates(); // Atualizar dados
if(F_Tip===1) // Abrir VENDA...
{
Open_Price=Bid;
Tip_Deal="OP_SELL";
f_sl=NormalizeDouble(Bid+F_SL*Point,Dígitos);
f_tp=NormalizeDouble(Bid-F_TP*Point,Dígitos);
}
//-------------------------------- Se você quiser abrir COMPRAR, então...
Open_Price=Ask;
Tip_Deal="OP_BUY";
f_sl=NormalizeDouble(Bid+F_SL*Point,Dígitos);
f_tp=NormalizeDouble(Bid-F_TP*Point,Dígitos);
Ticket=OrderSend(F_Symb,Tip_Deal,F_Lts,Open_Price,2,f_sl,f_tp);//abrir ENCOMENDA
se (Bilhete > 0) // funcionou :)
retorno(true); //sair da função
Crit_Error=GetLastError(); // cometer número de erro
if (Fun_Error(Crit_Error)==1) // Tratamento de erros
continuar; // Tente novamente; // Tente novamente.
retornar(falso); // Sair da função
}
}
//--------------------------------------------------------------- 10 --
int Fun_Error(int Error) //Function handling errors
{
interruptor(Erro)
{ // Erros intransponíveis.
caso 4: Alerta("Servidor comercial está ocupado. Tente novamente...");
Sleep(3000); // Solução simples.
retorno(1); // Função de saída.
caso 135:Alerta ("Preço alterado. Tente novamente...");
RefreshRates(); // Atualização de dados.
retornar(1); // Sair da função.
caso 136:Alerta ("Sem preço. À espera de um novo tique...");
while(RefreshRates()==false) // Até um novo tick
Dormir(1); // Atraso no laço
retornar(1); // Sair da função
caso 137:Alerta ("Corretor está ocupado. Tente novamente...");
Sleep(3000); // Solução simples.
retornar(1); // Sair da função.
caso 146:Alerta("O subsistema comercial está ocupado. Tente novamente...");
Dormir(500); // Decisão simples
retornar(1); // Sair da função
// Erros críticos
caso 2: Alerta("Erro geral;)
retornar(0); // Sair da função.
caso 5: Alerta ("Versão mais antiga do terminal");
Trabalho=falso; // Não funciona mais
retornar(0); // Sair da função
caso 64: Alerta("Conta bloqueada.");
Trabalho=falso; // Não funciona mais
retornar(0); // Sair da função
caso 133:Alerta ("Comércio proibido");
retornar(0); // Sair da função
caso 134:Alerta("Não há dinheiro suficiente para executar a transação");
retornar(0); // Sair da função
default: Alert("Ocorreu um erro ",Error); // Outras opções
retornar(0); // Sair da função
}
}
//-------------------------------------------------------------- 11 --
Alguém pode me dizer qual é a razão e o que significa este erro? No início, pensei que tinha esquecido de colocar um parêntese em algum lugar.
Mas não, eu verifiquei algumas vezes e tudo parece estar bem. Serei muito grato a vocês pela ajuda.
Aqui estão os erros que o compilador gera: ')' - nem todos os caminhos de controle retornam um valor Stohastic-Signals-33.mq4 177 3
')' - nem todos os caminhos de controle retornam um valor Stohastic-Signals-33.mq4 210 3
//--------------------------------------------------------------- 8 --
bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip) // Encomenda de fechamento
{
duplo Close_Price=0; // Preço de fechamento do pedido
enquanto (verdadeiro)
{
RefreshRates();// Atualização de dados
if(F_Tip==0)// If(Ordem de compra, ...
Fechar_Preço=Licitações; // Preço fechado Licitações
Close_Price=Ask;// Se Vender pedido, fechar preço Perguntar
bool Ans_Close=OrderClose(F_Ticket,F_Lot,Close_Price,F_Slippage); // Fechar Compra ou Venda
se (Ans_Close==verdadeiro)// Funcionou :)
retorno(verdadeiro);// Sair da função de fechamento
Crit_Error=GetLastError();// cometer número de erro
if (Fun_Error(Crit_Error)==1) // Tratamento de erros
continuar;// tentar novamente
retorno(falso);// Sair da função
}
}
Pressione o botão Compile no MetaEditor e leia a mensagem de erro - há um número de linha e um número de posição
Insira o código do programa com o botão SRC - os leitores locais gostam mais desta maneira!!! e sua longa divagação é BRRRRR
O botão é para a inserção do código fonte no texto da mensagem. Quando clicado, uma janela vazia aparecerá onde você precisa colar o código e depois clicar no botão Inserir.
Pressione o botão Compile no MetaEditor e leia a mensagem de erro - há um número de linha e um número de posição
Insira o código do programa com o botão SRC - os leitores locais gostam mais assim!!! e sua longa divagação é BRRRRR
O botão é para inserção do código fonte no texto da mensagem. Quando clicado, aparece uma janela vazia onde você precisa colar o código e depois clicar no botão Inserir.
Obrigado.