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 349

 
Pyro:

Tudo é reinicializado durante a inicialização, exceto as Variáveis Globais
E se você simplesmente desligar o computador ou o servidor estiver desligado, no qual o Expert Advisor está rodando?
 
artmedia70:
E aqui devemos esclarecer que GV são variáveis terminais, não variáveis EA.

Eu comecei a ler e a estudar. Agora sei que as Variáveis Globais e as Variáveis Globais são coisas diferentes.

A propósito, sobre o erro 129, sobre o qual lhe perguntei tantas vezes. O problema é que eu tenho um DC de 5 dígitos,

Meu Conselheiro Especialista é um deslize 2, provavelmente por isso ele não tem conseguido acompanhar o preço. Agora eu o ajustei para 15 pips.

 
artmedia70:
E aqui deve ficar claro que os GVs são variáveis terminais, não variáveis EA.


Bem, quero dizer que a EA pode trabalhar com eles, apenas para economizar valores durante a inicialização (entre outras coisas).
 
Forexman77:
E se eu simplesmente desligar meu computador ou o servidor travar no qual a EA está rodando?


Aqui é onde fica interessante. As Variáveis Globais são armazenadas em cache e, em algumas circunstâncias, são escritas para serem arquivadas. Parece que após algum tempo ou durante a desinicialização. s vezes eu costumava perder gvariables.dat (valores de variáveis globais) durante a reinicialização. Isto deve ser levado em conta. Ou eles simplesmente não tiveram tempo de copiá-lo para o disco a partir do cache. Isso significa que não temos nenhuma garantia de que eles já estejam em disco e não em cache. Corrija-me se eu estiver errado.


Forexman77:

Comecei a ler e a estudar. Sei agora que variáveis globais e Variáveis Globais são coisas diferentes.

A propósito, a propósito, sobre o erro 129 sobre o qual fui tantas vezes questionado. O problema é que eu tenho um CD de cinco dígitos,

Meu Conselheiro Especialista é um deslize 2, provavelmente por isso ele não tem conseguido acompanhar o preço. Eu o fixaria em 15 pips.


Eu não acho que seja por isso. Tenho um 3 em meus cinco dígitos. Tudo se abre normalmente. Até onde me lembro, os corretores concordaram que um ponto ainda é um ponto básico, universalmente aceito (o 4º dígito após zero) e um ponto fracionário é um ponto fracionário. Para que quando você digita 6,7 e 8 dígitos, você não tenha que mudar o significado de "ponto" toda vez.
 
Pyro:

Aqui é onde fica interessante. As variáveis globais são armazenadas em um cache e em algumas circunstâncias são gravadas em um arquivo. É como se, após um certo período de tempo. Houve casos em que durante a operação real as gvariables.dat (o arquivo onde os valores das variáveis globais eram armazenados) simplesmente se perderam durante o reinício brusco do computador. Isto deve ser levado em conta. Ou eles simplesmente não tiveram tempo de copiá-lo para o disco a partir do cache. Isso significa que não temos garantia de que eles já estejam em disco e não em cache. Corrija-me se eu estiver errado.
Talvez você possa tentar escrevê-lo e depois desligar o computador. E quando o ligar, tente Alerta para ver se ele está lá. Embora eu não minta, até agora eu só uso variáveis estáticas e bandeiras e não posso dizer nada ao certo sobre Variáveis Globais.
 
Forexman77:
Talvez você possa tentar gravá-lo e depois desligar o computador. E quando o ligar, tente ligar para a Alert para ver se ele está lá. Embora eu não minta, até agora só uso variáveis estáticas e bandeiras e não posso dizer nada ao certo sobre Variáveis Globais.


Você pode simplesmente olhar no menu -> Ferramentas -> Variáveis Globais. Há uma lista lá. Ou GlobalVariableCheck. Minha experiência mostra que é melhor salvar tudo em um arquivo físico, no entanto.
 
Olá!
Por favor, encontre erros em meu raciocínio.

Este é o segundo dia em que tenho lutado com a criação do indicador, ou seja, a exibição da linha na janela adicional que é anexada à janela principal. Na minha opinião, é necessário fazer cálculos sobre as barras não calculadas e dar os valores dos resultados dos cálculos para o tampão. Desta vez, uso códigos mais complexos para o exemplo (gosto de trabalhar com códigos relativamente grandes). Aqui está a "limpeza da criatividade" :

//+--------------------------------------------+
#property indicator_separate_window
#property indicator_minimum -10
#property indicator_maximum 10
#property indicator_buffers 1
#property  indicator_color1 Blue
extern double N = 1;
//+--------------------------------------------+
//Deklaration                                  |
//+--------------------------------------------+
double A; double C;       
double M; double D;
double L; double I;
double B; double F;
double K; double Buf_0[];
double G; 
//+--------------------------------------------+
int init(){
SetIndexBuffer(0,Buf_0);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
return; }
//+--------------------------------------------+
int start() {
//Level 1
A = iRSI(Symbol(),0,10,0,0);
M = iRSI(Symbol(),0,20,0,0);
L = iRSI(Symbol(),0,15,0,0);
B = iStochastic(Symbol(),0,10,6,6,0,0,0,0);
K = iStochastic(Symbol(),0,10,6,6,0,0,1,0);
C = iADX(Symbol(),0,10,0,0,0);
D = iADX(Symbol(),0,10,0,1,0);
I = iADX(Symbol(),0,10,0,2,0);
F = iRVI(Symbol(),0,10,0,0);
  //Level 2
  Buf_0[0] = N *(((B + F) / K) - ((D + I) / C) + ((A + M) / L));
  return; } 
//+-------------------------------------------+ 

.

Você pode ver claramente que "nesta compensação" o valor do buffer é "0", ou seja, este indicador traçará a linha somente a partir do momento em que a plataforma de comércio começar. E eu preciso de dados históricos, além dos dados reais.

Usei as informações descritas neste código (extraídas do tutorial MQ4):

//--------------------------------------------------------------------
// separatewindow.mq4 
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
#property indicator_separate_window // Отображение в отдельном окне
#property indicator_buffers 1       // Количество буферов
#property  indicator_color1 Blue     // Цвет первой линии
#property  indicator_color2 Red      // Цвет второй линии
 
extern int History  =50;            // Колич.баров в расчётной истории
extern int Aver_Bars=5;             // Количество баров для расчёта
 
double Buf_0[];                     // Объявление индикаторного массива
//--------------------------------------------------------------------
int init()                          // Специальная функция init()
  {
   SetIndexBuffer(0,Buf_0);         // Назначение массива буферу
   SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
   return;                          // Выход из спец. ф-ии init()
  }
//--------------------------------------------------------------------
int start()                         // Специальная функция start()
  {
   int i,                           // Индекс бара
   n,                               // Формальный параметр
   Counted_bars;                    // Количество просчитанных баров 
   double
   Sum_H,                           // Сумма значений High за период
   Sum_L;                           // Сумма значений Low  за период
//--------------------------------------------------------------------
   Counted_bars=IndicatorCounted(); // Количество просчитанных баров 
   i=Bars-Counted_bars-1;           // Индекс первого непосчитанного
   if (i>History-1)                 // Если много баров то ..
      i=History-1;                  // ..рассчитывать заданное колич.
   while(i>=0)                      // Цикл по непосчитанным барам
     {
      Sum_H=0;                      // Обнуление в начале цикла
      Sum_L=0;                      // Обнуление в начале цикла
      for(n=i;n<=i+Aver_Bars-1;n++) // Цикл суммирования значений 
        {
         Sum_H=Sum_H + High[n];     // Накопление суммы макс.значений
         Sum_L=Sum_L + Low[n];      // Накопление суммы мин. значений
        }
      Buf_0[i]=(Sum_H-Sum_L)/Aver_Bars;// Знач. 0 буфера на i-ом баре
      i--;                          // Расчёт индекса следующего бара
     }
//--------------------------------------------------------------------
   return;                          // Выход из спец. ф-ии start()
  }
//--------------------------------------------------------------------
Vou escolher o que preciso e vou conseguir...
extern int History  =50;            // Колич.баров в расчётной истории
extern int Aver_Bars=5;             // Количество баров для расчёта
double Buf_0[];                     // Объявление индикаторного массива
int start()                         // Специальная функция start()
  {
   int i,                           // Индекс бара
   n,                               // Формальный параметр
   Counted_bars;                    // Количество просчитанных баров 
   Counted_bars=IndicatorCounted(); // Количество просчитанных баров 
   i=Bars-Counted_bars-1;           // Индекс первого непосчитанного
   if (i>History-1)                 // Если много баров то ..
      i=History-1;                  // ..рассчитывать заданное колич.
      Buf_0[i]=(Sum_H-Sum_L)/Aver_Bars;// Знач. 0 буфера на i-ом баре
      i--;  

Então, trazendo-o para uma "vista de parada", removendo os comentários e dividindo logicamente, eu recebo:

//|+--------------------------------------+
//|Inputs                                 |
//|+--------------------------------------+
extern int History  =50;
//|+--------------------------------------+
//|Declaration                            |
//|+--------------------------------------+
double Buf_0[];
int i;
int n;
int Counted_bars;
//|+--------------------------------------+
//| Start?                                |
//| Yes, babe!                            |
//|+--------------------------------------+
int start(){
//+-----------+
//Level 1 
//+-----------+
Counted_bars=IndicatorCounted();
i=Bars-Counted_bars-1;
  //+-----------+
  //Level 2
  //+-----------+
  if (i>History-1) i=History-1;
    //+------------+
    //Level 3 
    //+------------+
    Buf_0[i]= 
    i--;  
//+---------------------------------------+

Aqui eu fico com objetos que precisam ser sintetizados com o código "principal". Depois de realizar a fusão, recebo o seguinte código:

//+--------------------------------------------+
#property indicator_separate_window
#property indicator_minimum -10
#property indicator_maximum 10
#property indicator_buffers 1
#property  indicator_color1 Blue
//|+--------------------------------------------+
//|Inputs                                       |
//|+--------------------------------------------+
extern double N = 1;
extern int History  =50;
//|+--------------------------------------------+
//|Deklaration                                  |
//|+--------------------------------------------+
double A; double C;       int i;
double M; double D;
double L; double I;       int Counted_bars;
double B; double F;
double K; double Buf_0[];
double G; 
//|+--------------------------------------------+
int init(){
SetIndexBuffer(0,Buf_0);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
return; }
//|+--------------------------------------------+
int start() {
       //|+-----------+
       //|Level 1     |
       //|+-----------+
       A = iRSI(Symbol(),0,10,0,0);
       M = iRSI(Symbol(),0,20,0,0);
       L = iRSI(Symbol(),0,15,0,0);
B = iStochastic(Symbol(),0,10,6,6,0,0,0,0);
K = iStochastic(Symbol(),0,10,6,6,0,0,1,0);
       C = iADX(Symbol(),0,10,0,0,0);
       D = iADX(Symbol(),0,10,0,1,0);
       I = iADX(Symbol(),0,10,0,2,0);
       F = iRVI(Symbol(),0,10,0,0);
   Counted_bars=IndicatorCounted();
              i=Bars-Counted_bars-1;
         //+-----------+
         //Level 2     |
         //+-----------+
         if (i>History-1) i=History-1;
         Buf_0[i] = N *(((B + F) / K) - ((D + I) / C) + ((A + M) / L));
         return; } 
//+-------------------------------------------+
Durante a programação, eu alterei decorativamente o código "principal" e removi alguns valores do código "apêndice". Tendo executado o código, notei a linha horizontal, que indicava um erro em meu raciocínio, pois os indicadores técnicos utilizados no indicador personalizado não podem dar, durante um longo período de tempo, os valores que constroem o gráfico da função " y = x ".

Sinopse.
Meu nome é John (Eugene, mas de maneira americana).

Tenho 15 anos, estou negociando há 5 dias e sinto um enorme progresso no aprendizado das áreas de negociação de moedas, ou seja, análise de indicadores e análise gráfica (em resumo, t.a. :) ).
Sinto que o "comércio manual" está se tornando cada vez menos promissor, por isso decidi ir direto para o "comércio automatizado".

"PEGAR EM" TODOS OS JULGAMENTOS INADEQUADOS! Eu quero saber mais e seus comentários me ajudarão.

 
Link_x:
Olá!
Por favor, encontre erros em meu raciocínio.

Aqui termina o segundo dia enquanto luto com a criação do indicador, ou seja, a exibição da linha em uma janela adicional que é anexada à janela principal. Na minha opinião, é necessário fazer cálculos sobre as barras não calculadas e dar os resultados dos cálculos ao tampão. Desta vez, uso códigos mais complexos para o exemplo (gosto de trabalhar com códigos relativamente grandes). Aqui está a "limpeza da criatividade" :

.

Você pode ver claramente que "neste glade" o valor do buffer é "0", ou seja, este indicador traçará uma linha somente a partir do momento em que a plataforma de negociação for lançada. E eu preciso de dados históricos, além dos dados reais.

Usei as informações descritas neste código (extraídas do tutorial do MQ4):

Isolarei o que preciso e terei...

Então, trazendo-o para uma "vista de parada", removendo os comentários e dividindo logicamente, eu recebo:

Aqui eu fico com objetos que precisam ser sintetizados com o código "principal". Tendo realizado a fusão, eu recebo este código:

Durante a programação, eu alterei decorativamente o código "principal" e removi alguns valores do código "apêndice". Tendo iniciado o código, notei a linha horizontal, que indicou um erro em meu raciocínio, pois os indicadores técnicos utilizados no indicador personalizado não podem dar, durante muito tempo, os valores que constroem o gráfico da função " y = x ".

Sinopse.
Meu nome é John (Eugene, mas de maneira americana).

Tenho 15 anos de idade, estou lidando com negociações durante 5 dias e sinto que estou fazendo um grande progresso no estudo das áreas de negociação de moedas, ou seja, análise de indicadores e análise de gráficos (em resumo, t.a. :) ).
Sinto que o "comércio manual" se torna cada vez menos promissor, por isso decidi ir direto para o "comércio automatizado".

"PEGAR EM" TODO JULGAMENTO INADEQUADO! Eu quero saber mais e seus comentários me ajudarão.

O início é um bom começo.

Preste atenção na variável História, tente substituir um valor diferente.

//                Джон(Евгений).mq4 

//+--------------------------------------------+
#property indicator_separate_window
//#property indicator_minimum -10
//#property indicator_maximum 10
#property indicator_buffers 1
#property  indicator_color1 Blue
//|+--------------------------------------------+
//|Inputs                                       |
//|+--------------------------------------------+
extern double N = 1;
extern int History  =50;
//|+--------------------------------------------+
//|Deklaration                                  |
//|+--------------------------------------------+
double A; double C;       int i;
double M; double D;
double L; double I;       int Counted_bars;
double B; double F;
double K; double Buf_0[];
double G; 
//|+--------------------------------------------+
int init(){
SetIndexBuffer(0,Buf_0);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
return; }
//|+--------------------------------------------+
int start()
{
       //|+-----------+
       //|Level 1     |
       //|+-----------+
 for( i=0; i<History; i++)
    {    
       A = iRSI(Symbol(),0,10,0,i);
       M = iRSI(Symbol(),0,20,0,i);
       L = iRSI(Symbol(),0,15,0,0);
       B = iStochastic(Symbol(),0,10,6,6,0,0,0,i);
       K = iStochastic(Symbol(),0,10,6,6,0,0,1,i);
       C = iADX(Symbol(),0,10,0,0,i);
       D = iADX(Symbol(),0,10,0,1,i);
       I = iADX(Symbol(),0,10,0,2,i);
       F = iRVI(Symbol(),0,10,0,i);
    Buf_0[i] = N *(((B + F) / K) - ((D + I) / C) + ((A + M) / L));
   }
 return;
} 
//+-------------------------------------------+
 
Link_x:
Olá!
Por favor, encontre erros em meu raciocínio.

O segundo dia de desenvolvimento do indicador está chegando ao fim, estou lutando para exibir a linha na janela adicional anexada à janela principal. Na minha opinião, é necessário fazer cálculos sobre as barras não calculadas e dar valores aos resultados dos cálculos para o tampão. Desta vez, uso códigos mais complexos para o exemplo (gosto de trabalhar com códigos relativamente grandes). Aqui está a "limpeza da criatividade" :

.

Você pode ver claramente que "nesta clareira" o valor do buffer é "0", ou seja, este indicador traçará uma linha somente a partir do momento em que a plataforma de negociação for iniciada. E eu preciso de dados históricos, além dos dados reais.

Usei as informações descritas neste código (extraídas do tutorial do MQ4):

Isolarei o que preciso e terei...

Então, trazendo-o para uma "vista de parada", removendo os comentários e dividindo logicamente, eu recebo:

Aqui eu fico com objetos que precisam ser sintetizados com o código "principal". Tendo realizado a fusão, eu recebo este código:

Durante a programação, eu alterei decorativamente o código "principal" e removi alguns valores do código "apêndice". Tendo iniciado o código, notei a linha horizontal, que indicou um erro em meu raciocínio, pois os indicadores técnicos utilizados no indicador personalizado não podem dar, durante muito tempo, os valores que constroem o gráfico da função " y = x ".

Sinopse.
Meu nome é John (Eugene, mas de maneira americana).

Tenho 15 anos de idade, estou lidando com negociações durante 5 dias e sinto que estou fazendo um grande progresso no estudo das áreas de negociação de moedas, ou seja, análise de indicadores e análise de gráficos (em resumo, t.a. :) ).
Sinto que o "comércio manual" se torna cada vez menos promissor, por isso decidi ir direto para o "comércio automatizado".

"PEGAR EM" TODO JULGAMENTO INADEQUADO! Eu quero saber mais e seus comentários me ajudarão.


Comece a cavar em direção às alças (para, enquanto faz) para saber por que você precisa disso)))


Se você precisa de valores em dados históricos - você não pode fazer isso sem enumerar esses mesmos dados em um loop ;)

Acima você deu um exemplo com História, que estabelece o número de barras da história, que serão processadas pelo indicador, e é assim que você deve proceder.

 


Na foto, marquei com uma seta onde a saída deveria estar. Eu não entendo qual é o problema. Nós entramos, lembre-se do tempo,

Então saia quando o tempo for maior que a entrada com um período de compensação e o preço estiver abaixo do mínimo de 3 dias de MA.

O código é o seguinte:

signal =   MA_6_t - iClose(Symbol(),Period(),0);
MA_2_t=iMA(NULL,0,3,0,MODE_EMA,PRICE_LOW,0); 
static datetime t;

if  (signal > 0.006) 
          {                                          
          Opn_S=true; 
          t=Time[0];                      
          }
if  (Bid <= MA_2_t)
      {
       if (Time[1]>t)
          {                                      
          Cls_S=true;         
          }
      }
O que você acha?