Нет. Советник не открывает больше одного ордера.
Вообще общий принципе работы такой:
Проверка всех условий, открывается ордер с лотом, например 1.0. Как только он закрылся проверка на то как он закрылся положительно или нет. Если да, то лоту снова дается значение 1.0.
Если же нет, то тогда, он ищет в массиве 1.0, возвращает индекс этого элемента, к индексу прибавляем 1, и получается что следующий размер лота будет возвращаться с того элемента, индекс которого например 0+1, то есть 1. Там уже значение 4, и так далее.
Все в принципе работает нормально, то есть как и должно, но после нескольких открытий ордеров(в последний раз открыл 3 или 4), перестает торговать с ошибкой "array out of range".
Хах)) Теперь понятно, что ничего не понятно. Когда лот был 1.0, он вернул верно, индекс 0.
Когда лот стал 4.0, он вернул индекс 11, то есть последний элемент массива и выбил ошибку, потому как советник попытался взять значение с 12го элемента.
Честно сказать.. понятия не имею что делать. Я либо неправильно использую функцию ArrayBsearch или она некорректно работает.
Спасибо. Только не понятно вот что, сортировка массива, он сортирует значения или индексы.
То есть, я вот хотел сделать так. По мартингейлу обычно используют шаги, например 7 шагов или еще сколько-нибудь.
Так вот, в массиве, 12 элементов, то есть как бы 12 шагов, я хотел сделать так, что если бы пользователю нужно было бы не 12, а 7, то после 7, он ставил 0.0.
В таком случае если сортировать массив, он наверняка выставит сперва нули, а потом уж 1,4,10 и т.д?
Не, в том то и дело. Мне нужно чтобы нули были после больших значений.
Логика такая:
Советник проходит, например, 7 шагов. После 7, лот ставиться 0, дальше у меня стоит функция CheckLot, то есть если лот меньше MINLOT то ставим MINLOT.
То есть опять 1.0. И опять по новой, он находит эту еденицу в массиве и снова начинает 1,4,10,25 и т.д.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте ув.форумчане и все, все, все.
Прошу помощи. Стал недавно заниматься разработкой советника для опционов.. и наткнулся на одну непонятную мне ошибку.
Итак, принцип работы советника прост, работает по Мартингейлу, то есть при каждой неудачной сделке увеличивает лот.
double ArLots[12]; //Объявляется в глобалке.
Значения присваиваются в OnInit()
{ArLots[0]=Lot_1, ArLots[1]=Lot_2 и т.д.} //Lot_1, Lot_2 и т.д. это input double переменные.
...{
if(close>=open)
{
int ArIndexOfpLot = ArrayBsearch(ArLots,pLot); //ArLots мой массив, в него занесены значения лотов. pLot - лот предыдущего ордера.
int NextArIndex = ArIndexOfpLot+1;
lot = ArLots[NextArIndex]; //<-Здесь выбивает ошибку. Не сразу, один или два раза он все таки увеличивает лот, а потом говорит "array out of range".
break; //Было бы понятно если бы он доходил до последних элементов массива, но нет, ошибка вылетает на первых.
}
return lot;
}