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

 
IgorM:

para declaração sem um parâmetro? - a segunda é que existem variáveis globais para a EA - não para o terminal, elas são descritas logo no início do código antes de todas as funções, incluindo a função start(), como você escreveu - a cada tick a função start() é chamada, você muda a bandeira = falsa; e então você tenta comparar esta bandeira com o estado anterior, mas seu estado será sempre falso

Se você está apenas começando a experimentar sua mão - pegue qualquer Expert Advisor pronto da Kodobase e mude as condições de entrada no mercado para a sua própria - será mais rápido.


Vinin
Qual é a finalidade do laço?

Você quer dizer que a função de início() é executada a cada tick? Então, o laço é realmente desnecessário.

 

MarkTrade:

Então, a função start() é executada a cada tick? Então, um loop é realmente desnecessário.

https://book.mql4.com/ru/programm/special
 

Interessante a forma como as meninas dançam... Em pé em uníssono e cantando...

Testado e testado, funções/condições/dados adicionados/alterados com base nos resultados, obteve mais ou menos bons resultados em termos de rentabilidade e drawdowns... sem otimização. Recarregou a história toda e começou a cair, não - Plum, nem mesmo - Big Plum...

Se antes eu recarregasse o histórico das citações(eu tinha um histórico EURUSD pré-carregado antes dos testes, eu o recarreguei por precaução - eu tive erros na qualidade da modelagem em 2010 por algum motivo...).... Antes de recarregar a história, o Expert Advisor, bem sucedido, quase resistiu com sucesso a diferentes testes, negociou com sucesso em três anos de história, mas depois de recarregar as cotações começou a ter drawdowns duas ou três vezes por mês e não funcionou por mais de dois ou três meses após o início do teste ... Eu não mudei nenhuma condição, apenas a história...

Acontece que no histórico do servidor está sendo reescrito? Como durante séculos na União Soviética?

Qual é o objetivo de tudo isso, então?

 
artmedia70:

As meninas dançam de forma interessante... se levantaram juntos e cantaram...

Funções/condições/dados experimentados e testados, adicionados/criados, obtiveram mais ou menos bons resultados em termos de rentabilidade e drawdown... sem otimização. Recarregou toda a história e começou a descer, não - Descer, nem mesmo - Big Down...

Se antes de recarregar o histórico de cotações(antes de testar eu tinha todo o histórico EURUSD pré-carregado, só por segurança eu o recarreguei, mas por alguma razão eu tinha erros na qualidade da modelagem desde 2010)... Antes de recarregar a história, o Expert Advisor, bem sucedido, quase resistiu com sucesso a diferentes testes, negociou com sucesso em três anos de história, mas depois de recarregar as cotações começou a ter drawdowns duas ou três vezes por mês e não funcionou por mais de dois ou três meses após o início do teste ... Eu não mudei nenhuma condição, apenas a história...

Acontece que no histórico do servidor é reescrito? Como o tempo imemorável na URSS?

E então o objetivo de tudo isso?

Se seu MT ainda não estiver desconectado do servidor, então é hora de fazê-lo (e não conecte-o desnecessariamente novamente) - toda vez que você iniciar o teste ou a otimização, o MT recebe um spread (etc.) do servidor. Assim, quando o spread for de 1 pip, tudo será super impressionante, mas se em outro momento ele aumentar para 4-5 - o Assessor Especialista provavelmente começará a perder dinheiro. Naturalmente, é melhor otimizar nas piores condições, porque é mais provável que elas ocorram no comércio real.

 

Aqui está um pouco de retrabalho.

глобальные переменные (в самом начале, под #property link )
bool flagchange = false;
bool PrevFlag = false;
bool flag = false; 

int start()
  {
   //---вход в позицию
   //int    spread=MarketInfo("EURUSD",MODE_SPREAD);
   int Slippage = 3;
   int i = 0;
   double lt = getLots() ; // минимальный лот
   RefreshRates();
   int total = OrdersTotal();   
   int ticket = -1;
      flag = GetEma();
        if (PrevFlag != flag) // проверим, сигнал ема изменился?
         {flagchange = true;      // изменился!
         PrevFlag = flag;}
        else flagchange = false;
        if (flagchange == True)
         {       
           int Total=OrdersTotal(); // есть открытые позиции?
           if(Total>0)
            {
              for(i=Total-1; i>=0; i--) 
              {
                if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true) 
                  {
                    if(OrderType()==OP_BUY || OrderType()==OP_SELL) // Только Buy и Sell
                     {
                       if(OrderType()==OP_BUY) 
                         bool Result=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,CLR_NONE);
                       else
                         Result=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,CLR_NONE);
                     if(Result!=true) 
                        {          
                          Print("LastError = ",GetLastError()); 
                         }              
                      }
                   }
                else 
                   if (flag ==true) OrderSend(Symbol(),OP_BUY,lt,Ask,Slippage,Bid - sl * Point,0,"Buy",888,0,Blue);
                   else OrderSend(Symbol(),OP_SELL,lt,Bid,Slippage,Ask + sl * Point,0,"Seel",888,0,Red);
              }
           }                                            
        }
     
   return(0);
  }
      //////////////////////////////////////////////////////
  bool GetEma() {
  //----Получим значение EMA1
      int ma1= iMA(Symbol(),PERIOD_H1,ema1,0,1,6,0);
  //----Получим значение EMA2   
      int ma2= iMA("",PERIOD_H1,ema2,0,1,6,0); 
      if (ma1>ma2) return (True);
      else return (False);}
   /////////////////////////////////////////////////////  
         // посчитаем разтер лота
   double getLots() 
        {
                double minlot = MarketInfo(Symbol(), MODE_MINLOT);
                 int round = MathAbs(MathLog(minlot) / MathLog(10.0)) + 0.5;
                 double lot = minlot;
//---- select lot size
                 lot = NormalizeDouble(AccountFreeMargin() * Risk / 1000.0, round);
                 if (AccountFreeMargin() < lot * MarketInfo(Symbol(), MODE_MARGINREQUIRED)) 
                        {
                                lot = NormalizeDouble(AccountFreeMargin() / MarketInfo(Symbol(), MODE_MARGINREQUIRED), round);
                        }
                 if(lot < minlot) lot = minlot;
                 double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);
                 if(lot > maxlot) lot = maxlot;
//---- return lot size
   return(lot);
        }

Ainda não negocia :(

 
chief2000:

Se seu MT ainda não estiver desconectado do servidor, é hora de fazê-lo (e não mais conectá-lo desnecessariamente) - toda vez que você executar um testador ou otimizar o MT recebe um spread (etc.) do servidor. Assim, quando o spread for de 1 pip, tudo será super impressionante, mas se em outro momento ele aumentar para 4-5 - o Assessor Especialista provavelmente começará a perder dinheiro. Naturalmente, é melhor otimizar nas piores condições, porque é mais provável que elas ocorram no comércio real.

É tudo claro e há muito compreendido... Mas é sábado... A propagação pode mudar hoje? Não... É provavelmente mínimo agora, ou seja, as melhores condições... Não... Mesmo com qualquer propagação, a EA estava negociando bem... antes que a história seja restabelecida.
 
artmedia70:
É tudo claro e há muito compreendido... Mas é sábado... A propagação pode mudar hoje? Não... É provavelmente mínimo agora, ou seja, as melhores condições... Mas não... Mesmo com qualquer propagação, a EA estava negociando bem... antes do restabelecimento da história.
Bem, se você olhar para o progresso comercial no gráfico, o que mudou?
 
Techno:
Bem, se você olhar para o progresso comercial no gráfico, o que mudou?
O levantamento de capital aumentou muitas vezes... Acontece que há mais condições para abrir posições. Ele realmente abre mais posições...
 
MarkTrade:

Aqui está um pouco de retrabalho.

Ainda não comercializado :(

Deve haver um erro em algum lugar nas condições / lógica
porque o MetaEditor não tem um depurador, então eu faço isso:

adicionar no final do código

Comentário( "flag= ", flag, " PrevFlag=", PrevFlag, ......);

retorno(0);

}

e no modo de visualização no testador em baixa velocidade veja o que muda e o que não muda

 
artmedia70:
O levantamento de capital aumentou muitas vezes... Acontece que as condições para a abertura de posições aumentaram. Ele realmente abre mais posições...
Não me refiro ao gráfico de teste, mas ao gráfico de cotação, aproximadamente, quais são as mudanças em aberturas, fechamentos?