Очень не желательно объявлять переменную внутри цикла или после условия.
Код:
[COLOR=#000000][COLOR=#007700]for([/COLOR][COLOR=#0000BB]int i[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]0[/COLOR][COLOR=#007700]; [/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]<=[/COLOR][COLOR=#0000BB]OrdersTotal[/COLOR][COLOR=#007700]()-[/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]; [/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]++)
{
if([/COLOR][COLOR=#0000BB]OrderSelect[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]SELECT_BY_POS[/COLOR][COLOR=#007700]))
{
if([/COLOR][COLOR=#0000BB]OrderMagicNumber[/COLOR][COLOR=#007700]()==[/COLOR][COLOR=#0000BB]magic[/COLOR][COLOR=#007700])
{
if([/COLOR][COLOR=#0000BB]OrderSymbol[/COLOR][COLOR=#007700]()==[/COLOR][COLOR=#0000BB]Symbol[/COLOR][COLOR=#007700]())
{
if([/COLOR][COLOR=#0000BB]OrderOpenTime[/COLOR][COLOR=#007700]()>=[/COLOR][COLOR=#0000BB]Time[/COLOR][COLOR=#007700][[/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]] && [/COLOR][COLOR=#0000BB]OrderOpenTime[/COLOR][COLOR=#007700]()<[/COLOR][COLOR=#0000BB]Time[/COLOR][COLOR=#007700][[/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]])
{
[/COLOR][COLOR=#0000BB]double fir_op_on_bar_price[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]OrderOpenPrice[/COLOR][COLOR=#007700]();
break;
}
}
}
}
} [/COLOR][/COLOR]
При таком объявлении переменной, в случае отсутствия ордеров открытых советником, переменная
fir_op_on_bar_price не будет существовать, так как не была объявлена. Значит применять её за пределами цикла можно будет только при наличии ордеров советника. При отсутствии, обращение к переменной, приведёт к ошибке, или даже зависанию программы.
То же а в этом коде
Код:
[COLOR=#000000][COLOR=#007700]for([/COLOR][COLOR=#0000BB]int i[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]0[/COLOR][COLOR=#007700]; [/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]<=[/COLOR][COLOR=#0000BB]OrdersTotal[/COLOR][COLOR=#007700]()-[/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]; [/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]++)
{
if([/COLOR][COLOR=#0000BB]OrderSelect[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]SELECT_BY_POS[/COLOR][COLOR=#007700]))
{
if([/COLOR][COLOR=#0000BB]OrderMagicNumber[/COLOR][COLOR=#007700]()==[/COLOR][COLOR=#0000BB]magic[/COLOR][COLOR=#007700])
{
if([/COLOR][COLOR=#0000BB]OrderSymbol[/COLOR][COLOR=#007700]()==[/COLOR][COLOR=#0000BB]Symbol[/COLOR][COLOR=#007700]())
{
[/COLOR][COLOR=#0000BB]int fir_or_time [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]OrderOpenTime[/COLOR][COLOR=#007700]();
[/COLOR][COLOR=#0000BB]int i [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]iBarShift[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]NULL[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]0[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]fir_or_time[/COLOR][COLOR=#007700]);
break;
}
}
}
} [/COLOR][/COLOR]
Здесь переменные
fir_or_time будут существовать только при наличии ордеров советника. И ещё
fir_or_time должна быть datetime, а не int типа. Переменная i объявлена в цикле for и в ней порядковый номер ордера. И тут же объявлена повторно и в ней номер бара. Кроме буквы i есть ещё и другие для переменных. Так же можно использовать сочетание букв.
Пожалуй лучше объявлять переменные заранее, а внутри цикла только присваивать им значение. Например в начале функции start() самое удобное место для объявления локальных переменных.