Удаление ордеров, подтягивание профита через стоп, но с ошибкой

 
Фиксированный уровень стопа+скальзящий стоп через стоп лос+удаление ненужных ордеров при открытии одной позиции, но установка первоначального стопа конфликтует с тралом в 10 через 20 пунктов(я не мастер, что то не допру), и не могу написать чтоб при закрытии позы удалить ненужный ByStop или SellStop.Ну в общем как в классическом примере по скальзящим каналам. Помогите разобраться. И (может быть???)переписать в MQL4 Видел на этом форуме хорошего эксперта по данной теме но тралить я считаю надо не сразу а через определенную велечину=возможной потери в сделке. Каждый по своему работает, а я решил так./*[[
Name := Trailing Stop
Author := Copyright © 2002, MetaQuotes Software Corp.
Link := https://www.metaquotes.net/
Notes := Automatically trailing stops
Lots := 1
Stop Loss := 57
Take Profit := 0
Trailing Stop := 60
]]*/
vars : i(0),cnt(0);
//Defines:shag(0),level(0);
if TrailingStop<5 then { print("Invalid trailing stop"); Exit; };
/* Проверяем ранее открытые позиции.
Трейлинг стоп работает через модификацию Stop Loss. */

//---------------------удаление ордеров по границам каналов---------------------------------------------

for i=1 to TotalTrades
Begin

// удаляем ордера верхней границы канала, если открыта buy в нутрь канала
If Ord(i,VAL_TYPE)=OP_BUY and Ord(i,VAL_SYMBOL) = Symbol then

for cnt=1 to TotalTrades {

If OrderValue(cnt,VAL_TYPE)=OP_BUYSTOP or OrderValue(cnt,VAL_TYPE)=OP_SELLLIMIT then

DeleteOrder(OrderValue(cnt,VAL_TICKET),Yellow);
};
end;

for i=1 to TotalTrades
Begin
// удаляем ордера нижней границы канала, если открыта sell в нутрь канала
If Ord(i,VAL_TYPE)=OP_SELL and Ord(i,VAL_SYMBOL) = Symbol then

for cnt=1 to TotalTrades {

If OrderValue(cnt,VAL_TYPE)=OP_SELLSTOP or OrderValue(cnt,VAL_TYPE)=OP_BUYLIMIT then

DeleteOrder(OrderValue(cnt,VAL_TICKET),Yellow);
};
end;

//-----------------установка первоначального StopLoss---------------------------------------------------

for i=1 to TotalTrades
Begin
If Ord(i,VAL_TYPE)=OP_BUY /*and Ord(i,VAL_SYMBOL) = Symbol*/ then
{
if Ord(i,VAL_STOPLOSS)=0*Point then

// меняем стоплосс на уровень Low-StopLoss
ModifyOrder(Ord(i,VAL_TICKET),Ord(i,VAL_OPENPRICE),
low-StopLoss*Point,Ord(i,VAL_TAKEPROFIT),Red);exit;

};
end;

for i=1 to TotalTrades
Begin
If Ord(i,VAL_TYPE)=OP_SELL/* and Ord(i,VAL_SYMBOL) = Symbol*/ then

{
if Ord(i,VAL_STOPLOSS)=0*Point then
// меняем стоплосс на уровень Low-StopLoss
ModifyOrder(Ord(i,VAL_TICKET),Ord(i,VAL_OPENPRICE),
high+StopLoss*Point,Ord(i,VAL_TAKEPROFIT),Red);exit;

};
end;



//----------------------TrailingStop через StopLoss на уровне TrailingStop------------------------------


for i=1 to TotalTrades
Begin

//это длинная позиция?
If Ord(i,VAL_TYPE)=OP_BUY then // длинная позиция
{
// сначала проверим - есть ли профит у этой сделки больше чем
// уровень трейлинг стопа? проверяем Bid, так как позиция BUY
If (Bid-Ord(i,VAL_OPENPRICE))=(TrailingStop*Point) then

// меняем стоплосс на уровень Bid-10*Point
ModifyOrder(Ord(i,VAL_TICKET),Ord(i,VAL_OPENPRICE),
Bid-10*Point,Ord(i,VAL_TAKEPROFIT),Red);
};
end;

//---------------------------TrailingStop 10 через 20 пунктов-------------------------------------------
for i=1 to TotalTrades
begin
If Ord(i,VAL_TYPE)=OP_BUY and Ord(i,VAL_STOPLOSS)>0*Point then
{
if Ord(i,VAL_STOPLOSS)<Bid-20*Point then

{
ModifyOrder(Ord(i,VAL_TICKET),Ord(i,VAL_OPENPRICE),
Bid-10*Point,Ord(i,VAL_TAKEPROFIT),Green);exit;

};
};
end;

//----------------------TrailingStop через StopLoss на уровне TrailingStop------------------------------

/* это короткая позиция? */
If Ord(i,VAL_TYPE)=OP_SELL then

{
// сначала проверим - есть ли профит у этой сделки больше чем
// уровень трейлинг стопа? проверяем Ask, так как позиция SELL
If (Ord(i,VAL_OPENPRICE)-Ask)=(TrailingStop*Point) then

{
// меняем стоплосс на уровень Ask+10*Point
ModifyOrder(Ord(i,VAL_TICKET),Ord(i,VAL_OPENPRICE),
Ask+10*Point,Ord(i,VAL_TAKEPROFIT),Red);

};
};

//---------------------------TrailingStop 10 через 20 пунктов-------------------------------------------
for i=1 to TotalTrades
begin
If Ord(i,VAL_TYPE)=OP_SELL and Ord(i,VAL_STOPLOSS)>0*Point then
{
if Ord(i,VAL_STOPLOSS)>ask+20*Point then
{
ModifyOrder(Ord(i,VAL_TICKET),Ord(i,VAL_OPENPRICE),
Ask+(10*Point),Ord(i,VAL_TAKEPROFIT),Red);

};
};
end;
exit;
Причина обращения: