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

 
Boa tarde, por favor, ajude, há uma idéia simples para implementar uma chamada de Alerta() quando três MAs se cruzam.
Descrição da interseção no programa. Parece funcionar, mas não como deveria. Estou arredondando as variáveis para um dígito para que
pegue a intersecção. E este Alerta() me toca, desde que os meios estejam na mesma posição. Como faço para que seja chamado uma vez, bem até 5 vezes.
//+------------------------------------------------------------------+
//| Глобальные переменные                                  |
//+------------------------------------------------------------------+
   extern int Period_MA_Blue = 4;         // Период 4-х расчётной синей МА (4 часа)
   extern int Period_MA_Green = 13;       // Период 13-ти расчётной зеленой МА (13 часов)
   extern int Period_MA_Orange = 50;      // Период 50-ти расчётной оранжевой МА (2 дня 2 часа)
   double MA_Blue_EURUSD, MA_Green_EURUSD, MA_Orange_EURUSD;
   string SMA_Blue_EURUSD,SMA_Green_EURUSD,SMA_Orange_EURUSD;

//+------------------------------------------------------------------+
//| Начало программы                                  |
//+------------------------------------------------------------------+

int init(){return(0);}
int EURUSD()
      {
  
      if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD > SMA_Orange_EURUSD)
         {
          // Если зеленая МА пересекает оранжевую МА и при этом синяя МА выше - сигнал к покупке.
          Alert("Cигнал на ПОКУПКУ паре EURUSD");
          return(11); // 11 - на первой паре сигнал на покупку.
         }
  
      if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD < SMA_Orange_EURUSD)
         {
          // Если зеленая МА пересекает оранжевую МА и при этом синяя МА ниже - сигнал к продаже.
          Alert("Cигнал на ПРОДАЖУ паре EURUSD");
          return(10); // 20 - на первой паре сигнал на продажу.
         }     
      }
int start()

   {

//+------------------------------------------------------------------+
//| Блок работы с EURUSD                               |
//+------------------------------------------------------------------+
   if(EURUSD() != 11 || EURUSD() != 10)
      {
         // Если функция EURUSD() не зафиксировала ни один из сигналов, обрабатываем данные дальше.
         MA_Blue_EURUSD = iMA("EURUSD",PERIOD_H1,Period_MA_Blue,0,MODE_EMA,PRICE_CLOSE,0);
         MA_Green_EURUSD = iMA("EURUSD",PERIOD_H1,Period_MA_Green,0,MODE_EMA,PRICE_CLOSE,0);
         MA_Orange_EURUSD = iMA("EURUSD",PERIOD_H1,Period_MA_Orange,0,MODE_EMA,PRICE_CLOSE,0);
  
         SMA_Blue_EURUSD = MA_Blue_EURUSD;
     // Преобразование int в string
         SMA_Blue_EURUSD = StringSetChar(SMA_Blue_EURUSD, 6, '');     // Округление до х.хххх
         SMA_Green_EURUSD = MA_Green_EURUSD;   // Преобразование int в string
         SMA_Green_EURUSD = StringSetChar(SMA_Green_EURUSD, 6, '');   // Округление до х.хххх
         SMA_Orange_EURUSD = MA_Orange_EURUSD; // Преобразование int в string
         SMA_Orange_EURUSD = StringSetChar(SMA_Orange_EURUSD, 6, ''); // Округление до х.хххх

      }

     }

int deinit(){return(0);}




Se estiver tudo errado na raiz, sugira métodos para rastrear o cruzamento. Obrigado.
 
Zherart:
Boa tarde, por favor, ajude, há uma idéia simples para implementar uma chamada de Alerta() quando três MAs se cruzam.
Descrição da interseção no programa. Parece funcionar, mas não como deveria. Estou arredondando as variáveis para um dígito para
para pegar a interseção. E este Alerta() toca para mim desde que os meios estejam na mesma posição. Como faço para que seja chamado uma vez, bem até 5 vezes. Se não estiver bem na raiz, sugira métodos para rastrear o cruzamento. Obrigado.

//+------------------------------------------------------------------+
//| Глобальные переменные                                  |
//+------------------------------------------------------------------+
   extern int Period_MA_Blue = 4;         // Период 4-х расчётной синей МА (4 часа)
   extern int Period_MA_Green = 13;       // Период 13-ти расчётной зеленой МА (13 часов)
   extern int Period_MA_Orange = 50;      // Период 50-ти расчётной оранжевой МА (2 дня 2 часа)
   double MA_Blue_EURUSD, MA_Green_EURUSD, MA_Orange_EURUSD;
   string SMA_Blue_EURUSD,SMA_Green_EURUSD,SMA_Orange_EURUSD;
   int БАРАБАНИТЬ = 1; // Сколько раз подавать сигнал
   int ПОКУПКА=0,ПРОДАЖА=0;
//+------------------------------------------------------------------+
//| Начало программы                                  |
//+------------------------------------------------------------------+

int init(){return(0);}
int EURUSD() 
      {
   
      if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD > SMA_Orange_EURUSD)
         { 
          // Если зеленая МА пересекает оранжевую МА и при этом синяя МА выше - сигнал к покупке.
          if(ПОКУПКА<БАРАБАНИТЬ) {Alert("Cигнал на ПОКУПКУ паре EURUSD");ПОКУПКА++;}
          return(11); // 11 - на первой паре сигнал на покупку.
         }
      else ПОКУПКА=0;
      if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD < SMA_Orange_EURUSD)
         { 
          // Если зеленая МА пересекает оранжевую МА и при этом синяя МА ниже - сигнал к продаже.
          if(ПРОДАЖА<БАРАБАНИТЬ) {Alert("Cигнал на ПРОДАЖУ паре EURUSD");ПРОДАЖА++;}
          return(10); // 20 - на первой паре сигнал на продажу.
         }
       else ПРОДАЖА=0;       
      }

Em algum lugar como este, num relance...
 
Sepulca, obrigado!!! Vamos tentar. Entendido!!!
 
Ou eu sou estúpido ou há algo errado com o terminal. Eu queria otimizar uma EA, mas não há nenhuma aba "parâmetros de entrada" nas propriedades da EA. Ajuda.
 
prom18:
Ou eu sou estúpido ou há algo errado com o terminal. Eu queria otimizar uma EA, mas não há nenhuma aba "parâmetros de entrada" nas propriedades da EA. Tenho tentado otimizar minha EA, mas não há nenhuma aba "parâmetros de entrada" em suas propriedades.



https://forum.mql4.com/ru/46980/page417#702426

https://www.mql5.com/ru/forum/138609/page417#702426

 

É possível usar uma matriz nos parâmetros de uma função? Por exemplo, eu quero criar uma função que lide com informações em uma matriz:

void Function(double Array[])
 {
  ...
 }
 
silhouette:

É possível usar uma matriz nos parâmetros de uma função? Por exemplo, eu quero criar uma função que lide com informações em uma matriz:


O que diz o tutorial aqui?

"

Os parâmetros a serem passados são indicados entre parênteses após o nome da função a ser chamada e são listados, separados por vírgulas. O número de parâmetros passados para uma função não deve exceder 64. A função também não pode utilizar os parâmetros passados. Neste caso, é indicada uma lista de parâmetros vazia, ou seja, os parênteses de abertura e fechamento são colocados imediatamente após o nome da função.

O número, tipo e ordem dos parâmetros passados na chamada de função devem coincidir com o número, tipo e ordem dos parâmetros formais, especificados na descrição da função (exceção é a chamada de uma função, que tem parâmetros padrão - ver Chamada de função e Descrição da função e operador de retorno). Se não houver tal coincidência, o MetaEditor emitirá uma mensagem de erro. Constantes, variáveis, expressões e arrays podem ser usados como parâmetros passados. "

 
silhouette:

É possível usar uma matriz nos parâmetros de uma função? Por exemplo, eu quero criar uma função que lide com informações em uma matriz:

Tente isto:

void Function(double& Array[])
 {
  ...
 }
https://docs.mql4.com/ru/basis/variables/formal
 
Sepulca:


O mesmo vale para Close - iClose, Open - iOpen, Time - iTime Volume - iVolume etc.

E o indicador pode traçar até 8 linhas de 0 a 7 https://docs.mql4.com/ru/customind/indicatorbuffers


muito obrigado :) o indicador ainda não está desenhado, tenho picos em linhas como price=iL[k]; onde iL é meu iLow...antigo Low

De qualquer forma, descobri muitas coisas úteis...mas não vou cavar mais...

há um método mais simples de visualizar o redesenho...sem um indicador personalizado.

 
Roman.:

O que o livro didático diz aqui?

"

Os parâmetros a serem passados são indicados entre parênteses após o nome da função a ser chamada e são listados, separados por vírgulas. O número de parâmetros passados para a função não deve exceder 64. A função também não pode utilizar os parâmetros passados. Neste caso, é indicada uma lista de parâmetros vazia, ou seja, os parênteses de abertura e fechamento são colocados imediatamente após o nome da função.

O número, tipo e ordem dos parâmetros passados na chamada de função devem coincidir com o número, tipo e ordem dos parâmetros formais, especificados na descrição da função (exceção é a chamada de uma função, que tem parâmetros padrão - ver Chamada de função e Descrição da função e operador de retorno). Se não houver tal coincidência, o MetaEditor emitirá uma mensagem de erro. Constantes, variáveis, expressões e arrays podem ser usados como parâmetros passados. "

Leia o livro antes de escrever, veja sublinhado, mas falhou em implementar na prática - escreve sobre tipo incompatível.