Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 155
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
народ, посмотрите пожалуйста код, что в нём не так?? первый мой советник.. должен работать по такой стратегии: сначала открывается ордер (не важно в какую сторону, то есть рандомно) и выставляется отложенный ордер в противоположную сторону с удвоенным объёмом, например, если выставился buy, то выставляется sellstop на 25 пунктов ниже чем buy, а если выставился sell, то выставляется buystop на 25 пунктов выше. Если срабатывает один из отложенных ордеров, то выставляем ещё один отложенный ордер в противоположную сторону от сработанного ордера, по цене первого открытого ордера. если и он срабатывает, то опять выставляем отложенный в противоположную сторону от сработавшего на расстоянии 25 пунктов, и т.д. Таким образом все ордера buy должны быть с одной ценой, и все sell тоже с одной ценой. Если кто-нибудь понял что я тут написал, то помогите с кодом))
А это из индикатора или из советника? Есть разница. В общих чертах, чтобы не рисовать стрелку, то в индикаторе нужно проверить соседний предыдущий бар и, если он имеет не нулевое и не пустое значение, значит - стрелка на соседнем баре уже есть и в буфер текущего бара значение вносить не нужно. Для советника также, если на соседнем предыдущем баре есть уже зафиксированный факт пересечения в ту же сторону, что и на текущем, и стрелочкой этот факт уже отмечен, то на текущем баре факт пересечения можно не регистрировать (если он тоже есть) и стрелку выводить тоже не обязательно.
Больше ничего по вашему коду я подсказать не могу. Если есть поблизости телепаты, они наверное смогут в большей степени вникнуть в предоставленный вами код ;)
Это из индикатора. Пересечение 2 скользящих, выдает направление. Не совсем понял, направление дает только при пересечении не на каждом баре. От сюда, судить по предыдущему бару нельзя.... Скажите, мы ведь собираем массив? Как проверить предыдущую ячейку? Два буфера один CrossUp[i]=Low[i] - Range*0.75;, другой скажем Cr[i]=Low[i] + Range*0.75;(просто не охота лезть в новь по папкам и в код)
народ, посмотрите пожалуйста код, что в нём не так?? первый мой советник.. должен работать по такой стратегии: сначала открывается ордер (не важно в какую сторону, то есть рандомно) и выставляется отложенный ордер в противоположную сторону с удвоенным объёмом, например, если выставился buy, то выставляется sellstop на 25 пунктов ниже чем buy, а если выставился sell, то выставляется buystop на 25 пунктов выше. Если срабатывает один из отложенных ордеров, то выставляем ещё один отложенный ордер в противоположную сторону от сработанного ордера, по цене первого открытого ордера. если и он срабатывает, то опять выставляем отложенный в противоположную сторону от сработавшего на расстоянии 25 пунктов, и т.д. Таким образом все ордера buy должны быть с одной ценой, и все sell тоже с одной ценой. Если кто-нибудь понял что я тут написал, то помогите с кодом))
Ерунду вы понаписали... Хотя бы это:
вы уверены, что ордер выбран? Вы уверены, что это цена? Вы уверены, что у ордера тикет == 1 ? При выборе по тикету pool не имеет значения, поэтому MODE_TRADES там лишнее. После успешного выбора по тикету нужно ещё проверить время закрытия выбранного ордера. Если оно == 0, то ордер находится в рынке и выбран из списка рыночных ордеров, если время закрытия > 0, то ордер закрыт, либо является удалённым отложенным и выбран из списка закрытых ордеров.
Дальше в код смотреть не охота... Наверное, вам прежде нужно с азами ознакомиться. Читайте учебник и документацию - они тут на видном месте.
Дальше в код смотреть не охота...
то что бросилось в глаза)) Зачем 4 одинаковых цыкла? и выборка не то что в коменте
с селстопом аналогично. надо OP_BUYSTOP и OP_SELLSTOP
то что бросилось в глаза)) Зачем 4 одинаковых цыкла? и выборка не то что в коменте
с селстопом аналогично. надо OP_BUYSTOP и OP_SELLSTOP
Это из индикатора. Пересечение 2 скользящих, выдает направление. Не совсем понял, направление дает только при пересечении не на каждом баре. От сюда, судить по предыдущему бару нельзя.... Скажите, мы ведь собираем массив? Как проверить предыдущую ячейку? Два буфера один CrossUp[i]=Low[i] - Range*0.75;, другой скажем Cr[i]=Low[i] + Range*0.75;(просто не охота лезть в новь по папкам и в код)
Код проверки:
Строка с результатом:
1, OrderType=4 - "4" это же OP_SELLLIMIT?
2. OrderClosePrice()=0.9237 OrderOpenPrice()=0.9419 - Откуда появилось значение OrderClosePrice(), не равное OrderOpenPrice()?
Есть ордер BUY_STOP который был удален до исполнения:
Код проверки:
Строка с результатом:
1, OrderType=4 - "4" это же OP_SELLLIMIT?
2. OrderClosePrice()=0.9237 OrderOpenPrice()=0.9419 - Откуда появилось значение OrderClosePrice(), не равное OrderOpenPrice()?
а вы в тестере в режиме визуализации, да по всем тикам, в пошаговом режиме (F12 на паузе) найдите момент его удаления и посмотрите текущую цену, может там собачка порылась?
БИНГО! Не знал, но все как Вы написали, т.е. цена закрытия в этом случае это значение цены в момент, когда ордер был удален. Спасибо!
Часто я внутри функций объявлял переменную типа так:
Дальше внутри, при каком-то условии уже вызываю её, чтобы увидеть, если есть ошибка. Ну это не только у меня, а и много где, в кодах, которые мне попадались. Так сказать, типичная ситуация. Сегодня я подумал, что не логично каждый раз, в каждой функции, где требуется контролировать ошибки, объявлять ту же самую переменную. Подумал, пришёл к выводу, что проще будет один раз объявить глобально и инициализировать её в ините. Как-то так:
А дальше, когда нужно в пользовательских функциях вызывать переменную err, зная, что у неё уже есть значение. По сути, GetLastError() выдаёт код последней ошибки, а значит, если в каждой функции будет вызываться в конце всех расчётов данная переменная err, отвечающая за вывод кода ошибки, и, вызывающая GetLastError(), то всё будет верно, так?
Но зато, если не вызвать по конце какой-то функции (по цепочке выполнения кода эксперта) то переменная не обнулится, и это грозит не верным выполнением, в случает, если в предыдущей по цепочке выполнения кода была ошибка, а в текущей нет, НО код ошибки то возвращается последний... а для её сброса, необходимо вызвать данную функцию GetLastError(). Т.е. тут всё зависит от того, вызвана оно была или нет. Если нет уверенности, что будет везде так, проще перестраховаться и обнулять её каждый раз, так?