Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1212

 
Alexey Viktorov:

А здесь откуда снимок?

Выслали с 4К 

 
Vitaly Muzichenko:

Выслали с 4К 

Ну, а ещё раз проверить можно наверное обратиться? Или нет?

 
Alexey Viktorov:

Ну, а ещё раз проверить можно наверное обратиться? Или нет?

Нежелательно)

 
Как в коде получить значение версии MQL5 программы, определяемой property# version ?
 
leonerd:
Как в коде получить значение версии MQL5 программы, определяемой property# version ?

Получается, что никак, так как в Предопределенные макроподстановки

Константа

Описание

__DATE__

Дата компиляции файла без времени (часы, минуты и секунды равны 0)

__DATETIME__

Дата и время компиляции файла

__LINE__

Номер строки в исходном коде, на которой расположен данный макрос

__FILE__

Имя текущего компилируемого файла

__PATH__

Абсолютный путь к текущему компилируемому файлу

__FUNCTION__

Имя функции, в теле которой расположен макрос

__FUNCSIG__

Сигнатура функции, в теле которой расположен макрос. Вывод в лог полного описания функции с типами параметров может пригодиться при идентификации перегруженных функций

__MQLBUILD__, __MQL5BUILD__

Номер билда компилятора


такой переменной нет

Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
  • www.mql5.com
//| Expert initialization function                                   | //| Expert deinitialization function                                 | //| Expert tick function                                             | //| test1                                                            |...
 
leonerd:
Как в коде получить значение версии MQL5 программы, определяемой property# version ?

Я использую вот так, другого варианта не нашёл. Прописать версию нужно 2 раза, но это не настолько сложно 

#property version     "23.25" // 16.04.2020
#define   version     "23.25"
 

Добрый день, уважаемые эксперты.

Подскажите, пожалуйста, где в коде ошибка, которая не позволяет открыться позиции BUY на одном баре с SELL, который закрыл предыдущую позицию?

Правила простые (чтобы научиться):
1 Вход- пересечение медленным индикатором 0 + быстрый также в зоне (покупка/продажа)

2 Выход - пересечение быстрым индикатором 0

//+------------------------------------------------------------------+
//|                                                      TestDPO.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#include <Trade\Trade.mqh>
CTrade trade;

input int dpo_fast_period = 9;  // DPO Fast Period
input int dpo_slow_period = 40; // DPO Fast Period
input int magic = 1000;         // Magic советника
input ulong slippage = 10;         // Проскальзывание цены
input double volume = 0.1;      // размер позиции

int DPO_fast;                 // Хэндл для быстрого DPO
int DPO_slow;                 // Хэндл для медленного DPO


double fDPOVal[];                 //Динамический массив для хранения значений fast DPO
double sDPOVal[];                 //Динамический массив для хранения значений slow DPO

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {



   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---------------Задаем цены покупки и продажи------------------------
   double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   double Bid=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);

   int signal=0;  // сигнал на покупку, продажу

//--------------Проверка на новый бар
   if(!isNewBar())
      return;
//--------------------------------------------------------------------

   DPO_fast=iCustom(NULL,0,"Examples\\DPO",dpo_fast_period);   // получаем хэндлы для быстрого
   DPO_slow=iCustom(NULL,0,"Examples\\DPO",dpo_slow_period); // получаем хэндлы для медленного


   ArraySetAsSeries(fDPOVal,true);              //задаем направление индексов массива
   ArraySetAsSeries(sDPOVal,true);
   if(CopyBuffer(DPO_fast,0,0,10,fDPOVal)<0)    // наполняем массив значений DPO fast
     {
      Alert("Ошибка копирования буфера индикатора fast DPO. Ошибка ", GetLastError());
     }
   if(CopyBuffer(DPO_slow,0,0,10,sDPOVal)<0)    // наполняем массив значений DPO slow
     {
      Alert("Ошибка копирования буфера индикатора slow DPO. Ошибка ", GetLastError());
     }

   double DPO_fast_c_value=NormalizeDouble(fDPOVal[1],6);  // запоминаем значение индикатора DPO fast на предыдущем баре
   double DPO_slow_c_value=NormalizeDouble(sDPOVal[1],6);  // запоминаем значение индикатора DPO slow на предыдущем баре
   double DPO_fast_p_value=NormalizeDouble(fDPOVal[2],6);  // запоминаем значение индикатора DPO fast на пред-предыдущем баре
   double DPO_slow_p_value=NormalizeDouble(sDPOVal[2],6);  // запоминаем значение индикатора DPO slow на пред-предыдущем баре

   if(DPO_slow_c_value>0 && DPO_slow_p_value<0 && DPO_fast_c_value>0)  // если медленный индикатор пересекает 0 снизу вверх и быстрый находится выше 0
      signal=1;                                                           // сигнал на открытие покупки
   if(DPO_slow_c_value<0 && DPO_slow_p_value>0 && DPO_fast_c_value<0)  // если медленный индикатор пересекает 0 сверху вниз и быстрый находится ниже 0
      signal=-1;                                                          // сигнал на открытие продажи
   if(DPO_fast_c_value>0 && DPO_fast_p_value<0)                       // если быстрый индикатор пересекает 0 снизу вверх
      signal=-2;                                                           // сигнал на закрытие продажи
   if(DPO_fast_c_value<0 && DPO_fast_p_value>0)                       // если быстрый индикатор пересекает 0 сверху вниз
      signal=2;                                                          // сигнал на закрытие покупки

switch (signal)
         {
         case -1:
         trade.Sell(volume,NULL,Bid,0,0,NULL);
         break;
         case 1:
         trade.Buy(volume,NULL,Ask,0,0,NULL);
         break;
         case -2:
         trade.PositionClose(_Symbol,slippage);
         break;
         case 2:
         trade.PositionClose(_Symbol,slippage);
         break;
	}
  }
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Как я собираю себе советника методом тыка Из этих...
 
Andrey.Sabitov:

Добрый день, уважаемые эксперты.

Подскажите, пожалуйста, где в коде ошибка, которая не позволяет открыться позиции BUY на одном баре с SELL, который закрыл предыдущую позицию?

Правила простые (чтобы научиться):
1 Вход- пересечение медленным индикатором 0 + быстрый также в зоне (покупка/продажа)

2 Выход - пересечение быстрым индикатором 0

Все правильно работает: условия открытия пересечение медленного индикатора 0 линии, в указанном месте только быстрый индикатор пересек 0 линию.

Для открытия позиции в указанном месте нужно добавить условие, медленный в той же зоне, а быстрый пересекает 0 линию

 
Andrey.Sabitov:

Добрый день, уважаемые эксперты.

Подскажите, пожалуйста, где в коде ошибка, которая не позволяет открыться позиции BUY на одном баре с SELL, который закрыл предыдущую позицию?

Правила простые (чтобы научиться):
1 Вход- пересечение медленным индикатором 0 + быстрый также в зоне (покупка/продажа)

2 Выход - пересечение быстрым индикатором 0

Вы делаете грубейшую ошибку: Вы НА КАЖДОМ ТИКЕ СОЗДАЁТЕ ПО ДВА ИНЛИКАТОРА!

//--------------------------------------------------------------------

   DPO_fast=iCustom(NULL,0,"Examples\\DPO",dpo_fast_period);   // получаем хэндлы для быстрого
   DPO_slow=iCustom(NULL,0,"Examples\\DPO",dpo_slow_period); // получаем хэндлы для медленного

Хендл индикатора НУЖНО СОЗАВАТЬ ОДИН РАЗ в OnInit.


Пожалуйста почитайте справку iCustom.

Основы тестирования в MetaTrader 5
Основы тестирования в MetaTrader 5
  • www.mql5.com
Идея автоматической торговли привлекательна тем, что торговый робот может без устали работать 24 часа в сутки и семь дней в неделю. Робот не знает усталости, сомнений и страха,  ему не ведомы психологические проблемы. Достаточно четко формализовать торговые правила и реализовать их в виде алгоритмов, и робот готов неустанно трудиться. Но прежде...
Причина обращения: