Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1463

 
Alexey Belyakov #:

Спасибо. Поскольку программист я весьма поверхностный. Начну спрашивать по порядку.

"Дату в string через разделитель."  

Использовать  "  string  TimeToString(  "

????

Для рисования линии ничего в стринг переводить не надо.

Вы описали задачу, но описали её не полностью, поэтому людям приходится додумывать.

Как вы собираетесь записывать 100 дат?

вы их в теле скрипта будете прописывать?

datetime time1 = D'2021.11.15 00:00:00';
datetime time2 = D'2022.11.15 00:00:00';
datetime time3 = D'2023.11.15 00:00:00';
// в этом случае так делаем
VLineCreate(0, InpName, 0, time1, InpColor, InpStyle, InpWidth, InpBack, InpSelection, InpHidden);
VLineCreate(0, InpName, 0, time2, InpColor, InpStyle, InpWidth, InpBack, InpSelection, InpHidden);
VLineCreate(0, InpName, 0, time3, InpColor, InpStyle, InpWidth, InpBack, InpSelection, InpHidden);

или вы их будете вводить вручную при запуске эксперта?

input datetime time1 = D'2021.11.15 00:00:00';
input datetime time2 = D'2022.11.15 00:00:00';
input datetime time3 = D'2023.11.15 00:00:00';
//в этом случае можно сделать так или без массива прописать функцию линии для каждой даты как написано выше
void OnStart(void)
  {
   datetime time[100];

   time[0] = time1;
   time[1] = time2;
   time[2] = time3;

   for(int i = 0; i < 3; i++)
      VLineCreate(0, "InpName" + (string)i, 0, time[i], InpColor, InpStyle, InpWidth, InpBack, InpSelection, InpHidden);
  }
 
Aleksandr Slavskii #:

Для рисования линии ничего в стринг переводить не надо.

Вы описали задачу, но описали её не полностью, поэтому людям приходится додумывать.

Как вы собираетесь записывать 100 дат?

вы их в теле скрипта будете прописывать?

или вы их будете вводить вручную при запуске эксперта?

Проверил. Второй случай хорош, но он не подходит из - за необходимости вбивать каждую дату в окно вручную, затратно по времени. Тут бы простыми действиями..."ctrl-c, ctrl-v."

В первом случае почему то не чертит 3 линии, а только одну, по самой последней свече.  Почему, пока непонятно, разбираюсь.

 
Alexey Belyakov #:

Проверил. Второй случай хорош, но он не подходит из - за необходимости вбивать каждую дату в окно вручную, затратно по времени. Тут бы простыми действиями..."ctrl-c, ctrl-v."

В первом случае почему то не чертит 3 линии, а только одну, по самой последней свече.  Почему, пока непонятно, разбираюсь.

Имя линии должно быть уникальным. Пропустил этот момент

 

   const string          name="VLine,VLine2,VLine3",      // имя линии

Имя линии сделал уникальными. В input тоже. Не помогает. 

 
Alexey Belyakov #:

   const string          name="VLine,VLine2,VLine3",      // имя линии

Имя линии сделал уникальными. В input тоже. Не помогает. 

datetime time1 = D'2021.11.15 00:00:00';
datetime time2 = D'2022.11.15 00:00:00';
datetime time3 = D'2023.11.15 00:00:00';
// в этом случае так делаем
VLineCreate(0, "InpName1", 0, time1, InpColor, InpStyle, InpWidth, InpBack, InpSelection, InpHidden);
VLineCreate(0, "InpName2", 0, time2, InpColor, InpStyle, InpWidth, InpBack, InpSelection, InpHidden);
VLineCreate(0, "InpName3", 0, time3, InpColor, InpStyle, InpWidth, InpBack, InpSelection, InpHidden);

Вы,  сделали имя где то не там , да и не так)

 
Alexey Belyakov #:

   const string          name="VLine,VLine2,VLine3",      // имя линии

Имя линии сделал уникальными. В input тоже. Не помогает. 

Вот, запустите без инпут параметров, прямо так скопируйте и возможно станет понятнее.

//+------------------------------------------------------------------+
//| Создает вертикальную линию                                       |
//+------------------------------------------------------------------+
bool VLineCreate(const long            chart_ID = 0,      // ID графика
                 const string          name = "VLine",    // имя линии
                 const int             sub_window = 0,    // номер подокна
                 datetime              time = 0,          // время линии
                 const color           clr = clrRed,      // цвет линии
                 const ENUM_LINE_STYLE style = STYLE_SOLID, // стиль линии
                 const int             width = 1,         // толщина линии
                 const bool            back = false,      // на заднем плане
                 const bool            selection = true,  // выделить для перемещений
                 const bool            hidden = true)     // скрыт в списке объектов

  {
   ObjectCreate(chart_ID, name, OBJ_VLINE, sub_window, time, 0);
//--- установим цвет линии
   ObjectSetInteger(chart_ID, name, OBJPROP_COLOR, clr);
//--- установим стиль отображения линии
   ObjectSetInteger(chart_ID, name, OBJPROP_STYLE, style);
//--- установим толщину линии
   ObjectSetInteger(chart_ID, name, OBJPROP_WIDTH, width);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger(chart_ID, name, OBJPROP_BACK, back);
//--- включим (true) или отключим (false) режим перемещения линии мышью
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект
   ObjectSetInteger(chart_ID, name, OBJPROP_SELECTABLE, selection);
   ObjectSetInteger(chart_ID, name, OBJPROP_SELECTED, selection);

   return(true);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   datetime time1 = D'2023.06.26 10:00:00';
   datetime time2 = D'2023.06.26 11:00:00';
   datetime time3 = D'2023.06.26 12:00:00';
//--- создадим вертикальную линию
   VLineCreate(0, "Name1", 0, time1, clrBlue, STYLE_DASHDOTDOT);
   VLineCreate(0, "Name2", 0, time2, clrGreen, STYLE_SOLID, 5);
   VLineCreate(0, "Name3", 0, time3);
  }
//+------------------------------------------------------------------+
 
Aleksandr Slavskii #:

Вот, запустите без инпут параметров, прямо так скопируйте и возможно станет понятнее.


Премного благодарен! То что нужно!

 

Подскажите, вот есть функции Buy/Sell в торговом классе CTrade

Указываю в них цену, однако позиция открывается все равно по аску/биду.

Что за цену здесь можно указать?

 
Alexey Belyakov #:


Премного благодарен! То что нужно!

уникальное имя)

string  var1=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);
     string NameLine="VLine_" +  "_"+var1;
 
deerhunter22 #:

Подскажите, вот есть функции Buy/Sell в торговом классе CTrade

Указываю в них цену, однако позиция открывается все равно по аску/биду.

Что за цену здесь можно указать?

Обратите внимание на другие методы

   //--- additions methods
   bool              Buy(const double volume,const string symbol=NULL,double price=0.0,const double sl=0.0,const double tp=0.0,const string comment="");
   bool              Sell(const double volume,const string symbol=NULL,double price=0.0,const double sl=0.0,const double tp=0.0,const string comment="");
   bool              BuyLimit(const double volume,const double price,const string symbol=NULL,const double sl=0.0,const double tp=0.0,
                              const ENUM_ORDER_TYPE_TIME type_time=ORDER_TIME_GTC,const datetime expiration=0,const string comment="");
   bool              BuyStop(const double volume,const double price,const string symbol=NULL,const double sl=0.0,const double tp=0.0,
                             const ENUM_ORDER_TYPE_TIME type_time=ORDER_TIME_GTC,const datetime expiration=0,const string comment="");
   bool              SellLimit(const double volume,const double price,const string symbol=NULL,const double sl=0.0,const double tp=0.0,
                               const ENUM_ORDER_TYPE_TIME type_time=ORDER_TIME_GTC,const datetime expiration=0,const string comment="");
   bool              SellStop(const double volume,const double price,const string symbol=NULL,const double sl=0.0,const double tp=0.0,
                              const ENUM_ORDER_TYPE_TIME type_time=ORDER_TIME_GTC,const datetime expiration=0,const string comment="");