Максим, а не могут данные перемешаться из-за того что они пишутся в один буфер (нулевой который) ?
Не подскажете как работать с буферами когда индикатор сдвинут вперед или назад во времени ?
Какое будет первое значение буфера ? А то у меня сделки как-то "криво" открываются.
Что такое алерты и принты ? Если можно.
Еще раз спасибо.
Нет, не перемешаются, буфер всегда содержит актуальную информацию, т.е. текущие значения индикатора. Не важно какой сдвиг, в буффере нулевым элементом всегда будет последнее значение индикатора с настройками, заданными при присвоении хэндла. Например, здесь:
err3=CopyBuffer(iMA1_handle,0,1,20,iMA1_buf);
вы копируете из нулевого буфера (поскольку для МА он всего один) 20 значений индикатора, начиная с 1-го, а не с 0-го. Если надо с нулевого, или еще с какого-то, то нужно вторую единичку поменять на 0. Первое значение буфера всегда идет под индексом 0 а не 1. iMA1_buf[0] будет содержать последнее известное значение индикатора, т.е. первое справа. 1 - второе, и т.д.
Print(); это ф-я, которая будет выводить нужную инфу в журнал, в процессе тестирования советника. Допустим, вы можете посмотреть какое значение индикатора скопировалось в массив:
Print(iMA1_buf[0]);
В журнале появится нулевое (то есть первое) полученное значение.
Максим, благодаря разьяснениям (о том как буферы формируются) уже вот так выглядит код и код работает (сделки идут):
Только в старой версии Metatradera 5 он не работает (один ордер открывается как и было)!
if(iMA_buf[1]>iMA1_buf[1]) //если значение индикатора были больше цены закрытия и стали меньше
{
if(m_Position.Select(my_symbol)) //если уже существует позиция по этому символу
{
if(m_Position.PositionType()==POSITION_TYPE_SELL) m_Trade.PositionClose(my_symbol); //и тип этой позиции Sell, то закрываем ееif(m_Position.PositionType()==POSITION_TYPE_BUY) return; //а если тип этой позиции Buy, то выходим
}
m_Trade.Buy(0.01,my_symbol); //если дошли сюда, значит позиции нет, открываем ее
}
if(iMA_buf[1]<iMA1_buf[1]) //если значение индикатора были меньше цены закрытия и стали больше
{
if(m_Position.Select(my_symbol)) //если уже существует позиция по этому символу
{
if(m_Position.PositionType()==POSITION_TYPE_BUY) m_Trade.PositionClose(my_symbol); //и тип этой позиции Buy, то закрываем ееif(m_Position.PositionType()==POSITION_TYPE_SELL) return; //а если тип этой позиции Sell, то выходим
}
m_Trade.Sell(0.01,my_symbol); //если дошли сюда, значит позиции нет, открываем ее
}
Максим, благодаря разьяснениям (о том как буферы формируются) уже вот так выглядит код и код работает:
Ну а сделки в соответствии с вашими правилами открываются теперь? Должно в любой версии работать, здесь все функции стандартные и старые. Мб в тестере опять не на всех тиках тестируете?
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Максим, а не могут данные перемешаться из-за того что они пишутся в один буфер (нулевой который) ?
Не подскажете как работать с буферами когда индикатор сдвинут вперед или назад во времени ?
Какое будет первое значение буфера ? А то у меня сделки как-то "криво" открываются.
Что такое алерты и принты ? Если можно.
Еще раз спасибо.
Максим, а не могут данные перемешаться из-за того что они пишутся в один буфер (нулевой который) ?
Не подскажете как работать с буферами когда индикатор сдвинут вперед или назад во времени ?
Какое будет первое значение буфера ? А то у меня сделки как-то "криво" открываются.
Что такое алерты и принты ? Если можно.
Еще раз спасибо.
Нет, не перемешаются, буфер всегда содержит актуальную информацию, т.е. текущие значения индикатора. Не важно какой сдвиг, в буффере нулевым элементом всегда будет последнее значение индикатора с настройками, заданными при присвоении хэндла. Например, здесь:
вы копируете из нулевого буфера (поскольку для МА он всего один) 20 значений индикатора, начиная с 1-го, а не с 0-го. Если надо с нулевого, или еще с какого-то, то нужно вторую единичку поменять на 0. Первое значение буфера всегда идет под индексом 0 а не 1. iMA1_buf[0] будет содержать последнее известное значение индикатора, т.е. первое справа. 1 - второе, и т.д.
Print(); это ф-я, которая будет выводить нужную инфу в журнал, в процессе тестирования советника. Допустим, вы можете посмотреть какое значение индикатора скопировалось в массив:
В журнале появится нулевое (то есть первое) полученное значение.
Вот тут вы сравниваете зачение одного индикатора на 8 баре со значением другого индикатора на 10-м:
Мб вам нужно сравнивать на первом или нулевом баре?
Максим, благодаря разьяснениям (о том как буферы формируются) уже вот так выглядит код и код работает (сделки идут):
Только в старой версии Metatradera 5 он не работает (один ордер открывается как и было)!
Максим, благодаря разьяснениям (о том как буферы формируются) уже вот так выглядит код и код работает:
Почему-то сделки открываются по несуществующим ценам:
Максим, вы не сталкивались с таким ?
Почему-то сделки открываются по несуществующим ценам:
Максим, вы не сталкивались с таким ?
А где он настраивается (искал, не могу найти) ? Спред у меня 10 копеек ночью, 2 копейки днем.
Я заменилс траку которая открывает позиции (что-бы "левых цен" открытия небыло) на эту:
Стопы стоят 50 копеек, пишет что не правильные:
Еще реквоты, откуда они берутся непонятно:
А где он настраивается (искал, не могу найти) ? Спред у меня 10 копеек ночью, 2 копейки днем.
А в мт5 нет этой настройки, он берется из обзора рынка. Тут спред рубля 3, судя по графику, потому и стопы не ставятся.
requote (59.9735/62.0900) нифига себе реквот :)