kofesutra Опубликовано 15 мая, 2017 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 15 мая, 2017 Доброго всем дня, прошу помочь.Необходимо пометить стрелкой найденный бар, на графике. В справочнике слишком сложный для меня пример. Для 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); Изменено 26 октября, 2017 пользователем Pavel888 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sokoloff Опубликовано 22 июня, 2017 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 22 июня, 2017 [tt][/tt] Здравствуйте есть рабочий скрипт под фьючерс долл/руб SIU6.Хочу его на мт5 проверить на демке.Ибо на истории втслабе все хорошо.В ТСН2 стоит запрет на открытие сделок в районе 10.00 и 17.30 (открытие рынка и выход важных новостей). Не просите описать текстом картинку.Я этого не умею.Кто может помочь? Здесь посмотрите. Минимум переделки мне кажется..._https://github.com/PopovMP/FSB_Expert_Advisor_Codeдля понятия "чё-как это использовать" с этой прогой:_http://tradelikeapro.ru/system-creator Изменено 22 июня, 2017 пользователем Sokoloff Ссылка на сообщение Поделиться на другие сайты More sharing options...
kofesutra Опубликовано 10 июля, 2017 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 10 июля, 2017 Здравствуйте все!Хочу вести свой журнал учёта сделок (csv) в котором отображаются только закрытые сделки.Сделки не скальперские, только одна открытая позиция по инструменту и мэджику.Прошу подсказать, через что разумнее реализовывать:OnTrade, OnTradeTransaction, OnTimer или OnTick?Сейчас вставил в OnTick, но понимаю, что не самый лучший вариант: терминал с дюжиной роботов бывает подвешивается :( Видимо, из-за частых обращений к диску. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Pioner_rus Опубликовано 9 августа, 2017 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 9 августа, 2017 Доброго времени суток. В MQL4 было довольно просто организовать перебор ордеров в цикле: for (int trade = OrdersTotal()-1; trade >= 0; trade --) //Перебираем ордера, определяем, есть ли открытые ордера этим экспертом по этому символу { if(OrderSelect(trade, SELECT_BY_POS)) { if ( OrderMagicNumber() == Magic && OrderSymbol() == Symbol()){... } } }а в MQL5 SELECT_BY_POS нет :( Как быть? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 9 августа, 2017 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 9 августа, 2017 Вот дёрнул из совы: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 Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 19 августа, 2017 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 19 августа, 2017 Есть код скользящей, вот его пытаюсь переписать под MT5. Получилось, да вот криво. В общем забуксовал, нужна помощь! THV4_Coral.mq5THV4_Coral.mq4 Изменено 20 августа, 2017 пользователем MikR0ReR Ссылка на сообщение Поделиться на другие сайты More sharing options...
Pioner_rus Опубликовано 19 августа, 2017 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 19 августа, 2017 как бы посчитать на mql5 максимальный размер лота, который я могу открыть с моим депозитом? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Pioner_rus Опубликовано 20 августа, 2017 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 20 августа, 2017 Как можно на MQL5 вычислить максимальный лот, которым можно открыться с данным депозитом? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Pioner_rus Опубликовано 5 сентября, 2017 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 5 сентября, 2017 Как посчитать на MQL5 размер максимально возможного лота с данным депозитом? Я не сошёл с ума и не собираюсь так торговать - просто пишу советник, там надо проводить такую проверку, вычислять долю от максимального лота. Ссылка на сообщение Поделиться на другие сайты More sharing options...
zhab3r Опубликовано 25 ноября, 2017 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 25 ноября, 2017 Решал задачу: входить по рынку, отслеживать закрытие позиции, по закрытию получать: причину закрытия (СЛ/ ТП/ другое), профит, время закрытия. В результате получился довольно универсальный класс позиции, который предлагаю к обсуждению. Целевой аккаунт- хэджинг. #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. И то и другое там приведено. Изменено 25 ноября, 2017 пользователем zhab3r Ссылка на сообщение Поделиться на другие сайты More sharing options...
NPM23 Опубликовано 12 декабря, 2017 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 12 декабря, 2017 Здравствуйте. В советнике использую несколько iMA с разными параметрами и iCustom индикатор, так же несколько штук с разными параметрами.Соответственно в окне тестера получается куча красных полос. Подскажите возможно ли задать разные цвета для индикаторов из кода советника? Ссылка на сообщение Поделиться на другие сайты More sharing options...
vadim__ Опубликовано 6 января, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 6 января, 2018 На что больше всего(на ваш взгляд) похож mql5 ?- borland cpp 3.1 for DOS- MS visual C (и какого релиза ? )- gpp(g++) for linux мне показалось при беглом просмотре - borland c++ 3.1 for DOS(хотелось поиграть с с похожими конструкциями в полноценной IDE) @-) Ссылка на сообщение Поделиться на другие сайты More sharing options...
zhab3r Опубликовано 9 января, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 9 января, 2018 На что больше всего(на ваш взгляд) похож 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. Ссылка на сообщение Поделиться на другие сайты More sharing options...
ZelTrad Опубликовано 21 января, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 21 января, 2018 Тимур Машнин. Язык программирования MQL5* Mashnin_T_Yazyik_Programmirovaniya_.a4.pdf (3781.21 кБ - загружено 46 раз.) Это случайно не из статей mql5.com ? Возможно ошибаюсь, похоже просто Ссылка на сообщение Поделиться на другие сайты More sharing options...
pavlus777 Опубликовано 12 июня, 2018 Автор Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 12 июня, 2018 Новый урок:http://tradelikeapro.ru/pishem-ea-martin-na-mql5/ 4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Urrrka Опубликовано 12 июня, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 12 июня, 2018 Сергей! Плиз! делайте уроки! я по Вашим урокам учился и до сих пор учусь! пожалуйста продолжайте Вы нужны нам!!! Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 14 июня, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 14 июня, 2018 http://tradelikeapro.ru/pishem-ea-martin-na-mql5/ дык это, новый урок уже на сайте :)http://tradelikeapro.ru/pishem-ea-martin-na-mql5/ 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
djnet Опубликовано 20 июня, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 20 июня, 2018 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. тупых вопросов не осталось. Изменено 22 июня, 2018 пользователем djnet Ссылка на сообщение Поделиться на другие сайты More sharing options...
djnet Опубликовано 22 июня, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 22 июня, 2018 Спойлер 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" может вообще не так надо? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 23 июня, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 23 июня, 2018 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 Ссылка на сообщение Поделиться на другие сайты More sharing options...
djnet Опубликовано 23 июня, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 23 июня, 2018 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.mqh2. В ней есть класс 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); } Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 23 июня, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 23 июня, 2018 djnet классы сам не люблю и смысла в них не вижу, именно для целей торговли, в играх - другое дело.Но вот массивы и структуры очень жизнь облегчают и являются по сути просто упаковкой для переменных советника (ну почти).Чтоб было понятно, приведу пример:Деньги можно носить в кармане, а можно упаковать в кошелёк. Тогда, чтоб достать червонец, не надо рыться в кармане, а достать кошель и вытащить что нужно. Ссылка на сообщение Поделиться на другие сайты More sharing options...
djnet Опубликовано 23 июня, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 23 июня, 2018 Вот еще вопрос:А как этого чудика заставить все ядра использовать?upd. Ответ: Никак, один тест одно ядро, оптимизация - много ядер. Добавлено: 23-06-2018 18:06:51djnet классы сам не люблю и смысла в них не вижу, именно для целей торговли, в играх - другое дело.Но вот массивы и структуры очень жизнь облегчают и являются по сути просто упаковкой для переменных советника (ну почти).Чтоб было понятно, приведу пример:Деньги можно носить в кармане, а можно упаковать в кошелёк. Тогда, чтоб достать червонец, не надо рыться в кармане, а достать кошель и вытащить что нужно. Помню давным давно, в далекой предалекой галактике, я писал программы руками(в основном игрушки) на бейсике, так как папа не давал мне магнитофон что бы загружать программы с кассеты :))), на офигенном компе БК-0010-01 , и приходилось мне использовать массивы для игры как сейчас помню Сокобан, и тормозили они комп так что мама не горюй, и вот с тех пор я не люблю массивы, так как до сих пор уверен что работа с ними жутко грузит процессор. Изменено 23 июня, 2018 пользователем djnet Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 23 июня, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 23 июня, 2018 на офигенном компе БК-0010-01Ба! Коллега! Тоже начинал с этого...Насчёт массивов Вы не правы - это просто указатели на место в памяти с данными.Почему удобно их пользовать?:У Вас есть функция вычисляющая направление входа, Вы его заранее не знаете.и есть проверка на наличие ордеров. Для Вашего решения надо в зависимости от направления выбирать переменную с кол-вом ордеров, типаесли new_dir == OP_BUY то count_BUY и так же для селл - так значительно больше операций получается.в моём примере достаточно count[new_dir] - и вы сразу получаете кол-во ордеров, в общем рекомендую попробовать Ссылка на сообщение Поделиться на другие сайты More sharing options...
djnet Опубликовано 24 июня, 2018 Поделиться Обучение языку MQL5 под MetaTrader 5 Опубликовано 24 июня, 2018 в моём примере достаточно count[new_dir] - и вы сразу получаете кол-во ордеров, в общем рекомендую попробовать хм, убедили на попробовать :)) хотя бы ради спортивного интереса. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти