Scriverò un EA gratuitamente - pagina 164

 
GhostMan #:

Posso scrivere un indicatore gratuitamente?

Va bene così?

Schermata 2022-02-20 103008

//+------------------------------------------------------------------+
//|                                        iMACD Four TimeFrames.mq5 |
//+------------------------------------------------------------------+
//|                                                         Fx10.mq5 |
//|                                   Copyright © 2000-2007, palanka |
//|                                         http://www.metaquotes.ru |
//+------------------------------------------------------------------+
//---- авторство индикатора
#property copyright "Copyright © 2000-2007, palanka"
//---- ссылка на сайт автора
#property link      ""
//---- номер версии индикатора
#property version   "1.02"
//---- отрисовка индикатора в главном окне
#property indicator_chart_window
//---- для расчета и отрисовки индикатора использовано два буфера
#property indicator_buffers 2
//---- использовано всего два графических построения
#property indicator_plots   2
//+----------------------------------------------+
//|  Объявление констант                         |
//+----------------------------------------------+
#define  RESET  0 // константа для возврата терминалу команды на пересчет индикатора
//+----------------------------------------------+
//|  Параметры отрисовки медвежьего индикатора   |
//+----------------------------------------------+
//---- отрисовка индикатора 1 в виде символа
#property indicator_type1   DRAW_ARROW
//---- в качестве цвета индикатора использован цвет Magenta
#property indicator_color1  Red
//---- толщина линии индикатора 1 равна 4
#property indicator_width1  4
//---- отображение метки индикатора
#property indicator_label1  "iMACD Four TimeFrames Sell"
//+----------------------------------------------+
//|  Параметры отрисовки бычьего индикатора      |
//+----------------------------------------------+
//---- отрисовка индикатора 2 в виде символа
#property indicator_type2   DRAW_ARROW
//---- в качестве цвета индикатора использован цвет Lime
#property indicator_color2  Blue
//---- толщина линии индикатора 2 равна 4
#property indicator_width2  4
//---- отображение метки индикатора
#property indicator_label2 "iMACD Four TimeFrames Buy"
//+----------------------------------------------+
//| Входные параметры индикатора                 |
//+----------------------------------------------+
input group             "Trading settings"
input ENUM_TIMEFRAMES      InpWorkingPeriod         = PERIOD_CURRENT; // Working timeframe (#1 timeframe)
input ENUM_TIMEFRAMES      InpPeriod_2              = PERIOD_M15;     // #2 timeframe
input ENUM_TIMEFRAMES      InpPeriod_3              = PERIOD_M30;     // #3 timeframe
input ENUM_TIMEFRAMES      InpPeriod_4              = PERIOD_H1;      // #4 timeframe
input group             "MACD"
input int                  Inp_MACD_fast_ema_period = 12;             // MACD: period for Fast average calculation
input int                  Inp_MACD_slow_ema_period = 26;             // MACD: period for Slow average calculation
input int                  Inp_MACD_signal_period   = 9;              // MACD: period for their difference averaging
input ENUM_APPLIED_PRICE   Inp_MACD_applied_price   = PRICE_CLOSE;    // MACD: type of price
//+----------------------------------------------+
//---- объявление динамических массивов, которые в дальнейшем
//---- будут использованы в качестве индикаторных буферов
double SellBuffer[];
double BuyBuffer[];
//---- объявление целочисленных переменных начала отсчета данных
int min_rates_total;
//---- объявление целочисленных переменных для хендлов индикаторов
int handle_iMACD;      // variable for storing the handle of the iMACD indicator
int handle_iMACD_2;    // variable for storing the handle of the iMACD indicator
int handle_iMACD_3;    // variable for storing the handle of the iMACD indicator
int handle_iMACD_4;    // variable for storing the handle of the iMACD indicator
int OldTrend;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//---- инициализация глобальных переменных
   min_rates_total = int(Inp_MACD_slow_ema_period + 1);
//---- получение хендла индикатора MACD
   handle_iMACD = iMACD(NULL, InpWorkingPeriod, Inp_MACD_fast_ema_period, Inp_MACD_slow_ema_period,
                        Inp_MACD_signal_period, Inp_MACD_applied_price);
   if(handle_iMACD == INVALID_HANDLE)
      Print(" Не удалось получить хендл индикатора iMACD");
//---- получение хендла индикатора MACD
   handle_iMACD_2 = iMACD(NULL, InpPeriod_2, Inp_MACD_fast_ema_period, Inp_MACD_slow_ema_period,
                          Inp_MACD_signal_period, Inp_MACD_applied_price);
   if(handle_iMACD_2 == INVALID_HANDLE)
      Print(" Не удалось получить хендл индикатора iMACD");
//---- получение хендла индикатора MACD
   handle_iMACD_3 = iMACD(NULL, InpPeriod_3, Inp_MACD_fast_ema_period, Inp_MACD_slow_ema_period,
                          Inp_MACD_signal_period, Inp_MACD_applied_price);
   if(handle_iMACD_3 == INVALID_HANDLE)
      Print(" Не удалось получить хендл индикатора iMACD");
//---- получение хендла индикатора MACD
   handle_iMACD_4 = iMACD(NULL, InpPeriod_4, Inp_MACD_fast_ema_period, Inp_MACD_slow_ema_period,
                          Inp_MACD_signal_period, Inp_MACD_applied_price);
   if(handle_iMACD_4 == INVALID_HANDLE)
      Print(" Не удалось получить хендл индикатора iMACD");
//---- превращение динамического массива SellBuffer[] в индикаторный буфер
   SetIndexBuffer(0, SellBuffer, INDICATOR_DATA);
//---- осуществление сдвига начала отсчета отрисовки индикатора 1
   PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, min_rates_total);
//---- символ для индикатора
   PlotIndexSetInteger(0, PLOT_ARROW, 234);
//---- установка значений индикатора, которые не будут видимы на графике
   PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0);
//---- индексация элементов в буфере, как в таймсерии
   ArraySetAsSeries(SellBuffer, true);
//---- превращение динамического массива BuyBuffer[] в индикаторный буфер
   SetIndexBuffer(1, BuyBuffer, INDICATOR_DATA);
//---- осуществление сдвига начала отсчета отрисовки индикатора 2
   PlotIndexSetInteger(1, PLOT_DRAW_BEGIN, min_rates_total);
//---- символ для индикатора
   PlotIndexSetInteger(1, PLOT_ARROW, 233);
//---- установка значений индикатора, которые не будут видимы на графике
   PlotIndexSetDouble(1, PLOT_EMPTY_VALUE, 0);
//---- индексация элементов в буфере, как в таймсерии
   ArraySetAsSeries(BuyBuffer, true);
//---- установка формата точности отображения индикатора
   IndicatorSetInteger(INDICATOR_DIGITS, _Digits);
//---- имя для окон данных и метка для подокон
   string short_name = "iMACD Four TimeFrames";
   IndicatorSetString(INDICATOR_SHORTNAME, short_name);
//----
  }
//+------------------------------------------------------------------+
//| 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(BarsCalculated(handle_iMACD) < rates_total
      || BarsCalculated(handle_iMACD_2) < rates_total
      || BarsCalculated(handle_iMACD_3) < rates_total
      || BarsCalculated(handle_iMACD_4) < rates_total
      || rates_total < min_rates_total)
      return(RESET);
//---- объявления локальных переменных
   int to_copy, limit, bar;
   double main_1[], signal_1[], main_2[], signal_2[], main_3[], signal_3[], main_4[], signal_4[];
   bool MacdUp_1, MacdDn_1, MacdUp_2, MacdDn_2, MacdUp_3, MacdDn_3, MacdUp_4, MacdDn_4;
//---- расчеты необходимого количества копируемых данных и
//---- и стартового номера limit для цикла пересчета баров
   if(prev_calculated > rates_total || prev_calculated <= 0) // проверка на первый старт расчета индикатора
      limit = rates_total - min_rates_total; // стартовый номер для расчета всех баров
   else
      limit = rates_total - prev_calculated; // стартовый номер для расчета новых баров
   to_copy = limit + 1;
//---- копируем вновь появившиеся данные в массивы
   if(CopyBuffer(handle_iMACD, MAIN_LINE, 0, to_copy, main_1)       <= 0)
      return(RESET);
   if(CopyBuffer(handle_iMACD, SIGNAL_LINE, 0, to_copy, signal_1)   <= 0)
      return(RESET);
   if(CopyBuffer(handle_iMACD_2, MAIN_LINE, 0, to_copy, main_2)     <= 0)
      return(RESET);
   if(CopyBuffer(handle_iMACD_2, SIGNAL_LINE, 0, to_copy, signal_2) <= 0)
      return(RESET);
   if(CopyBuffer(handle_iMACD_3, MAIN_LINE, 0, to_copy, main_3)     <= 0)
      return(RESET);
   if(CopyBuffer(handle_iMACD_3, SIGNAL_LINE, 0, to_copy, signal_3) <= 0)
      return(RESET);
   if(CopyBuffer(handle_iMACD_4, MAIN_LINE, 0, to_copy, main_4)     <= 0)
      return(RESET);
   if(CopyBuffer(handle_iMACD_4, SIGNAL_LINE, 0, to_copy, signal_4) <= 0)
      return(RESET);
//---- индексация элементов в массивах, как в таймсериях
   ArraySetAsSeries(main_1, true);
   ArraySetAsSeries(signal_1, true);
   ArraySetAsSeries(main_2, true);
   ArraySetAsSeries(signal_2, true);
   ArraySetAsSeries(main_3, true);
   ArraySetAsSeries(signal_3, true);
   ArraySetAsSeries(main_4, true);
   ArraySetAsSeries(signal_4, true);
   ArraySetAsSeries(high, true);
   ArraySetAsSeries(low, true);
//---- основной цикл расчета индикатора
   for(bar = limit; bar >= 0 && !IsStopped(); bar--)
     {
      BuyBuffer[bar]  = 0.0;
      SellBuffer[bar] = 0.0;
      //--- BUY Signal
      MacdUp_1 = main_1[bar] > signal_1[bar] && main_1[bar] > 0.0 && signal_1[bar] > 0.0;
      MacdUp_2 = main_2[bar] > signal_2[bar] && main_2[bar] > 0.0 && signal_2[bar] > 0.0;
      MacdUp_3 = main_3[bar] > signal_3[bar] && main_3[bar] > 0.0 && signal_3[bar] > 0.0;
      MacdUp_4 = main_4[bar] > signal_4[bar] && main_4[bar] > 0.0 && signal_4[bar] > 0.0;
      //--- SELL Signal
      MacdDn_1 = main_1[bar] < signal_1[bar] && main_1[bar] < 0.0 && signal_1[bar] < 0.0;
      MacdDn_2 = main_2[bar] < signal_2[bar] && main_2[bar] < 0.0 && signal_2[bar] < 0.0;
      MacdDn_3 = main_3[bar] < signal_3[bar] && main_3[bar] < 0.0 && signal_3[bar] < 0.0;
      MacdDn_4 = main_4[bar] < signal_4[bar] && main_4[bar] < 0.0 && signal_4[bar] < 0.0;
      //--- BUY Signal
      if(MacdUp_1 && MacdUp_2 && MacdUp_3 && MacdUp_4)
        {
         if(OldTrend < 0)
            BuyBuffer[bar] = low[bar];
         if(bar != 0)
            OldTrend = +1;
        }
      //--- SELL Signal
      if(MacdDn_1 && MacdDn_2 && MacdDn_3 && MacdDn_4)
        {
         if(OldTrend > 0)
            SellBuffer[bar] = high[bar];
         if(bar != 0)
            OldTrend = -1;
        }
     }
//----
   return(rates_total);
  }
//+------------------------------------------------------------------+
 

che può scrivere un indicatore per MT4...

compito.

disegnare un rettangolo per una data quantità di ore. il limite superiore e inferiore è fissato dal massimo e dal minimo dell'intervallo di tempo dato (impostato in Indotto).

esempio.

l'intervallo di tempo in questo caso 2022.02.01 2:00 - 2022.02.01 14:00 è disegnato per 72 ore (dal punto di minimo o massimo più vicino all'inizio dell'intervallo)


 
GhostMan # :

chi può scrivere un tacchino per MT4..

compito.

disegna un rettangolo per un determinato numero di ore (impostazione in turchia). i limiti superiore e inferiore sono determinati dal massimo e dal minimo dell'intervallo di tempo specificato (impostazione in turchia) .

esempio.

l'intervallo di tempo in questo caso 2022.02.01 2:00 - 2022.02.01 14:00 è disegnato per 72 ore (dal punto minimo o massimo più vicino all'inizio dell'intervallo)


ecco uno script di esempio - tratto da qui https://www.mql5.com/ru/docs/constants/objectconstants/enum_object/obj_rectangle

 //+------------------------------------------------------------------+
//|                                                OBJ_RECTANGLE.mq4 |
//|                        Copyright 2022, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Software Corp."
#property link        " https://www.mql5.com "
#property version    "1.00"
//--- описание
#property description "Скрипт строит прямоугольник на графике."
#property description "Координаты точек привязки задаются в"
#property description "процентах от размеров окна графика."

#property strict
//--- покажем окно входных параметров при запуске скрипта
#property script_show_inputs
//--- входные параметры скрипта
input string           InpName= "Rectangle" ; // Имя прямоугольника
input int              InpDate1= 40 ;         // Дата 1-ой точки в %
input int              InpPrice1= 40 ;         // Цена 1-ой точки в %
input int              InpDate2= 60 ;         // Дата 2-ой точки в %
input int              InpPrice2= 60 ;         // Цена 2-ой точки в %
input color            InpColor= clrRed ;     // Цвет прямоугольника
input ENUM_LINE_STYLE InpStyle= STYLE_DASH ; // Стиль линий прямоугольника
input int              InpWidth= 2 ;           // Толщина линий прямоугольника
input bool             InpFill= true ;         // Заливка прямоугольника цветом
input bool             InpBack= false ;       // Прямоугольника на заднем плане
input bool             InpSelection= true ;   // Выделить для перемещений
input bool             InpHidden= true ;       // Скрыт в списке объектов
input long             InpZOrder= 0 ;         // Приоритет на нажатие мышью
//+------------------------------------------------------------------+
//| Cоздает прямоугольник по заданным координатам                    |
//+------------------------------------------------------------------+
bool RectangleCreate( const long             chart_ID= 0 ,         // ID графика
                     const string           name= "Rectangle" ,   // имя прямоугольника
                     const int              sub_window= 0 ,       // номер подокна
                     datetime               time1= 0 ,           // время первой точки
                     double                 price1= 0 ,           // цена первой точки
                     datetime               time2= 0 ,           // время второй точки
                     double                 price2= 0 ,           // цена второй точки
                     const color            clr= clrRed ,         // цвет прямоугольника
                     const ENUM_LINE_STYLE style= STYLE_SOLID , // стиль линий прямоугольника
                     const int              width= 1 ,           // толщина линий прямоугольника
                     const bool             fill= false ,         // заливка прямоугольника цветом
                     const bool             back= false ,         // на заднем плане
                     const bool             selection= true ,     // выделить для перемещений
                     const bool             hidden= true ,       // скрыт в списке объектов
                     const long             z_order= 0 )         // приоритет на нажатие мышью
  {
//--- установим координаты точек привязки, если они не заданы
   ChangeRectangleEmptyPoints(time1,price1,time2,price2);
//--- сбросим значение ошибки
   ResetLastError ();
//--- создадим прямоугольник по заданным координатам
   if (! ObjectCreate (chart_ID,name, OBJ_RECTANGLE ,sub_window,time1,price1,time2,price2))
     {
       Print ( __FUNCTION__ ,
             ": не удалось создать прямоугольник! Код ошибки = " , GetLastError ());
       return ( false );
     }
//--- установим цвет прямоугольника
   ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr);
//--- установим стиль линий прямоугольника
   ObjectSetInteger (chart_ID,name, OBJPROP_STYLE ,style);
//--- установим толщину линий прямоугольника
   ObjectSetInteger (chart_ID,name, OBJPROP_WIDTH ,width);
//--- включим (true) или отключим (false) режим заливки прямоугольника
   ObjectSetInteger (chart_ID,name, OBJPROP_FILL ,fill);
//--- отобразим на переднем (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);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order);
//--- успешное выполнение
   return ( true );
  }
//+------------------------------------------------------------------+
//| Перемещает точку привязки прямоугольника                         |
//+------------------------------------------------------------------+
bool RectanglePointChange( const long    chart_ID= 0 ,       // ID графика
                           const string name= "Rectangle" , // имя прямоугольника
                           const int     point_index= 0 ,     // номер точки привязки
                           datetime      time= 0 ,           // координата времени точки привязки
                           double        price= 0 )           // координата цены точки привязки
  {
//--- если координаты точки не заданы, то перемещаем ее на текущий бар с ценой Bid
   if (!time)
      time= TimeCurrent ();
   if (!price)
      price= SymbolInfoDouble ( Symbol (), SYMBOL_BID );
//--- сбросим значение ошибки
   ResetLastError ();
//--- переместим точку привязки
   if (! ObjectMove (chart_ID,name,point_index,time,price))
     {
       Print ( __FUNCTION__ ,
             ": не удалось переместить точку привязки! Код ошибки = " , GetLastError ());
       return ( false );
     }
//--- успешное выполнение
   return ( true );
  }
//+------------------------------------------------------------------+
//| Удаляет прямоугольник                                            |
//+------------------------------------------------------------------+
bool RectangleDelete( const long    chart_ID= 0 ,       // ID графика
                     const string name= "Rectangle" ) // имя прямоугольника
  {
//--- сбросим значение ошибки
   ResetLastError ();
//--- удалим прямоугольник
   if (! ObjectDelete (chart_ID,name))
     {
       Print ( __FUNCTION__ ,
             ": не удалось удалить прямоугольник! Код ошибки = " , GetLastError ());
       return ( false );
     }
//--- успешное выполнение
   return ( true );
  }
//+------------------------------------------------------------------+
//| Проверяет значения точек привязки прямоугольника и для пустых    |
//| значений устанавливает значения по умолчанию                     |
//+------------------------------------------------------------------+
void ChangeRectangleEmptyPoints( datetime &time1, double &price1,
                                 datetime &time2, double &price2)
  {
//--- если время первой точки не задано, то она будет на текущем баре
   if (!time1)
      time1= TimeCurrent ();
//--- если цена первой точки не задана, то она будет иметь значение Bid
   if (!price1)
      price1= SymbolInfoDouble ( Symbol (), SYMBOL_BID );
//--- если время второй точки не задано, то она лежит на 9 баров левее второй
   if (!time2)
     {
       //--- массив для приема времени открытия 10 последних баров
       datetime temp[ 10 ];
       CopyTime ( Symbol (), Period (),time1, 10 ,temp);
       //--- установим вторую точку на 9 баров левее первой
      time2=temp[ 0 ];
     }
//--- если цена второй точки не задана, сдвинем ее на 300 пунктов ниже первой
   if (!price2)
      price2=price1- 300 * SymbolInfoDouble ( Symbol (), SYMBOL_POINT );
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//--- проверим входные параметры на корректность
   if (InpDate1< 0 || InpDate1> 100 || InpPrice1< 0 || InpPrice1> 100 ||
      InpDate2< 0 || InpDate2> 100 || InpPrice2< 0 || InpPrice2> 100 )
     {
       Print ( "Ошибка! Некорректные значения входных параметров!" );
       return ;
     }
//--- количество видимых баров в окне графика
   int bars=( int ) ChartGetInteger ( 0 , CHART_VISIBLE_BARS );
//--- размер массива price
   int accuracy= 1000 ;
//--- массивы для хранения значений дат и цен, которые будут использованы
//--- для установки и изменения координат точек привязки прямоугольника
   datetime date[];
   double    price[];
//--- выделение памяти
   ArrayResize (date,bars);
   ArrayResize (price,accuracy);
//--- заполним массив дат
   ResetLastError ();
   if ( CopyTime ( Symbol (), Period (), 0 ,bars,date)==- 1 )
     {
       Print ( "Не удалось скопировать значения времени! Код ошибки = " , GetLastError ());
       return ;
     }
//--- заполним массив цен
//--- найдем максимальное и минимальное значение графика
   double max_price= ChartGetDouble ( 0 , CHART_PRICE_MAX );
   double min_price= ChartGetDouble ( 0 , CHART_PRICE_MIN );
//--- определим шаг изменения цены и заполним массив
   double step=(max_price-min_price)/accuracy;
   for ( int i= 0 ; i<accuracy; i++)
      price[i]=min_price+i*step;
//--- определим точки для рисования прямоугольника
   int d1=InpDate1*(bars- 1 )/ 100 ;
   int d2=InpDate2*(bars- 1 )/ 100 ;
   int p1=InpPrice1*(accuracy- 1 )/ 100 ;
   int p2=InpPrice2*(accuracy- 1 )/ 100 ;
//--- создадим прямоугольник
   if (!RectangleCreate( 0 ,InpName, 0 ,date[d1],price[p1],date[d2],price[p2],InpColor,
                       InpStyle,InpWidth,InpFill,InpBack,InpSelection,InpHidden,InpZOrder))
     {
       return ;
     }
//--- перерисуем график и подождем 1 секунду
   ChartRedraw ();
   Sleep ( 1000 );
//--- теперь будем перемещать точки привязки прямоугольника
//--- счетчик цикла
   int h_steps=bars/ 2 ;
//--- перемещаем точки привязки
   for ( int i= 0 ; i<h_steps; i++)
     {
       //--- возьмем следующие значения
       if (d1<bars- 1 )
         d1+= 1 ;
       if (d2> 1 )
         d2-= 1 ;
       //--- сдвигаем точки
       if (!RectanglePointChange( 0 ,InpName, 0 ,date[d1],price[p1]))
         return ;
       if (!RectanglePointChange( 0 ,InpName, 1 ,date[d2],price[p2]))
         return ;
       //--- проверим факт принудительного завершения скрипта
       if ( IsStopped ())
         return ;
       //--- перерисуем график
       ChartRedraw ();
       // задержка в 0.05 секунды
       Sleep ( 50 );
     }
//--- задержка в 1 секунду
   Sleep ( 1000 );
//--- счетчик цикла
   int v_steps=accuracy/ 2 ;
//--- перемещаем точки привязки
   for ( int i= 0 ; i<v_steps; i++)
     {
       //--- возьмем следующие значения
       if (p1<accuracy- 1 )
         p1+= 1 ;
       if (p2> 1 )
         p2-= 1 ;
       //--- сдвигаем точки
       if (!RectanglePointChange( 0 ,InpName, 0 ,date[d1],price[p1]))
         return ;
       if (!RectanglePointChange( 0 ,InpName, 1 ,date[d2],price[p2]))
         return ;
       //--- проверим факт принудительного завершения скрипта
       if ( IsStopped ())
         return ;
       //--- перерисуем график
       ChartRedraw ();
     }
//--- задержка в 1 секунду
   Sleep ( 1000 );
//--- удалим прямоугольник с графика
   RectangleDelete( 0 ,InpName);
   ChartRedraw ();
//--- задержка в 1 секунду
   Sleep ( 1000 );
//---
  }
//+------------------------------------------------------------------+
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE
  • www.mql5.com
OBJ_RECTANGLE - Типы объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
File:
 
Ciao, ho un'idea per un EA su mt5. L'idea non è nuova tutta la stessa griglia, e la stessa martingala. Ma la tensione della griglia stessa non è del tutto standard, per esempio: quando si apre un'operazione di vendita a 1,13200 in un lotto standard, un ordine limite di vendita pendente è posto in due lotti standard a 1,13400 e l'ordine successivo è pari a quattro lotti a 1,13800. Significa che ogni lotto moltiplicato per due moltiplicherà la dimensione della griglia sulla base di 1 lotto=100pips
 
Amici, come ottenere il nome della finestra in mt4 dove si trova il robot/indicatore. Per esempio (eurusd)


 
noxter195 #:
Amici, come ottenere il nome della finestra in mt4 dove si trova il robot/indicatore. Per esempio (eurusd)

Cosa si intende con questo termine?

 
Vitaly Muzichenko #:

Cosa si intende con questo termine?

Ho bisogno di ottenere il nome della coppia di valute corrente per tradurlo nel nome del pulsante. Per esempio, l'indicatore è sul grafico eurusd. Ho bisogno di tradurre la scritta eurusd nel nome del pulsante. Di conseguenza, se è su un'altra coppia di valute - tradurre il nome di un'altra coppia di valute

La questione è come tirarlo su. Simbolo variabile crolla mt
 
noxter195 #:
Ho bisogno di ottenere il nome della coppia di valute corrente per tradurlo nel nome del pulsante. Per esempio, l'indicatore è sul grafico eurusd, ho bisogno di tradurre la scritta eurusd nel nome del pulsante. Di conseguenza, se è su un'altra coppia di valute - tradurre il nome di un'altra coppia di valute

Domanda come tirare su. Simbolo variabile crolla mt

Non c'è nessun crash, funziona bene da quando è stata creata MetaTrader.

 
Vitaly Muzichenko #:

Non c'è nessun crash, funziona perfettamente dalla creazione di MetaTrader.

Sì, grazie. Apparentemente il problema era nel terminale. Ho provato su un altro terminale e ha funzionato.

 
Ciao, puoi scrivere un EA per questi indicatori con un Martin ma chiudere le posizioni o sul TP totale o sul primo TP?

<*-ex* i file sono stati cancellati