Pair futures trading

I ask for help in finding the error. 1. The second tool does not always open.
2. Sometimes the pair closes at more than one time.
3. Sometimes lots do not match.
I get the tools by cloning the original Ami tools.
Screenshot_33

OptimizerSetEngine("cmae");

//Мудуль МА для расчета отклоненния от спреда и вычисления тренда
P_MA = Optimize("P_MA", 10, 10, 300, 10);
//Мудуль коэффициента веса
beta = Optimize("beta", 6, 1, 10, 1);
lot1 = 2;//Optimize("lot1", 1, 1, 10, 1);
lot2 = 20;//Optimize("lot2", 1, 10, 60, 10);
//Мудуль отступа
b1 = 0.001;//Optimize("b1", 0.002, 0.001, 0.002, 0.001);
b2 = 0.001;//Optimize("b2", 0.001, 0.001, 0.002, 0.001);
//Модуль увеличения лота по времени
H3 = Optimize("H3", 21, 10, 23, 1);
M3 = 00;//Optimize("M3", 25, 0, 45, 15);
//Мудуль фильтра по двум MA
P_MA11 = Optimize("P_MA11", 190, 5, 190, 10);
P_MA12 = 200;//Optimize("P_MA12", 920, 100, 200, 10);
P_MA21 = Optimize("P_MA21", 490, 100, 490, 10);
P_MA22 = 1000;//Optimize("P_MA22", 920, 500, 1000, 10);
P_MA31 = Optimize("P_MA31", 550, 500, 990, 10);
P_MA32 = 1000;//Optimize("P_MA32", 920, 500, 1000, 10);
//Константа минимального объема инструмента в рынке
Vmin = 5;
//Модуль значимости тренда
K1 = Optimize("K1", 90, 10, 100, 10);
K2 = Optimize("K2", 70, 10, 100, 10);

Ticker_name1 = "GAZR";
Ticker_name2 = "MXI";

SetForeign(Ticker_name1 + "1");
Ticker1_C = Close;
Ticker1_H = High;
Ticker1_L = Low;
Ticker1 = (Ticker1_H + Ticker1_L)/2;
Ticker1_V = Volume;
RestorePriceArrays();
SetForeign(Ticker_name2 + "1");
Ticker2_C = Close;
Ticker2_H = High;
Ticker2_L = Low;
Ticker2 = (Ticker2_H + Ticker2_L)/2;
Ticker2_V = Volume;
RestorePriceArrays();

Spread = Ticker1 - betaTicker2;
Spread_C = Ticker1_C - beta
Ticker2_C;
Spread_H = Ticker1_H - betaTicker2_H;
Spread_L = Ticker1_L - beta
Ticker2_L;

emaSpread = EMA(Spread, P_MA);

//Модуль расчета ТРЕНДА
AT1 = EMA(Spread, P_MA11) - EMA(Spread, P_MA12);
AT2 = EMA(Spread, P_MA21) - EMA(Spread, P_MA22);
AT3 = EMA(Spread, P_MA31) - EMA(Spread, P_MA32);

Open_UP = Close_UP = Open_DOWN = Close_DOWN = False;

switch (StrToNum(StrRight(Name(), 1)))
{
case 1:
{
Open_UP1 = Spread_H > emaSpread + Ticker1_Cb1 AND Spread_H > emaSpread + Ticker1_Cb1 + AT1K1 AND Ticker1_V > Vmin AND Ticker2_V > Vmin;
Close_UP1 = Spread_L < emaSpread - Ticker1_C
b2 AND Spread_L < emaSpread - Ticker1_Cb1 + AT1K2 AND Ticker1_V > Vmin AND Ticker2_V > Vmin;
Open_DOWN1 = Spread_L < emaSpread - Ticker1_Cb1 AND Spread_L < emaSpread - Ticker1_Cb1 + AT1K1 AND Ticker1_V > Vmin AND Ticker2_V > Vmin;
Close_DOWN1 = Spread_H > emaSpread + Ticker1_C
b2 AND Spread_H > emaSpread + Ticker1_Cb2 + AT1K2 AND Ticker1_V > Vmin AND Ticker2_V > Vmin;
} break;

case 2:
{	
	Open_UP2 	= Spread_H > emaSpread + Ticker1_C*b1 AND Spread_H > emaSpread + Ticker1_C*b1 + AT2*K1 AND Ticker1_V > Vmin AND Ticker2_V > Vmin;
	Close_UP2 	= Spread_L < emaSpread - Ticker1_C*b2 AND Spread_L < emaSpread - Ticker1_C*b1 + AT2*K2 AND Ticker1_V > Vmin AND Ticker2_V > Vmin;
	Open_DOWN2	= Spread_L < emaSpread - Ticker1_C*b1 AND Spread_L < emaSpread - Ticker1_C*b1 + AT2*K1 AND Ticker1_V > Vmin AND Ticker2_V > Vmin;
	Close_DOWN2	= Spread_H > emaSpread + Ticker1_C*b2 AND Spread_H > emaSpread + Ticker1_C*b2 + AT2*K2 AND Ticker1_V > Vmin AND Ticker2_V > Vmin;
} break;

case 3:
{	
	Open_UP3 	= Spread_H > emaSpread + Ticker1_C*b1 AND Spread_H > emaSpread + Ticker1_C*b1 + AT3*K1 AND Ticker1_V > Vmin AND Ticker2_V > Vmin;
	Close_UP3 	= Spread_L < emaSpread - Ticker1_C*b2 AND Spread_L < emaSpread - Ticker1_C*b1 + AT3*K2 AND Ticker1_V > Vmin AND Ticker2_V > Vmin;
	Open_DOWN3	= Spread_L < emaSpread - Ticker1_C*b1 AND Spread_L < emaSpread - Ticker1_C*b1 + AT3*K1 AND Ticker1_V > Vmin AND Ticker2_V > Vmin;
	Close_DOWN3	= Spread_H > emaSpread + Ticker1_C*b2 AND Spread_H > emaSpread + Ticker1_C*b2 + AT3*K2 AND Ticker1_V > Vmin AND Ticker2_V > Vmin;
} break;

case 4:
{	
	Open_UP4 	= Spread_H > emaSpread + Ticker1_C*b1 AND Ticker1_V > Vmin AND Ticker2_V > Vmin;
	Close_UP4 	= Spread_L < emaSpread - Ticker1_C*b2 AND Ticker1_V > Vmin AND Ticker2_V > Vmin;
	Open_DOWN4	= Spread_L < emaSpread - Ticker1_C*b1 AND Ticker1_V > Vmin AND Ticker2_V > Vmin;
	Close_DOWN4	= Spread_H > emaSpread + Ticker1_C*b2 AND Ticker1_V > Vmin AND Ticker2_V > Vmin;
} break;

case 5:
{	
	Open_UP5 	= Spread_H > emaSpread + Ticker1_C*b1 AND Spread_H > emaSpread + Ticker1_C*b1 + AT1*K1 AND Ticker1_V > Vmin AND Ticker2_V > Vmin AND TimeNum() > H3*10000 + M3*100;
	Close_UP5 	= Spread_L < emaSpread - Ticker1_C*b2 AND Spread_L < emaSpread - Ticker1_C*b1 + AT1*K2 AND Ticker1_V > Vmin AND Ticker2_V > Vmin;
	Open_DOWN5	= Spread_L < emaSpread - Ticker1_C*b1 AND Spread_L < emaSpread - Ticker1_C*b1 + AT1*K1 AND Ticker1_V > Vmin AND Ticker2_V > Vmin AND TimeNum() > H3*10000 + M3*100;
	Close_DOWN5	= Spread_H > emaSpread + Ticker1_C*b2 AND Spread_H > emaSpread + Ticker1_C*b2 + AT1*K2 AND Ticker1_V > Vmin AND Ticker2_V > Vmin;
} break;

case 6:
{	
	Open_UP6 	= Spread_H > emaSpread + Ticker1_C*b1 AND Spread_H > emaSpread + Ticker1_C*b1 + AT2*K1 AND Ticker1_V > Vmin AND Ticker2_V > Vmin AND TimeNum() > H3*10000 + M3*100;
	Close_UP6 	= Spread_L < emaSpread - Ticker1_C*b2 AND Spread_L < emaSpread - Ticker1_C*b1 + AT2*K2 AND Ticker1_V > Vmin AND Ticker2_V > Vmin;
	Open_DOWN6	= Spread_L < emaSpread - Ticker1_C*b1 AND Spread_L < emaSpread - Ticker1_C*b1 + AT2*K1 AND Ticker1_V > Vmin AND Ticker2_V > Vmin AND TimeNum() > H3*10000 + M3*100;
	Close_DOWN6	= Spread_H > emaSpread + Ticker1_C*b2 AND Spread_H > emaSpread + Ticker1_C*b2 + AT2*K2 AND Ticker1_V > Vmin AND Ticker2_V > Vmin;
} break;

case 7:
{	
	Open_UP7 	= Spread_H > emaSpread + Ticker1_C*b1 AND Spread_H > emaSpread + Ticker1_C*b1 + AT3*K1 AND Ticker1_V > Vmin AND Ticker2_V > Vmin AND TimeNum() > H3*10000 + M3*100;
	Close_UP7 	= Spread_L < emaSpread - Ticker1_C*b2 AND Spread_L < emaSpread - Ticker1_C*b1 + AT3*K2 AND Ticker1_V > Vmin AND Ticker2_V > Vmin;
	Open_DOWN7	= Spread_L < emaSpread - Ticker1_C*b1 AND Spread_L < emaSpread - Ticker1_C*b1 + AT3*K1 AND Ticker1_V > Vmin AND Ticker2_V > Vmin AND TimeNum() > H3*10000 + M3*100;
	Close_DOWN7	= Spread_H > emaSpread + Ticker1_C*b2 AND Spread_H > emaSpread + Ticker1_C*b2 + AT3*K2 AND Ticker1_V > Vmin AND Ticker2_V > Vmin;
} break;

case 8:
{	
	Open_UP8 	= Spread_H > emaSpread + Ticker1_C*b1 AND Ticker1_V > Vmin AND Ticker2_V > Vmin AND TimeNum() > H3*10000 + M3*100;
	Close_UP8 	= Spread_L < emaSpread - Ticker1_C*b2 AND Ticker1_V > Vmin AND Ticker2_V > Vmin;
	Open_DOWN8	= Spread_L < emaSpread - Ticker1_C*b1 AND Ticker1_V > Vmin AND Ticker2_V > Vmin AND TimeNum() > H3*10000 + M3*100;
	Close_DOWN8	= Spread_H > emaSpread + Ticker1_C*b2 AND Ticker1_V > Vmin AND Ticker2_V > Vmin;
} break;

}

if (Name() == Ticker_name1 + "1") {Buy = Open_DOWN1; Sell = Close_DOWN1; Short = Open_UP1; Cover = Close_UP1; SetPositionSize(lot1, spsShares);}
if (Name() == Ticker_name2 + "1") {Buy = Open_UP1; Sell = Close_UP1; Short = Open_DOWN1; Cover = Close_DOWN1; SetPositionSize(lot2, spsShares);}
if (Name() == Ticker_name1 + "2") {Buy = Open_DOWN2; Sell = Close_DOWN2; Short = Open_UP2; Cover = Close_UP2; SetPositionSize(lot1, spsShares);}
if (Name() == Ticker_name2 + "2") {Buy = Open_UP2; Sell = Close_UP2; Short = Open_DOWN2; Cover = Close_DOWN2; SetPositionSize(lot2, spsShares);}
if (Name() == Ticker_name1 + "3") {Buy = Open_DOWN3; Sell = Close_DOWN3; Short = Open_UP3; Cover = Close_UP3; SetPositionSize(lot1, spsShares);}
if (Name() == Ticker_name2 + "3") {Buy = Open_UP3; Sell = Close_UP3; Short = Open_DOWN3; Cover = Close_DOWN3; SetPositionSize(lot2, spsShares);}
if (Name() == Ticker_name1 + "4") {Buy = Open_DOWN4; Sell = Close_DOWN4; Short = Open_UP4; Cover = Close_UP4; SetPositionSize(lot1, spsShares);}
if (Name() == Ticker_name2 + "4") {Buy = Open_UP4; Sell = Close_UP4; Short = Open_DOWN4; Cover = Close_DOWN4; SetPositionSize(lot2, spsShares);}
if (Name() == Ticker_name1 + "5") {Buy = Open_DOWN5; Sell = Close_DOWN5; Short = Open_UP5; Cover = Close_UP5; SetPositionSize(lot1, spsShares);}
if (Name() == Ticker_name2 + "5") {Buy = Open_UP5; Sell = Close_UP5; Short = Open_DOWN5; Cover = Close_DOWN5; SetPositionSize(lot2, spsShares);}
if (Name() == Ticker_name1 + "6") {Buy = Open_DOWN6; Sell = Close_DOWN6; Short = Open_UP6; Cover = Close_UP6; SetPositionSize(lot1, spsShares);}
if (Name() == Ticker_name2 + "6") {Buy = Open_UP6; Sell = Close_UP6; Short = Open_DOWN6; Cover = Close_DOWN6; SetPositionSize(lot2, spsShares);}
if (Name() == Ticker_name1 + "7") {Buy = Open_DOWN7; Sell = Close_DOWN7; Short = Open_UP7; Cover = Close_UP7; SetPositionSize(lot1, spsShares);}
if (Name() == Ticker_name2 + "7") {Buy = Open_UP7; Sell = Close_UP7; Short = Open_DOWN7; Cover = Close_DOWN7; SetPositionSize(lot2, spsShares);}
if (Name() == Ticker_name1 + "8") {Buy = Open_DOWN8; Sell = Close_DOWN8; Short = Open_UP8; Cover = Close_UP8; SetPositionSize(lot1, spsShares);}
if (Name() == Ticker_name2 + "8") {Buy = Open_UP8; Sell = Close_UP8; Short = Open_DOWN8; Cover = Close_DOWN8; SetPositionSize(lot2, spsShares);}

Buy = ExRem(Buy, Sell); Sell = ExRem(Sell, Buy); Short = ExRem(Short, Cover); Cover = ExRem(Cover, Short);