[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 309

 
Zhunko muito obrigado. Tudo volta com um bumerangue e assim faz o bem.
 
artmedia70:
Exatamente. A variável global Razão recebe um valor, mas não o recebe em deinit(), mas em init() para que ao executar init(), você possa ver o motivo da última desinicialização e executar uma determinada ação com base no valor. Mas não funciona como deveria.

Foi-lhe dito como fazer isso. É no deinit() que descobrimos o motivo da última desinicialização e a passamos por uma variável declarada globalmente. No init() você verifica o valor da variável e descobre o motivo da última desinicialização. Funciona!!!

PS Aparentemente nem todos percebem que o init()/deinit() não altera os valores das variáveis declaradas globalmente, a menos que seja explicitamente declarado em declarações dentro das funções.

Na verdade, é melhor não fechar os pedidos no init(). Lá, MarketInfo() muitas vezes não funciona como esperado.

int    DeinitReason = 0; // определяем переменную на глобальном уровне
...
int init ()
{
...
      if ( DeinitReason == 3) // если смена таймфрейма
...
}

int deinit()
  {
//----
   DeinitReason = UninitializeReason( );
   Print("DeinitReason ",DeinitReason);
//----
   return(0);
  }
 
Mislaid:
Foi-lhe dito como fazer isso. É no deinit() que descobrimos o motivo da última desinicialização e a passamos por uma variável declarada globalmente. No init() você verifica o valor da variável e descobre o motivo da última desinicialização. Funciona!!!
Percebi que Artyom tem um problema especificamente com a troca da TF M5. Há ali um erro. Deveríamos verificar se este é o caso. Talvez seja um bug no MT4.
 
Zhunko:
Isto sugeriu o que você faria com este recurso. Uma característica como esta é normalmente passada ao longo da história.

Não consigo nem imaginar executar a função em loop...
 
hoz:

Não consigo imaginar uma função que funcionasse em loop...

Seja bem-vindo:
for(i=OrdersTotal()-1;i>=0;i--){
    Print(GetOrderInfo(i,OrderMagic,.....));// вызов пользовательской функции 
}

for(i=0;i<OrdersTotal();i++){/// вызов функции "ордерс тотал" на каждой итерации

}
 
Zhunko:
Percebi que a Artem tem um problema com a mudança do M5 TF. Há ali um erro. Eu gostaria de verificar se é assim. Talvez seja um bug do MT4.

Não, não é um bug. Aqui está a EA. Mudou os prazos de M1 para H1

//+------------------------------------------------------------------+
//|                                                          111.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

int    DeinitReason = 0; // определяем переменную на глобальном уровне
int init ()
{
}

int deinit()
  {
//----
   DeinitReason = UninitializeReason( );
   Print("DeinitReason ",DeinitReason);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+ 
19:20:02 111 CADJPY,M15: inicializado
19:20:09 111 CADJPY,M15: DeinitRazão 3
19:20:09 111 CADJPY,M15: desinicializado
19:20:09 111 CADJPY,M15: razão uninit 3
19:20:09 Supertrend[1] CADJPY,M15: deinicializado
19:20:09 Supertrend[1] CADJPY,M15: Uninit reason 3
19:20:09 HLC CADJPY,M15: desinicializado
19:20:09 HLC CADJPY,M15: razão uninit 3
19:20:09 AMA otimizado1 CADJPY,M15: desinicializado
19:20:09 AMA otimizado1 CADJPY,M15: razão uninit 3
19:20:09 AMA otimizado1 CADJPY,M15: desinicializado
19:20:09 AMA otimizado1 CADJPY,M15: razão uninit 3
19:20:09 Supertrend[1] CADJPY,H1: inicializado
19:20:09 HLC CADJPY,H1: Inicializado
19:20:09 AMA otimizado1 CADJPY,H1: inicializado
19:20:09 AMA otimizado1 CADJPY,H1: inicializado
19:20:09 111 CADJPY,H1: Inicializado
 
Mislaid:

Não, não é um bug. Aqui está a EA. Mudou os prazos de M1 para H1

Isso é bom! Eu também tenho muitas razões para a desinicialização.

Errado:

Na verdade, é melhor não fechar os pedidos no init(). Lá MarketInfo() muitas vezes não funciona como esperado.

Sim. Você não pode. Está escrito na ajuda.

hoz:

Não consigo nem imaginar que esta função funcionaria em loop...
É rotina.
 
Zhunko:

Isso é bom! Porque eu também tenho muito a ver com as razões para a desinicialização.

Sim. Você não pode. Está escrito na ajuda. É uma coisa comum.

Aqui está a variante final a ser verificada. O anterior não teve muito sucesso, porque init()/deinit() às vezes não fazem amizade com a impressão()

//+------------------------------------------------------------------+
//|                                                          111.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

int    DeinitReason = 0; // определяем переменную на глобальном уровне
bool firststart = true;
int init ()
{
}

int deinit()
  {
//----
   DeinitReason = UninitializeReason( );
   firststart = true;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  if ( firststart )
  {
      Print( "DeinitReason ", DeinitReason, " ", Period( ) );
      firststart = false;
  }
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

Eu me perguntava como escrever uma função. A idéia é que quando N velas rebolam em uma determinada direção, deve calcular o número de velas. MAS. Para isso há várias condições, ou mais precisamente será uma lista delas ao longo do tempo.

Digamos que a tendência, por exemplo, é dirigida para baixo. ...um pullback sobe. Eu quero, se 5 castiçais subiram, e cada castiçal estava em alta, e, por exemplo, o tamanho de cada castiçal era maior quei_sizeOfCurrBar, e algumas outras condições, então produzir o número de barras continuamente em alta, e retornar algum resultado da função.

Qual é a melhor maneira de escrevê-lo? No momento, comecei a escrever, e entendo que deveria passar por um loop por barras, e de alguma forma limitar a visão na profundidade da história não por um número fixo de barras, mas por barras, com esses parâmetros, que nos interessam pelas condições.

Eis o que eu tenho, tenho:

int LastCandlesType()
{
   bool up,    // Свеча направлена вверх
        dn;    // Свеча направлена вниз
   int cnt;    // Счётчик идущих друг за другом бычьих свечей
   
   for (int i=Bars-1; i>=Bars-6; i--)
   {
      if ((Close[i] - Open[i]) <= i_sizeOfCurrBar * Point)    // Пропускаем все бары, размера меньше заданного внешним параметром.
          continue;
      
      if (Close[i] > Open[i])                               // 
          up = true;

      cnt++;
   }
   if (cnt == 5)
       return (BULL_CANDLES);
}

No momento, estamos indo da penúltima barra para a barra com índice 6, ou seja, 5 barras seguidas. Mas quero que meu consultor especializado busque apenas as barras que estão em alta e não todas elas seguidas. Como implementá-la adequadamente?

Eu filtrei de forma correta por tamanho.

E quando tudo já estiver escrito, o contador calculará o número de barras contínuas com parâmetros nht,etvsvb e se houver um número suficiente de tais barras, algum valor da função será devolvido.

 
Mislaid:

Foi-lhe dito como fazer isso. É no deinit() que descobrimos o motivo da última desinicialização e a passamos por uma variável declarada globalmente. No init() você verifica o valor da variável e descobre o motivo da última desinicialização. Funciona!!!

PS Aparentemente nem todos percebem que o init()/deinit() não altera os valores das variáveis declaradas globalmente, a menos que seja explicitamente declarado em declarações dentro das funções.

Na verdade, é melhor não fechar os pedidos no init(). Lá MarketInfo() muitas vezes não funciona como esperado.

E onde você me vê fechando posições no init()? Eu fiz uma pergunta sobre o pedido de exclusão, mas onde eu os excluo - eu não disse isso, muito menos perguntei. Por que você acha que sim?
Razão: