[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 19

 
Bom dia a todos. Preciso de um robô que acompanhe os negócios e crie uma ordem pendente no fechamento por takeprofit para substituir um fechado com os mesmos parâmetros que um fechado. Um robô desse tipo pode ser implementado? Eu nunca tinha usado um antes. Se você tiver um em algum lugar, por favor, me dê um link. Agradecemos antecipadamente.
 
Anteriormente, o fechamento do lucro era feito na moeda do depósito e foi calculado como
double Lot = 0.1;
int KoffProfit = 10;
ProfitValue = Lot * KoffProfit * MarketInfo(Symbol(), MODE_TICKVALUE); 
como converter esta fórmula em pontos?
 

Estou me perguntando como otimizar o código para acelerar a coruja no testador. Você pode me dizer como executar o loop mais rápido, desta forma:

for (int i = OrdersTotal() - 1; i >= 0; i--) {
   if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))  continue; 
   if (OrderSymbol() != Symbol())                    continue;    
   if (OrderMagicNumber() != Magic)                  continue;
   
   // работаем с ордерами      
}

ou assim:

for (int i = OrdersTotal() - 1; i >= 0; i--) {
   if (OrderSelect(i, SELECT_BY_POS)) {
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {
      // работаем с ордерами
      }
   }
}

e quaisquer outras dicas para acelerar a EA?

 
T-G: Anteriormente, fechar com lucro era na moeda do depósito e contava assim
como converter esta fórmula em pontos?
Esta fórmula não faz sentido mudar, é mais fácil encontrar o pedido necessário (OrderSelect()) e calcular (OrderOpenPrice()-Bid)/Point ( ou OrderOpenPrice()-Ask) e obter quantos pips o pedido já tem
T-G:e há outras dicas para acelerar o EA?

Em mql4 há uma verificação completa das condições, ou seja, todas as expressões que estão entre parênteses se() serão verificadas até o final, então às vezes é razoável quebrar condições complexas em várias condições:

if(a>b && c>d) pode ser substituído por if(a>b){ if (c>d)..... }

Portanto, a primeira variante do código que você sugere trabalhará um pouco mais rápido, embora a partir da prática - a contagem de ordens não carrega muito o processador, as operações matemáticas carregam muito o processador, faz sentido procurar aumentar o desempenho do código - nem todos os cálculos têm que ser feitos a cada tick

 
IgorM:

Em mql4 há uma verificação completa das condições, ou seja, todas as expressões que estão entre parênteses se() serão verificadas até o final, portanto, às vezes é razoável quebrar condições complexas em várias condições:

if(a>b && c>d) pode ser substituído por if(a>b){ if (c>d)..... }

Portanto, a primeira variante do código que você sugere trabalhará um pouco mais rápido, embora a partir da prática - a busca de pedidos não carrega muito o processador, as operações matemáticas carregam muito o processador, faz sentido procurar aumentar o desempenho do código - nem todos os cálculos precisam ser feitos a cada tiquetaque

Estou vendo. Obrigado:

Rez = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), iSlippage, Blue);
if (Rez) Comment("Закрыт ордер # ", OrderTicket(), "  прибыль ", OrderProfit());

ou a mesma normalização nas condições:

if (NormalizeDouble(dOrderOpenPriceBuyStop - StepTral * Point, Digits) > NormalizeDouble(Ask + Step * Point, Digits))

retarda muito a execução dos EAs?

 
T-G: ou a mesma normalização em condições:

retarda muito a execução de EAs?

Tente verificá-lo você mesmo com GetTickCount(), crie um script e execute a normalização uma vez 10 000 vezes e execute-a duas vezes 10 000 vezes, então você pode avaliar a utilidade de procurar seções de código onde a normalização é executada com freqüência. Sobre a impressão() Eu até acho difícil responder - você irá emitir Pronta a cada tick? Normalmente as operações de saída atrasam significativamente o Expert Advisor, os scripts com Comentário() rodam 10 vezes mais do que sem saída, mas então novamente, a questão é sobre conveniência - se for necessário, você tem que fazê-lo.
 
T-G:

Estou vendo. obrigado. mas me diga Imprimir, por exemplo, após fechar um pedido:

ou a mesma normalização nas condições:

retarda significativamente a execução dos EAs?

A operação Print() é uma operação com um arquivo (neste caso, um arquivo de log). E estas operações são MUITO lentas (em comparação com o processamento de dados da memória). CONCLUSÃO: Criar uma variável que seja inicializada no init()

bool gb_VirtualTrade;
init()
{
    gb_VirtualTrade = (IsOptimization() || (IsTesting() && !IsVisualMode));
}

E imprimir por condição desta variável (esta é UMA opção).

O exemplo de normalização que você deu não faz sentido, se procedermos a partir dos objetivos declarados (otimização do código). A normalização é REQUERIDA de acordo com as exigências técnicas do servidor de corretagem, a fim de executar uma ordem de negociação SOMENTE por preço e STOP.

 
Olá, quando um Expert Advisor abre uma posição, devo escrever em seu código um indicador (condição) baseado nos sinais dos quais ele abre uma ordem ou devo escrever no Expert Advisor o caminho para a janela de um instrumento financeiro com indicadores instalados?
 

Caros especuladores, ajudem! Procurando um EA que automaticamente define SL e TP ao abrir uma posição.

Sou muito grato de antemão.

 
Boa tarde. Se alguém sabe onde você pode baixar um indicador ZIGZAG que marca o ponto em que um novo feixe aparece (por exemplo, em uma cor diferente). Se é que há algum...
Razão: