Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 198
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Добрый день.
Подскажите, как можно реализовать следующее:
Цена движется в промежутке 1,9047 - 1,9080 (цифры условные). Если цена открытия следующей свечи выходит за данный диапазон - выдать Alert. Если не выходит - ждать следующей свечи. И так до тех пор пока цена не выйдет за диапазон.
Заранее спасибо.
Вот кусок кода данные из которого далее используются для анализа:
т.е. дальше код будет выглядеть как:
И вот вопрос: как и куда это прописать? Если внутрь условия - вывода алертов нет, а если вне условия - вывод на каждом тике.
Извиняюсь за ранее некорректно сформулированный вопрос.
Вот кусок кода данные из которого далее используются для анализа:
т.е. дальше код будет выглядеть как:
И вот вопрос: как и куда это прописать? Если внутрь условия - вывода алертов нет, а если вне условия - вывод на каждом тике.
Извиняюсь за ранее некорректно сформулированный вопрос.
Спасибо, вроде разобрался. Вот только ещё вопрос: алерты теперь выводятся от заданного временного промежутка и при превышении диапазона до "упора". А можно как-то остановить этот "перебор" при достижении первого значения удовлетворяющего условию?
Ну, вам нужно понять главное условие, которое постоянно, на протяжении определённого времени является истинным. Например - сравнение времени. После выдачи всех алертов нужно присвоить новое значение переменной, с которой сверяете текущее время. Поищите функцию определения нового бара. Концепция её построения должна вам помочь.
Вот тут читали?
Как узнать минимальное расстояние от рынка для выставления отложенного ордера?
Как узнать минимальное расстояние от рынка для выставления отложенного ордера?
int level=MarketInfo(Symbol(), MODE_STOPLEVEL);
если стоплевел равен нулю, то скорее всего level=MarketInfo(Symbol(), MODE_SPREAD)*2;
В Альпари точно в качестве СтопЛевел используется двойной спред.
Для определения дистанции здесь почитайте.
Спасибо artmedia70:
ОК, долго не отвечаете, дам подсказку: при возврате значения true из функции isCloseLastPosByStop (), верните ещё одно значение, а именно: размер лота найденной последней позиции.
Как сделать? Передайте в функцию по ссылке переменную, в которую и запишете в самой функции размер лота. Для этого нужно будет чуть изменить функцию isCloseLastPosByStop ()
Если не понятно нифига - ищите функцию, которая вернёт размер лота последней закрытой позиции. Либо сами сделайте. И используйте её, но это затратнее, нежели передать значение лота вместе со значением true
Изменил функцию.Сделал так что вместо True функция возвращает переменную lot,в которую в самой функции я записал размер лота.
Все компилируется,но ордера не открываются.В журнале пишет:
2013.10.23 20:57:46 2011.02.24 16:25 ПРЕДЫД СВЕЧА EURUSD,M5: OrderSend error 4051
2013.10.23 20:57:46 2011.09.22 22:20 ПРЕДЫД СВЕЧА EURUSD,M5: invalid lots amount for OrderSend function
Подскажите пожалуйста,в чем моя ошибка.
Спасибо.
Изменил функцию.Сделал так что вместо True функция возвращает переменную lot,в которую в самой функции я записал размер лота.
Все компилируется,но ордера не открываются.В журнале пишет:
2013.10.23 20:57:46 2011.02.24 16:25 ПРЕДЫД СВЕЧА EURUSD,M5: OrderSend error 4051
2013.10.23 20:57:46 2011.09.22 22:20 ПРЕДЫД СВЕЧА EURUSD,M5: invalid lots amount for OrderSend function
Подскажите пожалуйста,в чем моя ошибка.
Спасибо.
Функция определения последней закрытой позиции по стопу имеет тип bool, а вы пытаетесь возвращать из неё тип double. Соответственно, она вам возвращает либо 0, либо 1.
Я ж вам писал, что в неё нужно добавить передачу одной переменной по ссылке:
Теперь проверяем, например, последнюю Buy:
Примерно так...