Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 402

 
STARIJ:
Abaixo está o seguinte:

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

////+------------------DELETE BUYLIM-----------------------------------+
   if((SchBuyLimLots(Symbol())-SchBuyLots(Symbol()))!=0)                  //  лот байлимит НЕ лот бая
     {     
      for(int i=0;i<OrdersTotal();i++)
        {
         datetime T_op=0,T_lim=0,buys=0;
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) break;
         if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=SMB_) continue;
         if(OrderType()==OP_BUY)
         if(OrderCloseTime()>buys) buys+=OrderCloseTime();
         buys= OrderCloseTime();
         T_op=buys;                                                       //  время закрытия бая
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=SMB_) continue;
           {
            if(OrderType()==OP_BUYLIMIT)
              {
               T_lim=OrderOpenTime();                                     //  время закрытия селл
               ticket=OrderTicket();
               if(T_lim<=T_op)                                            //  разность
               res=OrderDelete( ticket,clrMagenta);
               if(res<1)
               {
                  Print(GetLastError());
               }
              }
           }
        }
     }
 
ZZuretc:

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()

 
Alexey Viktorov: Eu mesmo ainda não olhei para o milagre.

Obrigado.

 
Você pode me dizer como encontrar os valores máximos e mínimos do ATR atual?
Arquivos anexados:
q6a0hh.PNG  12 kb
 

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

')' - nem todos os caminhos de controle retornam um valor Stohastic-Signals-33.mq4 210 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 --



Arquivos anexados:
 
RomanRott: Você pode me dizer como encontrar os valores máximos e mínimos do ATP atual?
   double max=-10000, min=+10000, ATR;
   for(int n=0; n<WindowFirstVisibleBar();n++)
   {
      ATR=iATR(NULL, 0, 14, n);
      if(max<ATR)max=ATR;
      if(min>ATR)min=ATR;
   }
   Alert("min = ", DoubleToStr(min,4), "    max = ", DoubleToString(max,4));
Para outros indicadores da mesma forma
 
Skander: Olá a todos. Fez um simples especialista baseado em Stochstic (no pico de vendas em cima, na compra em baixo), e o compilador dá um erro em um ponto plano.
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

//--------------------------------------------------------------- 8 --
  bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip)    // Ф-ия закрытия ордера
  {
   double Close_Price=0;                       // Цена закрытия ордера 
   while(true)
     {
        ....................................
            continue;                           // Повторная попытка
         return(false);                                // Выход из функции
     }
     return false;   // Компилятор хочет return в конце функции
  }

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 Código é 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.

 
STARIJ:

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.

Razão: