[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 498

 
yosuf:
Você precisa criar programas separados (tarefas) para desativar os terminais habilitados?
Docent, leia o documento no link da TarasBY cuidadosamente e não invente besteiras.
 

Aqui está o meu tutorial de teste de coruja crua:

//+---------------------------------------------------------------------------------------+
//|                               Strategy №1 for H1.mq4                                  |
//|                                        hoz                                            |
//|                                                                                       |
//+---------------------------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

//----- Входные параметры -----------
extern string     H1 = "___ Общие параметры индикаторов ___";
extern int        i_TF = 60;
extern string     H2 = "_____ Параметры быстрой машки _____";
extern int        i_maFastPeriod = 5,
                  i_maFastShift = 0,
                  i_maFastMethod = 1;
extern string     H3 = "____ Параметры медленной машки ____";
extern int        i_maSlowPeriod = 19,
                  i_maSlowShift = 0,
                  i_maSlowMethod = 1;
extern string     H4 = "_______ Параметры Моментума _______";
extern int        i_momPeriod = 18;
extern string     H5 = "_______ Параметры Стохастика ______";
extern int        i_stoch_D = 3,                   // Сигнальная линия
                  i_stoch_K = 13,                  // Главная линия
                  i_stoch_slowing = 3;             // Замедление
                  
int g_ticket,                                      // Тикет текущей позиции
    g_type;                                        // Тип текущей позиции

//Иднентификаторы типов сигналов
#define CROSSINGTOUP                 1             // Пересечение быстрой медленную снизу вверх
#define CROSSINGTODOWN              -1             // Пересечение быстрой медленную сверху вниз
#define CROSSINGWAIT                 0             // Отсуствие пересечения машек

#define SIGNAL_BUY                   1             // Сигнал покупки
#define SIGNAL_SELL                 -1             // Сигнал продажи
#define SIGNAL_NO                    0             // Отсуствие сигнала

//+---------------------------------------------------------------------------------------+
//| Функция инициализации эксперта                                                        |
//+---------------------------------------------------------------------------------------+
int init()
  {
   
   return(0);
  }
//+---------------------------------------------------------------------------------------+
//| Функция деинициализации эксперта                                                      |
//+---------------------------------------------------------------------------------------+
int deinit()
  {

   return(0);
  }

//+---------------------------------------------------------------------------------------+
//| Проверка пересечения скользящих средних                                               |
//+---------------------------------------------------------------------------------------+
int GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2)
{
      if ((i_maFast2<i_maSlow2) && (i_maFast1>i_maSlow1))             // Если быстрая скользящая пересекла медленную снизу вверх..
      return(CROSSINGTOUP);                                           //.. значит, - пересечение вверх
                                                 
      if ((i_maFast2>i_maSlow2) && (i_maFast1<i_maSlow1))             // Если быстрая скользящая средняя пересекла медленную сверху вниз..
      return(CROSSINGTODOWN);                                         //..значит, - пересечение вниз
 
   return(CROSSINGWAIT);                                              // Ожидаем пересечения
}

//+---------------------------------------------------------------------------------------+
//| Получение сигнала от Стохастика                                                       |
//+---------------------------------------------------------------------------------------+
int GetStochSignal(double& stochD1, double& stochD2, double& stochK1, double& stochK2)
{
   for(int i=1;i<=Bars;i++)
   {
      if((stochD2<stochK2) && (stochD1>stochK1))                     // Если сигнальная линия пересекла главную снизу вверх..
      return(CROSSINGTOUP);                                          //..значит, - пересечение вверх
      if((stochD2>stochK2) && (stochD1<stochK1))                     // Если сигнальная линия пересекла главную сверху вниз..
      return(CROSSINGTODOWN);                                        // ..значит, - пересечение вниз
   }
   return(CROSSINGWAIT);                                             // Ожидаем пересечения
}

//+---------------------------------------------------------------------------------------+
//| Получение сигнала от Моментума                                                        |
//+---------------------------------------------------------------------------------------+
void GetMomentumSignal()
{
   double momentum = iMomentum(Symbol(),i_TF,i_momPeriod,0,0);
}

//+---------------------------------------------------------------------------------------+
//| Получение общего сигнала для входа в рынок                                            |
//+---------------------------------------------------------------------------------------+
int GetSignal()
{
   for(int i=1;i<=Bars;i++)
   {
      double i_maFast1 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i);      // Вычисляем быстрые скользящие..
      double i_maFast2 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i+1);    //..средние
      double i_maSlow1 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i);      // Вычисляем медленные скользящие..
      double i_maSlow2 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i+1);    //..средние
      double stochD1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i);     // Вычисляем значения сигнальной линии..
      double stochD2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i+1);   //..стохастика
      double stochK1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i);     // Вычисляем значения главной линии..
      double stochK2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i+1);   //..стохастика
   }
      if( GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2)==CROSSINGTOUP || i_maFast1>i_maSlow1 )
      return(SIGNAL_BUY);
}

//+---------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                   |
//+---------------------------------------------------------------------------------------+
void FindOrders()
{
   
}
//+---------------------------------------------------------------------------------------+
//| Функция start эксперта                                                                |
//+---------------------------------------------------------------------------------------+
int start()
  {
//----
   
//----
   return(0);
  }

int GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2) função recebe o sinal de cruzamento.

na funçãoGetStochSignal(double& stochD1, double& stochD2, double& stochK1, double& stochK2) recebe sinal de estocástico.

A função GetMomentumSignal() vazia ganha o valor do impulso.

O int GetSignal() receberá o sinal geral com base nas 3 funções anteriores e não somente nelas. A questão é esta. Como a funçãoint GetSignal() é a principal, por assim dizer, e recebe o sinal principal, recebo todos os valores das abas(i_maFast1,i_maFast2, i_maSlow1 ei_maSlow2) e stochastics(stochD1,stochD2,stochK1,stochK2)

Fui correto ao otimizar o código?

Naturalmente, todos os parâmetros obtidos na funçãoGetSignal() são passados por referência às funções correspondentes.

Mas aqui este fragmento

     if( GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2)==CROSSINGTOUP || i_maFast1>i_maSlow1 )
      return(SIGNAL_BUY);

há um erro na compilação:

'&' - variable expected E:\Insall'd soft's\Forex\Admiral Markets\experts\Strategy №1 for H1.mq4 (109, 31)
'&' - variable expected	E:\Insall'd soft's\Forex\Admiral Markets\experts\Strategy №1 for H1.mq4 (109, 50)
'&' - variable expected	E:\Insall'd soft's\Forex\Admiral Markets\experts\Strategy №1 for H1.mq4 (109, 69)
'&' - variable expected	E:\Insall'd soft's\Forex\Admiral Markets\experts\Strategy №1 for H1.mq4 (109, 88)
4 ошибок, 0 предупреждений
Por quê?

 
Eu não gosto de bisbilhotar em código de esquerda, mas imediatamente me chamou a atenção o porquê de haver um & (!) após o dobro em funções. Isto é o que causa erros!
 
hoz:

Aqui está o meu tutorial de teste de coruja crua:

Um erro aparece quando da compilação:

Por quê?

Porque:

//+---------------------------------------------------------------------------------------+
//| Получение общего сигнала для входа в рынок                                            |
//+---------------------------------------------------------------------------------------+
int GetSignal()
{
   for(int i=1;i<=Bars;i++)
   {
      double i_maFast1 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i);      // Вычисляем быстрые скользящие..
      double i_maFast2 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i+1);    //..средние
      double i_maSlow1 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i);      // Вычисляем медленные скользящие..
      double i_maSlow2 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i+1);    //..средние
      double stochD1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i);     // Вычисляем значения сигнальной линии..
      double stochD2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i+1);   //..стохастика
      double stochK1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i);     // Вычисляем значения главной линии..
      double stochK2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i+1);   //..стохастика
   }
      if( GetCrossingMa(i_maFast1, i_maFast2, i_maSlow1, i_maSlow2)==CROSSINGTOUP || i_maFast1>i_maSlow1 )
      return(SIGNAL_BUY);
}
 
borilunad:
Não gosto de cavar em código personalizado, mas notei imediatamente porque há & (!) depois de dobrar em funções. Isto é o que causa erros!

Portanto, faz sentido. Significa transferir parâmetros através de links.

Para evitar explicar o código em detalhes, vou explicá-lo brevemente.

Existem 3 funções:(int GetCrossingMa, int GetStochSignal e int GetSignal())

A função int GetSignal() recebe valores de abas e outros indicadores que são passados por referênciaa funçõesnão centrais(int GetCrossingMa eint GetStochSignal) para obter sinais correspondentes nelas. Quero fazer isso para evitar obter os mesmos dados em funções diferentes. Não me parece sábio calcular a mesma máscara em 2 ou mais funções. É mais fácil calculá-lo apenas uma vez, e é isso. Por que desperdiçar recursos adicionais com isso?

 
hoz:

Portanto, faz sentido. Significa transferir parâmetros através de links.

Para evitar explicar o código em detalhes, vou explicá-lo brevemente.

Existem 3 funções:(int GetCrossingMa, int GetStochSignal e int GetSignal())

A função int GetSignal() recebe valores de abas e outros indicadores que são passados por referênciaa funçõesnão centrais(int GetCrossingMa eint GetStochSignal) para obter sinais correspondentes nelas. Quero fazer isso para evitar obter os mesmos dados em funções diferentes. Não me parece sábio calcular as mesmas máscaras em 2 ou mais funções. É mais fácil calculá-lo apenas uma vez, e é isso. Por que desperdiçar recursos adicionais com isso?

Você já programou em um idioma diferente de µl4?

 
hoz:

Aqui está o meu tutorial de teste de coruja crua:

int GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2) função recebe o sinal de cruzamento.

na funçãoGetStochSignal(double& stochD1, double& stochD2, double& stochK1, double& stochK2) recebe sinal de estocástico.

A função GetMomentumSignal() vazia ganha o valor do impulso.

O int GetSignal() receberá o sinal geral com base nas 3 funções anteriores e não somente nelas. A questão é esta. Como a funçãoint GetSignal() é a principal, por assim dizer, e recebe o sinal principal, recebo todos os valores das abas(i_maFast1,i_maFast2, i_maSlow1 ei_maSlow2) e stochastics(stochD1,stochD2,stochK1,stochK2)

Fui correto ao otimizar o código?

Naturalmente, todos os parâmetros obtidos na funçãoGetSignal() são passados por referência às funções correspondentes.

Mas aqui este fragmento

erro surgirá na compilação:

Por quê?

Esta pode ser uma variante de busca de sinais na barra que precisamos:

//+---------------------------------------------------------------------------------------+
//| Проверка пересечения скользящих средних                                               |
//+---------------------------------------------------------------------------------------+
int GetCrossingMa (int fi_Bar = 1)
{
    double i_maFast1 = iMA (Symbol(), i_TF, i_maFastPeriod, i_maFastShift, i_maFastMethod, 0, fi_Bar),      // Вычисляем быстрые скользящие..
           i_maFast2 = iMA (Symbol(), i_TF, i_maFastPeriod, i_maFastShift, i_maFastMethod, 0, fi_Bar + 1),    //..средние
           i_maSlow1 = iMA (Symbol(), i_TF, i_maSlowPeriod, i_maSlowShift, i_maSlowMethod, 0, fi_Bar),      // Вычисляем медленные скользящие..
           i_maSlow2 = iMA (Symbol(), i_TF, i_maSlowPeriod, i_maSlowShift, i_maSlowMethod, 0, fi_Bar + 1);    //..средние
//----
    if (i_maFast2 < i_maSlow2) if (i_maFast1 > i_maSlow1)             // Если быстрая скользящая пересекла медленную снизу вверх..
    return (CROSSINGTOUP);                                           //.. значит, - пересечение вверх
    if (i_maFast2 > i_maSlow2) if (i_maFast1 < i_maSlow1)             // Если быстрая скользящая средняя пересекла медленную сверху вниз..
    return (CROSSINGTODOWN);                                         //..значит, - пересечение вниз
//----
    return (CROSSINGWAIT);                                              // Ожидаем пересечения
}

//+---------------------------------------------------------------------------------------+
//| Получение сигнала от Стохастика                                                       |
//+---------------------------------------------------------------------------------------+
int GetStochSignal (int fi_Bar = 1)
{
    double stochD1 = iStochastic (Symbol(), i_TF, i_stoch_D, i_stoch_K, i_stoch_slowing, 0, 0, 1, fi_Bar),     // Вычисляем значения сигнальной линии..
           stochD2 = iStochastic (Symbol(), i_TF, i_stoch_D, i_stoch_K, i_stoch_slowing, 0, 0, 1, fi_Bar + 1),   //..стохастика
           stochK1 = iStochastic (Symbol(), i_TF, i_stoch_D, i_stoch_K, i_stoch_slowing, 0, 0, 0, fi_Bar),     // Вычисляем значения главной линии..
           stochK2 = iStochastic (Symbol(), i_TF, i_stoch_D, i_stoch_K, i_stoch_slowing, 0, 0, 0, fi_Bar + 1);   //..стохастика
//----
      if (stochD2 < stochK2) if (stochD1 > stochK1)                     // Если сигнальная линия пересекла главную снизу вверх..
      return (CROSSINGTOUP);                                          //..значит, - пересечение вверх
      if (stochD2 > stochK2) if (stochD1 < stochK1)                     // Если сигнальная линия пересекла главную сверху вниз..
      return (CROSSINGTODOWN);                                        // ..значит, - пересечение вниз
   }
//----
   return (CROSSINGWAIT);                                             // Ожидаем пересечения
}
//+---------------------------------------------------------------------------------------+
//| Получение сигнала от Моментума                                                        |
//+---------------------------------------------------------------------------------------+
double GetMomentumSignal (int fi_Bar = 0)
{return (iMomentum (Symbol(), i_TF, i_momPeriod, 0, fi_Bar));}
//+---------------------------------------------------------------------------------------+
//| Получение общего сигнала для входа в рынок                                            |
//+---------------------------------------------------------------------------------------+
int GetSignal (int fi_Bar = 1)
{
    int li_Signal;
//----
      double ld_SignalMomentum = GetMomentumSignal (fi_Bar);
      int    li_SignalStoch = GetStochSignal (fi_Bar),
             li_CrossingMA = GetCrossingMa (fi_Bar);
//----
    return (li_Signal);
}

E na última função GetSignal() você faz "adição" de todos os sinais (por você mesmo).

P.S. Há um momento "delicado" na obtenção do sinal do indicador. Por exemplo, você pode corrigir o fato de encontrar maSlow over / under maFast, ou você pode "pegar" o momento de sua interseção. A abordagem e o código são diferentes.

 
Roman.:

Você já programou em um idioma diferente de µl4?


Um pouco em Perl e um pouco em Pxp. Mas não abordei seriamente outros idiomas como não precisei fazer. Será que isso importa?
 
hoz:

Portanto, faz sentido. Significa transferir parâmetros através de links.

Para evitar explicar o código em detalhes, vou explicá-lo brevemente.

Existem 3 funções:(int GetCrossingMa, int GetStochSignal e int GetSignal())

A função int GetSignal() recebe valores de abas e outros indicadores que são passados por referênciaa funçõesnão centrais(int GetCrossingMa eint GetStochSignal) para obter sinais correspondentes nelas. Quero fazer isso para evitar obter os mesmos dados em funções diferentes. Não me parece sábio calcular a mesma máscara em 2 ou mais funções. É mais fácil calculá-lo apenas uma vez, e é isso. Por que desperdiçar recursos adicionais com ela?

As explicações são claras, mas as ações não são.
Estes são estes: "Afunção int GetSignal() obtém valores de escalas e outras ações deindicadores" em sua variante são "questionáveis", para dizer de forma branda, pois não há necessidade de tais ações.

Este código:

   for(int i=1;i<=Bars;i++)
   {
      double i_maFast1 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i);      // Вычисляем быстрые скользящие..
      double i_maFast2 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i+1);    //..средние
      double i_maSlow1 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i);      // Вычисляем медленные скользящие..
      double i_maSlow2 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i+1);    //..средние
      double stochD1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i);     // Вычисляем значения сигнальной линии..
      double stochD2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i+1);   //..стохастика
      double stochK1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i);     // Вычисляем значения главной линии..
      double stochK2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i+1);   //..стохастика
   }

P.... completo Você se dá conta do que está "acontecendo" aqui? - Toda a "fila de barras" é pesquisada em vão e, no final do laço, as variáveis são deixadas com valores... Adivinhe o que acontece a seguir.

 
Bom dia amigos! Você pode dizer a um profissional como começar a usar a plataforma de negociação NZ MT4? Eu não consigo entender a interface da plataforma, onde começar, quero dizer uma conta demo, como comprar uma ação com a venda subseqüente?
Razão: