Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2446

 
Valera #:
Всем привет, нужна помощь по написанию советника. У меня есть индикатор, у которого необходимо скопировать значение из его буффера(там только 1 значение) за предыдущую и сравнить его с ценой закрытия за предыдущую свечу. Когда значение буффера за предыдущую свечу больше, чем цена закрытия, тогда мы открываем шорт позицию и ждем встречную(когда значение индикатора менее, чем цена закрытия). Точно так же нужно сделать для лонг позиции, когда значение индикатора меньше, чем цена закрытия, то открываем лонг и ждем встречную. Я новичок, у меня не получилось это написать. Вот то, что смог сделать:

Есть кнопка

Выложите код, возможно кто-то поправит или подскажет.

 
Подскажите, пожалуйста, как в DRAW_COLOR_ZIGZAG менять цвет. 

У меня, как и у оригинала, три состояния зигзага: соответсвенно когда действующая нога направлена вверх, направлена вниз и процесс удлинения ноги (обнуление предыдущего буфера и рисовка снова). 

Поскольку у меня другая логика в отличие от стандартного зигзага, то у ZigZagColor не получилось забрать код. В моём каждая нога хаотичная, то красная, то синяя
 
Ivan Butko #:
Подскажите, пожалуйста, как в DRAW_COLOR_ZIGZAG менять цвет. 

У меня, как и у оригинала, три состояния зигзага: соответсвенно когда действующая нога направлена вверх, направлена вниз и процесс удлинения ноги (обнуление предыдущего буфера и рисовка снова). 

Поскольку у меня другая логика в отличие от стандартного зигзага, то у ZigZagColor не получилось забрать код. В моём каждая нога хаотичная, то красная, то синяя

Поставьте правильное условие по которому заполняется буфер цвета. 

Типа, если текущее значение выше предыдущего цвет зелёный. И наоборот…

 
Alexey Viktorov #:

Поставьте правильное условие по которому заполняется буфер цвета. 

Типа, если текущее значение выше предыдущего цвет зелёный. И наоборот…

А как он ставится?

В оригинале ColorBuffer[i] = 0; стоит или ColorBuffer[i] = 1; 

Пробую эти строчки поставить при смене зигзага - хаотично отрисовывают всё равно. Три подряд ноги синие, пять - красных, одна синяя, две красных и тд. 

 
Ivan Butko #:

А как он ставится?

В оригинале ColorBuffer[i] = 0; стоит или ColorBuffer[i] = 1; 

Пробую эти строчки поставить при смене зигзага - хаотично отрисовывают всё равно. Три подряд ноги синие, пять - красных, одна синяя, две красных и тд. 

Ну хотя бы пару строк перед этим заполнением буфера показали. 

 
Alexey Viktorov #:

Ну хотя бы пару строк перед этим заполнением буфера показали. 

А, всё, само заработало. Благодарю вас за ответы

Ничего вообще не делал, только поматерился вслух. Надо бы запомнить эту матную комбинацию 

 

Имеется запущенный терминал на машине, запускаем ещё копию терминала с тем-же номером счёта.

ВОПРОС:

Как можно идентифицировать программно, что запущена "копия терминала/два терминала"

 
Vitaly Muzichenko #:

Имеется запущенный терминал на машине, запускаем ещё копию терминала с тем-же номером счёта.

ВОПРОС:

Как можно идентифицировать программно, что запущена "копия терминала/два терминала"

Как определить запуск двух терминалов не знаю, без DLL думаю нельзя.

Если запустить в обоих терминалах скрипт, то можно определить к одному счету подключены или нет.

А вот определить какая копия терминала запущена можно запросив путь

TerminalInfoString(TERMINAL_PATH)

 
Vitaly Muzichenko #:

Имеется запущенный терминал на машине, запускаем ещё копию терминала с тем-же номером счёта.

ВОПРОС:

Как можно идентифицировать программно, что запущена "копия терминала/два терминала"

в MetaTrader, без активных согласованных действий роботов на терминалах никак..

в API нет ничего про открытые/действующие под логином сессии.

даже чтобы организовать работу двух терминалов на одном счёте, люди выдумывают "фейк-ордера" - ставят/убирают отложки и такой азбукой морзе общаются экземпляры разных терминалов

PS/ встречал системы, где есть server-side storage там взаимодействие возможно без лишних ордеров. Или самому использовать отдельную внешнюю сетевую базу.

 

Вопрос в том, что нельзя допустить работы 2-х и более терминалов одновременно.

В приоритете только первый запущенный, вот и нужно решение как определить, что первым запущен именно терминал "А", а не "В"

P.S. Нужно как-то получить идентификатор терминала примерно в таком формате "3EF1-925D"