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

MrGreen86

Гуру форума
Я попробовал, не работает.

Может вы покажете, как это выглядело бы у вас в советнике, вместо стоп-лосса
что-то вы сделали не так, потому что вам подсказали все верно.
Покажите как вы это применили.

например мне нужно открыть ордер на покупку, для этого используется функция OrderSend.
на самом деле там нужно делать целый вагон проверок перед тем как вызвать ее, но для простоты пока откажемся от них.
И так вот эта функция:

int OrderSend(
string symbol, // символ
int cmd, // торговая операция
double volume, // количество лотов
double price, // цена
int slippage, // проскальзывание
double stoploss, // stop loss
double takeprofit, // take profit
string comment=NULL, // комментарий
int magic=0, // идентификатор
datetime expiration=0, // срок истечения ордера
color arrow_color=clrNONE // цвет
);


что бы просто открыть бай 1 лотом без стопа и профита ее вызов будет таким:
OrderSend(NULL, OP_BUY, 1.0, Ask, INT_MAX, 0, 0);

предварительно рассчитаем стоп лосс равным лоу 7дней - отступ.
бар с минимальной ценой на графике D1 за последние 7 дней начиная со вчера:
int d1_low = iLowest(NULL,PERIOD_D1,MODE_LOW,7,1);
сам стоп лосс:
double stop_loss = iLow(NULL,PERIOD_D1, d1_low ) - 50*_Point;
(отступ тут 50 пунктов)
теперь вставим это в нашу функцию:
OrderSend(NULL, OP_BUY, 1.0, Ask, INT_MAX, stop_loss, 0);
но это не совсем правильно, у некоторых брохеров не прокатит, нужно так:
OrderSend(NULL, OP_BUY, 1.0, NormalizeDouble(Ask,_Digits), INT_MAX, NormalizeDouble(stop_loss,_Digits), 0);
 

Maxut

Новичок форума
что-то вы сделали не так, потому что вам подсказали все верно.
Покажите как вы это применили.

например мне нужно открыть ордер на покупку, для этого используется функция OrderSend.
на самом деле там нужно делать целый вагон проверок перед тем как вызвать ее, но для простоты пока откажемся от них.
И так вот эта функция:

int OrderSend(
string symbol, // символ
int cmd, // торговая операция
double volume, // количество лотов
double price, // цена
int slippage, // проскальзывание
double stoploss, // stop loss
double takeprofit, // take profit
string comment=NULL, // комментарий
int magic=0, // идентификатор
datetime expiration=0, // срок истечения ордера
color arrow_color=clrNONE // цвет
);


что бы просто открыть бай 1 лотом без стопа и профита ее вызов будет таким:
OrderSend(NULL, OP_BUY, 1.0, Ask, INT_MAX, 0, 0);

предварительно рассчитаем стоп лосс равным лоу 7дней - отступ.
бар с минимальной ценой на графике D1 за последние 7 дней начиная со вчера:
int d1_low = iLowest(NULL,PERIOD_D1,MODE_LOW,7,1);
сам стоп лосс:
double stop_loss = iLow(NULL,PERIOD_D1, d1_low ) - 50*_Point;
(отступ тут 50 пунктов)
теперь вставим это в нашу функцию:
OrderSend(NULL, OP_BUY, 1.0, Ask, INT_MAX, stop_loss, 0);
но это не совсем правильно, у некоторых брохеров не прокатит, нужно так:
OrderSend(NULL, OP_BUY, 1.0, NormalizeDouble(Ask,_Digits), INT_MAX, NormalizeDouble(stop_loss,_Digits), 0);
Каюсь,

опыта не хватает.

Буду делать и пробовать, пока не добьюсь успеха.

Спасибо за подробные разъяснения
 

griz

Активный участник
Народ, пишу индикатор,но не могу получить ту цену, на которой расположен индикатор. У меня есть объект "Поле ввода", этот объект я перемещаю объектом "Прямоугольная метка". Мне нужно, чтобы при перемещении объекта "Прямоугольная метка", в объекте "Поле ввода" отображалась та цена, на которой находится сам индикатор(т.е. я перемещаю индикатор и в объекте "Поле ввода" динамически менялась цена). А при вводе вручную цены в объект "Поле ввода", индикатор перемещался на заданную цену. Подскажите, пожалуйста, кто знает.

Хотя бы подскажите, как передать цену объекту "Поле ввода".
 
Последнее редактирование:

Ugar

Гуру форума
Народ, пишу индикатор,но не могу получить ту цену, на которой расположен индикатор. У меня есть объект "Поле ввода", этот объект я перемещаю объектом "Прямоугольная метка". Мне нужно, чтобы при перемещении объекта "Прямоугольная метка", в объекте "Поле ввода" отображалась та цена, на которой находится сам индикатор(т.е. я перемещаю индикатор и в объекте "Поле ввода" динамически менялась цена). А при вводе вручную цены в объект "Поле ввода", индикатор перемещался на заданную цену. Подскажите, пожалуйста, кто знает.
Как можно перемещать индикатор? Может это объект какой то?
Хотя бы подскажите, как передать цену объекту "Поле ввода".
Никак. Координаты окошку ввода задаются в пикселях. Надо пересчитать цену графика в пиксели окна функцией ChartTimePriceToXY.
 

griz

Активный участник
Обнаружил еще такую вещь. Если объекты уходят за границу видимой области окна, эти объекты как бы пропадают, но не удаляются. Как эти пропавшие объекты снова отобразить?

И есть ли функция, которая определяет, находится ли объект в видимой области или нет?
 
Последнее редактирование:

Ugar

Гуру форума
Обнаружил еще такую вещь. Если объекты уходят за границу видимой области окна, эти объекты как бы пропадают, но не удаляются. Как эти пропавшие объекты снова отобразить?

И есть ли функция, которая определяет, находится ли объект в видимой области или нет?
Есть же размеры окна в пиуселях CHART_HEIGHT_IN_PIXELS, CHART_COLOR_BACKGROUND.
Координаты объекта должны быть внутри этих размеров.
Если надо в ценах и барах, есть аналогичные параметры.
 

kudinoff

Почетный гражданин
Стоплевел по запросу нулевой. Сколько спредов принято закладывать в таком случае (минимальное значение)?
 

AlexeyVik

Программист mql4 mql5
Стоплевел по запросу нулевой. Сколько спредов принято закладывать в таком случае (минимальное значение)?
Минимально 2 спреда. Но пока дело дойдёт до открытия цена может измениться и стоп не пролезет. Поэтому лучше делать какой-то запас.
 

Ugar

Гуру форума
Стоплевел по запросу нулевой. Сколько спредов принято закладывать в таком случае (минимальное значение)?
Всё зависит от брокера и счёта. Чаще всего 2. В Альпари на счёте стандарт 1,5 спреда, на ECN нет ограничений, можно даже внутри спреда ставить.
 

griz

Активный участник
Как с помощью mql4 можно устанавливать объем ордера в окне "Торговля в один клик"?

Например, индикатор с кнопкой просчитывает объем ордера. И при нажатии на кнопку просчитанный объем отправляется в окно "Торговля в один клик". И вручную уже открываешь сделку, или выставляешь лимитку. Т.е. чтобы руками не вбивать объем ордера.
 

AlexeNP

Гуру форума
Как с помощью mql4 можно устанавливать объем ордера в окне "Торговля в один клик"?

Например, индикатор с кнопкой просчитывает объем ордера. И при нажатии на кнопку просчитанный объем отправляется в окно "Торговля в один клик". И вручную уже открываешь сделку, или выставляешь лимитку. Т.е. чтобы руками не вбивать объем ордера.
OnChartEvent не устраивает?
 

AlexeNP

Гуру форума
Не понял, что Вы имеете в виду. Как ф-я OnChartEvent может решить данную задачу?
с помощью mql проблему можно решить например так - создать кнопки для открытия ордеров, с помощью OnChartEvent определить что и как должны открывать эти кнопки...
проблема решена
 

griz

Активный участник
с помощью mql проблему можно решить например так - создать кнопки для открытия ордеров, с помощью OnChartEvent определить что и как должны открывать эти кнопки...
проблема решена
Только эти ордера будут открыты роботом. А мне нужно чтобы ордера открывал я сам, вручную.
И вручную уже открываешь сделку, или выставляешь лимитку.
 

AlexeNP

Гуру форума
Только эти ордера будут открыты роботом. А мне нужно чтобы ордера открывал я сам, вручную.
позволю себе процитировать себя...
" ... создать кнопки для открытия ордеров ..." а дальше уже приходит очередь OnChartEvent... но, это мое мнение, поэтому почитаем справку на всякий случай

ChartEvent
Событие ChartEvent генерируется клиентским терминалом при работе пользователя с графиком:

  • нажатия клавиатуры, когда окно графика находится в фокусе;
  • создание графического объекта;
  • удаление графического объекта;
  • щелчок мыши на графическом объекте, принадлежащего графику;
  • перемещение графического объекта при помощи мыши;
  • окончание редактирования текста в поле ввода графического объекта LabelEdit.
Также существует пользовательское событие ChartEvent, которое может послать эксперту любая mql4-программа при помощи функции EventChartCustom. Событие обрабатывается функцией OnChartEvent.
 
Последнее редактирование модератором:
Верх