Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 77

 
Sepulca:

Тролят Вас))) Вы личность харизматичная))))
Благодарю за комплимент, хочется узнать, откуда ноги растут.
 
bistreevseh:
Уважаемые пользователи форума, пожалуйста помогите, никак не могу найти ошибку в коде моего советника, а именно он не умеет или не хочет закрывать позиции по индикатору, только по tp или sl, вот, как мне кажется, часть кода, с которой и связана данная проблема, заранее большое спасибо


Сразу на вскидку

если Work=FALSE советник работать не будет.

Советник не будет работать, если есть хоть один отложенный ордер, проверки на MAGIC нет.

Alertы выдает?

 
MisterD:

Не получается, потому что нужно вывести переменные которые хочешь зафиксировать на глобальный уровень, то бишь до функции Start... Например вот эти и т.д.... " FiksiruemUp = True; // фиксируем " и "iksiruemUp = False; // сбрасываем"
Если не переключать между таймфреймами, должно работать...


так и сделал с переменными, вывел их на глобальный уровень. такой вопрос им на глобальном уровне нужно false присваивать или нет?

если учесть такой момент:

когда цена выше верхней линии, то он присваивает True для FiksiruemUp, после цена становится ниже верхней линии и при этом все еще выше средней линии, то что будет закреплено за FiksiruemUp: True или False?

мне кажется, что он в этой ситуации присваивает автоматом False, из-за того что в глобальных переменных ему присвоили False, а True присвоенным держит только тогда, когда цена выше верхней линии.

 
Глобальные переменные имеют тип double и только. Следует это учитывать, когда засовываете bool в глобальные переменные.
 
Sepulca:


Сразу на вскидку

если Work=FALSE советник работать не будет.

Советник не будет работать, если есть хоть один отложенный ордер, проверки на MAGIC нет.

Alertы выдает?


советник работает, т.е. ордера открывает, алерты тоже выдаёт об открытии и о срабатывании tp или sl, он и не ставит отложенники
 
Sepulca:
Глобальные переменные имеют тип double и только. Следует это учитывать, когда засовываете bool в глобальные переменные.

и все же, как же быть?
 
Sepulca:
Глобальные переменные имеют тип double и только. Следует это учитывать, когда засовываете bool в глобальные переменные.

тут речь идёт не о GlobalVariables, а о переменных на глобальном уровне.... перечитайте это момент, там есть разница....
 
belck:


так и сделал с переменными, вывел их на глобальный уровень. такой вопрос им на глобальном уровне нужно false присваивать или нет?

если учесть такой момент:

когда цена выше верхней линии, то он присваивает True для FiksiruemUp, после цена становится ниже верхней линии и при этом все еще выше средней линии, то что будет закреплено за FiksiruemUp: True или False?

мне кажется, что он в этой ситуации присваивает автоматом False, из-за того что в глобальных переменных ему присвоили False, а True присвоенным держит только тогда, когда цена выше верхней линии.


Изначально, если на глобальном уровне ничего не укажите то значение будет False.... Далее после того как присваивается значение True, переменная будет иметь это значение до следующего условия if (Ask < LineS) FiksiruemUp = False; // сбрасываем.... Если условие выполняется, то переменой присваивается новое значение False и будет оно таковым до момента - "когда цена выше верхней линии, то он присваивает True для FiksiruemUp" и так далее... Надеюсь понятно объяснил... :)
 
MisterD:

Изначально, если на глобальном уровне ничего не укажите то значение будет False.... Далее после того как присваивается значение True, переменная будет иметь это значение до следующего условия if (Ask < LineS) FiksiruemUp = False; // сбрасываем.... Если условие выполняется, то переменой присваивается новое значение False и будет оно таковым до момента - "когда цена выше верхней линии, то он присваивает True для FiksiruemUp" и так далее... Надеюсь понятно объяснил... :)

теперь понятно. спасибо большое
 

Друзья, помогите. Мне нужно закрыть все ордера по выбранной валютной паре. Вот что я написал (часть кода советника):

int Zakrit_vse()

{

Total=OrdersTotal();

int Vsego;

for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордеров, закрываю все

{

if (OrderSelect(i-1,SELECT_BY_POS)==true)

{

if (OrderSymbol()!=Symb)continue;

Ticket=OrderTicket();

Lot=OrderLots();

Price=OrderOpenPrice();

Vsego++;

Tip=OrderType();

Alert(Tip);

if(Tip>1)

{

OrderDelete(Ticket);

Prov_oshibok();

continue;

}

if(Tip==0)

{

OrderClose( Ticket,Lot, Bid,100);

Prov_oshibok();

continue;

}

if(Tip==1)

{

OrderClose( Ticket,Lot, Ask,100);

Prov_oshibok();

continue;

} //

}

}

Alert(Total," ",Vsego);

int ret=MessageBox("Операция успешно выполнена",

" ",MB_OK|MB_ICONQUESTION|MB_TOPMOST);

if(ret==IDOK) // если ответ "да"

{

Print("Все ордера, в количестве ",Vsego," шт. успешно закрыты");

}

}

Но почему-то всегда закрывается лишь каждый второй ордер. Если ордеров 6, закроется 3, если 8-4, и т.д.

Что это может быть такое? В чем ошибка, подскажите?

Причина обращения: