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

 
chief2000:

Substituiu "return(0)" por "return", mas isto não resolveu o "problema" - após a otimização você ainda vê os mesmos resultados 0-zero. Existe alguma solução para não produzir zeros durante a otimização?

Obrigado!


Não sei se você sabe ou não, eu lhe direi apenas por precaução, marque a caixa de seleção "Ignorar resultados inúteis".

Os resultados negativos (por equilíbrio) serão eliminados, não estando certos sobre os zeros, mas tente.

 
Pergunto-me como obter um número "aleatório" dentro de, digamos, 15 +/- 7 em cada novo tick, para que seja gerado aleatoriamente dentro dos limites determinados ...
 

Assim:

int random(){
   MathSrand(TimeLocal());
   while(true){
      int x = MathRand();
      if(x >= 8 && x <= 22)return(x);
   }
}

:)

 
ToLik_SRGV:

Assim:

:)

Obrigado!!! ;)
 
ToLik_SRGV:

Não sei se você sabe disso ou não, mas, por precaução, verifique a caixa "Saltar resultados inúteis".

Os resultados negativos (por balanço) serão filtrados, não tenho certeza sobre os nulos, mas você deve tentar.

A questão é que quero ver resultados nulos - nos estágios iniciais de otimização, muitas vezes tenho que selecionar os melhores entre os resultados nulos (e em estágios posteriores é útil olhar através deles e comparar). Os zeros atrapalham porque esses mesmos resultados não fazem sentido e são muitos - o tamanho dos arquivos armazenados fica maior e impede visualmente a visualização dos resultados. Obrigado de qualquer forma!

 
granit77:

Se você se refere às variáveis externas MA_Fast_Period e MA_Slow_Period, existe uma solução. Se as variáveis são calculadas no Expert Advisor, então não há nada a ser feito.

É tarde, minha cabeça não está mais funcionando... mas parece uma idéia muito boa! Obrigado!

 
artmedia70:
Pergunto-me como obter um número "aleatório" dentro de, digamos, 15 +/- 7 em cada novo tick, para que seja gerado aleatoriamente dentro dos limites determinados ...
http://prolang.ru/index.php/cpp/cpptheory/3-clang-random.html

Para obter números reais aleatórios com distribuição uniforme em intervalos [a,b], use a fórmula

x = rand()*(b-a)/RAND_MAX + a;

Para mql, na descrição da função MathRand(), está escrito: A função retorna um número inteiro pseudorandômico na faixa de 0 a 32767

ou seja, para mql RAND_MAX = 32767

 

Comecei a aprender mq4, e imediatamente encontrei alguns momentos obscuros.

Eu tentei, por assim dizer. Escrevi um simples Expert Advisor sobre Ma. Mas não quer negociar nem mesmo na história. Não mostra nenhum erro.

Você pode me dizer onde eu estraguei tudo?

int start()
  {
   //---проверим возможность входа в позицию
   bool flagchange = false;
   int Slippage = 3;
   int i = 0;
   double lt = getLots() ; // минимальный лот
   RefreshRates();
   int total = OrdersTotal();   
   int ticket = -1;
   for (;;)
      {
      int flag= GetEma();
       if (flagchange != flag) // проверим, сигнал ема изменился? если да, то можно открыть или закрыть поз.
       flagchange = true;      // изменился!
       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 ==1) 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);
  }
      //////////////////////////////////////////////////////
  int 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 (1);
      else return (0);}
   /////////////////////////////////////////////////////  
         // посчитаем разтер лота
   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);
        } 
 


bool flagchange = false;
int Slippage = 3;
int i = 0;
double lt = getLots() ; // lote mínimo
RefreshRates();
int total = OrderTotal();
int ticket = -1;
for (;;)
{
int flag= GetEma();
if (flagchange != flag)

o para declaração sem o parâmetro? - o ponto? loops eternos não são escritos dessa forma, e em segundo lugar, 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 e a função start() incluindo, como você escreveu - a cada tick que você chama a função start(), flagchange = falso; e então você tenta comparar essa bandeira com o estado anterior, mas seu estado será sempre falso

Se você está apenas começando a tentar suas forças - pegue qualquer Expert Advisor pronto da Kodobase e mude as condições de entrada no mercado para o seu próprio - será mais rápido.


 
MarkTrade:

Comecei a aprender mq4, e imediatamente encontrei alguns momentos obscuros.

Eu tentei, por assim dizer. Escrevi um simples Expert Advisor sobre Ma. Mas não quer negociar nem mesmo na história. Não mostra nenhum erro.

Você pode me dizer onde eu estraguei tudo?


Qual é a finalidade do looping EA?

for (;;) {


}