Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1433

 
lego9955 tratamento de erros está mais correto. Obrigado!

Por via das dúvidas, é mais fácil escrevê-los em uma linha, como mostrei, do que em uma matriz de linhas separadas.

 
Alexey Petrov #:

Olá,

Tente pesquisar no mercado soluções prontas - https://www.mql5.com/fr/search#!keyword=money%20management&module=mql5_module_market

Você também pode solicitar uma solução personalizada do Freelance - https://www.mql5.com/fr/job

Olá, obrigado pela resposta. Consegui criar um script que atende às minhas expectativas, mas, infelizmente, ainda há dois erros que não consigo entender ou corrigir. Você saberia com quem entrar em contato para obter uma pequena ajuda? São apenas duas linhas de código que se registram como erros após a compilação...
 
Feliz Ano Novo! Qual Windows é melhor para o MT5 10 ou 11? Sentado em um laptop AMD 5900X
 

Olá a todos e feliz ano novo! Vocês poderiam me dizer: como posso fazer para que meu script use um indicador do mercado?

Mais especificamente:
há um indicador "Automatic Trendline" no mercado. Quero criar um robô com base nele, que abriria ou fecharia uma posição no momento em que o preço cruzasse essas linhas no indicador (bem, e sob condições adicionais especificadas).

 
Rad89 #:

Olá a todos e feliz ano novo! Como posso fazer para que meu script use um indicador do mercado?

Mais especificamente:
há um indicador "Automatic Trendline" no mercado. Quero criar um robô com base nele, que abriria ou fecharia uma posição no momento em que o preço cruzasse essas linhas no indicador (bem, e sob condições adicionais especificadas).

Não há problema para mim. Para o mercado ou para o CodeBase, você não pode usar os ofícios de outra pessoa do mercado...

 
Alexey Viktorov #:

Para você, não há problema. Você não pode usar o artesanato de outra pessoa do marketplace ou do CodeBase...

Para você mesmo. Não sei como fazer isso. Não consigo encontrar o código em código aberto. Ou como inserir em meu código para que ele capture a posição das linhas.

 

Olá, @Rad89

Você precisa das funções iCustom() e CopyBuffer().

Aqui está um exemplo de como adicionar um indicador baixado do Market a um Expert Advisor

// Глобальная переменная для хендла индикатора
int tlHandle;

int OnInit() {
   // Создаем хендл индикатора
   tlHandle = iCustom(Symbol(), PERIOD_CURRENT, "Market\\Automatic Trendlines", false, 5, 15, clrRed, clrBlue, 2, "My Support", "My Resistance");
   
   // Можем добавить индикатор на график, если хотим. 
   // Для использования в расчетах это необязательно
   ChartIndicatorAdd(ChartID(), 0, tlHandle);

   // Вызовем один раз OnTick(), чтобы на выходных у нас что-то в логе отобразилось
   OnTick(); 
   
   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason) {}

void OnTick() {
   // Объявляем массивы для буферов индикатора
   double tlBuffer0[], tlBuffer1[]; // ,tlBuffer1, ...
   
   int res;
   
   // Копируем нужное количество значений из индикаторных буферов в массивы
   res = CopyBuffer(tlHandle, 0, 0, 100, tlBuffer0);
   res = CopyBuffer(tlHandle, 1, 0, 100, tlBuffer1);
   
   // У разных индикаторов различное количество индикаторных буферов, 
   // числа из которых используются для построения линий, значков, цветовых меток на графике
   // Сколько их у данного индикатора и как используются их числа исследуйте самостоятельно
   
   // res = CopyBuffer(tlHandle, 2, 0, 100, tlBuffer2);
   
   // Пользуемся полученными значениями
   ArrayPrint(tlBuffer0);
   ArrayPrint(tlBuffer1);
}
Документация по MQL5: Технические индикаторы / iCustom
Документация по MQL5: Технические индикаторы / iCustom
  • www.mql5.com
iCustom - Технические индикаторы - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Olá. Existe um Enum.
enum ENUM_NAME
  {
   ENUM_1,
   ENUM_jsdf
   ....
   ENUM_FEF;   
  };
Como alocar memória para a matriz E_NAME[] de modo que haja memória suficiente para todos os valores ENUM_NAME possíveis (sem repetições)?
ENUM_NAME     E_NAME[];

E inicializar E_NAME[] com todos os valores possíveis?

 

Olá, @pivomoe

Se você não for forçar a atribuição de valores numéricos aos itens da enumeração (a julgar pelo exemplo, você não fará isso), poderá fazer assim:

// Объявляем перечисление
enum ENUM_NAME {
   ENAME_1,
   ENAME_JSDF,
   ENAME_ERT,
   ENAME_QWERTY,
   ENAME_FEF
};

// Обявляем константу, хранящую количество элементов перечисления
#define  ENUM_NAME_SIZE 5

// Массив для хранения элементов перечисления
ENUM_NAME     E_NAME[ENUM_NAME_SIZE];

int OnInit() {
   // Заполняем массив значениями, преобразуя к типу ENUM_NAME
   for(int i = 0; i < ENUM_NAME_SIZE; i++) {
      E_NAME[i] = (ENUM_NAME) i;
   }

   // Пользуемся массивом
   ArrayPrint(E_NAME);
   
   for(int i = 0; i < ENUM_NAME_SIZE; i++) {
      Print(EnumToString(E_NAME[i]));
   }
   
   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason) {}

Nesse caso, você precisará alterar também a constante que armazena o número de elementos ao adicionar elementos à enumeração.

Além disso, é melhor usar o prefixo ENUM_ apenas para o nome da própria enumeração e usar outro prefixo para seus elementos. Essa convenção é usada em todas as enumerações MQL padrão.

 
Yuriy Bykov #:

Olá, @pivomoe

Se você não forçar a atribuição de valores numéricos aos itens da enumeração (a julgar pelo exemplo, você não fará isso), poderá fazer o seguinte:

Nesse caso, você precisará alterar a constante que armazena o número de itens ao adicionar itens à enumeração também.

Além disso, é melhor usar o prefixo ENUM_ somente para o nome da própria enumeração e usar outro prefixo para seus elementos. Essa convenção é usada em todas as enumerações MQL padrão.

Obrigado por sua ajuda. Estou usando o ENUM há tantos anos que nem me ocorreu ler a ajuda.

Razão: