Ваши вопросы по языку MQL4

AlexeyVik

Программист mql4 mql5
Ну так делись. Хитрый какой.
Лично мне интересно, возможно не только мне, какой ДЦ, в чём была проблема и как решил.

Неужели ты до-сих пор хочешь услышать что-то новое, что сам не знаешь??? Такого быть не может...:)
 

king

Активный участник
как нужно писать в коде. "после закрытие свеча зеленом цвете"
 

Ugar

Гуру форума
Неужели ты до-сих пор хочешь услышать что-то новое, что сам не знаешь??? Такого быть не может...:)
Как не странно, я готов учиться у любого кто знает хоть чуть чуть больше меня. Конечно речь идёт о тематике которая меня интересует профессионально. Кроме того, всех нюансов о всех ДЦ вряд ли кто то может знать. Их развелось как собак не резаных.
Практически любая программная проблема mql4 для меня решаемая. А вдруг кто то решил оптимальнее и проще, почему бы не перенять приёмчик.
 

eevviill

Заблокирован
if(Close[1]-Open[1]> 0.9*Point)
{
//прошлая свеча закрылась быком
}
if(Open[1]-Close[1]> 0.9*Point)
{
//прошлая свеча закрылась медведем
}
Хмм. По моему чем проще, тем лучше. Ну ты и сам так говорил. Или я не так вопрос понял?

PHP:
Close[1]>Open[1]   //green
Open[1]>Close[1]   //red
Open[1]==Close[1] //yellow
 

Ugar

Гуру форума
Хмм. По моему чем проще, тем лучше. Ну ты и сам так говорил. Или я не так вопрос понял?

PHP:
Close[1]>Open[1]   //green
Open[1]>Close[1]   //red
Open[1]==Close[1] //yellow
Если не учитывать погрешности хранения данных типа double то можно и так.
 

king

Активный участник
Если не учитывать погрешности хранения данных типа double то можно и так.

У меня индикатор есть. Оно показивает движение цены. красным и зеленым цветом. Свечу оно сама крашивает даже если это свеча бычья оно может быть и зеленым и красным. Надо написат кож так чтобы с сигнала индиватора прочиталь а не с цены. коде примерно так панисано
if(MF>0 && MFC> && тут надо указат если предидуший свеча закрылось зеленым цветом )
comment=buy
Тут я вложил скрын по индикатору.
Спасибо
 

Вложения

  • SuperIndi.jpg
    SuperIndi.jpg
    53,2 КБ · Просмотры: 24

Ugar

Гуру форума
У меня индикатор есть. Оно показивает движение цены. красным и зеленым цветом. Свечу оно сама крашивает даже если это свеча бычья оно может быть и зеленым и красным. Надо написат кож так чтобы с сигнала индиватора прочиталь а не с цены. коде примерно так панисано
if(MF>0 && MFC> && тут надо указат если предидуший свеча закрылось зеленым цветом )
comment=buy
Тут я вложил скрын по индикатору.
Спасибо
Надо сравнивать значения буферов.
 

Ugar

Гуру форума
Да. как на скрыне показано.
Это не вопрос, а ответ. Там 4 буфера. Одна пара формирует тонкую линию, другая толстую. Цвет линии зависит от разницы в значениях ячеек соответствующей пары буферов. Сравнив значения в паре буферов узнаешь цвет.
 

king

Активный участник
Это не вопрос, а ответ. Там 4 буфера. Одна пара формирует тонкую линию, другая толстую. Цвет линии зависит от разницы в значениях ячеек соответствующей пары буферов. Сравнив значения в паре буферов узнаешь цвет.

Если честно я вообще не понимаю mql4. мне только надо писать в коде после закрытие красным(или голубым) цветом. или dll файл нужен для этого.
Вообщем надо писать советник что будет прояитать с графика и открывать и закрывать позиции. скажем иммется Бай позиция и оно зароеться если свеча изменить свой цвет на красный и закроется и в начале нового свеча откроется Селл. И наоборот.
 
Последнее редактирование:

Ugar

Гуру форума
Если честно я вообще не понимаю mql4. мне только надо писать в коде после закрытие красным(или голубым) цветом. или dll файл нужен для этого.
Нет, dll не нужно. Нужно заказать советник тому кто понимает mql4. В рекламном разделе их много. На любой вкус и кошелёк.http://forexsystemsru.com/yazyk-pro...6-dorabotka-botov-sovetnikov-indikatorov.html
 
Последнее редактирование:

Vseslav

Новичок форума
Закрытие ордера в цикле переборки по невидимому Стоп-лоссу

Камрады!
Такой пример. Открыты ордера, по номеру тикета каждому ордеру присваивается значение стоплосса (невидимого) в массив SL[] в формате цены.
0. Бай - SL[1]
1. Бай - SL[2] // достиг стоплосса и закроется в цикле переборки
2. Бай - SL[3]
3. Селл - SL[4]

В цикле переборки ордеров по тикету
for (i=0;i<OrdersTotal();i++)
{
OrderSelect;
if (стоплосс=0, открыт человеком) --> ставим стоплосс в массив SL[];
if (модификация стопа) --> подтягиваем стоп;
if (достигли стопа) --> OrderClose;
Здесь ордер с тикетом 1(второй в позиции, со стоплоссом SL[2] закрывается.
Внимание, вопрос:
Ордера не стало, и когда теперь сместятся тикеты?
Сразу? т.е. надо к OrderClose добавить переборку массива SL[] с целью смещения значений
for (j=i+1;j<OrdersTotal();j++) //- и да, чему сейчас равно OrdersTotal?
SL[j]=SL[j+1];
SL[j]=0;
или вынести переборку за цикл?
или вообще тикеты сместятся с приходом нового тика?
 

ale002

::: __,,,^._.^,,,__ :::
Не совсем понятно - этот массив у вас существует постоянно (он глобальный) или формируется заново по каждому тику?

Если второе - удаление строк массива не ваша забота, всё обновится по след тику

Если первое - по новому тику проверяйте наличие ордеров с номерами из вашего массива, несуществующие удаляйте. Закрытие ордеров не привязано к котировкам, может растянуться на несколько тикофф

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

Vseslav

Новичок форума
Благодарю! Массив SL[] формируется каждый тик заново.
Т.е. закрыв один ордер, робот нормально отследит остальные в цикле переборки?
 

ale002

::: __,,,^._.^,,,__ :::
OrdersTotal() не изменится быстрее, чем ваш цикл дощёлкает до конца, если вы об этом. Но чтобы наглухо исключить и теоретическую вероятность уберите его из управляющего оператора цикла. Напр:

i = OrdersTotal(); while(i>0) {
i--;
// тут работа цикла
}
 

AlexeyVik

Программист mql4 mql5
Камрады!
Такой пример. Открыты ордера, по номеру тикета каждому ордеру присваивается значение стоплосса (невидимого) в массив SL[] в формате цены.
0. Бай - SL[1]
1. Бай - SL[2] // достиг стоплосса и закроется в цикле переборки
2. Бай - SL[3]
3. Селл - SL[4]

В цикле переборки ордеров по тикету
for (i=0;i<OrdersTotal();i++)
{
OrderSelect;
if (стоплосс=0, открыт человеком) --> ставим стоплосс в массив SL[];
if (модификация стопа) --> подтягиваем стоп;
if (достигли стопа) --> OrderClose;
Здесь ордер с тикетом 1(второй в позиции, со стоплоссом SL[2] закрывается.
Внимание, вопрос:
Ордера не стало, и когда теперь сместятся тикеты?
Сразу? т.е. надо к OrderClose добавить переборку массива SL[] с целью смещения значений
for (j=i+1;j<OrdersTotal();j++) //- и да, чему сейчас равно OrdersTotal?
SL[j]=SL[j+1];
SL[j]=0;
или вынести переборку за цикл?
или вообще тикеты сместятся с приходом нового тика?

Не надо ставить такие условия в цикл. Лучше сделай переменную int Total = OrdersTotal(); и тогда цикл будет выглядеть так

Код:
int Total = OrdersTotal(); 
for (i = Total; i >= 0; i--)
Это зафиксирует количество ордеров в начале цикла и даже несоответствие не должно волновать, ведь если нет ордера с таким порядковым номером, то цикл просто перейдёт к следующей итерации.
Но даже используя такой подход надо перестраховаться (ИМХО) и повторить итерацию после закрытия ордера. Но предложенный вариант внутреннего перебора в цикле не эффективен. Здесь можно просто увеличить переменную цикла i++; В этом случае будет проверен ордер с предыдущим порядковым номером, а дальше всё пойдёт по-порядку.
 
Последнее редактирование:

sochinik

Местный житель
Подскажите пожалуйста, почему при копирование кода из Notepad++ в редактор metaeditorа кирилица исчезает и проявляется в виде знаков" ????..."( и это при том, что код брал с редактора МТ4, где кирилица присутствовала), такое же происходило, если копировал функцию с форума в редактор метаэдитора, Есть ли решение этой проблеммы и как её можно устранить.
 

ale002

::: __,,,^._.^,,,__ :::
Патамушта копируете из документа открытого в юникод-кодировке, а вставляете в док ASCII-кодировки (или наоборот). Нотом-Плю-Плю не пользуюсь, попробуйте вставить в начало и конец копируемого куска по слову на русском - т.е. он должен начинаться и заканчиваться кириллицей. Иногда в винде это помогает при переносе из одной проги в др. А если нет - открывайте в блокноте док той-же кодировки, что и в редакторе, и тока после этого редактируйте/вставляйте/копируйте
 
Верх