Народ помогите сижу уже 4 часа не могу закончить часть кода

 

Нужно както по условию что получили тейк профит закрыть отложки

ДОПУСТИМ:
Открыл BUY ;

Получил профит;

Закрыть все отложенные ордера;

 
Не знаю какой код нужно написать чтобы выполнялись вышеуказаные действия
 

int start()

{

//----

int total=OrdersTotal();

bool buy=false;

bool sell=false;

//ВОТ ЧАСТЬ КОДА которой надо приклеить тот ордер который будет открыт что бы его закрыть в случае если сделка которая открывается одновремено с ним закрылать по ТП

for(int i = OrdersTotal()-1;i>=0; i--)
{
{
OrderSelect(i, SELECT_BY_POS) ;
if (OrderType()>1)OrderDelete(OrderTicket());
}
}
/////

if (total>1)
return;
if (Close[1]>Open[1] && buy==false)
{
OrderSend (Symbol(), OP_BUY, lot, Ask, 3, Bid-SL*Point, Bid+TP*Point, "Открыта позиция на продажу", 0,0,0);
OrderSend( Symbol(), OP_SELLSTOP, lotlim, Bid-selllimlvl*Point, 3,Bid-selllimlvl*Point+SLlim*Point, Bid-selllimlvl*Point-TPlim*Point, "Высавлен отложенный ордер на продажу", 1,0,0);
buy=true;
return(buy);
}
if (Open[1]>Close[1] && sell==false)
{
OrderSend (Symbol(), OP_SELL, lot, Bid, 3, Ask+SL*Point, Ask-TP*Point, "Открыта позиция на продажу", 0,0,0);
OrderSend( Symbol(), OP_BUYSTOP, lotlim, Ask+buylimlvl*Point, 3, Ask+buylimlvl*Point-SLlim*Point, Ask+buylimlvl*Point+TPlim*Point, "Высавлен отложенный ордер на покупку", 2,0,0);
sell=true;
return(sell);

}

Мне просто нужен флаг на то что сделка закрылась с прибылью

 
drknn:

Вы показали не то, что я попросил. Жаль. Я хотел, чтоб Вы осознали алгоритм для осуществления своей затеи. Ваша проблема в том, что у Вас ни в голове, ни на бумаге такого алгоритма нет. Вот поэтому Вы и не знаете, какой нужно делать код. Я могу сформулировать этот алгоритм вместо Вас, но проку от этого будет не много. Если бы Вы попытались рассуждать тут вместе со мной, то пользы было бы гораздо больше. Давайте попробуем, скажем, вот так:

Итак, раз ордер закрыт в профите, то значит он уже в истории ордеров. Поэтому, чтоб понять, закрылся ли на самом деле последний ордер с профитом, или с убытком, мы должна найти последний закрытый ордер типа Buy или Sell и посмотреть его профит. Разумеется, раз это ПОСЛЕДНИЙ закрытый ордер, то время закрытия у него будет самое большое - все остальные ордера истории имеют время закрытия меньше, чем у последнего. Значит, время закрытия ордера - это признак, по которому мы можем найти последний закрытый ордер. Итак, мы его нашли. Функция языка OrderProfit() позволяет узнать, какой именно профит был у нашего ордера. Далее перед нами 3 сценария:

- Ордер закрыт с убытком

- Ордер закрыт по нулям

- Ордер закрыт с прибылью.

Первую часть алгоритма я Вам рассказал, попробуйте самостоятельно сформулировать вторую - как будете обрабатывать реакцию советника на эти три события?


Там неважно с убытком или в ноль...только ТП

Выбрать последний ордер в истории

OrderSelect (0, SELECT_BY_POS, MODE_HITSTORY)

Взять оттуда тейк профит

ordertakeprofit()

Взять цену закрытия

ordercloseprice()

Сравнить

If ( ordertakeprofit()=ordercloseprice())

Тогда запускаем шарманку

и перебираем все ордера

for(int i = OrdersTotal()-1;i>=0; i--)

{
{
OrderSelect(i, SELECT_BY_POS) ;

if (OrderType()>1)

OrderDelete(OrderTicket());

}

}

 
Вот мои мысли

OrderSelect (0, SELECT_BY_POS, MODE_HISTORY) ;
if ( OrderTakeProfit()==OrderClosePrice())
{
for(int i = OrdersTotal()-1;i>=0; i--)
{
{
OrderSelect(i, SELECT_BY_POS) ;
if (OrderType()>1)OrderDelete(OrderTicket());
}
}
}
 
drknn:

Время открытия у этого ордера будет самым большим среди прочих отложенных ордеров.

P.S.

Это ответ на вопрос, который Вы только что стёрли - как узнать тикет последней отложки.


а смысл я стер потому что понял что итерация сама там все узнает
 
скажите если идет оператор return; он всегда из старта выбивает ели есть какието критерии когда он просто возвращает значение....я просто не могу до конца понять return;
 
А и еще у меня какаято фишка с историей...есть заскоки по 300 пунктов на H1 что практически и теоретически просто не возможно....и история идет месяц от марта потом пропуск 6 месяцев и снова идет уже с августа дето....что можно с етим сделать?
 

Не получается чтото я не то написал...как указать последний ордер из истории ? по позиции не получается всеравно if не запускает for значит вот ета борода

OrderSelect (0, SELECT_BY_POS, MODE_HISTORY) ;

if ( OrderTakeProfit()==OrderClosePrice())

не правильная

 
drknn:

В цикле тут должен стоять номер ордера в списке ордеров - он содержится в переменной счётчика цикла. В Вашем же случае Вы всегда обращаетесь только к одному номеру (который стоит на нулевой строке списка) и игнорируете все прочие ордера.

Блин я так и не могу понять в mql все начинается с 0 или 1...в истории идет я так понял с 1 а если чтото только формируется то 0 типо нулевой бар да?
 
та я уже понял просто уже пол дня сижу над куском кода ... разные варианты в голове проходят даже не правильные)))
Причина обращения: