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

 
dzhini:
Mas não funciona :(
Então não funciona em outro lugar ou estou perdendo algo
 
Reshetov:
Então não funciona em outro lugar ou me escapou algo
Posso bater em sua porta pessoalmente?
 
dzhini:
Posso bater em sua porta pessoalmente?
Não. As mensagens privadas são apenas para comunicação pessoal. E os erros de código devem ser discutidos publicamente, para que outros não cometam os mesmos erros, ou alguém poderia então compartilhar um link para uma solução pronta.
 

Olá. este simples código funciona com um erro. Eu mesmo não consigo descobrir a razão.

A primeira ordem abre, modifica. A segunda abre e... Não modifica. Mantém-na até falhar.

No registro diz:

"01:23:22 MarkTrade começou para testes

01:23:22 2010.01.29 00:00 MarkTrade EURUSD,H1: abrir #1 comprar 1.00 EURUSD a 1.3965 ok

01:23:22 2010.01.29 00:00 MarkTrade EURUSD,H1: modificar #1 comprar 1.00 EURUSD a 1.3965 sl: 1.3935 tp: 0.0000 ok

01:23:22 2010.01.29 00:28 Testador: pare a perda #1 em 1.3935 (1.3935 / 1.3937)

01:23:22 2010.02.01 00:00 MarkTrade EURUSD,H1: abrir #2 comprar 1.00 EURUSD a 1.3877 ok

01:23:22 2010.05.05 13:17 MarkTrade: parado por causa de Stop Out

01:23:22 2010.05.05 13:17 Testador: o pedido nº 2 está fechado

Percebi meu erro! OrderSend devolve valor não-booleano!

int start()
  {
  int total=OrdersTotal();
  if (total==0)
   {
      if (TimeHour(TimeCurrent())==00&&TimeMinute(TimeCurrent())==00)
      {
      Buy();
      }
   }
return(0);
  }
//////////////////////////
void Buy()
 {
 RefreshRates();
 if (OrderSend(Symbol(), OP_BUY, 1, NormalizeDouble(Ask,Digits), 0,0,0,"",123321,0,Blue)==true)
         {
           Modify();
         }
 }
/////////////////////////////
void Modify()
 {
    int total = OrdersTotal();
      for(int i=total-1;i>=0;i--)
       {
       OrderSelect(i, SELECT_BY_POS,MODE_TRADES);
       if (OrderModify (OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-NormalizeDouble(30*Point,Digits),OrderTakeProfit(),0,CLR_NONE)== false) Modify();
       }
 }
 

boa tarde

Como criar um testador que trabalhe em diferentes reframes.

e fazer a história.

 

Bom dia!

Por favor, esclareça. Ao otimizar o Expert Advisor, notei que definindo diferentes TPs com algoritmo genético ativado, obtenho resultados diferentes, isto é, se eu defino TP=400, então otimizo em etapas de 1 a 400, então defino 350, então otimizo em etapas de 1 a 350 e assim por diante até TP=50. Então acontece que se eu correr apenas em TR = 400, então eu "pulo" os resultados que estão em TP mais baixo e melhor ! É por causa da genética? (O artigo https://www.mql5.com/ru/articles/1347 (Criado em: 25.12.2009 Autor: Rider) diz: "...A genética é certamente uma coisa útil, mas dentro de limites razoáveis. O problema é que seu algoritmo pode jogar uma piada cruel - algumas vantagens, de seu ponto de vista, um conjunto de parâmetros será identificado, e toda otimização adicional irá "em torno dele" até o final. Acho que é claro quais são as conseqüências. A maioria das variantes realmente boas que funcionarão fora da área de otimização serão deixadas "fora" e não aparecerão na tabela "Resultados da Otimização".

Há várias maneiras de sair. Uma solução radical é rejeitar o uso de algoritmo genético na otimização. Mas esta nem sempre é uma boa solução por uma razão ou outra. As duas próximas são meias-medidas, mas pelo menos alguma coisa:

- Conduzir a otimização não uma, mas duas ou mais vezes. A primeira vez, digamos, por "Equilíbrio", a próxima por "Desdobramento Máximo" ou algo mais ..."). Então, para não obter o melhor resultado, eu deveria executá-lo com diferentes TPs + por diferentes "parâmetros otimizáveis" e mais, por exemplo, 9 testes avançados com 9 otimizações para cada teste de confiabilidade?

 
eddy:

o ciclo não é interrompido por algum motivo

A quebra em seu caso aciona e interrompe o laço somente quando a condição é cumprida. Se a condição não for cumprida, o laço é infinito. Tente desta forma.

int sec=Seconds();
       while(true) 
        {if(sec!=Seconds())          // new sec
          { int ms=GetTickCount(); }
       break;
        }
 
volshebnik:

apausa em seu caso só funciona se a condição for cumprida

é por isso que está em if()
 
Olá! Como posso mudar as propriedades de um símbolo no terminal? Diz que o nível mínimo de parada é 300. Eu não posso testar a EA.
 
Pro

Para mudar o spread, por exemplo, existe um programa TakeMySpread, mas como ou com o que você pode mudar o "Stop Level " para testar o EA em condições diferentes. Socorro!