- Вопрос знатокам MQL4
- [АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4.
- Функция ICustom
Привет! Заранее извиняюсь, возможно вопрос не корректный: можно ли написать пользовательскую функцию которая одновременно будет возвращать две характеристики закрытого в убыток ордера (int cmd и double volume)? Или надо писать две функции?
Достаточно ввести в функцию 2 переменные по ссылке и ничего возвращать не надо.
- docs.mql4.com
Будет проще :
1. Декларировать нужные переменные на глобальном уровне
2. А саму функцию декларировать как void, а внутри вычислить сколько угодно из переменных.
Будет проще :
1. Декларировать нужные переменные на глобальном уровне
2. А саму функцию декларировать как void, а внутри вычислить сколько угодно из переменных.
Привет! Заранее извиняюсь, возможно вопрос не корректный: можно ли написать пользовательскую функцию которая одновременно будет возвращать две характеристики закрытого в убыток ордера (int cmd и double volume)? Или надо писать две функции?
Есть целых два варианта:
struct S2P{ int p1; int p2; }; void OnStart(){ // вариант 1 S2P x=fun(); Alert("1: ",x.p1," ",x.p2); // вариант 2 int x1,x2; fun2(x1,x2); Alert("2: ",x1," ",x2); } S2P fun(){ S2P tmp; tmp.p1=1; tmp.p2=2; return tmp; } void fun2(int & p1,int & p2){ p1=1; p2=2;
Лучше второй вариант - по ссылке.
Глобальные переменные - тоже вариант, но очень неудобный.
глобальный массив решит проблему возврата хоть всех данных по ордеру сразу https://www.mql5.com/ru/articles/1390
// Terminal.mq4 //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж int Terminal() { //============================================== Предопределения == ArrayCopy(Mas_Ord_Old, Mas_Ord_Tek); // Сохраняем предыдущую историю int Kol=0; // Обнуление счётчика ордеров ArrayInitialize(Mas_Ord_Tek,0); // Обнуление массива //=============================================== Анализ ордеров == for (int i=0; i<OrdersTotal(); i++)// По всем ордерам терминала { if((OrderSelect(i, SELECT_BY_POS)==true) && (OrderSymbol()==Symbol())) //Если есть следующ и наша вал.пара { Kol++; // Считаем общее количество ордеров //-------------------------- Формирование нового массива ордеров -- Mas_Ord_Tek[Kol][1] = NormalizeDouble(OrderOpenPrice(), Digits); // Курс открытия ордеров Mas_Ord_Tek[Kol][2] = NormalizeDouble(OrderStopLoss(), Digits); // Курс SL Mas_Ord_Tek[Kol][3] = NormalizeDouble(OrderTakeProfit(), Digits); // Курс ТР Mas_Ord_Tek[Kol][4] = OrderTicket(); // Номер ордера Mas_Ord_Tek[Kol][5] = OrderLots(); // Количество лотов Mas_Ord_Tek[Kol][6] = OrderType(); // Тип ордера Mas_Ord_Tek[Kol][7] = OrderMagicNumber();// Магическое число //------------------------------------------------------------------ } } Mas_Ord_Tek[0][0] = Kol; // Сохраняем в нулевую ячеечку //================================================================== return(); } //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
- 2006.06.01
- Сергей Ковалев
- www.mql5.com
Структурой можно так:
struct sp // Структура сразу задает тип возвращаемого функцией значения { int sum, pro; } SumPro(int x, int y) { sp z; z.sum=x+y; z.pro=x*y; return z; } void OnStart() { // результат сразу из возвращаемого значения Alert("Сумма=", SumPro(2,3).sum, " Произведение=", SumPro(2,3).pro); }
Структурой можно так:
Можно. Но не нужно. Отсутствует возможность объявления переменной для получена результатов работы функции. Вызывать же функцию для получения каждого поля - это не рационально.
Если считаете, что я не прав, приведите пример, где будет удобно и рационально использование такого способа.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования