В общем, здесь не языком учат писать, здесь логику программиста нужно понимать.
Давайте по порядку:
Когда советника ломают, то переменные принимают вид gi_424
т.е. в исходнике было например: StopLossLevel=130
а ломаный код выглядит как gi_456=130
чтобы подправить Вам нужно найти процедуру
OrderNOW(OP_BUY, gi_456, gi_460); - думаю она выставляет ордер (я код не читал сейчас на работе)
В теле процедуры искать строку похожую на:
ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,gi_456,gi_123,"My order #",Magik,0,Green);
Так вот, gi_456 в данном случае стоп лосс!
причем переменная gi_424 в записи if (gi_424) {} является булевой
А процедура OrderNOW(OP_BUY, gi_456, gi_460) скорей всего, в параметрах gi_456, gi_460 передает стоплосс и тейк профит (я так подозреваю, просто код не вижу)))))))))))))
Ну а исходник наверно выглядел так:
if (condition){ //если разрешена покупка выполняем блок
OrderNOW(OP_BUY, StopLossLevel, TakeProfitLevel); //Вызвал процедуру открытия ордера
condition=False; // Сбросил флаг на покупку
condition2=True; // Установил флаг условия 2, может быть это условие разрешающее продажу
...
}
void OrderNOW(int TipOperacii, int StopLossLevel, int TakeProfitLevel) //описал процедуру открытия ордера
{
...
if (TipOperacii==OP_BUY) { // это условие будет необходимо в выборе Bid или Ask
ticket=OrderSend(Symbol(),TipOperacii,Lot,Ask,3,Bid-gi_456*Point,Ask+gi_123*Point,"EA Boss",Magik,0,Green); // Выставил ордер, ну а если еще вернуть тикет то процедура станет функцией
}
...
}
Компраневу?????