Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 223

 
ALXIMIKS:


Eu tive tempo - eu criei um algoritmo para a tarefa e o descrevi (em detalhes, talvez um pouco incorreto para algumas pessoas - as pessoas são diferentes em termos de rentabilidade).

sarcasmo? não sei, só para ajudar.

escrever o código para alguém? otimizar mais? (sim, eu posso, mas vale a pena? )

(p.s. artmedia70, sem ofensa, eu respeito sua atitude e opinião em geral - honestamente, mas no outro dia você mesmo me deu o código do iCustom-y para dizer de forma suave não muito otimizada).

Algo assim deve funcionar se você inseri-lo no cheque para um novo bar.

O código seria mais ideal se você reduzisse kilkict=iBars(sy,tf) após um certo número de fractais, para que você não tenha que olhar constantemente através de todas as barras.

Obrigado. Eu comecei a escrever de acordo com seu algoritmo. Mas com bandeiras, você está tão perto quanto eu de Pequim. Mais uma vez, obrigado.
 
gince:
Obrigado. Eu comecei a escrever de acordo com seu algoritmo. Mas com bandeiras, estou tão longe de Pequim quanto você está. Mais uma vez, obrigado.


https://www.mql5.com/ru/forum/131516/page34

Lá embaixo - um artigo inicial compartilhou sua experiência. Exatamente sobre esta questão.

 
tara:


https://www.mql5.com/ru/forum/131516/page34

Lá embaixo - um artigo inicial compartilhou sua experiência. Exatamente sobre esta questão.


SPS
 

Qual poderia ser o problema?

Às vezes uma divisão por erro "O" é mostrada durante um teste

double LotsOptimized()
  {
   double lot=Lots;
   double Lot;
   if (isFloatLots == true)          // если флаг true то проводится оптимизация величины лота, иначе лот неизменен
     {  
        int orders=HistoryTotal();  // history orders total
        int losses=0; // number of losses orders without a break
        double loss=0;              
//---- select lot size
        double  lot_min         = MarketInfo( Symbol(), MODE_MINLOT  ); 
        double  lot_max         = MarketInfo( Symbol(), MODE_MAXLOT  ); 
        double  lot_step        = MarketInfo( Symbol(), MODE_LOTSTEP ); 
        double  lotcost         = MarketInfo( Symbol(), MODE_TICKVALUE );       
                
        lot                             = 0.0;
        double  dollarsPerPip   = 0.0;
        
        lot = AccountBalance()*MaxR/100.0;
        dollarsPerPip = lot/SL;
                
        lot = NormalizeDouble( dollarsPerPip/lotcost, 2 );      
        
        lot = NormalizeDouble( lot / lot_step, 0 ) * lot_step;
        
        if ( lot < lot_min ) lot = lot_min;
        if ( lot > lot_max ) lot = lot_max;
        
        if ( AccountFreeMarginCheck( Symbol(), type, lot ) < 10 || GetLastError() == 134 ) 
        { 
                Alert ( "Impossible to open position with lot = ", DoubleToStr( lot, 2 ), ". Not enough money." );
                return(-1);
        }
//---- return lot size
//         if(lot<0.1) lot=0.1;
           
//---- calcuulate number of losses orders without a break
           if(DcF>0)
          {  
        for(int i=orders-1;i>=0;i--)
                  {
                 if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) 
                   { 
                        Print("Ошибка в истории!"); 
                        break;
                   }
                if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) 
                  continue;
                 if(OrderProfit()>0)  break;
                if(OrderProfit()<0) losses++;loss=loss-OrderProfit();
                  }
        if(losses>=losses_orders) {Lot=NormalizeDouble(MathAbs(loss)/FV/MarketInfo(Symbol(),MODE_TICKVALUE)/TakeProfit1,1);
         }
       }
     }  
//---- return lot size
     if (Lot>lot) lot=Lot; 
   
  return(lot);
  }
 
Stells:

Qual poderia ser o problema?

s vezes a divisão por erro "O" é mostrada durante um teste.


Procure pelo sinal "/" e veja quais variáveis do usuário tomam parte na divisão:

SL ;

FV ;

TakeProfit1 .

Alguns deles podem ser 0.

 
Stells:

Qual poderia ser o problema?

Às vezes uma divisão por erro "O" é mostrada durante um teste

Fazer um teste de tipo:

if(!SL==0)
   {
  dollarsPerPip = lot/SL;
   }
E assim por diante .
 
ALXIMIKS:


Mais uma vez, obrigado. Eu tentei entender seu código e escrever comentários. Fiz isso por mim mesmo para entender e talvez escreva algo semelhante. Eu estudo e tento descobrir a lógica do trabalho de outras pessoas. Então eu mesmo o tento.

Talvez você possa encontrar tempo para verificar meus comentários e corrigi-los, se necessário. Uma pergunta a mais.

  if (Bufer0!=EMPTY_VALUE) 

Isso significa que o buffer indicador não está vazio ou essa variável significa algo mais? O buffer indicador seria

Bufer0[i]

Todos os códigos com comentários.

 int    counted_bars=IndicatorCounted();
//----
   int   a1=0,                               //преведущий фрактал (-1 ->нижний, 1 -> верхний)
         a2,                                 //нынешний фрактал  (-1 ->нижний, 1 -> верхний)
         a3,                                 //сума преведущий + нынешний
         kilkict,
         frac,                               //frac - флаг существования фракталов,
         frac1=0;                            //frac1- счетчик фракталов (+1 или 0 за цикл)
   int i;
   double Bufer0;                            //
   kilkict=iBars(NULL, 0);

   for (i=3; i<kilkict;i++){
      a2=0;frac=0;
      if(iFractals(NULL, 0, MODE_UPPER, i)>0) {            
         if (Bufer0!=EMPTY_VALUE) {          //
            a2+=1;                           //к числу фракталов добовляем 1
            frac=1;                          //флаг - фрактал есть
            frac1++;                         //счечик увеличиваем на 1
         }
      }
      if(iFractals(NULL, 0, MODE_LOWER, i)>0) {            
         if (Bufer0!=EMPTY_VALUE) {          //
            if(a2==0){
               frac1++;                      //счечик увеличиваем на 1 
               frac=1;                       //флаг - фрактал есть
            }
            a2+=-1;                          //к числу фракталов добовляем -1(т. е. уменшаем)
         }
      } 
      if (frac==0){continue;}                // если флага нет (фрактал ненайден)
      if (frac1==1){                         //если счечик равен 1,
         a1=a2; continue;
      }          
      a3=a1+a2;
      if(a3<0)           { a1=a2;continue;}//Два фрактала вниз  подряд найдено// 
      if(a3>0)           { a1=a2; continue;}//Два фрактала вверх подряд найдено //
      if(a3==0 && a1==0) { a1=a2;}// Два фрактала подряд вверх и два фрактала подряд вниз найдено //
   }

 

gince:

if (Bufer0!=EMPTY_VALUE) 

Isso significa que o buffer indicador não está mais vazio ou essa variável significa algo mais?

Esta linha pode ser removida, porque iFractals() retorna zero, não "valor vazio"(EMPTY_VALUE), como ausência de fractal.

Minha pergunta é a seguinte: você está tentando fazer um indicador que procurará por dois fractais consecutivos? Ou você está procurando em seu EA por dois fractais consecutivos mais próximos da barra atual? Esta questão não é de curiosidade ociosa porque os métodos de busca no indicador e no Expert Advisor são diferentes - o indicador calcula do final ao início - do passado ao presente, e o Expert Advisor olha através das barras do presente ao passado. Portanto, as direções de busca também são diferentes para o Expert Advisor e para o indicador.

Uma última pergunta: qual deve ser o resultado da produção?

 
artmedia70:

Esta linha pode ser removida porque iFractals() retorna zero como nenhum valor fractal, não "valor vazio" (EMPTY_VALUE).

Minha pergunta é a seguinte: você está tentando fazer um indicador que procurará por dois fractais consecutivos? Ou você está procurando em seu EA por dois fractais consecutivos mais próximos da barra atual? Esta questão não é de curiosidade ociosa porque os métodos de busca no indicador e no Expert Advisor são diferentes - o indicador calcula do final ao início - do passado ao presente, e o Expert Advisor olha através das barras do presente ao passado. Assim, as direções de busca também são diferentes no Expert Advisor e no indicador.

E a última pergunta: qual deve ser o resultado?



Os métodos de busca no indicador e na EA são diferentes - o indicador calcula do final ao início - do passado ao presente, enquanto a EA olha através das barras do presente ao passado .

para (i=kilkict;i>0;i--)

O resultado - dois superiores -> vender (seta para baixo), dois inferiores -> comprar (seta para cima). O sinal aparecerá +2 barras à direita do fractal. Isso é o que eu gostaria de ver visualmente na história, no início. E provavelmente vamos precisar de um filtro.

 
ALXIMIKS:


...

algo como isto...

...


Diga-me, explique, como acontece que em vez de "isto" eles escrevem "isto"?

1. Você não sabe que "it" se escreve com um "e", não com um "f"?

2. demasiado preguiçoso para mover sua mão para a letra "e", é mais fácil pressionar "e"?

3. Não há uma tecla "e" no teclado? Se não, por que não?

4. É algum tipo de ponce especial?

5. Algum outro motivo desconhecido. O que é isso?

Razão: