Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1989

 
MrBrooklin #:

С ордерами, сделками и позициями в Metatrader 5 познакомился сразу, когда начал торговать в ручную. Вот ссылки, если кому-нибудь будет интересно или захочет освежить память:

https://www.metatrader5.com/ru/mobile-trading/android/help/trade/general_concept

https://www.metatrader5.com/ru/mobile-trading/android/help/trade/general_concept/execution_types

https://www.metatrader5.com/ru/mobile-trading/android/help/trade/general_concept/order_types

С Metatrader 4 никогда не сталкивался.

С уважением, Владимир.

Рыночный ордер или Маркет ордер в 4ке это позиция в 5ке. В 4ке скрыты сделки. И нет в ордере приказе на открытие позиции свойств, по какой цене открывать позицию, и на какой объем. Остальное одинаково, синтаксис немного разный.
По отложкам одинаково.
 
Tretyakov Rostyslav #:
МТ4 или МТ5? Индикатор или сов?

mt4 - а советник или индикатор уже не так важно, - присобачу. 

 
Порт-моне тв #:

mt4 - а советник или индикатор уже не так важно, - присобачу. 

Важно!!!

В mql4 из советника можно вывести индикатор на график только применив подготовленный шаблон ChartApplyTemplate

из индикатора

Buffer[i]=iMA(NULL,0,13,8,MODE_SMA,PRICE_CLOSE,i);
 
Tretyakov Rostyslav #:

Важно!!!

В mql4 из советника можно вывести индикатор на график только применив подготовленный шаблон ChartApplyTemplate

из индикатора

все же не понимаю, что с этим буфером потом делать, а из совы как через  ChartApplyTemplate - пример можно? Благодарю. 

 
Порт-моне тв #:

все же не понимаю, что с этим буфером потом делать, а из совы как через  ChartApplyTemplate - пример можно? Благодарю. 

Создаешь шаблон с нужными машками, советником и какой-то меткой (например стрелка с именем "start")

далее в советнике в начале прописываешь

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   if(ObjectFind(0,"start")!=0)
      ChartApplyTemplate(0,"\\Files\\my_template.tpl")
 
Нужно нарисовать вертикальную линию и получить данные о ее времени, но что-то пошло не так ))). Не пойму в чем дело. В МТ4 все работало...
//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_color3 Chocolate
#property indicator_color4 Red
//---- input parameters
input datetime some_time = D'1971.01.11 00:00';
input bool ALERT = false;
//---- buffers
double UP_Buffer[];
double DWN_Buffer[];
double Strelka_vniz[];
double Low_Day = 100000;
double High_Day = 0;
//---
datetime t;
datetime Reset;
///
datetime PrevTime = 0;
int ii;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {

//---- indicator line
   SetIndexBuffer(0, UP_Buffer, INDICATOR_DATA);
//
   SetIndexBuffer(1, DWN_Buffer, INDICATOR_DATA);
//---
   SetIndexBuffer(2, Strelka_vniz, INDICATOR_DATA);
//---- name for DataWindow and indicator subwindow label
  }
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
     {
      PrevTime = time[0];
      ObjectCreate(0, "V_Line", OBJ_VLINE, 0, time[0], 0);
      ObjectSetInteger(0, "V_Line", OBJPROP_COLOR, clrAntiqueWhite);
      ObjectSetInteger(0, "V_Line", OBJPROP_BACK, 0);
      ObjectSetInteger(0, "V_Line", OBJPROP_STYLE, STYLE_DASH);
      ObjectSetInteger(0, "V_Line", OBJPROP_WIDTH, 0);
      //---
      int UP = 0;
      int Down = 0;
      t = GetObjectTime1("V_Line");
      Comment(GetObjectTime1("V_Line"));
      int i = iBarShift(Symbol(), PERIOD_CURRENT, t, 0);
      //---
      if(Reset != t)
         ii = Bars(Symbol(), PERIOD_CURRENT);
      while(ii >= 0)
        {
           {
            UP_Buffer[ii] = EMPTY_VALUE;
            DWN_Buffer[ii] = EMPTY_VALUE;
            Strelka_vniz[ii] = EMPTY_VALUE;
           }
         ii--;
        }
      Reset = t;
      while(i >= 0)
        {
         if(high[i] > High_Day)
           {
            High_Day = high[i];
            //  UP=0;
           }
         ////
         if(low[i] < Low_Day)
           {
            Low_Day = low[i];
            // Down=0;
           }
         ////
         if(close[i] < open[i])
            Down++;
         //UP_Buffer[i]=UP;
         //
         if(close[i] > open[i])
            UP++;
         if(UP - Down == 0)
           {
            Down = 0;
            UP = 0;
           }
         if(UP - Down >= 0)
            UP_Buffer[i] = UP - Down;
         if(UP - Down <= 0)
            DWN_Buffer[i] = UP - Down;
         //Strelka_vverh[i]=Down;
         Strelka_vniz[i] = 0;
         if(DWN_Buffer[0] == 0)
            if(ALERT)
               Alert(" Пересечение!!!");
         ///
         i--;
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectDelete(0, "V_Line");
  }
//+------------------------------------------------------------------+
datetime GetObjectTime1(const string name)
  {
   datetime time;
   if(!ObjectGetInteger(0, name, OBJPROP_TIME, 0, time))
      return(0);
   return(time);
  }
//+------------------------------------------------------------------+
 
Александр #:
Нужно нарисовать вертикальную линию и получить данные о ее времени, но что-то пошло не так ))). Не пойму в чем дело. В МТ4 все работало...
   if(ObjectFind(0,"V_Line")!=0)
     {
      ObjectCreate(0, "V_Line", OBJ_VLINE, 0, time[0], 0);
      ObjectSetInteger(0, "V_Line", OBJPROP_COLOR, clrAntiqueWhite);
      ObjectSetInteger(0, "V_Line", OBJPROP_BACK, 0);
      ObjectSetInteger(0, "V_Line", OBJPROP_STYLE, STYLE_DASH);
      ObjectSetInteger(0, "V_Line", OBJPROP_WIDTH, 0);
     }
   if(ObjectFind(0,"V_Line")==0)
      t=ObjectGetInteger(0,"V_Line",OBJPROP_TIME);

или в твоем случае

//+------------------------------------------------------------------+
datetime GetObjectTime1(const string name)
  {
   datetime time=0;
   if(ObjectFind(0,name)==0)
      time=ObjectGetInteger(0,name,OBJPROP_TIME);
   return(time);
  }
//+------------------------------------------------------------------+
 
Tretyakov Rostyslav #:

или в твоем случае

Tretyakov Rostyslav #:

или в твоем случае

Не создает. Если Вам не сложно вставьте суда код
//+------------------------------------------------------------------+
//|                                                       V_Line.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Александр #:
Не создает. Если Вам не сложно вставьте суда код

Кнопку "Все" нажимал?

datetime t;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0,"V_Line");
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(ObjectFind(0,"V_Line")!=0)
     {
      ObjectCreate(0, "V_Line", OBJ_VLINE, 0, iTime(_Symbol,PERIOD_CURRENT,0), 0);
      ObjectSetInteger(0, "V_Line", OBJPROP_COLOR, clrAntiqueWhite);
      ObjectSetInteger(0, "V_Line", OBJPROP_BACK, 0);
      ObjectSetInteger(0, "V_Line", OBJPROP_STYLE, STYLE_DASH);
      ObjectSetInteger(0, "V_Line", OBJPROP_WIDTH, 0);
     }   
   t=GetObjectTime1("V_Line");
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
datetime GetObjectTime1(const string name)
  {
   datetime time=0;
   if(ObjectFind(0,name)==0)
      time=(datetime)ObjectGetInteger(0,name,OBJPROP_TIME);
   return(time);
  }
//+------------------------------------------------------------------+
 
Прошу помощь у сообщества...
Почему MathRand() дает повторяющиеся значения ?

MathRand()   : Перед первым вызовом функции необходимо использовать функцию MathSrand, чтобы перевести генератор псевдослучайных чисел в начальное состояние.
MathSrand()  : Для гарантированного получения неповторяющейся последовательности используйте вызов MathSrand(GetTickCount()).

Тестировал советник со случайным входом. Результаты повторялись.Решил проверить в скрипте, как работает MathRand(). Значения повторяются...
//+------------------------------------------------------------------+
//|                                                checkMathRand.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart() {
   string   str1;
   int      val1;
      
      Print(__FILE__+":"+IntegerToString(__LINE__)+" "+__FUNCTION__+" : Начало");
      for (int i=1;i<=5;i++) { 
      
         str1=StringConcatenate("Цикл : ",i);
         MathSrand(GetTickCount()); // Инициализация неповторяющимся числом

         for (int j=1;j<=5;j++) { 
            val1=MathRand();
            str1=StringConcatenate(str1," ; ",IntegerToString(val1)) ;
         }
         Print(str1);
      }
      Print(__FILE__+":"+IntegerToString(__LINE__)+" "+__FUNCTION__+" : Конец");
}

Вывод во вкладку "Эксперты" терминала :

2022.07.08 10:05:58.162 Script checkMathRand EURUSD,H4: removed

2022.07.08 10:05:58.162 checkMathRand EURUSD,H4: uninit reason 0

2022.07.08 10:05:58.162 checkMathRand EURUSD,H4: checkMathRand.mq4:34 OnStart : Конец

2022.07.08 10:05:58.162 checkMathRand EURUSD,H4: Цикл : 5 ; 14161 ; 28429 ; 16098 ; 9335 ; 1512

2022.07.08 10:05:58.162 checkMathRand EURUSD,H4: Цикл : 4 ; 14161 ; 28429 ; 16098 ; 9335 ; 1512

2022.07.08 10:05:58.162 checkMathRand EURUSD,H4: Цикл : 3 ; 14161 ; 28429 ; 16098 ; 9335 ; 1512

2022.07.08 10:05:58.162 checkMathRand EURUSD,H4: Цикл : 2 ; 14161 ; 28429 ; 16098 ; 9335 ; 1512

2022.07.08 10:05:58.162 checkMathRand EURUSD,H4: Цикл : 1 ; 14161 ; 28429 ; 16098 ; 9335 ; 1512

2022.07.08 10:05:58.162 checkMathRand EURUSD,H4: checkMathRand.mq4:19 OnStart : Начало

2022.07.08 10:05:58.162 checkMathRand EURUSD,H4: initialized

2022.07.08 10:05:58.146 Script checkMathRand EURUSD,H4: loaded successfully



Discover new MetaTrader 5 opportunities with MQL5 community and services
Discover new MetaTrader 5 opportunities with MQL5 community and services
  • 2022.07.08
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
Причина обращения: