[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 307

 

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

Сразу начну с простого примера, иначе будет трудно объяснить.

double result()

{

double x = Bid;

return(x);

}

double result_y()

{

double y = Bid;

return(y);

}

Нужно объединить в одну.

result() в дальнейшем в одной функцие нужен как X, в другой как Y. Возможно ли это? Как это сделать?

double result() // ????

{

double x = Bid;

double y = Ask; // нужно возвратить это тоже

return(x);

return(y); // ???

}

 

Нет, результат может быть только один. передавайте значения по ссылке :

double _bid = 0, _ask = 0;

Print(_bid,":",_ask);

ResFunction(_bid,_ask);

Print(_bid,":",_ask);


void ResFunction(double &x, double &y){
   x = Bid;
   y = Ask;
   return;
}
 
abeiks:

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

Сразу начну с простого примера, иначе будет трудно объяснить.

Ну, в силу того, что в обоих случаях из Ваших подпрограмм возвращается одна и та же величина - цена Bid, то одну из этих двух функций можно из кода выкинуть. Если же возвращаемые значения разные, то можно, например, собрать из них строку - вернуть из подпрограммы эти две величины, разделённые каким-то раздеителем, например, точкой с запятой. И вернуть как строку. Далее в основном коде извлечь 2 величины из строки и преобразовать их в double.
 

В подпрограмму что-нибудь передайте, чтобы она понять смогла, что надо.

 
abeiks:

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

...

Здравствуйте! Раз уже люди подсказали по Вашему вопросу, то со своей стороны поинтересуюсь: чемпы 2008 год, это Вы?

Если да, то не спАлите ли ГРААЛЬ по Вашему, не открывая всех "секретов мадридского двора" и не рассказывая "всех сказок венского леса". Просто чуть завесу приподнимите... Можно - в этой ветви, уверен, людям будет полезно!

Сам активно готовлюсь к чемпу...

Благодарю Вас!

 
drknn:

А скажите пожалуйста, зачем при бъявлении функции Вы обнуляете переменную? Это вот тут:


Так таким образом ей задается значение по умолчанию в случае если при вызове ее явно не задавать или я не прав?
 
Skydiver:

Так таким образом ей задается значение по умолчанию в случае если при вызове ее явно не задавать или я не прав?


Не знаю. Но мне интересно. Ща проверю.

P.S.

Работает!

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start(){
  Alert("func1(100) вернула значение = ",func1(100),"  func1() вернула значение = ",func1());
  return(0);
}
//+------------------------------------------------------------------+
int func1(int i=25){
        return(i);
}

 
Skydiver:
Попробуйте отпринтовать каждое значение на каждой итерации цикла. У Вас размер массива маленький, так что мешанины данных не будет.
 

как сделать так что бы разница между открываемыми ордерами одного и того же знака была 1 бар?

 
GarKain:

как сделать так что бы разница между открываемыми ордерами одного и того же знака была 1 бар?


Необходимо время открытия позиций сравнивать со временем открытия текущего бара Time[0]. Если время открытия позиции больше или равно времени открытия бара - експерт не открывает новые позиции. Когда появится новый бар Time[0] поменяет значение на позднее время и такое сравнение покажет, что на текущем (новом) баре позиция ещё не была открыта и можно торговать.

Кстати, ваш вопрос можно ещё разбить на 2 под-вопроса:
1. На текущем баре открылась позиция и успела закрыться, однако и так ждём новый бар.
2. На текущем баре открылась позиция и успела закрыться, тогда можно ещё раз на этом же бар открыть позицию (т.е. на 1 баре одновременно можно открыть 1 позицию).