Перейти к содержанию

Обучение языку MQL5 под MetaTrader 5


Рекомендуемые сообщения

Обучение языку MQL5 под MetaTrader 5 Опубликовано (изменено)


Доброго всем дня, прошу помочь.
Необходимо пометить стрелкой найденный бар, на графике. В справочнике слишком сложный для меня пример.




Для mql5:
Вот эту функцию вставить в код советника за пределами OnTick() (просто в самый низ кода):
//+------------------------------------------------------------------+ 
//| Создает знак "Стрелка вверх" |
//+------------------------------------------------------------------+
bool ArrowUpCreate(const long chart_ID=0, // ID графика
const string name="ArrowUp", // имя знака
const int sub_window=0, // номер подокна
datetime time=0, // время точки привязки
double price=0, // цена точки привязки
const ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM, // способ привязки
const color clr=clrRed, // цвет знака
const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль окаймляющей линии
const int width=3, // размер знака
const bool back=false, // на заднем плане
const bool selection=true, // выделить для перемещений
const bool hidden=true, // скрыт в списке объектов
const long z_order=0) // приоритет на нажатие мышью
{
//--- установим координаты точки привязки, если они не заданы
ChangeArrowEmptyPoint(time,price);
//--- сбросим значение ошибки
ResetLastError();
//--- создадим знак
if(!ObjectCreate(chart_ID,name,OBJ_ARROW_UP,sub_window,time,price))
{
Print(FUNCTION,
": не удалось создать знак \"Стрелка вверх\"! Код ошибки = ",GetLastError());
return(false);
}
//--- установим способ привязки
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- установим цвет знака
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль окаймляющей линии
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим размер знака
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- отобразим на переднем (false) или заднем (true) плане
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- включим (true) или отключим (false) режим перемещения знака мышью
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- успешное выполнение
return(true);
}


А вот так вызывать её в нужный момент:
ArrowUpCreate(0,"ArrowUp"+(string)TimeCurrent(),0,0,0,ANCHOR_TOP,clrTeal,STYLE_SOLID,3,false,false,true,0);
Изменено пользователем Pavel888
Ссылка на сообщение
Поделиться на другие сайты

  • 1 month later...
  • Ответов 294
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Здравствуйте, друзья юные программисты! В этой ветке предлагаю обсуждать все возникающие вопросы в процессе освоения тонкостей языка MQL5. В настоящий момент мы записываем цикл уроков по MQL5, пока

Перейти

Уважаемые коллеги, добавлю от себя... По ссылке полный справочник по функциям MQL5, с примерами, который вы можете скачать себе локально. Хорошая штука, рекомендую :) https://yadi.sk/d/BBFYJw_-trnbN

Перейти

Нечеловеческое спасибо за тему >000 ЧИТАЕМ В ПЕРВУЮ ОЧЕРЕДЬ ПОЛНАЯ ДОКУМЕНТАЦИЯ ПО MQL5, ОНЛАЙН, БЕСПЛАТНО И БЕЗ СМС Руководство по интерфейсу // Алгоритимеческий трейдинг на MQL5 // Описание те

Перейти
Обучение языку MQL5 под MetaTrader 5 Опубликовано (изменено)

[tt][/tt]

Здравствуйте есть рабочий скрипт под фьючерс долл/руб SIU6.
Хочу его на мт5 проверить на демке.Ибо на истории втслабе все хорошо.В ТСН2 стоит запрет на открытие сделок в районе 10.00 и 17.30 (открытие рынка и выход важных новостей). Не просите описать текстом картинку.Я этого не умею.
Кто может помочь?


Здесь посмотрите. Минимум переделки мне кажется...
_https://github.com/PopovMP/FSB_Expert_Advisor_Code
для понятия "чё-как это использовать" с этой прогой:
_http://tradelikeapro.ru/system-creator Изменено пользователем Sokoloff
Ссылка на сообщение
Поделиться на другие сайты

  • 3 weeks later...
Обучение языку MQL5 под MetaTrader 5 Опубликовано

Здравствуйте все!

Хочу вести свой журнал учёта сделок (csv) в котором отображаются только закрытые сделки.
Сделки не скальперские, только одна открытая позиция по инструменту и мэджику.

Прошу подсказать, через что разумнее реализовывать:
OnTrade, OnTradeTransaction, OnTimer или OnTick?

Сейчас вставил в OnTick, но понимаю, что не самый лучший вариант: терминал с дюжиной роботов бывает подвешивается :( Видимо, из-за частых обращений к диску.

Ссылка на сообщение
Поделиться на другие сайты

  • 5 weeks later...
Обучение языку MQL5 под MetaTrader 5 Опубликовано

Доброго времени суток. В MQL4 было довольно просто организовать перебор ордеров в цикле:
for (int trade = OrdersTotal()-1; trade >= 0; trade --) //Перебираем ордера, определяем, есть ли открытые ордера этим экспертом по этому символу
{
if(OrderSelect(trade, SELECT_BY_POS))
{
if ( OrderMagicNumber() == Magic && OrderSymbol() == Symbol()){
...
}
}
}
а в MQL5 SELECT_BY_POS нет :( Как быть?

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL5 под MetaTrader 5 Опубликовано

Вот дёрнул из совы:
for(int i=PositionsTotal()-1;i>=0;i--)
if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
{
total++;
....
ПС: линк на сову

  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

  • 2 weeks later...
Обучение языку MQL5 под MetaTrader 5 Опубликовано (изменено)

Есть код скользящей, вот его пытаюсь переписать под MT5. Получилось, да вот криво. В общем забуксовал, нужна помощь!

THV4_Coral.mq5
THV4_Coral.mq4

Изменено пользователем MikR0ReR
Ссылка на сообщение
Поделиться на другие сайты

  • 3 weeks later...
Обучение языку MQL5 под MetaTrader 5 Опубликовано

Как посчитать на MQL5 размер максимально возможного лота с данным депозитом? Я не сошёл с ума и не собираюсь так торговать - просто пишу советник, там надо проводить такую проверку, вычислять долю от максимального лота.

Ссылка на сообщение
Поделиться на другие сайты

  • 2 months later...
Обучение языку MQL5 под MetaTrader 5 Опубликовано (изменено)

Решал задачу: входить по рынку, отслеживать закрытие позиции, по закрытию получать: причину закрытия (СЛ/ ТП/ другое), профит, время закрытия. В результате получился довольно универсальный класс позиции, который предлагаю к обсуждению. Целевой аккаунт- хэджинг.


#include

//+------------------------------------------------------------------+
//| *************************************************************** |
//| CPos |
//+------------------------------------------------------------------+
struct RPosResults {
datetime time;
ENUM_DEAL_REASON reason;
double profit;
double commission;
double swap;
double net_profit;
};
//+------------------------------------------------------------------+
class CPos
{
private:
ulong m_id;
ulong m_ticket;
ulong m_magic;
//+-----------------
int m_select_err;
//+-----------------
bool m_closed;
RPosResults m_results;
protected:
public:
//+-----------------
CPos() :
m_id(0),
m_ticket(0),
m_magic(0),
m_select_err(0),
m_closed(false)
{ ZeroMemory(m_results); }
~CPos() {}
//+-----------------
bool Open(const string symbol,
const ENUM_ORDER_TYPE op,
const double volume,
const double price,
const ulong deviation,
const double sl,
const double tp,
const ulong magic,
const string comment="");
bool Modify(const double sl,const double tp);
//+-----------------
ulong Id(void) const { return(m_id); }
ulong Ticket(void) const { return(m_ticket); }
ulong Magic(void) const { return(m_magic); }
int SelectErr(void) const { return(m_select_err); }
//+-----------------
bool Select(void);
bool IsClosed(void);
//+-----------------
double Price(void) const { return(PositionGetDouble(POSITION_PRICE_OPEN)); }
double Volume(void) const { return(PositionGetDouble(POSITION_VOLUME)); }
double SL(void) const { return(PositionGetDouble(POSITION_SL)); }
double TP(void) const { return(PositionGetDouble(POSITION_TP)); }
//+-----------------
RPosResults Results(void) const { return(m_results); }
};
//+------------------------------------------------------------------+
bool CPos::IsClosed(void)
{
if (m_closed)
return(true);
m_closed=!Select() && m_select_err == ERR_TRADE_POSITION_NOT_FOUND;
if (m_closed)
{
if (!HistorySelectByPosition(m_id))
{
m_closed=false;
_W("eS","Unable to select history to obtain deal results",0,0,return(false))
}
ZeroMemory(m_results);
long last_time_msc=0;
for (int i=0; i {
ulong ticket=HistoryDealGetTicket(i);
if (ticket == 0)
continue;
if (HistoryDealGetInteger(ticket,DEAL_ENTRY) != DEAL_ENTRY_OUT)
continue;
m_results.commission+=HistoryDealGetDouble(ticket,DEAL_COMMISSION);
m_results.profit+=HistoryDealGetDouble(ticket,DEAL_PROFIT);
m_results.swap+=HistoryDealGetDouble(ticket,DEAL_SWAP);
if (HistoryDealGetInteger(ticket,DEAL_TIME_MSC) > last_time_msc)
{
last_time_msc=HistoryDealGetInteger(ticket,DEAL_TIME_MSC);
m_results.time=datetime(HistoryDealGetInteger(ticket,DEAL_TIME));
m_results.reason=ENUM_DEAL_REASON(HistoryDealGetInteger(ticket,DEAL_REASON));
}
}
m_results.net_profit=m_results.profit+m_results.swap+m_results.commission;
}
return(m_closed);
}
//+------------------------------------------------------------------+
bool CPos::Select(void)
{
if (m_id == 0)
_W("eS","Position id = 0. Position probably not opened properly",0,0,return(false))
m_select_err=0;
if (PositionSelectByTicket(m_ticket))
return(true);
m_select_err=GetLastError();
for (int i=PositionsTotal()-1; i >= 0; i--)
{
ulong ticket=PositionGetTicket(i);
if (ticket == 0)
continue;
if (PositionGetInteger(POSITION_IDENTIFIER) == m_id)
{
m_ticket=ticket;
m_select_err=0;
return(true);
}
}
return(false);
}
//+------------------------------------------------------------------+
bool CPos::Open(const string symbol,
const ENUM_ORDER_TYPE op,
const double volume,
const double price,
const ulong deviation,
const double sl,
const double tp,
const ulong magic,
const string comment="")
{
m_id=0;
m_ticket=0;
m_magic=0;
m_select_err=0;
m_closed=false;
ZeroMemory(m_results);

CTrade Trade;
Trade.LogLevel(LOG_LEVEL_ERRORS);
Trade.SetExpertMagicNumber(magic);
Trade.SetDeviationInPoints(deviation);
Trade.SetTypeFilling(ORDER_FILLING_FOK);
if (!Trade.PositionOpen(symbol,op,volume,price,sl,tp))
_W("e","",Trade.ResultRetcode(),0,return(false))
if (Trade.ResultRetcode() != TRADE_RETCODE_DONE)
_W("e","",Trade.ResultRetcode(),0,return(false))
if (Trade.ResultDeal() == 0)
_W("eS","Deal ticket = 0",Trade.ResultRetcode(),0,return(false))
if (!HistoryDealSelect(Trade.ResultDeal()))
_WL("eS","Unable to select deal",0,return(false))
m_id=HistoryDealGetInteger(Trade.ResultDeal(),DEAL_POSITION_ID);
m_magic=magic;
for (int i=PositionsTotal()-1; i >= 0; i--)
{
ulong ticket=PositionGetTicket(i);
if (ticket == 0)
continue;
if (PositionGetInteger(POSITION_IDENTIFIER) == m_id)
{
m_ticket=ticket;
return(true);
}
}
_W("eS","Unable to obtain position ticket",0,0,return(false))
}
//+------------------------------------------------------------------+
bool CPos::Modify(const double sl,const double tp)
{
if (IsClosed())
_W("eS","Position closed",0,0,return(false))
CTrade Trade;
Trade.LogLevel(LOG_LEVEL_ERRORS);
Trade.SetExpertMagicNumber(m_magic);
if (!Trade.PositionModify(m_ticket,sl,tp))
_W("e","",Trade.ResultRetcode(),0,return(false))
if (Trade.ResultRetcode() != TRADE_RETCODE_DONE)
_W("e","",Trade.ResultRetcode(),0,return(false))
return(true);
}
//+------------------------------------------------------------------+
//| / CPos / |
//| *************************************************************** |
//+------------------------------------------------------------------+


макросы _W(L)(...,_NOPE) читать как:

Print("Ой! Ошибка!");


макросы _W(L)(...,return(value)) читать как:

{
Print("Ой! Ошибка!");
return(value);
}


Добавлено: 25-11-2017 16:59:49


Как посчитать на MQL5 размер максимально возможного лота с данным депозитом? Я не сошёл с ума и не собираюсь так торговать - просто пишу советник, там надо проводить такую проверку, вычислять долю от максимального лота.



Посмотрите здесь mql5.com/en/forum/157846 насколько понял, там человек приводит код МКЛ5 который считает максимальный размер лота для текущего баланса, и просить дать аналог на МКЛ4. И то и другое там приведено. Изменено пользователем zhab3r
Ссылка на сообщение
Поделиться на другие сайты

  • 3 weeks later...
Обучение языку MQL5 под MetaTrader 5 Опубликовано

Здравствуйте.
В советнике использую несколько iMA с разными параметрами и iCustom индикатор, так же несколько штук с разными параметрами.
Соответственно в окне тестера получается куча красных полос. Подскажите возможно ли задать разные цвета для индикаторов из кода советника?

Ссылка на сообщение
Поделиться на другие сайты

  • 4 weeks later...
Обучение языку MQL5 под MetaTrader 5 Опубликовано

На что больше всего(на ваш взгляд) похож mql5 ?
- borland cpp 3.1 for DOS
- MS visual C (и какого релиза ? )
- gpp(g++) for linux
мне показалось при беглом просмотре - borland c++ 3.1 for DOS
(хотелось поиграть с с похожими конструкциями в полноценной IDE)
@-)

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL5 под MetaTrader 5 Опубликовано


На что больше всего(на ваш взгляд) похож mql5 ?
- borland cpp 3.1 for DOS
- MS visual C (и какого релиза ? )
- gpp(g++) for linux
мне показалось при беглом просмотре - borland c++ 3.1 for DOS
(хотелось поиграть с с похожими конструкциями в полноценной IDE)
@-)



Каждый видит свое, кто то C#, кто то Java Beans. Для лучшего понимания можно посмотреть стандартную библиотеку и библиотеку dingmaotu / mql4-lib на github.
Ссылка на сообщение
Поделиться на другие сайты

  • 2 weeks later...
Обучение языку MQL5 под MetaTrader 5 Опубликовано

Тимур Машнин. Язык программирования MQL5
* Mashnin_T_Yazyik_Programmirovaniya_.a4.pdf (3781.21 кБ - загружено 46 раз.)



Это случайно не из статей mql5.com ? Возможно ошибаюсь, похоже просто
Ссылка на сообщение
Поделиться на другие сайты

  • 4 months later...
Обучение языку MQL5 под MetaTrader 5 Опубликовано

http://tradelikeapro.ru/pishem-ea-martin-na-mql5/




дык это, новый урок уже на сайте :)

http://tradelikeapro.ru/pishem-ea-martin-na-mql5/
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL5 под MetaTrader 5 Опубликовано (изменено)


http://tradelikeapro.ru/pishem-ea-martin-na-mql5/




дык это, новый урок уже на сайте :)

http://tradelikeapro.ru/pishem-ea-martin-na-mql5/

А можете оба видеоурока залить на файлообменник какой нибудь, хочется скачать и в местах отдаленных от быстрого интернета и шума спокойно посмотреть? :)

Добавлено: 20-06-2018 10:54:30

Да, у меня есть еще несколько тупых вопросов (извините если слишком назойлив, но только начал изучать мт5 после мт4):
upd. тупых вопросов не осталось.
Изменено пользователем djnet
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL5 под MetaTrader 5 Опубликовано
Спойлер


void CountTrades()
{
count_buy=0;
count_buyst=0;
count_buylim=0;
count_sell=0;
count_sellst=0;
count_selllim=0;
int aTotal=OrdersTotal();
ulong aTicket;
long aType;
long aMagic;
string aSymbol;
for(int i=0; i {
aTicket = OrderGetTicket(i);
aSymbol = OrderGetString(ORDER_SYMBOL);
aType=OrderGetInteger(ORDER_TYPE);
aMagic=OrderGetInteger(ORDER_MAGIC);
if(aSymbol==_Symbol && aMagic==m_magic)
{
switch(aType)
{
case ORDER_TYPE_BUY:
count_buy++;
break;
case ORDER_TYPE_SELL:
count_sell++;
break;
case ORDER_TYPE_BUY_STOP:
count_buyst++;
break;
case ORDER_TYPE_SELL_STOP:
count_sellst++;
break;
case ORDER_TYPE_BUY_LIMIT:
count_buylim++;
break;
case ORDER_TYPE_SELL_LIMIT:
count_selllim++;
break;
}
}
}
}



Коллеги, есть вопрос. Написал функцию подсчета ордеров по типам, с заданным мэджиком и текущим символом.
Компилятор ругается о возможной потере точности при присвоении различных типов данных на переменной "aType" я понимаю что я явно накосячил с типом переменной, но не знаю какой нужен, в хелпе не сказа тип переменной "ORDER_TYPE" может вообще не так надо?
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL5 под MetaTrader 5 Опубликовано
djnet в справке написано:
ENUM_POSITION_TYPE type = (ENUM_POSITION_TYPE)OrderGetInteger(ORDER_TYPE);
Предупреждение должно исчезнуть.

ПС: для подсчёта сразу всех типов ордеров можно использовать массив - очень удобно пользоваться, например:
int or_count[9]; // глобальная переменная

в функции подсчёта:
if(aSymbol==_Symbol && aMagic==m_magic) or_count[(int)aType]++; // посчитает все ордера в соответствии с типом
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL5 под MetaTrader 5 Опубликовано


djnet в справке написано:
ENUM_POSITION_TYPE type = (ENUM_POSITION_TYPE)OrderGetInteger(ORDER_TYPE);
Предупреждение должно исчезнуть.

ПС: для подсчёта сразу всех типов ордеров можно использовать массив - очень удобно пользоваться, например:
int or_count[9]; // глобальная переменная

в функции подсчёта:
if(aSymbol==_Symbol && aMagic==m_magic) or_count[(int)aType]++; // посчитает все ордера в соответствии с типом


Спойлер

void CountTrades()
{
count_buy=0;
count_buyst=0;
count_buylim=0;
count_sell=0;
count_sellst=0;
count_selllim=0;
int aTotal=OrdersTotal();
ulong aTicket;
long aMagic;
string aSymbol;
for(int i=0; i {
aTicket = OrderGetTicket(i);
aSymbol = OrderGetString(ORDER_SYMBOL);
ENUM_POSITION_TYPE aType=(ENUM_POSITION_TYPE)OrderGetInteger(ORDER_TYPE);
aMagic=OrderGetInteger(ORDER_MAGIC);
if(aSymbol==_Symbol && aMagic==m_magic)
{
switch(aType)
{
case (ENUM_POSITION_TYPE) ORDER_TYPE_BUY:
count_buy++;
break;
case (ENUM_POSITION_TYPE) ORDER_TYPE_SELL:
count_sell++;
break;
case (ENUM_POSITION_TYPE) ORDER_TYPE_BUY_STOP:
count_buyst++;
break;
case (ENUM_POSITION_TYPE) ORDER_TYPE_SELL_STOP:
count_sellst++;
break;
case (ENUM_POSITION_TYPE) ORDER_TYPE_BUY_LIMIT:
count_buylim++;
break;
case (ENUM_POSITION_TYPE) ORDER_TYPE_SELL_LIMIT:
count_selllim++;
break;
}
}
}
}


Спасибо, получилось, еще нужно в выборе case привести переменную к ENUM_POSITION_TYPE.
Массивы я не люблю, так как не до конца понимаю как с ними работать, поэтому стараюсь обходится без них.

Я плавно переписываю свою сову на mql 5, вопросы возникают по ходу пьесы.
Самые большие сложности с классами и структурами, я нихера не понимаю как с ними работать, допустим есть у меня задача проверить величину маржи открываемого ордера, я пошел сложным путем:
1. Есть стандартная библиотека AccountInfo.mqh
2. В ней есть класс CAccountInfo::MarginCheck
у меня имеется тип ордера в переменной OType, цена открытия ord_price, объем lastlot, (хоть убейте не пойму нахрена пятому метаку знать тип ордера и цену для расчета маржи, ну ладно, хочешь получи) , включил библиотеку инклюдом в начале совы.
я уже сейчас не смогу описать все мои варианты как я пытался использовать этот класс, но суть такова, что не получилось. Плюнул, написал обычную функцию прям как она в классе описана:
Спойлер


bool MarginCheck(long OType)
{
double margin;
if(!OrderCalcMargin((ENUM_ORDER_TYPE) OType,_Symbol,lastlot,ord_price,margin)) return (false);
if(margin else return (false);
}


Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL5 под MetaTrader 5 Опубликовано
djnet классы сам не люблю и смысла в них не вижу, именно для целей торговли, в играх - другое дело.
Но вот массивы и структуры очень жизнь облегчают и являются по сути просто упаковкой для переменных советника (ну почти).
Чтоб было понятно, приведу пример:
Деньги можно носить в кармане, а можно упаковать в кошелёк. Тогда, чтоб достать червонец, не надо рыться в кармане, а достать кошель и вытащить что нужно.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL5 под MetaTrader 5 Опубликовано (изменено)

Вот еще вопрос:

А как этого чудика заставить все ядра использовать?
upd. Ответ: Никак, один тест одно ядро, оптимизация - много ядер.


Добавлено: 23-06-2018 18:06:51


djnet классы сам не люблю и смысла в них не вижу, именно для целей торговли, в играх - другое дело.
Но вот массивы и структуры очень жизнь облегчают и являются по сути просто упаковкой для переменных советника (ну почти).
Чтоб было понятно, приведу пример:
Деньги можно носить в кармане, а можно упаковать в кошелёк. Тогда, чтоб достать червонец, не надо рыться в кармане, а достать кошель и вытащить что нужно.



Помню давным давно, в далекой предалекой галактике, я писал программы руками(в основном игрушки) на бейсике, так как папа не давал мне магнитофон что бы загружать программы с кассеты :))), на офигенном компе БК-0010-01 , и приходилось мне использовать массивы для игры как сейчас помню Сокобан, и тормозили они комп так что мама не горюй, и вот с тех пор я не люблю массивы, так как до сих пор уверен что работа с ними жутко грузит процессор. Изменено пользователем djnet
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL5 под MetaTrader 5 Опубликовано

на офигенном компе БК-0010-01

Ба! Коллега! Тоже начинал с этого...
Насчёт массивов Вы не правы - это просто указатели на место в памяти с данными.
Почему удобно их пользовать?:
У Вас есть функция вычисляющая направление входа, Вы его заранее не знаете.
и есть проверка на наличие ордеров. Для Вашего решения надо в зависимости от направления выбирать переменную с кол-вом ордеров, типа
если new_dir == OP_BUY то count_BUY и так же для селл - так значительно больше операций получается.
в моём примере достаточно count[new_dir] - и вы сразу получаете кол-во ордеров, в общем рекомендую попробовать
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL5 под MetaTrader 5 Опубликовано

в моём примере достаточно count[new_dir] - и вы сразу получаете кол-во ордеров, в общем рекомендую попробовать


хм, убедили на попробовать :)) хотя бы ради спортивного интереса.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • Рекомендуемые брокеры

  • ×
    ×
    • Создать...