Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Хочешь написать торгового робота? Загляни в Справочник MQL5!
BEGEMOT32
41
BEGEMOT32 2014.06.12 15:23 

Здравствуйте уважаемые форумчане!

Я в MQL4 новичок, поэтому столкнулся с проблемой, которая сначала мне показалась легко решаемой, но не тут-то было. Где только не искал, какие только запросы не вводил в поисковики, но так и не смог найти кода, с помощью которого можно в MT4 программно открывать ордер, обычный рыночный ордер.

Мне нужно чтобы при выполнении условия if (signal == 1) выполнялся код, который откроет рыночный ордер на покупку (0,1 лот) и установит стоп лосс (150) и тейк профит (300). За ранее, благодарен.

//+------------------------------------------------------------------+

  int signal = 1;

//+------------------------------------------------------------------+

int start()

{

      if (signal == 1)

      {

     ВОТ ЗДЕСЬ ДОЛЖЕН БЫТЬ КОД, КОТОРЫЙ ОТКРЫВАЕТ РЫНОЧНЫЙ ОРДЕР НА ПОКУПКУ (0,1 лот), ПРИ ЭТОМ ВЫСТАВЛЯЕТ СТОП ЛОСС И ТЕЙКПРОФИТ     

      }

return(0);

}

//+------------------------------------------------------------------+

Paladin80
706
Paladin80 2014.06.12 15:54  
Begemot32:

Здравствуйте уважаемые форумчане!

Я в MQL4 новичок, поэтому столкнулся с проблемой, которая сначала мне показалась легко решаемой, но не тут-то было. Где только не искал, какие только запросы не вводил в поисковики, но так и не смог найти кода, с помощью которого можно в MT4 программно открывать ордер, обычный рыночный ордер.

Мне нужно чтобы при выполнении условия if (signal == 1) выполнялся код, который откроет рыночный ордер на покупку (0,1 лот) и установит стоп лосс (150) и тейк профит (300). За ранее, благодарен.

...
OrderSend().
Vladimir Paukas
4099
Vladimir Paukas 2014.06.12 16:16  
Begemot32:

Здравствуйте уважаемые форумчане!

Я в MQL4 новичок, поэтому столкнулся с проблемой, которая сначала мне показалась легко решаемой, но не тут-то было. Где только не искал, какие только запросы не вводил в поисковики, но так и не смог найти кода

А Гугль пробовали?   

BEGEMOT32
41
BEGEMOT32 2014.06.12 16:18  

Сделал так, но так не компилируется, ошибка в строке void OnStart()

//+------------------------------------------------------------------+
//|                                                      Test8.mq4 |                                           
//+------------------------------------------------------------------+
#property copyright "Begemot32"
#property version   "1.00"
#property strict

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  // цвет
   );

   int signal = 1;

//+------------------------------------------------------------------+

int start()
{
    if (signal == 1)
    {

   //  ВОТ ЗДЕСЬ ДОЛЖЕН БЫТЬ КОД, КОТОРЫЙ ОТКРЫВАЕТ РЫНОЧНЫЙ ОРДЕР НА ПОКУПКУ (0,1 лот), ПРИ ЭТОМ ВЫСТАВЛЯЕТ СТОП ЛОСС И ТЕЙКПРОФИТ    





void OnStart()
  {
//--- получим минимальное значение Stop level
   double minstoplevel=MarketInfo(Symbol(),MODE_STOPLEVEL);
   Print("Minimum Stop Level=",minstoplevel," points");
   double price=Ask;
//--- вычисленные значения цен SL и TP должны быть нормализованы
   double stoploss=NormalizeDouble(Bid-minstoplevel*Point,Digits);
   double takeprofit=NormalizeDouble(Bid+minstoplevel*Point,Digits);
//--- размещаем рыночный ордер на покупку 1 лота
   int ticket=OrderSend(Symbol(),OP_BUY,1,price,3,stoploss,takeprofit,"My order",16384,0,clrGreen);
   if(ticket<0)
     {
      Print("OrderSend завершилась с ошибкой #",GetLastError());
     }
   else
      Print("Функция OrderSend успешно выполнена");
//---
  }






    }
    return(0);

}

BEGEMOT32
41
BEGEMOT32 2014.06.12 16:19  
Гуглить пробовал, примеров много всяких, но я не могу понять как их правильно вставить
Vladimir Paukas
4099
Vladimir Paukas 2014.06.12 16:25  
Begemot32:
Гуглить пробовал, примеров много всяких, но я не могу понять как их правильно вставить

Зря не читаете что вам говорят. В ссылке пример как правильно вставить. И всё расписано так чтоб  даже ёжику было понятно.
BEGEMOT32
41
BEGEMOT32 2014.06.12 16:31  

вот так компилируется, но в терминале выдает ошибку: неправильно установлены стоп лос и текпрофит


//+------------------------------------------------------------------+

//|                                                      Test8.mq4 |                                           
//+------------------------------------------------------------------+
#property copyright "Begemot32"
#property version   "1.00"
#property strict

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  // цвет
   );

   int signal = 1;

//+------------------------------------------------------------------+

int start()
{
    if (signal == 1)
    {

   //  ВОТ ЗДЕСЬ ДОЛЖЕН БЫТЬ КОД, КОТОРЫЙ ОТКРЫВАЕТ РЫНОЧНЫЙ ОРДЕР НА ПОКУПКУ (0,1 лот), ПРИ ЭТОМ ВЫСТАВЛЯЕТ СТОП ЛОСС И ТЕЙКПРОФИТ    





//--- получим минимальное значение Stop level
   double minstoplevel=MarketInfo(Symbol(),MODE_STOPLEVEL);
   Print("Minimum Stop Level=",minstoplevel," points");
   double price=Ask;
//--- вычисленные значения цен SL и TP должны быть нормализованы
   double stoploss=NormalizeDouble(Bid-minstoplevel*Point,Digits);
   double takeprofit=NormalizeDouble(Bid+minstoplevel*Point,Digits);
//--- размещаем рыночный ордер на покупку 1 лота
   int ticket=OrderSend(Symbol(),OP_BUY,0.01,price,3,stoploss,takeprofit,"My order",16384,0,clrGreen);
   if(ticket<0)
     {
      Print("OrderSend завершилась с ошибкой #",GetLastError());
     }
   else
      Print("Функция OrderSend успешно выполнена");
//---






    }
    return(0);

}
Mislaid
560
Mislaid 2014.06.12 17:09  
Begemot32:
Гуглить пробовал, примеров много всяких, но я не могу понять как их правильно вставить

У меня то же, вторую неделю как, поиск в MQL не пашет. Все пишет про ошибку на странице:

 

Vitalie Postolache
11118
Vitalie Postolache 2014.06.12 17:58  
Нет бога, кроме Microsoft и Internet Explorer - пророк его )))
Alexey Viktorov
5195
Alexey Viktorov 2014.06.12 18:11  
Mislaid:

У меня то же, вторую неделю как, поиск в MQL не пашет. Все пишет про ошибку на странице:

 


А зачем тебе поиск в MQL? Хотя сейчас проверил всё работает на ура...

Нажимаешь надпись "Документация" на главной странице сайта и там читаешь. Например Торговые функции там описаны все функции которые причастны к открытию, модификации и пр... ордеров. Ещё пример для открытия ордера используется функция OrderSend()

Примет её использования

int ticket = OrderSend(Symbol(), Buy, 0.1, Ask, 40, 0, 0, NULL, 123654);


В этом примере использованы не все параметры функции, но язык MQL4 это допускает, но нельзя пропускать какой-либо параметр. Можно только обрезать последние параметры при желании, что и сделано в данном примере.

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий