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

 

Sim, eles são do tipo int, mas eu pensei que o resultado fosse imediato sem atribuição. Obrigado, vou tentar.


Está funcionando.

 


Isto é o que eu tenho. Se alguém estiver interessado, eu posso postar o código fonte. Este roteiro gera estatísticas por barras. Analisei as barras diárias deste gráfico.


Encontrei um padrão interessante. As porcentagens são quase as mesmas para todos os períodos. Há uma diferença de +-5%. Na proporção de touros para ursos por um, dois e três em uma fileira.

 
ChAnton:


Isto é o que eu tenho. Se alguém estiver interessado, eu posso postar o código fonte. Este roteiro gera estatísticas por barras. Analisei as barras diárias deste gráfico.


Encontrei um padrão interessante. As porcentagens são quase as mesmas para todos os períodos. Há uma diferença de +-5%. Na proporção de touros para ursos por um, dois e três em uma fileira.


Colocá-lo lá fora, é interessante de se ver.
 
//+------------------------------------------------------------------+
//|                                                 Анализ баров.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//для метатрейдера 4

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+

#property show_inputs
extern int Periods = 5;                     // Период таймсерии
extern int Nachalo = 1;                     // Начало баров откуда начинается анализ
extern int Konec = 500;                     // Конец баров на каком баре заканчивается анализ
extern int Bolee = 0;                       // тело бара больше установленной величины (для расчета от 0 указывать -1)
extern int Menee = 50;                      // тело бара меньше установленной величины
extern int Teny = 100;                      // минимальная величина тени с обоих сторон
extern int Otkr = 100;                      // минимальное отклонение от точки открытия

int start()
  {
  int i;      //счетчик
  double nul = 0; //количество баров размер тела которых равно нулю
  double vverh = 0;  //Бар вверх бычий
  double vniz = 0;   //Бар вниз медвежий
  double dvavverh = 0;  //Бар вверх 2 подряд
  double dvavniz = 0;   //Бар вниз 2 подряд
  double trivverh = 0;  //Бар вверх 3 подряд
  double trivniz = 0;   //Бар вниз 3 подряд
  double vibor = 0;  //Бар удовлетворяющий условию поиска
  double Maks =0;//максимальный бар
  double Mun =10000;//минимальный бар
  double ten = 0;//тени с обоих сторон превышающие установленную величину
  double otkrytie = 0; // смещение цены в обе стороны на эту величину с момента открытия бара
  double L; //вре'менная переменная
  string S;
  
  string Symb;
  //используемый фин. инструмент - торговая пара
  Symb=Symbol();  
  string P;
  if (Periods == 1) P = "PERIOD_M1";
  if (Periods == 2) P = "PERIOD_M5";
  if (Periods == 3) P = "PERIOD_M15";
  if (Periods == 4) P = "PERIOD_M30";
  if (Periods == 5) P = "PERIOD_H1";
  if (Periods == 6) P = "PERIOD_H4";
  if (Periods == 7) P = "PERIOD_D1";
  if (Periods == 8) P = "PERIOD_W1";
  if (Periods == 9) P = "PERIOD_MN1";
//----
  if ( Konec > iBars( Symb, P) )
  {
   Konec = iBars( Symb, P);
  } 
  Alert ("___________________________________________________________");

//----
  /*   iTime("USDCHF",PERIOD_H1,i)
       iOpen("USDCHF",PERIOD_H1,i)
       iHigh("USDCHF",PERIOD_H1,i)
       iLow("USDCHF",PERIOD_H1,i)
       iClose("USDCHF",PERIOD_H1,i)
       iVolume("USDCHF",PERIOD_H1,i));    */
            
  for(i=Nachalo;i<=Konec;i++)
    {
     if (iOpen(Symb,P,i) == iClose(Symb,P,i)) nul = nul + 1; //количество нулевых баров
    
     if (iOpen(Symb,P,i) < iClose(Symb,P,i)) vverh = vverh + 1; //количество бычьих баров
     
     if (iOpen(Symb,P,i) > iClose(Symb,P,i)) vniz =  vniz  + 1; //количество медвежьих баров
     
     if (iOpen(Symb,P,i) < iClose(Symb,P,i))
         if (iOpen(Symb,P,i+1) < iClose(Symb,P,i+1)) 
             dvavverh = dvavverh + 1; //количество бычьих баров
     
     if (iOpen(Symb,P,i) > iClose(Symb,P,i)) 
         if (iOpen(Symb,P,i+1) > iClose(Symb,P,i+1))
             dvavniz =  dvavniz  + 1; //количество медвежьих баров
     
     if (iOpen(Symb,P,i) < iClose(Symb,P,i)) 
         if (iOpen(Symb,P,i+1) < iClose(Symb,P,i+1))
             if (iOpen(Symb,P,i+2) < iClose(Symb,P,i+2))
                 trivverh = trivverh + 1; //количество бычьих баров
     
     if (iOpen(Symb,P,i) > iClose(Symb,P,i)) 
         if (iOpen(Symb,P,i+1) > iClose(Symb,P,i+1))
             if (iOpen(Symb,P,i+2) > iClose(Symb,P,i+2))
                 trivniz =  trivniz  + 1; //количество медвежьих баров
              
     L = iOpen(Symb,P,i) - iClose(Symb,P,i);
     if (L < 0) L = L * (-1);
     
     if (L < Menee * Point) if (L >  Bolee * Point) vibor = vibor + 1; //количество выбранных баров
     
     L = L / Point;
     if (L > Maks) Maks = L;
     if (L < Mun) Mun = L;
     
     if (iOpen(Symb,P,i) < iClose(Symb,P,i))
         if (iOpen(Symb,P,i) - iLow(Symb,P,i)> Teny*Point)
             if (iHigh(Symb,P,i) - iClose(Symb,P,i)> Teny*Point)
                ten = ten + 1;    

     if (iOpen(Symb,P,i) > iClose(Symb,P,i))
         if (iClose(Symb,P,i) - iLow(Symb,P,i)> Teny*Point)
             if (iHigh(Symb,P,i) - iOpen(Symb,P,i)> Teny*Point)
                ten = ten + 1; 
                
                
     if (iHigh(Symb,P,i) - iOpen(Symb,P,i)> Otkr*Point)
         if (iOpen(Symb,P,i) - iLow(Symb,P,i)> Otkr*Point)
                otkrytie = otkrytie + 1;                
                

    }
     
  Alert ("Максимальный бар = " , Maks , " ----- ","Минимальный бар = " , Mun);
  
  Alert ("Бары удовлетворяющие условию по размеру отклонений >",Otkr ," пунктов = " , otkrytie, " --- ", otkrytie/(Konec/100), " % " );
  Alert ("Бары удовлетворяющие условию по размеру теней >",Teny ," пунктов = " , ten, " --- ", ten/(Konec/100), " % " );
  Alert ("Бары удовлетворяющие условию по размеру тела > ",Bolee ," пунктов и < ",Menee  ," пунктов = " , vibor, " --- ", vibor/(Konec/100), " % " );
  
  Alert ("                            ",trivverh/(Konec/100), " % " , " -------------------------- ", trivniz/(Konec/100), " % " );
  Alert ("3 быка подряд = " , trivverh, " ----- ","3 медведя подряд  = " , trivniz );
  
  Alert ("                               ",dvavverh/(Konec/100), " % "," ------------------------------ ",   dvavniz/(Konec/100), " % " );
  Alert ("2 быка подряд = " , dvavverh, " ----- ","2 медведя подряд  = " , dvavniz );
  
  Alert ("                             ",nul/(Konec/100), " % " ,
         " -------------------- ", vverh/(Konec/100), " % ",
         " ------------------------- ",vniz/(Konec/100) , " % " );
  Alert ("нулевые бары = " , nul, " ----- ","бычьи бары = " , vverh, " ----- ","медвежьи бары = " , vniz );
  
  Alert ("Общее количество баров на графике ",P," : ",iBars( Symb, P)); 
  Alert ("Количество анализируемых баров = " , Konec);

   return(0);
  }
//+------------------------------------------------------------------+
Existem problemas não resolvidos. As porcentagens são imprecisas +-0,5% porque ainda não consigo entendê-las. Além disso, a análise utiliza o período definido no gráfico, em vez daquele especificado nas configurações do roteiro.
 
Fiz o download de alguns EAs com bons resultados, mas os experimentei no Testador de Estratégia, e os resultados são muito piores.
 

Há um indicador caseiro, mas eu o mudei para baixo, eu quero obter o valor de

day_max e day_min, você pode me dizer como tirá-lo para fora? Entendo isso com o iCustom, mas não consigo entender como (devido ao fato de que este indicador é muito difícil de colocar em uma coruja:(... para mim)


property copyright "DOC"
#property link "none"


#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 Green
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double day_max;
double day_min;

 
Boa tarde, você poderia me dizer como verificar se uma ordem está aberta neste instrumento financeiro?)
 
Ali007:
(Diga-me como verificar se um pedido é aberto neste símbolo))

Aqui vai uma dica:

Fazemos loop em todas as ordens abertas e observamos o símbolo da ordem: se for interessante para nós, aumentamos o contador, ou retornamos "verdadeiro", dependendo do que precisamos em seguida. Se passamos por todas as ordens e não encontramos o símbolo necessário, retornamos "falso" ou zero, se tivermos que determinar o número de ordens.

 
Ali007:
Boa tarde, você poderia me dizer como verificar se uma ordem está aberta neste instrumento financeiro?)

bool got_order=false;

for(int i=OrdersTotal()-1;i>=0;i--)
{
   if(OrderSelect(i,SELECT_BY_POS))
      if(OrderSymbol()==Symbol())
         if(OrderType()==OP_BUY||OrderType()==OP_SELL) 
         {
            got_order=true;break;
         }
}
 
VladislavVG:

Aqui vai uma dica:

Fazemos loop em todas as ordens abertas e observamos o símbolo da ordem: se for interessante para nós, aumentamos o contador, ou retornamos "verdadeiro", dependendo do que precisamos em seguida. Se tivermos percorrido todos os pedidos e não tivermos encontrado o símbolo necessário, retornamos "falso", ou zero, se quisermos determinar o número de pedidos.

Muito obrigado!
Como podemos passar por todas as ordens abertas? Que função devemos usar? OrderSelect?
Razão: