[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 181

 
Activict:

Boa tarde. Tenho uma pergunta a fazer.

Eu redesenhei este indicador para minhas próprias necessidades com grande dificuldade a partir de peças de código de outros Consultores e Indutores Especialistas. Não é um grande código e funciona da maneira que eu quero que funcione.

A questão é que ele realiza alguns cálculos internamente e mostra setas para cima ou para baixo no gráfico.

Aconselhe como fazer um Expert Advisor para abrir uma ordem na direção certa quando a seta aparecer no gráfico

Mais precisamente, eu só preciso saber qual flecha está ativa agora, acho que posso fazer o resto

Aqui está um pedaço de código para torná-lo mais claro, é uma inicialização no indicador

   SetIndexBuffer(1, Vverh);

   SetIndexStyle(1,DRAW_ARROW);

   SetIndexArrow(1,233);

   

   SetIndexBuffer(2,Vniz);

   SetIndexStyle(2,DRAW_ARROW);

   SetIndexArrow(2,234); 

Agradecemos antecipadamente, a todos

Use a função iCustom embutida para receber os valores do indicador personalizado que você precisa no Expert Advisor.



double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)

Por exemplo, você precisa saber se há uma seta para cima ou para baixo na última barra totalmente formada:


double Up=iCustom(NULL, 0, name/* название индикатора */, /* настраиваемые параметры индикатора через запятую */, 1, 1); // стрелка вверх
double Dw=iCustom(NULL, 0, name/* название индикатора */, /* настраиваемые параметры индикатора через запятую */, 2, 1); // стрелка вниз
 

Obrigado pela resposta! Sim, as flechas às vezes desaparecem. Este método será lido como "0" caso a seta desapareça?

E a flecha é desenhada apenas na barra emergente, as barras anteriores não são desenhadas novamente, no momento da ocorrência é necessário abrir um negócio e, respectivamente, se a flecha desaparecer, fechar

 
Há alguma maneira de fazer com que a EA envie solicitações ao servidor com mais freqüência do que o normal usando o código do programa? Para que ao invés de um pedido haja dois, ou para isso basta repetir a casca do programa ... Se três pedidos em vez de um, então repita duas vezes...? ?
 
Activict:

Sim, as flechas às vezes desaparecem. Este método através da personalização será lido como '0' se a seta desaparecer?

Sim, vai.

Ativado:

E a flecha é desenhada apenas na barra formadora, as barras anteriores não são desenhadas novamente, no momento da ocorrência é necessário abrir a posição e, respectivamente, se a flecha desaparecer, então feche

Consequentemente, se a flecha estiver em uma das barras totalmente formada, ela não mais desaparecerá. A seta pode aparecer e desaparecer várias vezes na barra atual.
 
Ativado:

спасибо за ответ! Да стрелки иногда пропадают. Этот способ через кастом будет считывать "0" если стрелка пропадет?

O valor que é especificado como "vazio" no código do indicador é considerado com o iCustom. Como regra, pode ser 0 ou VAZIO_VALOR.

EMPTY_VALUE é padrão nos indicadores, mas se você colocar SetIndexEmptyValue no init(), ele será diferente.

 
yellownight:
Há alguma maneira de fazer com que a EA envie solicitações ao servidor com mais freqüência do que o normal usando o código do programa? Para que ao invés de um pedido haja dois, ou para isso basta repetir a casca do programa ... Se três pedidos em vez de um, então repita duas vezes...? ?
Isto não lhe servirá de nada. Bombardear o servidor com solicitações e sua conta pode ser totalmente desativada. Sei que isto acontece com pessoas que "exageram os pedidos" e "bombardeiam" o servidor com muitos deles.
 

Eu escrevi um indicador simples. Aqui está o código:

//+------------------------------------------------------------------+
//|                                            AngleByLineFromMA.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

extern string  h1 = "основные параметры машки";
extern int     maTF = 0;
extern int     maPeriod = 50;
extern int     maShiftByPrice = 0;
extern int     maMethod = 0;
extern int     maPrice = 0;
extern int     shiftBarsBack1 = 2;                       // Первое значение shift
extern int     shiftBarsBack2 = 7;                       // Второе значение shift
extern string  h2 = "===============================";

string         h3 = "Другие переменные";
double         pointOfMaFirst,                           // Первая тока (начало отрисовки отрезка)
               pointOfMaLast,                            // Вторая тока отрезка (конец отрисовки отрезка)
               varsAngle[1000];                              // Буфер для хранения значение возвращаемых машкой

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
//#property indicator_minimum -45
//#property indicator_maximum 45
//+------------------------------------------------------------------+
//|               Функция инициализации индикатора                   |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
   SetIndexBuffer(0,varsAngle);                          // Связываем массив значений угла с буфером
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2); 
   
// -------------- блок инициализации закончен ----------------------
   return(0);
  }
//+------------------------------------------------------------------+
//|              Функция деинициализации индикатора                  |
//+------------------------------------------------------------------+
int deinit()
  {
    ObjectsDeleteAll();                                  // Очистим график от всего
    
// -------------- блок инициализации закончен ----------------------
   return(0);
  }
//+------------------------------------------------------------------+
//|                  Функция итерации эксперта                       |
//+------------------------------------------------------------------+
int start()
  {
    int i, countedBars = IndicatorCounted();
    int limit = Bars - countedBars;
    if (limit > 400) limit = 400;
        
    for(i = limit;i > 1;i--)
    {
      pointOfMaFirst = iMA(Symbol(),maTF,maPeriod,maShiftByPrice,maMethod,maPrice,shiftBarsBack1+i);   // Начальная точка прямой
      pointOfMaLast = iMA(Symbol(),maTF,maPeriod,maShiftByPrice,maMethod,maPrice,shiftBarsBack2+i);     // Крайняя точка прямой
    
      varsAngle[i] = pointOfMaFirst - pointOfMaLast;
      Print("varsAngle[i] = ", varsAngle[i]);
    }

    return(0);
  }
Há apenas um amortecedor nele. Os valores dos indicadores são do tipo duplo.

No Expert Advisor, decidi obter o valor do indicador e aplicá-lo ao comércio como um filtro.

Aqui escrevi uma simples chamada de função deste tampão indicador na última barra formada:

//+-------------------------------------------------------------------------------------+
//| Получаем направление фильтрующей МА                                                 |
//+-------------------------------------------------------------------------------------+
double GetSlopeOfMa()
{
   double slope = iCustom(NULL, i_TF, "AngleByLineFromMA simplest", 0, 1);
   Print ("slope = ", slope);
   
   return(slope);
}
O valor da inclinação não é correto no testador:
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647

Por quê? O tipo é correto. A chamada também está correta. O indicador funciona de forma adequada. Aqui está o registro do testador, mas de um verdadeiro mercado atual:

2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001

Por que um número 2147483647 é devolvido o tempo todo em vez do número exigido?

 
hoz:

Eu escrevi um indicador simples. Aqui está o código:

Tem apenas um buffer. Os valores dos indicadores são do tipo duplo.

No Expert Advisor, decidi obter o valor do indicador e aplicá-lo ao comércio como um filtro.

Aqui escrevi uma simples chamada de função deste tampão indicador na última barra formada:

O valor da inclinação retornada no testador não é correto:

Por quê? O tipo é correto. A chamada também está correta. O indicador funciona de forma adequada. Aqui está o log no testador, e do mercado real atual:

Por que um número2147483647 é devolvido o tempo todo emvez do número exigido?

No testador no início do trabalho não há barras suficientes na história para o cálculo correto do indicador.

//+-------------------------------------------------------------------------------------+
//| Получаем направление фильтрующей МА                                                 |
//+-------------------------------------------------------------------------------------+
double GetSlopeOfMa()
{
   if(iBars(NULL, i_TF)<maPeriod) { Print("Недостаточно баров в истории для корректного расчёта значений индикатора!"); return(-1.0); }
   double slope = iCustom(NULL, i_TF, "AngleByLineFromMA simplest", 0, 1);
   Print ("slope = ", slope);
   
   return(slope);
}
 
//+-------------------------------------------------------------------------------------+
//| Получаем направление фильтрующей МА                                                 |
//+-------------------------------------------------------------------------------------+
double GetSlopeOfMa()
{
   if(iBars(NULL, i_TF) < maPeriod)
   {
      Print("Недостаточно баров в истории для корректного расчёта значений индикатора!");
      return(0);
   }
   double slope = iCustom(NULL, i_TF, "AngleByLineFromMA simplest", 0, 1);
   Print ("slope = ", slope);
   Print ("iBars(NULL, i_TF) = ", iBars(NULL, i_TF));
   
   return(slope);
}

Fiz o download de uma história da Dukascopy desde 2007. não há como não haver barras suficientes. O período de MA é de apenas 50.

Eu colei sua linha, mas corrigi o retorno(0) ... e adicionei a saída do número de barras no gráfico:

Aqui no diário de bordo:

2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647


 
hoz:

Fiz o download de uma história da Dukascopy desde 2007. não há como não haver barras suficientes. O período de MA é de apenas 50.

Aqui está sua linha, mas eu corrigi o retorno(0) ...

Aqui está no diário de bordo:


O problema parece estar no indicador

 if (limit > 400) limit = 400;