Напишу советник бесплатно - страница 187

 
Всем доброго дня.
Есть проблемка - открывается сетка ордеров с общим ТП и иногда у одной сделки ТП не выставляется. Ладно если это не дает сделать теккущая цена, но бывает, что ТП должен стоять за 50 и более пунктов, а у одной из семи (скажем) сделок вместо ТП пусто. Как заставить советник контролировать этот момент? Но при том условии, что он должен контролировать установку ТП именно в этот момент, потому что потом (через час скажем) я захотел сбросить все ТП и сов не должен мне заново их выставлять. Вот фрагмент кода, который вот это делает:

if (gridDirect==-1 && countBUY<MaxTrades)
{
// открыть новый сеточный ордер BUY
comment=EAName+"-"+Symbol()+"-"+(countBUY+1)+"-"+Step;
nextLots = NormalizeDouble(Lots*MathPow(LotExponent, countBUY), lotDecimal);
RefreshRates();
ticket=OpenOrder(OP_BUY,nextLots,comment,MagicBuy, clrLime);
if (ticket>0)
{
SetTakeProfit(OP_BUY,MagicBuy);
}
return;
}
 
Andrey Kuharev #:
if (ticket>0)

Вместо этого условия

if (ticket>0)

поставьте это

if(OrderSelect(ticket))
 
Alexey Viktorov #:

Вместо этого условия

поставьте это

Алексей, а можете , если не сложно, почему так это решит вопрос? Я по пятибальной системе знаний написания советников 2+ (плюс это потому что я что то соображаю))))
 
Alexey Viktorov #:
if(OrderSelect(ticket))
и ещё, я поменял эту строчку, у меня выскочила ошибка - wrong parameters count. Я так понимаю єтот ордер селект нужно прописать в начале советника?
 
Andrey Kuharev #:
и ещё, я поменял эту строчку, у меня выскочила ошибка - wrong parameters count. Я так понимаю єтот ордер селект нужно прописать в начале советника?

Ну да, меня «дёрнули» и я в спешке не дописал. Надо так

if(OrderSelect(ticket, SELECT_BY_TICKET))
 
Alexey Viktorov #:
if(OrderSelect(ticket, SELECT_BY_TICKET))

для селл та же строка?

Можете простым языком сказать что Вы сделали. Я уже второй день ищу информацию что бы решить этот вопрос и не нашёл. Хочу понимать что Вы сделали, что это значит.Спасибо

 
Andrey Kuharev #:

для селл та же строка?

Можете простым языком сказать что Вы сделали. Я уже второй день ищу информацию что бы решить этот вопрос и не нашёл. Хочу понимать что Вы сделали, что это значит.Спасибо

Прочтите внимательно примечание. 

«Функция OrderSelect() копирует данные об ордере…» и далее

OrderSelect - Торговые функции - Справочник MQL4
OrderSelect - Торговые функции - Справочник MQL4
  • docs.mql4.com
OrderSelect - Торговые функции - Справочник MQL4
 
Alexey Viktorov #:

Прочтите внимательно примечание. 

«Функция OrderSelect() копирует данные об ордере…» и далее

Спасибо. И спасибо большое за корректировку кода!
 
Andrey Kuharev #:
Всем доброго дня.
Есть проблемка - открывается сетка ордеров с общим ТП и иногда у одной сделки ТП не выставляется. Ладно если это не дает сделать теккущая цена, но бывает, что ТП должен стоять за 50 и более пунктов, а у одной из семи (скажем) сделок вместо ТП пусто. Как заставить советник контролировать этот момент? Но при том условии, что он должен контролировать установку ТП именно в этот момент, потому что потом (через час скажем) я захотел сбросить все ТП и сов не должен мне заново их выставлять. Вот фрагмент кода, который вот это делает:

if (gridDirect==-1 && countBUY<MaxTrades)
{
// открыть новый сеточный ордер BUY
comment=EAName+"-"+Symbol()+"-"+(countBUY+1)+"-"+Step;
nextLots = NormalizeDouble(Lots*MathPow(LotExponent, countBUY), lotDecimal);
RefreshRates();
ticket=OpenOrder(OP_BUY,nextLots,comment,MagicBuy, clrLime);
if (ticket>0)
{
SetTakeProfit(OP_BUY,MagicBuy);
}
return;
}

Вам лучше поправить функцию SetTakeProfit

P.S.

Если Вы сделаете так

if (ticket>0)
{
SetTakeProfit(OP_BUY,MagicBuy);
} else Print(GetLastError());

то скорее всего, там где ТП не выставляется, увидите ошибку 1

 
Tretyakov Rostyslav #:
Вам лучше поправить функцию SetTakeProfit

Чем лучше? Пояснения в студию.