Сложная тема. Советники могут быть очень не похож друг на друга, но есть общии принципы.
Первый принцип. Если вы используете глобальные переменные. Т.е. переменные вынесенные за границы функций. Так вот эти переменные обнуляются при закрытии терминала. Это может нарушить работу советника. Но есть выход. Глобальные переменные терминала. Это специальные переменные которые сохраняют свои значения даже если терминал был выключен.
Второй принцип. Как правило нужно чтобы одновременно была открыта лишь одна позиция.
Ест специальная функция OrdersTotal. Если эта функция возвращает 0, то можно открывать позицию. Но если вы используете отложенные ордера, а вам надо проверить есть ли открытые позиции, то надо писать специальную функцию. Так как OrdersTotal возвращает количество всех ордеров.
Третий принцип. Если помимо ордеров советника предполагается использовать другие ордера, то нужно использовать магический номер.
Далее будут рассмотрены некоторые полезные функции.