double BidMax; int start() { static int TickNomber = 0; TickNomber++; Alert( "------------TickNomber = ",TickNomber); Alert( "1-- BidMax = ",BidMax," Bid = ",Bid); Comment("1-- BidMax = ",BidMax," Bid = ",Bid); int total = OrdersTotal(); for(int cnt=0; cnt<total; cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { if(BidMax<Bid) { BidMax=Bid; Alert( "2-- BidMax = ",BidMax," Bid = ",Bid); Comment("2-- BidMax = ",BidMax," Bid = ",Bid); } } } } return; }
Всё работает так, как написано в учебнике. Результаты работы советника полностью отвечают алгоритму в коде.
По-моему, Вы просто не открыли ордер. По этой причине управление ни разу не было передано в тело цикла for, т.е. значение переменной BidMax ни разу не было изменено.
Откройте ордер Buy и всё заработает (соответственно коду).
double BidMax=0; int start() {...
Спасибо всем, я нашел ошибку. Нужно дейстаительно проинициализировать переменную, но не нулем, а целым, положительным числом отличным от нуля. Почему так, я не понимаю. Это как у шамана - если плюнуть и постучать в бубен - пойдет дождь. Почему, никто не знает, но дождь действительно идет.
Спасибо всем, я нашел ошибку. Нужно дейстаительно проинициализировать переменную, но не нулем, а целым, положительным числом отличным от нуля. Почему так, я не понимаю. Это как у шамана - если плюнуть и постучать в бубен - пойдет дождь. Почему, никто не знает, но дождь действительно идет.
Не нужно фантазий.
Глобальную переменную инициализировать нулём не обязательно.
Причина в том, что:
1. Код составлен небрежно.
2. Вы не до конца проанализировали как этот код исполняется.
Не нужно фантазий.
Глобальную переменную инициализировать нулём не обязательно.
Причина в том, что:
1. Код составлен небрежно.
2. Вы не до конца проанализировали как этот код исполняется.
1. Извиняйте, дяденька, но я весь код не вывешивал - места не хватит. Просто вычленил проблемный кусок.
2. Чтож вы хочите, я ж не Программер, а мелкий гуманитарий. Подскажите, как анализировать, а лучше тестировать, а еще лучше тестировать пошагово, а то у меня весь текст пестрит от Comment( )!!!
1. Извиняйте, дяденька, но я весь код не вывешивал - места не хватит. Просто вычленил проблемный кусок.
2. Чтож вы хочите, я ж не Программер, а мелкий гуманитарий. Подскажите, как анализировать, а лучше тестировать, а еще лучше тестировать пошагово, а то у меня весь текст пестрит от Comment( )!!!
Используйте Print() и затем смотрите в журнале ход исполнения программы, а Сomment() на экране будет только последний, остальные промелькнут.
1. Извиняйте, дяденька, но я весь код не вывешивал - места не хватит. Просто вычленил проблемный кусок.
2. Чтож вы хочите, я ж не Программер, а мелкий гуманитарий. Подскажите, как анализировать, а лучше тестировать, а еще лучше тестировать пошагово, а то у меня весь текст пестрит от Comment( )!!!
Вы бы посмотрели как это выглядит со стороны..
Мало того, что Вам бесплатно помогают и указывают на ошибки, Вы ещё и нахальничаете.
--
На правах "дяденьки":
Программирование - это стиль мышления. У обычного начинающего босяка в голове каша из "тю, а чё оно работает не так, как я хочу?", "пивка бы хлебнуть", "чё он на меня прёт? я ж хороший" в перемешку с соответствующими эмоциями и малоосмысленными намерениями.
Программирование не терпит невнимательности и небрежности. Напротив, оно требует сосредоточенности и полной отдачи (особеннно на этапе изучения).
--
1. Весь код и не нужен. Смысл понятен. В моём сообщении дополнены необх. строки, представленный мною код работает. Запустите и посмотрите что к чему.
2. Я от Вас ничего не хочу. Разве что, немного помочь..
>> Как анализировать?
А. Обычно анализ кода заключается в том, чтобы понять ранее непознанное свойство оператора или алгоритма в целом. Работа сводится к тому, чтобы удалить всё несущественное и продумать ещё раз сущность проблемы.
В Вашем коде (с точки зрения анализа проблемы) "лишними" являются строки:
if(OrderType()<=OP_SELL &&
и
if(OrderType()==OP_BUY)
В. Используйте для отладки Alert(). В моём коде, например, есть строка
Alert( "------------TickNomber = ",TickNomber);
Это сообщение выдаётся в начале каждого тика. Удобно для отделения всего набора сообщений, выдаваемых на каждом тике.
С. Приведите код в порядок и пишите сообщения в каждой строке. Это существенно поможет Вам продвинуться в понимании порядка исполнения программы.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
В учебнике написанно, что переменная, определенная до int start(), глобальна для всей программы. У меня есть такой кусок в проге:
Но в первом комментарии он всегда показывает BidMax равным нулю, а во втором прыгает туда сюда вместе с Bid.!!!!!