//+------------------------------------------------------------------+//| передача параметров по ссылке |//+------------------------------------------------------------------+double SecondMethod(int &i,int &j)
{
double res;
//---
i*=2;
j/=2;
res=i+j;
//---return(res);
}
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//---.int a=14,b=8;
Print("a и b перед вызовом:",a," ",b);
double d=SecondMethod(a,b);
Print("Результат выполнения функции ", d);Print("a и b после вызова:",a," ",b, " ",d);// или здесь. А можно и там и тут…
}
//+------------------------------------------------------------------+
Всем доброго утра и хорошего настроения! Продолжаю изучать язык программирования MQL5. Написал небольшой скрипт для подсчёта общего числа открытых позиций и распечатки некоторых его параметров, в т.ч. кодов ошибок, если они будут:
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
ResetLastError(); // установим значение предопределенной переменной _LastError в нольint pos_total = PositionsTotal(); // объявим переменную для хранения количества открытых позицийif(pos_total > 0) // если есть открытые позиции
{
for(int i=0; i<pos_total; i++) // запустим цикл и переберём все открытые позиции
{
if(PositionGetSymbol(i) == _Symbol) // выберем все открытые позиции по текущему символу
{
ulong pos_id = PositionGetInteger(POSITION_IDENTIFIER);
double pos_price = PositionGetDouble(POSITION_PRICE_OPEN);
double pos_tp = PositionGetDouble(POSITION_TP);
double pos_sl = PositionGetDouble(POSITION_SL);
PrintFormat("Позиция #%d цена = %G тейк-профит = %G стоп-лосс = %G", pos_id, pos_price, pos_tp, pos_sl);
}
else// если выбрать позицию не удалось
{
PrintFormat("Не удалось выбрать позицию по символу %s. Ошибка = ", _Symbol, GetLastError());
}
}
}
}
//+------------------------------------------------------------------+
Запустил на символе, где есть открытые позиции. Работает исправно, информацию выводит корректно. Дальше. Запустил на символе, где нет открытых позиций. Информацию о том, что нет открытых позиций выводит корректно, а вот код причины ошибки, почему-то нет. Помогите, пжл, разобраться почему не выводится код причины ошибки?
Запустил на символе, где есть открытые позиции. Работает исправно, информацию выводит корректно. Дальше. Запустил на символе, где нет открытых позиций. Информацию о том, что нет открытых позиций выводит корректно, а вот код причины ошибки, почему-то нет. Помогите, пжл, разобраться почему не выводится код причины ошибки?
Откуда там код ошибки, если ошибки нет? Просто символ не тот у позиции.
Откуда там код ошибки, если ошибки нет? Просто символ не тот у позиции.
Спасибо за отклик! Предполагал, что будет выведен, хотя бы, такой код ошибки:
ERR_TRADE_POSITION_NOT_FOUND
4753
Позиция не найдена
По поводу символа не согласен. Символ как раз именно тот, на график которого был брошен этот скрипт. По символу GBPUSDrfd у меня сейчас открытых позиций нет, но и ошибки тоже нет. Непонятно!!!
2023.11.2313:27:26.3857 (GBPUSDrfd,H1) Не удалось выбрать позицию по символу GBPUSDrfd. Ошибка =
2023.11.2313:27:26.3857 (GBPUSDrfd,H1) Не удалось выбрать позицию по символу GBPUSDrfd. Ошибка =
Переменной d присваивается результат выполнения функции
Спасибо, Артём, за отклик! А просто функцию SecondMethod(a,b) использовать без присвоения никак нельзя?
С уважением, Владимир.
Спасибо, Артём, за отклик! А просто функцию SecondMethod(a,b) использовать без присвоения никак нельзя?
С уважением, Владимир.
Можно. Тогда будет получено два значения - только в переменные, передаваемые по ссылке. Т.е. функция возвращает три значения
Ради интереса убрал переменную d. Оставил только функцию. Результат вывода на печать не изменился. А про три значения, честно говоря, вообще не понял.
С уважением, Владимир.
Ради интереса убрал переменную d. Оставил только функцию. Результат вывода на печать не изменился. А про три значения, честно говоря, вообще не понял.
С уважением, Владимир.
Не изменился потому, что это значение не выводилось на печать.
Просто добавь печать и увидишь.
Не изменился потому, что это значение не выводилось на печать.
Просто добавь печать и увидишь.
Вывел на печать. Как было, так всё и осталось.
Может опять что-то не понял? Или нужно было вывести на печать переменную d? Об этом была речь?
С уважением, Владимир.
Вывел на печать. Как было, так всё и осталось.
С уважением, Владимир.Вывел на печать где?
Вывел на печать где?
Теперь всё понял. )) Всем спасибо!
С уважением, Владимир.
Запустил на символе, где есть открытые позиции. Работает исправно, информацию выводит корректно. Дальше. Запустил на символе, где нет открытых позиций. Информацию о том, что нет открытых позиций выводит корректно, а вот код причины ошибки, почему-то нет. Помогите, пжл, разобраться почему не выводится код причины ошибки?
С уважением, Владимир.
Запустил на символе, где есть открытые позиции. Работает исправно, информацию выводит корректно. Дальше. Запустил на символе, где нет открытых позиций. Информацию о том, что нет открытых позиций выводит корректно, а вот код причины ошибки, почему-то нет. Помогите, пжл, разобраться почему не выводится код причины ошибки?
Откуда там код ошибки, если ошибки нет? Просто символ не тот у позиции.
Откуда там код ошибки, если ошибки нет? Просто символ не тот у позиции.
Спасибо за отклик! Предполагал, что будет выведен, хотя бы, такой код ошибки:
ERR_TRADE_POSITION_NOT_FOUND
4753
Позиция не найдена
По поводу символа не согласен. Символ как раз именно тот, на график которого был брошен этот скрипт. По символу GBPUSDrfd у меня сейчас открытых позиций нет, но и ошибки тоже нет. Непонятно!!!
С уважением, Владимир.