Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1269
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Алексей, спасибо! Теперь понятно, что это невозможно.
Правда у меня не совсем mql4. Я пытаюсь заменить данные через класс CiOpen. Смутило меня наличие метода Update, который должен изменить элемент в указанной позиции массива.
Копировать в свои переменные / массивы и с ними уже работать.
Так и сделал.
Огромная просьба помочь! Я совсем новичок в программировании.
При изучении столкнулся с трудностями реализации кода. Существует статья https://www.mql5.com/ru/articles/3336 Никак не могу понять как происходит сравнение
if(!CompareTiks(n_tiks[i], m_ticks[k]))
Подозреваю что используются "Шаблонные коллекции данных" там и есть такой глобальный метод "Compare". Только вот в листинге статьи нигде не приводится как дать понять компилятору что нужно использовать "Compare" из "Шаблонные коллекции данных", и примеров использования глобальных методов из "Шаблонные коллекции данных" не нашел.
Такая запись, которая приведена в описании глобального метода, думаю ничего не поменяет в результате
template<typename T>
int Compare(
T x, // первое значение
T y // второе значение
);
В результате имею следующий код (вернее код имеет меня)
#ifndef MyInclude
#define MyInclude
//template<typename T>
//interface ICollection
//#include <Generic\Interfaces\ICollection.mqh>
template<typename T>
int Compare(
T x, // первое значение
T y // второе значение
);
class CMarketBook
{
private:
string m_symbol;
MqlTick m_ticks[];
MqlTick LastTicks[];
protected:
public:
void CMarketBook::CompareTicks(void);
};
//+------------------------------------------------------------------+
//|Compare two ticks colllection and find new ticks |
//+------------------------------------------------------------------+
void CMarketBook::CompareTicks(void)
{
MqlTick n_ticks[];
ulong T_begin = (TimeCurrent()-(1*20))*1000;//20sec ago
m_symbol = Symbol();
int Total = CopyTicks(m_symbol, n_ticks, COPY_TICKS_ALL, T_begin, 1000);
if (Total < 1) {printf("Не удалось получить тики"); return;}
if (ArraySize(m_ticks) == 0) {ArrayCopy(m_ticks, n_ticks, 0, 0, WHOLE_ARRAY); return;}
int k = ArraySize(m_ticks)-1;
int n_t = 0;
int Limit_comp = 20;
int Comp_success = 0;
// Перебираем новые полученные тики
for (int i = ArraySize(n_ticks)-1; i>=0 && k>=0; i--)
{
if (!Compare(n_ticks[i], m_ticks[k]))
{
n_t = ArraySize(n_ticks) - i;
k = ArraySize(m_ticks) - 1;
Comp_success = 0;
}
else
{
Comp_success += 1;
if (Comp_success >= Limit_comp) break;
k--;
};
};
//Запоминаем полученные тики
ArrayResize(m_ticks, Total);
ArrayCopy(m_ticks, n_ticks, 0, 0, WHOLE_ARRAY);
//Расчитываем индекс начала новых тиков и копируем их в буфер для доступа
ArrayResize(LastTicks, n_t);
if (n_t > 0)
{
int index = ArraySize(n_ticks) - n_t;
ArrayCopy(LastTicks, m_ticks, 0, index, n_t);
};
};
#endif
При компиляции образуется ошибка - "object are by passed by reference only" к строке if (!Compare(n_ticks[i], m_ticks[k])) указывая на n_ticks[i]
Всем доброго времени суток.
Я тестирую советника МТ4 от Альпари. Перед тестированием МТ предлагает мне выставить значение спреда ( текущий или какое то конкретное значение из предлагаемых ).
В Альпари спред плавающий. Поэтому вышеуказанные настройки размера спреда мне не подходят.
ВОПРОС. Какая функция отображает на истории значения спреда действовашие на на каждый исторический тик?
Или как сделать так что бы советник открывал и закрывал ордера с учетом спреда действовавшего на момент открытия или закрытия ордера?
Спасибо всем за помощь.
Всем доброго времени суток.
Я тестирую советника МТ4 от Альпари. Перед тестированием МТ предлагает мне выставить значение спреда ( текущий или какое то конкретное значение из предлагаемых ).
В Альпари спред плавающий. Поэтому вышеуказанные настройки размера спреда мне не подходят.
ВОПРОС. Какая функция отображает на истории значения спреда действовашие на на каждый исторический тик?
Или как сделать так что бы советник открывал и закрывал ордера с учетом спреда действовавшего на момент открытия или закрытия ордера?
Спасибо всем за помощь.
В МТ 4 никак, в мт 5 можно
В МТ 4 никак, в мт 5 можно
Спасибо большое за ценную информацию.
Начну изучать mql5. Говорят , что он сильно похож на mql4. Что бы его изучать сразу под нужным мне углом, буду Вам очень признателен если подскажете как в mql5 реализуется мой замысел.
Спасибо большое за ценную информацию.
Начну изучать mql5. Говорят , что он сильно похож на mql4. Что его изучать сразу под нужным мне углом, буду Вам очень признателен если подскажете как в mql5 реализуется мой замысел.
В мт5 ничего придумывать не нужно.
Это круто. Спасибо за ценную информацию.
Как мне кажется, что бы быстро перейти с mql4 на mql5 оптимальнее всего читать одновременно справочники по mql4 и по mql5 , и обращать внимание на то чем они отличаются друг от друга. Все познается в сравнении.....Всем доброго времени суток!
Начал изучать mql5. Начал с изучения того как открываются ордера. Понял что код для открытия ордера пишется в отдельном включаемом файле. Посмотрел как пишется этот код и на его окончательный вариант для торговли. Поразился тому, как легко и просто открывается ордер в mql4, по сравнению с mql5.
ВОПРОС. Правильно ли я понимаю ,что включаемый файл с кодом для открытия ордера уже где то есть и мне писать этот код не обязательно? Если такой файл где то есть то мне нужно только подключить его к моему советнику и установить нужные мне значения параметров ордера.? Если такой файл где то есть, то где и как его найти и как он называется.
Спасибо.