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

 
7777877: передача параметров от передачи параметров по ссылке?

вот передача параметров по ссылке, сделайте такой скрипт:

int start(){
   int res = 999;
   Print("func = ",func(res)," , res = ",res);
return(0);
}
//__________________________
int func(int &a){
   a = 10;
   return(a*10);
}

во вкладке эксперты появится запись: 2012.04.08 11:19:35 test EURUSD,M5: func = 100, res = 10

ну и попытайтесь ответить на вопрос почему мы присвоили res = 999; а в журнале получили res = 10

 

Подскажите как подключить библиотеки? Они есть есть в файлах mqh, но при Копмилировании выдает

'strlib.mqh' - cannot open the program file

 
IgorM:

вот передача параметров по ссылке, сделайте такой скрипт:

во вкладке эксперты появится запись: 2012.04.08 11:19:35 test EURUSD,M5: func = 100, res = 10

ну и попытайтесь ответить на вопрос почему мы присвоили res = 999; а в журнале получили res = 10


Ну мое объяснение такое:

В функции Print просисходит вызов к пользовательской функции func. В функцию func передается параметр res=999. При вычислении самой функции func используется параметр а=10. И обратно в место вызова функции func передается уже значение а*10=100. Т.к. по концовке мы имем значение res=10, то отсюда я заключаю, что передача параметра по ссылке означает следующее: можно передать в вызвываемую функцию (в данном случае в func) ЛЮБОЕ значение соответствующего типа (в данном случае res=999), но сама функция будет вычисляться уже с тем значением (т.е. в данном случае с а=10), к-е будет инициализировано внутри самой функции (к-е в частном случае может и совпадать со значением, передаваемым в вызываемую функцию, т.е. в данном случае в func). И при передаче вычисленного в функции (в данном случае в func) значения обратно в строку вызова функции, переменная (в данном случае res) уже будет иметь отличное от ранее значение, т.е. то, к-е она получила при вычислении функции func (т.е. в данном случае res=10). Итого: при передаче параметра в функцию по ссылке внутри вычисляемой функции может происходить изменения значения параметра и далее, после возврата вычисленного значения в строку вызова функции, этот параметр будет иметь уже ИЗМЕНЕННОЕ (в частном случае такое же) значение, к-е он получил пр вычислении вызываемой функции.

Я правильно понял?

 
7777877:при передаче параметра в функцию по ссылке внутри вычисляемой функции может происходить изменения значения параметра
да именно так
 
IgorM:
да именно так

Гроссе данке шён!!!
 

Скажите пожалуйста хочу сделать модификацию ордера, чтобы советник изменял величину стоп-лосса в определенное мною время, а он начинает дурить.

вот мой код

extern int tp = 350; // величина прибыли тейкпрофит
extern int sl = 400; // величина убытка стоплосс

int ticket;

int start()
{
//----
if (OrdersTotal()==0 && Hour( )==2 && Minute( )==0) // ордер открывается по времени в 2 часа 00 минут по терминальному времени
ticket=OrderSend(Symbol(),OP_SELL,1,Bid,0,Ask+sl*Point,Ask-tp*Point,"",123,0,Red);

//----

if (OrdersTotal()==1 && Hour( )==3 && Minute( )==0) // тут я задал условие, что модификацию ордера с выбранным тикетом, производить в 3 часа 00 минут по терминал. времени.

{
OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES); // тут указал выбор ордера, сделки
OrderModify(ticket, OrderOpenPrice(), Ask+300*Point, OrderTakeProfit(),0,Blue); // модифицировать ордер с выбранным тикетом, от цены открытой позиции, изменить величину СЛ в пунктах, ТП оставляю без изменения


}
//--

}


При тестировании возникает Проблема: Советник начинает производить много бесполезных модификаций в течении времени, с 3 часов 00 минут до 3 59. Советник дурит и производит каждую секунду модификацию ! ПОЧЕМУ? что не правильно написано в коде?

 
oleg_felix:

Скажите пожалуйста хочу сделать модификацию ордера, чтобы советник изменял величину стоп-лосса в определенное мною время, а он начинает дурить.

вот мой код

extern int tp = 350; // величина прибыли тейкпрофит
extern int sl = 400; // величина убытка стоплосс

int ticket;

int start()
{
//----
if (OrdersTotal()==0 && Hour( )==2 && Minute( )==0) // ордер открывается по времени в 2 часа 00 минут по терминальному времени
ticket=OrderSend(Symbol(),OP_SELL,1,Bid,0,Ask+sl*Point,Ask-tp*Point,"",123,0,Red);

//----

if (OrdersTotal()==1 && Hour( )==3 && Minute( )==0) // тут я задал условие, что модификацию ордера с выбранным тикетом, производить в 3 часа 00 минут по терминал. времени.

{
OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES); // тут указал выбор ордера, сделки
OrderModify(ticket, OrderOpenPrice(), Ask+300*Point, OrderTakeProfit(),0,Blue); // модифицировать ордер с выбранным тикетом, от цены открытой позиции, изменить величину СЛ в пунктах, ТП оставляю без изменения


}
//--

}


При тестировании возникает Проблема: Советник начинает производить много бесполезных модификаций в течении времени, с 3 часов 00 минут до 3 59. Советник дурит и производит каждую секунду модификацию ! ПОЧЕМУ? что не правильно написано в коде?



Зачем по времени.....по профиту!!

 

Как прописать правильно функцию модифицировать открытый ордер в счете ECN где сразу стоп и профит не поставишь, а делать надо через модификацию.

Ввобщем беда в том что, что-то не так, помогите найти ошибку.

extern int tp = 350; // величина прибыли тейкпрофит
extern int sl = 400; // величина убытка стоплосс

int ticket;
int start()
{
//----
if (OrdersTotal()==0 && Close[1]<Open[1] && High[1]<Bid) )==0) // ордер открывается по условиям
ticket=OrderSend(Symbol(),OP_SELL,1,Bid,0,0,0t,"",123,0,Red);
//----
if (OrdersTotal()==1 ) // тут я задал условие, что модификацию ордера с выбранным одним ордером.
{
OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES); // тут указал выбор ордера, сделки
OrderModify(ticket, OrderOpenPrice(), Ask+sl*Point,Ask-tp*Point,0,Blue); // модифицировать ордер с выбранным тикетом, от цены открытой позиции, изменить величину СЛ в пунктах, ТП оставляю без изменения
}
}

 
oDin48:
  • Ребят, как подключить библиотеки? Когда пытаюсь Прокомпилировать советник выдает

  • 'strlib.mqh' - cannot open the program file

А найдите строку:
#include <strlib.mgh>

и замените на:

#include <stdlib.mgh>
 
7777877:

Люди, объясните кто-нибуь в доступной форме, что такое передача параметров по ссылке. Документацию прочитал, но понял оттуда лишь то, что это возможно и после идентификации переменной обязательно надо ставить модификатор &. Было бы супер, если бы объяснение было сопровождено к-л небольшой программкой с пояснениями... Чем вообще отличается обычная передача параметров от передачи параметров по ссылке?

Общий смысл передачи параметра по ссылке, это передача в параметр не самой переменной, а её адреса. В противоположном случае передаётся копия переменной в параметр.
Причина обращения: