Где лучше применить: в советнике или скрипте?

 

Господа Умные головы, как задать в коде открытие с одного графика сразу нескольких разных позиций (BUY, SELL) по нескольким разным инструментам?

И что для этого лучше подойдёт - советник или скрипт?

 

Пользуйтесь функцией MarketInfo() для получения необходимых данных по другим символам (цена, стопуровень если нужен), все остальное также.

Скрипт или советник - это зависит то ваших целей и задач.

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

P.S. не могу назвать себя Умной головой :-)
 
klerk:
в скрипте тебе придется самому обрабатывать частоту проверки условия и открытия позиций в цикле, а советник делает проход на каждом тике. Если хочешь просто автоматизировать открытие позиций одноразово, то скрипт, а если открытие, проводка позиции, закрытие, то советник.

P.S. не могу назвать себя Умной головой :-)


Да ладно скромничать :-)

Мне нужно разово - увидел сигнал и открылся по двум парам в BUY, по двум в SELL. Просто вручную пока до четвёртой

позы дойдёшь, цена не редко уже уходит.

Я только начал вникать в MQL, по этому сея задача мне пока не по зубам. Если не трудно, можешь чуть подробней?

 
int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
Основная функция, используемая для открытия позиции или установки отложенного ордера.
Возвращает номер тикета, который назначен ордеру торговым сервером или -1 в случае неудачи. Чтобы получить дополнительную информацию об ошибке, необходимо вызвать функцию GetLastError().
Замечания.
При открытии рыночного ордера (OP_SELL или OP_BUY) в качестве цены открытия могут использоваться только самые последние цены Bid (для продажи) или Ask (для покупки). Если операция проводится по финансовому инструменту, отличному от текущего, то для получения последних котировок по этому инструменту необходимо воспользоваться функцией MarketInfo() с параметром MODE_BID или MODE_ASK. Нельзя использовать расчетную либо ненормализованную цену. Если запрашиваемой цены открытия не было в ценовом потоке либо запрашиваемая цена не нормализована в соответствии с количеством знаков после десятичной точки, то будет сгенерирована ошибка 129 (ERR_INVALID_PRICE). Если запрашиваемая цена открытия сильно устарела, то независимо от значения параметра slippage будет сгенерирована ошибка 138 (ERR_REQUOTE). Если же запрашиваемая цена устарела, но ещё присутствует в ценовом потоке, то позиция открывается по текущей цене и только в том случае, если текущая цена попадает в диапазон price+-slippage.

Цены StopLoss и TakeProfit не могут располагаться слишком близко к рынку. Минимальное расстояние стопов в пунктах можно получить, используя функцию MarketInfo() с параметром MODE_STOPLEVEL. В случае ошибочных, а также ненормализованных стопов генерируется ошибка 130 (ERR_INVALID_STOPS).

При установке отложенного ордера цена открытия не может быть слишком близкой к рынку. Минимальное расстояние отложенной цены от текущей рыночной цены в пунктах также можно получить, используя функцию MarketInfo() с параметром MODE_STOPLEVEL. В случае неправильной цены открытия отложенного ордера будет сгенерирована ошибка 130 (ERR_INVALID_STOPS).

На некоторых торговых серверах может быть установлен запрет на применение срока истечения отложенных ордеров. В этом случае при попытке задать ненулевое значение в параметре expiration будет сгенерирована ошибка 147 (ERR_TRADE_EXPIRATION_DENIED).

На некоторых торговых серверах может быть установлен лимит на общее количество открытых и отложенных ордеров. При превышении этого лимита новая позиция открыта не будет (отложенный ордер не будет установлен), и торговый сервер вернет ошибку 148 (ERR_TRADE_TOO_MANY_ORDERS).
Параметры:
symbol - Наименование финансового инструмента, с которым проводится торговая операция.
cmd - Торговая операция. Может быть любым из значений торговых операций.
volume - Количество лотов.
price - Цена открытия.
slippage - Максимально допустимое отклонение цены для рыночных ордеров (ордеров на покупку или продажу).
stoploss - Цена закрытия позиции при достижении уровня убыточности (0 в случае отсутствия уровня убыточности).
takeprofit - Цена закрытия позиции при достижении уровня прибыльности (0 в случае отсутствия уровня прибыльности).
comment - Текст комментария ордера. Последняя часть комментария может быть изменена торговым сервером.
magic - Магическое число ордера. Может использоваться как определяемый пользователем идентификатор.
expiration - Срок истечения отложенного ордера.
arrow_color -

Цвет открывающей стрелки на графике. Если параметр отсутствует или его значение равно CLR_NONE, то открывающая стрелка не отображается на графике.

Каккие проблемы-то? Указывай любой символ.
 
Integer:

Пользуйтесь функцией MarketInfo() для получения необходимых данных по другим символам (цена, стопуровень если нужен), все остальное также.

Скрипт или советник - это зависит то ваших целей и задач.


Спасибо конечно, но это для меня слишком обобщённо. Не могли бы вы нарисовать хотя бы одну конкретную строчку для скрипта? Ну скажем на открытие позиции по EUR, при всём при этом набрасывая скрипт на график, предположим JPY?
 
rsi:
int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
Основная функция, используемая для открытия позиции или установки отложенного ордера.
Возвращает номер тикета, который назначен ордеру торговым сервером или -1 в случае неудачи. Чтобы получить дополнительную информацию об ошибке, необходимо вызвать функцию GetLastError().
Спасибо за информацию. Буду разбираться. А где по остальным функциям такую подробную инфу взять не подскажешь?
 
Poisk_Z:
rsi:
int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
Основная функция, используемая для открытия позиции или установки отложенного ордера.
Возвращает номер тикета, который назначен ордеру торговым сервером или -1 в случае неудачи. Чтобы получить дополнительную информацию об ошибке, необходимо вызвать функцию GetLastError().
Спасибо за информацию. Буду разбираться. А где по остальным функциям такую подробную инфу взять не подскажешь?
В левом верхнем углу экрана ссылка Документация или в MetaEditor нажми F1 или иконку с книжечкой или просто Esc. Удачи! :)
 
Poisk_Z:
Integer:

Пользуйтесь функцией MarketInfo() для получения необходимых данных по другим символам (цена, стопуровень если нужен), все остальное также.

Скрипт или советник - это зависит то ваших целей и задач.


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

Читайте в справке про функции OrderSend() и MarketInfo() - там даже примеры есть
 
extern string val1="GBPUSD";
extern int Lots1 = 1;
extern int Sl1 = 6;
extern int Tp1 = 80;
extern int distance1 = 13;
extern string val2=" ";
extern int Lots2 = 1;
extern int Sl2 = 6;
extern int Tp2 = 80;
extern int distance2 = 13;

int start()   
  {
   int ticket=0,ticket1=0,ticket2=0,ticket3=0;    //условие на выставление ордеров                      
   RefreshRates();          
   ticket=OrderSend(val1,OP_BUY,Lots1,Ask,3,Sl1*Point,Tp1*Point,"111",18000,0,Blue);
   RefreshRates();
   ticket1=OrderSend(val1,OP_SELL,Lots1,Bid,3,Sl1*Point,Tp1*Point,"111",18001,0,Red);
   if(val2!=" ")          
     {
      double bid   =MarketInfo(val2,MODE_BID);
      double ask   =MarketInfo(val2,MODE_ASK);
      double point =MarketInfo(val2,MODE_POINT);
      ticket2=OrderSend(val2,OP_BUY,Lots2,ask,3,Sl2*point,Tp2*point,"111",18002,0,Blue);
      bid   =MarketInfo(val2,MODE_BID);
      ask   =MarketInfo(val2,MODE_ASK);
      point =MarketInfo(val2,MODE_POINT);
      ticket3=OrderSend(val2,OP_SELL,Lots2,bid,3,Sl2*point,Tp2*point,"111",18003,0,Red);
     }
   return(0);   
  }
 
Большое спасибо, klerk! Очень помог.
Причина обращения: