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

 
_SS_:
Como criar uma função e chamá-la?
Leia um livro-texto... :)
 

artemida70, montei minha primeira EA usando o tutorial de S. Kovalev. Verificou-se que sua função de critério funcionava com perdas. Escrevi minha função critério. Verificou a existência de erros e depois compilou o Expert Advisor. Como resultado do trabalho, eu consegui:

- sobre a função critério: O - erros, 1 aviso;

- para compilação do Expert Advisor: О - erros, О - avisos.

Mas o trabalho no Testador de Estratégia não foi, colocou à prova ALERTA em funções int init, int start, int deinit. Vejo nas respostas que o controle é passado do Terminal para a função int init e o controle não é passado para a função int start - nenhuma resposta ALERTA. Quando a EA é descarregada, há uma resposta da função int deinit.

Por favor, seu conselho sobre esta situação. Precisa muito do conselho de um profissional experiente.

OBRIGADO

artmedia70:
Leia um tutorial... :)
 
artmedia70:
Aqui você tem uma estrutura estranha. Você está fazendo o loop padrão de pedidos do terminal. De zero a OrdensTotal() -1. E então você verifica a completa ausência de pedidos no terminal no laço. Por que você não verifica o bilhete para pedidos? Ou um magik? E sua bandeira =0, por alguma razão. E por que não falso? No entanto, você é o chefe. Sua lógica, você deve entendê-la... :)

Obrigado pela dica)))) Exatamente neste ponto:. De zero a OrdensTotal() -1... Essa é a razão pela qual o testador não continuou fazendo pedidos))))

Eu uso este esquema porque o aprendi com as aulas de outra pessoa. Se você pudesse descrever um método mais racional, eu ficaria muito grato))))

 

Estou ferrado, não saio do mql4 há um mês, acho que estou ficando louco ou não?

não tenho idéia do que estou tentando fazer com ele.

Eu estou colocando lá fora, ao menos me dê uma dica, o que está errado? Gurus, ajude os manequins!

Não estou vendo nenhum erro no registro.
 
StopLoss duplo externo=50,0;
TakeProfit duplo externo=50.0;
double Lots=1 externo;
extern int total;

int start()
{
double Price_1, Price_2, min, max;
RefreshRates();
Price_1=Bid;
Price_2=Ask;

min=iLow(NULL,0,2);
max=iHigh(NULL,0,2);
total=OrdersTotal();
if(total<1)
{

if(Price_1>max)
OrderSend(Symbol(),OP_BUY,Lots,Ask,5,Bid-StopLoss*Point,Ask+TakeProfit*Point, "My order#",16384,0,Green);

if(Price_2<min)
OrderSend(Symbol(),OP_SELL,Lots,Bid,5,Ask+StopLoss*Point,Bid-TakeProfit*Point, "My order#",16384,0,Green);
}
}
return(0);
 
boris.45:

artemida70, montei minha primeira EA usando o tutorial de S. Kovalev. Verificou-se que sua função de critério funcionava com perdas. Escrevi minha função critério. Verificou a existência de erros e depois compilou o Expert Advisor. Como resultado do trabalho, eu consegui:

- sobre a função critério: O - erros, 1 aviso;

- para compilação do Expert Advisor: О - erros, О - avisos.

Mas o trabalho no Testador de Estratégia não foi, colocou à prova ALERTA em funções int init, int start, int deinit. Vejo nas respostas que o controle é passado do Terminal para a função int init e o controle não é passado para a função int start - nenhuma resposta ALERTA. Quando a EA é descarregada, há uma resposta da função int deinit.

Por favor, seu conselho sobre esta situação. Precisa muito do conselho de um profissional experiente.

OBRIGADO


Eu gostaria de ver o que você fez lá... :)
Não entendo o que isso significa - a função de critérios do IC funciona com perdas. Afinal, qualquer função, se rastrear o critério de abertura, pode funcionar corretamente ou incorretamente e, portanto, pode ter erros. Mas a estratégia em si - pode ser perdedora ou lucrativa... A função critério apenas rastreia os critérios estabelecidos pela estratégia e envia sinais para a função critério comercial.
 
ViktorF:

Obrigado pela dica)))) Exatamente neste ponto:. De zero a OrdensTotal() -1... Essa é a razão pela qual o testador não continuou fazendo pedidos))))

Eu uso este esquema porque o aprendi com as aulas de outra pessoa. Se você pudesse descrever um método mais racional, eu ficaria muito grato)))).

Há muitas maneiras. Tudo depende do que você quer encontrar.

Em qualquer caso, você pode começar a fazer looping através dos pedidos

para (int i =0; i<OrdersTotal(); i++)

então verifique exatamente o que você quer encontrar no laço.

se (OrderSelect(i, SELECT_BY_POS) // Se a ordem for selecionada (aqui, omiti o parâmetro da função MODE_TRADES, pois ele é selecionado por padrão)

e então - você já verifica os parâmetros da ordem que você precisa, por exemplo, magik

se (OrderMagicNumber()==Magic) // se a ordem tem o número mágico dado, então... então esta é a ordem que precisamos...

Bem... Ou seu tipo...

se (OrderType()==OP_BUY || OrderType()==OP_SELL) // se o tipo de pedido for Compra ou Venda...

etc...

Embora possamos fazer isso de forma completamente diferente. Tudo depende de seus hábitos, e das exigências do código.

 
gheka:

deve funcionar. o rosto sorridente está sorrindo?
 

Olá a todos! Tenho o seguinte código em meu Conselheiro Especialista (ver abaixo). Pelo que entendi, o sinal para abrir uma posição é tirado dos indicadores de dois índices. Como podemos fazer os pedidos abertos com base em apenas um indicador, por exemplo, CCI? Muito obrigado.

int getSignal() {
   int Momentum = checkMomentum();
   int CCI = checkCCI();
   if (Momentum != CCI) return (0);
   return (Momentum);
}
int checkCCI() {
   double CCI = iCCI(NULL, 0, 60, PRICE_TYPICAL, 1);
   Print("CCI: ", CCI);
   if (CCI > 0.0) return (1);
   if (CCI < 0.0) return (-1);
   return (0);
}

int checkMomentum() {
   double Momentum = iMomentum(NULL, 0, 60, PRICE_TYPICAL, 1);
   Print("Momentum ", Momentum);
   if (Momentum > 100 && Momentum < 101) return (1);
   if (Momentum < 100 && Momentum > 99) return (-1);
   return (0);
}
 

Ajuda, a EA não fecha todos os pedidos quando chega a um lucro

void CloseAllOrders()
{
  for (int i = 0; i < OrdersTotal(); i++)
  {
    if (OrderSelect(i, SELECT_BY_POS))
    {
      if (OrdersTotal() > 1 && OrderSymbol() == Symbol() && AccountProfit() >= AccountBalance()*AllProfit/100)
      {
        if((OrderType()==OP_BUY || OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT)) OrderClose(OrderTicket(), OrderLots(),Bid,0);
        if((OrderType()==OP_SELL || OrderType()==OP_SELLSTOP || OrderType()==OP_SELLLIMIT)) OrderClose(OrderTicket(), OrderLots(),Ask,0);
        if(UseSound == true)
        {
        PlaySound(SuccesSound);
        }        
      }
    }
  }
}
Razão: