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

asers1111

Активный участник
Душераздирающее зрелище. o_o
Наверное стоит все-таки переустановить терминал. В корень.

Зрелище действительно гадкое!............СПАСИБО ВАМ ЗА ОТЗЫВЧИВОСТЬ И ВАШЕ УЧАСТИЕ!.......Разозлившись на "судьбу такую" начал открывать все вкладки в шапке Метаэдитора и тупо нажимать кнопки и соглашаться со всем,что там есть.И вдруг все встало на свои места!Код превратился в нормальный и в совах и в индюках.Так что можно продолжать....
Жаль только,что столько времени потерял и вас потревожил....СПАСИБО еще раз!
 

pepelatc

Интересующийся
Народ, помогите плиз новичку.
Мне необходимо присвоить переменной значение +1 или -1, в зависимости от возрастания или убывания ADX. Киньте плиз кусок кода или ткните носом где почитать конкретно об этом.
Спасибо.
 

gzh

Интересующийся
Приветствую! Не могу разобраться с одним вопросом, прошу помочь. буду благодарен!
Не получается выставить 2 отложенных ордера по Хай и Лоу закрывшейся свечи.
Собственно нужно просто выставить отложенные ордера по Хай и Лоу, со SL и TP.
Если один отложенный сработал,то второй удаляем.

написал код,но не получается почему-то. подскажите пожалуйста, что не так, что надо добавить ?

for (int i=0; i<=OrdersTotal(); i++)
{
OrderSelect (i,SELECT_BY_POS);

if (OrderType==0)
{
if (OrderType==OP_SELLSTOP) OrderDelete (OrderTicket() );
}

if OrderType==1)
{
if (OrderType==OP_BUYSTOP) OrderDelete (OrderTicket() );
}
}

if (OrdersTotal()==0)
{
OrderSend (Symbol(),OP_SELLSTOP, lot, iLow (Symbol(), 0, 1), slipp, Bid+SL*Point, Bid-TP*Point);

OrderSend (Symbol(),OP_BUYSTOP, lot, iHigh(Symbol(), 0 ,1), slipp, Ask-SL*Point, Ask+TP*Point);
}
 

Ugar

Гуру форума
Приветствую! Не могу разобраться с одним вопросом, прошу помочь. буду благодарен!
Не получается выставить 2 отложенных ордера по Хай и Лоу закрывшейся свечи.
Собственно нужно просто выставить отложенные ордера по Хай и Лоу, со SL и TP.
Если один отложенный сработал,то второй удаляем.

написал код,но не получается почему-то. подскажите пожалуйста, что не так, что надо добавить ?

for (int i=0; i<=OrdersTotal(); i++)
{
OrderSelect (i,SELECT_BY_POS);

if (OrderType==0)
{
if (OrderType==OP_SELLSTOP) OrderDelete (OrderTicket() );
}

if OrderType==1)
{
if (OrderType==OP_BUYSTOP) OrderDelete (OrderTicket() );
}
}

if (OrdersTotal()==0)
{
OrderSend (Symbol(),OP_SELLSTOP, lot, iLow (Symbol(), 0, 1), slipp, Bid+SL*Point, Bid-TP*Point);

OrderSend (Symbol(),OP_BUYSTOP, lot, iHigh(Symbol(), 0 ,1), slipp, Ask-SL*Point, Ask+TP*Point);
}
1. OrderType это функция. Значить должны быть круглые скобки OrderType()
2. if (OrderType==0) означает если выбранный ордер Buy типа. if (OrderType==OP_SELLSTOP) означает если выбранный ордер SellStop типа. Не может быть ордер одновременно buy и sellstop типа.
3. Почему при установке ордеров, стоп лосс и тейк профит считается относительно текущей цены, а не относительно цены открытия ордера?

Лучше сначала собрать сведения об ордерах и уже в зависимости от неё принимать решения удалять или устанавливать отложки.
 
Последнее редактирование:

gzh

Интересующийся
1. Да, я знаю что это функция, просто забыл дописать скобки. В редакторе этого не забываю.
2.Я новичок в программировании, и в данном примере логика моя такая: если тип ордера Бай, значит отложник Бай сработал, нам нужно удалить SellStop.
А как удалить SellStop, если сработал БайСтоп ? подскажите.

3. Наверное лучше модифицировать ордер, если он сработал ?

Почему все таки выставляется только один отложенный ордер ? ведь нужно, чтобы выставилось 2 ордера.

А какие сведения нужно собрать ?
 

Ugar

Гуру форума
1. Да, я знаю что это функция, просто забыл дописать скобки. В редакторе этого не забываю.
2.Я новичок в программировании, и в данном примере логика моя такая: если тип ордера Бай, значит отложник Бай сработал, нам нужно удалить SellStop.
А как удалить SellStop, если сработал БайСтоп ? подскажите.

3. Наверное лучше модифицировать ордер, если он сработал ?

Почему все таки выставляется только один отложенный ордер ? ведь нужно, чтобы выставилось 2 ордера.

А какие сведения нужно собрать ?
Код:
bool buy=false, sell=false;
int buystop_ticket=0, sellstop_ticket=0;
//Сбор сведений
for (int i=0; i<=OrdersTotal(); i++)
{
  OrderSelect (i,SELECT_BY_POS);
 
if (OrderType()==OP_BUY) buy=true;
if OrderType()==OP_SELL) sell=true;
if (OrderType()==OP_BUYSTOP) buystop_ticket=OrderTicket();
if (OrderType()==OP_SELLSTOP) sellstop_ticket=OrderTicket();
}
//Удаление отложек
if(buy && sellstop_ticket>0)OrderDelete (sellstop_ticket);
if(sell && buystop_ticket>0)OrderDelete (buystop_ticket);
//Установка ордеров
if(!buy && !sell && sellstop_ticket==0 && buystop_ticket==0)
{
OrderSend (Symbol(),OP_SELLSTOP, lot, iLow (Symbol(), 0, 1), slipp, iLow (Symbol(), 0, 1)+SL*Point, iLow (Symbol(), 0, 1)-TP*Point);

OrderSend (Symbol(),OP_BUYSTOP, lot, iHigh(Symbol(), 0 ,1), slipp,  iHigh(Symbol(), 0 ,1)-SL*Point,  iHigh(Symbol(), 0 ,1)+TP*Point);
}
Конечно, код написан как бы написал новичок.
 

AlexeyVik

Программист mql4 mql5
Почему все таки выставляется только один отложенный ордер ? ведь нужно, чтобы выставилось 2 ордера.
Так вот тебе ответ.
3. Почему при установке ордеров, стоп лосс и тейк профит считается относительно текущей цены, а не относительно цены открытия ордера?
 

gzh

Интересующийся
Спасибо за код, узнал новое. Но код почему-то не работает, ни одного ордера не открывает. Вроде все правильно, но... Что тут не так ?
 

Ugar

Гуру форума
Спасибо за код, узнал новое. Но код почему-то не работает, ни одного ордера не открывает. Вроде все правильно, но... Что тут не так ?
Извини. За основу брал твой код. Не все косяки в нём увидел сразу.
Код:
bool buy=false, sell=false;
int buystop_ticket=0, sellstop_ticket=0;
//Сбор сведений
for (int i=0; i[SIZE=5][B][COLOR=Red]<[/COLOR][/B][/SIZE]OrdersTotal(); i++)
{
  OrderSelect (i,SELECT_BY_POS[SIZE=5][B][COLOR=Red],MODE_TRADES[/COLOR][/B][/SIZE]);
 
if (OrderType()==OP_BUY) buy=true;
if (OrderType()==OP_SELL) sell=true;
if (OrderType()==OP_BUYSTOP) buystop_ticket=OrderTicket();
if (OrderType()==OP_SELLSTOP) sellstop_ticket=OrderTicket();
}
//Удаление отложек
if(buy && sellstop_ticket>0)OrderDelete (sellstop_ticket);
if(sell && buystop_ticket>0)OrderDelete (buystop_ticket);
//Установка ордеров
if(!buy && !sell && sellstop_ticket==0 && buystop_ticket==0)
{
OrderSend (Symbol(),OP_SELLSTOP, lot, iLow (Symbol(), 0, 1), slipp, iLow (Symbol(), 0, 1)+SL*Point, iLow (Symbol(), 0, 1)-TP*Point);

OrderSend (Symbol(),OP_BUYSTOP, lot, iHigh(Symbol(), 0 ,1), slipp,  iHigh(Symbol(), 0 ,1)-SL*Point,  iHigh(Symbol(), 0 ,1)+TP*Point);
}
 
Последнее редактирование:

gzh

Интересующийся
Все заработало. До этого я не писал MODE_TRADES, теперь буду писать. Спасибо.

Как сделать мультивалютную торговлю, чтобы ордера одновременно открылись на 3 или 4 парах ???
 

asers1111

Активный участник
Добрый день.Я в програмировании не очнь силен,а вернее,ОЧЕНЬ НЕ СИЛЕН....Господа програмисты,помогите,пожалуйста наложить стандартный мувинг с Метатрейдера на пользовательский индикатор, чтоб в пользовательском индикаторе был буфер для МА ,чтоб это стало единым индикатором.Сам пытался и долго ковырялся,но,видимо,где-то что-то не понимаю -- не получается.....
Может это не совсем относится к "помощи в програмировании",так я бы и заплатил....Буду тогда считать,что купил себе небольшой учебник по програмированию....
 

Вложения

  • pfd_fire_trend.mq4
    21,4 КБ · Просмотры: 34
  • pfd_fire_trend.ex4
    19,6 КБ · Просмотры: 22

Ugar

Гуру форума
Все заработало. До этого я не писал MODE_TRADES, теперь буду писать. Спасибо.
Там ещё в операторе цикла for, вместо <= надо <.
Как сделать мультивалютную торговлю, чтобы ордера одновременно открылись на 3 или 4 парах ???
А в чём проблема? В функции OrderSend первый аргумент это символ по которому устанавливать. Нужно только цену открытия стоп лосс и тейк профит пересчитать под соответствующую пару.
 

gzh

Интересующийся
Да, кстати я так и не понял почему вместо <= надо= ? есть какая-та практическая разница ?

На счет мультивалюты, точно, оказывается так просто, а я не догадался. спасибо за подсказку.
Еще вопрос если можно: как реализовать мультиТФ, чтобы допустим по Хай и Лоу выставились ордера на D1 , H4 , H1 ?? подскажи, что нужно сделать, я сам попробую.
 

qqmber

Почетный гражданин
Добрый день.Я в програмировании не очнь силен,а вернее,ОЧЕНЬ НЕ СИЛЕН....Господа програмисты,помогите,пожалуйста наложить стандартный мувинг с Метатрейдера на пользовательский индикатор, чтоб в пользовательском индикаторе был буфер для МА ,чтоб это стало единым индикатором.Сам пытался и долго ковырялся,но,видимо,где-то что-то не понимаю -- не получается.....
Может это не совсем относится к "помощи в програмировании",так я бы и заплатил....Буду тогда считать,что купил себе небольшой учебник по програмированию....

У тебя две проблемы.
Во-первых, в аттаче декомпилированный код. Приличные люди с декомпилами не связываются, в большинстве случаев это краденое. Компилироваться этот текст в последних версиях терминала все равно не станет, только время зря потратишь его переделывать.
Во вторых, идея встраивать машку в индюк вообще неудачная. Завтра ты захочешь полосы Боллинджера от своего индюка получить, послезавтра CCI - каждый раз добавлять буфера это не решение. Гораздо проще и гибче накладывать стандартные индикаторы типа МА на пользовательские используя опцию "Применить к первому|предыдущему (пользовательскому) индикатору". Если результат нужно получить внутри кода, то лучше написать (или найти готовую) МА, способную работать на внешнем индикаторе через iCustom().
 

asers1111

Активный участник
У тебя две проблемы.
Во-первых, в аттаче декомпилированный код. Приличные люди с декомпилами не связываются, в большинстве случаев это краденое. Компилироваться этот текст в последних версиях терминала все равно не станет, только время зря потратишь его переделывать.
Во вторых, идея встраивать машку в индюк вообще неудачная. Завтра ты захочешь полосы Боллинджера от своего индюка получить, послезавтра CCI - каждый раз добавлять буфера это не решение. Гораздо проще и гибче накладывать стандартные индикаторы типа МА на пользовательские используя опцию "Применить к первому|предыдущему (пользовательскому) индикатору". Если результат нужно получить внутри кода, то лучше написать (или найти готовую) МА, способную работать на внешнем индикаторе через iCustom().

Спасибо за разяснения.Действительно,последний,предложенный Вами вариант очень привлекателен.....Только вот где бы такую Машку найти?!
 

qqmber

Почетный гражданин
Спасибо за разяснения.Действительно,последний,предложенный Вами вариант очень привлекателен.....Только вот где бы такую Машку найти?!
codebase.mql4.com пошерстить, наверняка есть готовое решение, или набраться храбрости и самому написать, там весь код в полстранички уложится.
 
Верх