Как можно легко писать программы работающие в MT4 и в MT5 кроссплатформенный код , стимул изучать ООП
внимание , код исключительно учебный
// Основная фишка в использовании стандартных классов поставляемых вместе с терминалами
// В обоих платформах поставляются готовые ООП библиотеки , разработанные профессионалами METAQUOTES и разумеется имеет большой смысл их использовать и переходить на ООП
// внимание , код исключительно учебный
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Прелесть данного кода в том что он работает и на MT5 и на MT4
//////////////////////////////////////////////////////////////////////////////////////////////////////
Это давно сделал fxsaber в библиотеке https://www.mql5.com/ru/code/16006
Кстати, дата последнего изменения кода в КБ от 2016.08.05, у меня последняя ваша версия скачана 2016.11.15.
Вопрос автору библиотеки- в кодобазе точно последняя версия?
- голосов: 26
- 2016.08.05
- fxsaber
- www.mql5.com
внимание , код исключительно учебный
Вот это:
dAsk = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
Вот это:
dAsk = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
а точно, спасибо за замечание
mql4 сильно продвинули - к 5 ке
но для самого подхода не принципиально
- 2010.05.11
- Sergey Pavlov
- www.mql5.com
Это давно сделал fxsaber в библиотеке https://www.mql5.com/ru/code/16006
Кстати, дата последнего изменения кода в КБ от 2016.08.05, у меня последняя ваша версия скачана 2016.11.15.
Вопрос автору библиотеки- в кодобазе точно последняя версия?
На текущий момент -- нет необходимости изучать/применять СБ ради написания "кода, который одинаково работает в МТ4 и МТ5".
p.s.2. В качестве вопроса -- а в СБ реализован функционал, который отрабатывает хеджинг? Насколько я понял -- не реализован, хотя, могу ошибаться.
В СБ для МТ4 нет торговых модулей, она усечена по сравнению с СБ для МТ5
В СБ для МТ5 хеджинг поддерживается
Вы опоздали минимум на 6 лет и 8 месяцев (посчитал с даты выхода приведенной вами статьи "Переход с MQL4 на MQL5" -- 11 мая 2010 года)
На текущий момент -- нет необходимости изучать/применять СБ ради написания "кода, который одинаково работает в МТ4 и МТ5".
Собственно, в этом никогда не было нужды -- т.к. изначально МТ5 была неттинговой, а МТ4 работал с разнонаправленными ордерами -- и поэтому во фразе "код, который одинаково работает в МТ4 и МТ5" изначально было нечто несерьёзное.
Теперь МТ5 включает в себя МТ4 -- и писать "код, который одинаково работает в МТ4 и МТ5" гарантированно натыкается на вопрос "зачем?"
p.s. Мой пассаж не стоит понимать, что я высказываюсь против СБ, здесь не об этом идёт речь.
Хотя, если говорить об изучении ООП -- то надо начинать с начала, а не с готовой СБ, даже в качестве примера.
p.s.2. В качестве вопроса -- а в СБ реализован функционал, который отрабатывает хеджинг? Насколько я понял -- не реализован, хотя, могу ошибаться.
Нет не опоздал , массового интереса у трейдеров и дилингов к МТ5 не было до момента введения хеджа.
А сейчас не возникает резкого всплеска интереса , точка вспышки пройдена. Если бы хедж был изначально был в МТ5 , то мт4 сейчас вспоминали так же как мт3
Начиная с 2009.09.09 он был в пассиве , это дата введения в строй МТ5, заказы на мт5 пошли только после введения хеджа , это просто так - к слову
"просто так - к слову" надо говорить, если в теме -- поэтому "к слову и даже просто так" -- я во Фрилансе с момента его организации -- заказы на мт5 были всегда.
собственно, это легко проверить по истории Фриланса -- соглашения же не удаляются -- есть как раздел Выполнено, так и раздел Архив.
Были кончено не спорю, но это был мизер в сравнении с потоком заказов на mql4, он и сейчас меньше.
Зато сейчас я уговариваю клиентов переходить на мт5 , некоторые соглашаются менять платформу. Разницы между платформами уже нет, при том еще и MQL4 MQL5 прекрасно идут друг другу навстречу сливаясь в одно единое. Разница минимальна, а применяя ООП можно легко писать эксперта прекрасно работающего на обоих платформах.
Достаточно влепить
CTrade trade;
...
dBid = SymbolInfoDouble(_Symbol,SYMBOL_BID);
dAsk = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
с индикаторами примерно так
...
#ifdef __MQL4__
ValMA[1]=iMA(NULL,PERIOD_CURRENT,14,0,MODE_EMA,PRICE_CLOSE,1);
#endif
#ifdef __MQL5__
CopyBuffer(ind_handleMA,0,1,2,ValMA);
#endif
...
и все чудесно работает на обоих платформах
Разница минимальна, а применяя ООП можно легко писать эксперта прекрасно работающего на обоих платформах.
https://www.mql5.com/en/blogs/post/681230
Там дальше и продолжение с хэш-таблицей.
- 2016.09.28
- Stanislav Korotky
- www.mql5.com
Юра, я не супер какой сторонник МТ5 в стиле "только МТ5, за что и свой лоб с удовольствием расшибу" -- но есть объективная реальность:
1) говорить что хедж привёл к резкому росту популярности МТ5 нельзя -- т.к. заказы на МТ5 идут под фонды, а там хедж не нужен
2) МТ4 терминал хуже чем МТ5, как минимум по части тестера
3) и главное -- МТ5 сейчас по функционалу полностью перекрывает МТ4 со многими плюсами -- и ставить даже среднесрочные разработки на МТ4 уже тупо нет никакого смысла
Андрей , полностью согласен, по всем пунктам. А я супер сторонник МТ5 :-)))
Cейчас наблюдается рост популярности МТ5 среди трейдеров и интерес со стороны ДЦ, и если в ДЦ нет мт5, то даже не рекомендовал бы его.
На самом деле я о другом, о том , что если бы хедж в МТ5 был изначально , то про мт4 мы бы сейчас только вспоминали.
Начиная с 2009.09.09 по 2017.01.xx , т. е. за 8 лет с хеджем , мт5 вытеснил бы мт4 с рынка значительно сильнее, возможно убил бы.
А у MQ было бы меньше накладных расходов по сопровождению двух платформ.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
внимание , код исключительно учебный
// Основная фишка в использовании стандартных классов поставляемых вместе с терминалами
// В обоих платформах поставляются готовые ООП библиотеки , разработанные профессионалами METAQUOTES и разумеется имеет большой смысл их использовать и переходить на ООП
// внимание , код исключительно учебный
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Прелесть данного кода в том что он работает и на MT5 и на MT4
//////////////////////////////////////////////////////////////////////////////////////////////////////
//+------------------------------------------------------------------+
//| OOP_mt4_mt5.MQ4 |
//| OOP_mt4_mt5.MQ5 |
//| |
//| Copyright © 2006-2017, YuraZ |
//| https://www.mql5.com/ru/users/yuraz |
//| yzh@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006-2017, YuraZ"
#property link "yzh@mail.ru"
#property version "1.00"
#property strict
//////////////////////////////////////////////////////////////////////////////////////////////////////
// параметры
input double pTakeProfit = 0.0050; // 50 пунктов
input double pStopLoss = 0.0030;
input double pLots = 0.1 ;
//////////////////////////////////////////////////////////////////////////////////////////////////////
// прикрутим стандартную торговый ООП класс
// который прекрасно работает на мт4 и на мт5
//
// Что бы писать советники, которые будут работать на обоих платформах MT4 и MT5
// достаточно изучить стандартные классы
//
#include <Trade\Trade.mqh>
CTrade trade;
//////////////////////////////////////////////////////////////////////////////////////////////////////
// тут вставляем платформозависимый код для компилятора
void КроссПлатфоменныйКодПолучим_AskBid(void)
{
#ifdef __MQL5__ // мт5 получить Ask и Bid
dBid = SymbolInfoDouble(_Symbol,SYMBOL_BID);
dAsk = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
#endif
#ifdef __MQL4__
dBid=Bid; // старый добрый мт4 более прост
dAsk=Ask; // но уступает мт5 в функционале
#endif
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
// глобальные
int OO;
// для Ask и Bid пришлось лепить глобальные переменные для организации Кроссплатформенности
double dBid;
double dAsk;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnInit(void)
{
OO=0;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnTick()
{
КроссПлатфоменныйКодПолучим_AskBid(); // Так тоже можно - и тогда можно даже не писать комментарии , читая код - все предельно понятно
if(OO==0)
{
OO=1;
trade.Sell(pLots,_Symbol,dBid,dAsk+pStopLoss,dBid-pTakeProfit); // отработает и на MT5 и на MT4
}
}
//+------------------------------------------------------------------+