Скачать MetaTrader 5

Как можно передать значение переменной из одного испольнения советника в другое?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Forex Trader
114280
Forex Trader  
Я хочу чтобы мой советник открывал позицию только если один и тот же торговый сигнал был им выдан за два бара подряд. Вместо того чтобы внутри советника вычислять торговый сигнал за оба бара (текущий и предыдущий), я хотел бы ускорить его таким образом чтобы он вычислял этот торговый сигнал только для текущего бара и сохранял это значение в памяти (например, 1 покупай, -1 продавай, 0 никаких действий). Эта память проверялась бы на каждом баре и если торговый сигнал текущего бара совпадал со значением в памяти, то советник открывал бы соответствующую позицию и выставлял 0 в память. Надеюсь логика понятна. Только если я буду делать через обычную переменную, то её значения теряется при появлении нового бара. Например, мой код выглядит что-то в следующем роде

int PreviousBarSignal;
<Calculate PresentBarSignal>
if (PreviousBarSignal==1 && PresentBarSignal==1)
{"Buy";PreviousBarSignal=0;}
esle if (PreviousBarSignal==-1 && PresentBarSignal==-1)
{"Sell";PreviousBarSignal=0;}
esle {PreviousBarSignal=PresentBarSignal;}
return(0)

Значение PreviousBarSignal, рассчитанное для предыдущего бара, не сохраняется тестером. В результате чего, PreviousBarSignal всегда 0 в начале программы. Конечно можно записать значение PreviousBarSignal в файл и потом прочитать его, но хотелось бы иметь возможность передавать значение торгового сигнала от одного рана к другому без внешних файлов. Если такая возможность?
Forex Trader
114280
Forex Trader  
попробуйте объявить переменную PreviousBarSigna на глобальном уровне, то есть вне всех функций
Forex Trader
114280
Forex Trader  
Спасибо за совет, Slawa. Всё заработало.
Forex Trader
114280
Forex Trader  
Чисто профессиональный вопрос - а чем это лучше тупового вычисления двух баров? На первый взгляд, это намного проще.
Спасибо.
Forex Trader
114280
Forex Trader  
Вопрос не тупой и я его предвидел и пытался ответить в своем первом сообщении. Если советник очень медленный, то лучше вычислять один бар, то есть при появлении нового бара, только новый бар разсчитывается а значение предыдущего бара уже должно быть вычислено и сохранено в памяти. Если разсчитывать два бара (новый и предыдущий), то советник будет в два раза медленнее т.к. предыдущий бар будет разсчитываться два раза: когда он был новым и когда он стал предыдущим.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий