Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1894

 
Vitaly Muzichenko #:

Funciona, pero el mínimo es una sangría que se puede fijar a mano y al menos

Sí, no menos del 10% de la ventana.

 
Alekseu Fedotov #:

Sí, al menos el 10% de la ventana.

Así que se convierte en algo malo.


 

Buenas tardes a todos. Tengo 20 herramientas abiertas y necesito cargar la misma plantilla en todas ellas. ¿Es posible automatizar esto con un script? Si es así, ¿podría compartir el código sobre cómo hacerlo?

 
DanilaMactep #:

Buenas tardes a todos. Tengo 20 herramientas abiertas y necesito cargar la misma plantilla en todas ellas. ¿Es posible automatizar esto con un script? Si es así, por favor comparta el código de cómo hacerlo.

hacer un script - recorrer los gráficos uno por uno ( ChartFirst(), ChartNext() ) y aplicarles la plantilla requerida ( ChartApplyTemplate() )

Puedes comprobarlo aquí :https://www.mql5.com/ru/blogs/post/747636 o personalizarlo

Полезняшки - скрипт для открытия чартов
Полезняшки - скрипт для открытия чартов
  • www.mql5.com
Небольшой скрипт, открывает недостающие пары и применяет туда шаблон
 
DanilaMactep #:

Buenas tardes a todos. Tengo 20 herramientas abiertas y necesito cargar la misma plantilla en todas ellas. ¿Es posible automatizar esto con un script? Si es así, ¿podría compartir el código para hacerlo?

Se recordará la plantilla por defecto. Y todas las nuevas ventanas se abrirán con la plantilla por defecto.

 
Tretyakov Rostyslav #:
Sólo hay que poner el código.

Hay cinco páginas de código ahí. Todos me tirarán piedras, soy un aficionado... el foro dice que son más de 64.000 caracteres.

Archivos adjuntos:
 
Sergey Dymov #:

Hay cinco páginas de código ahí. Todos me tirarán piedras, soy un aficionado... El foro jura que son más de 64000 caracteres.

Debe especificar un carácter en la función'CopyXXXX':

   int  copy_open=CopyOpen(Symbol(),PERIOD_M15,0,1,OpenPrice);
   if(copy_open<0)
      Print("Неудачная попытка копирования OpenPrice");
 


Доброго времени суток!
Помогите разобраться я новичок в програмировании, посмотрел ролик "Как написать индикатор" писал код с ведущим ,от кампилировал без ошибок, вывожу на терминал индикатор не отрисовывается, ошибок нет в окне он есть в списке запущиных индекаторовв тоже. Что я делаю не так?




//+------------------------------------------------------------------+
//|                                                     MaOsC Уч.mq5 |
//|                                             Copyright 2022,Игорь |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022,Игорь"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window                                              //Выводить индикатор в отдельное окно
#property indicator_buffers 4
#property indicator_plots   1                                                    //Количество графических серий в индикаторе
#property indicator_label1  "MAOS"
#property indicator_type1 DRAW_COLOR_HISTOGRAM                                   // Графическое построение цветная гистограмма
#property indicator_color1 clrLightBlue,clrBlue,clrYellow,clrGold,clrDarkOrange
#property indicator_style1 STYLE_SOLID                                           //стиль линий для отрисовки
#property indicator_width1 2                                                     //толшина линий

input uint                 MaFastPeriod    = 7;
input uint                 MaSlowPeriod    = 33;
input ENUM_MA_METHOD       MaMethod        = MODE_SMA;                        //метод МА
input ENUM_APPLIED_PRICE   MaAppliaedPrice = PRICE_CLOSE;

double  MAOSBuffer[];       //буфер если связан с ценой то тип double
double  ColorsBuffer[];
double  FastBuffer[];
double  SlowBuffer[];


int   FastPeriod,                                                                 // глобальные переменные
      SlowPeriod,
      fma_h, sma_h;                                                               // описатель (хэндл) индекатора,для того что-бы можно было обращаться к нему в дальнейшем

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
   FastPeriod = int(MaFastPeriod < 1 ? 1 : MaFastPeriod);  //описание действия (если MaFastPeriod меньше 1 то указываем 1 а если оно больше либо = 1 то указываем MaFastPeriod)
   SlowPeriod = int(MaSlowPeriod == MaFastPeriod ? FastPeriod + 1 : MaSlowPeriod < 1 ? 1 : MaSlowPeriod); // описание действия(если MaSlowPeriod = FastPeriod то в таком случае +1,а иначе если MaSlowPeriod меньше 1 то указываем 1 а если оно больше либо = 1 то указываем MaSlowPeriod)
   
   SetIndexBuffer(0, MAOSBuffer, INDICATOR_DATA);
   SetIndexBuffer(1, ColorsBuffer, INDICATOR_COLOR_INDEX);
   SetIndexBuffer(2, FastBuffer, INDICATOR_CALCULATIONS);
   SetIndexBuffer(3, SlowBuffer, INDICATOR_CALCULATIONS);   
   
   ArraySetAsSeries(MAOSBuffer, true);
   ArraySetAsSeries(ColorsBuffer, true);
   ArraySetAsSeries(FastBuffer, true);
   ArraySetAsSeries(SlowBuffer, true);

   ResetLastError();
   
   fma_h = iMA(NULL,PERIOD_CURRENT, FastPeriod, 0, MaMethod, MaAppliaedPrice);
   if (fma_h == INVALID_HANDLE)
   {
      Print("Не удалось инициализировать индикатор Moving Average");
      return INIT_FAILED;
   }
   
   fma_h = iMA(NULL,PERIOD_CURRENT, SlowPeriod, 0, MaMethod, MaAppliaedPrice);
   if (sma_h == INVALID_HANDLE)
   {
      Print("Не удалось инициализировать индикатор Moving Average");
      return INIT_FAILED;
   } 
   
   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[])
{
   if (rates_total < 4) return(0); //индикатор. проверку и расчёт количества прощитываемых баров(если rates_total меньше 4 баров то ни какого вычесления и отрисовки не делаем )
   
   int limit = rates_total - prev_calculated;
   if (limit > 1)
   {
      limit = rates_total -2;
      ArrayInitialize(MAOSBuffer, 0);
      ArrayInitialize(ColorsBuffer, 4);
      ArrayInitialize(FastBuffer, 0);
      ArrayInitialize(SlowBuffer, 0);
   }
   
   int count =(limit > 1 ? rates_total : 1),
   copied = 0;
   
   copied = CopyBuffer(fma_h, 0, 0, count, FastBuffer);
   
   if  (copied != count)
       return(0);
       
   copied = CopyBuffer(sma_h, 0, 0, count, SlowBuffer);
   
   if  (copied != count)
       return(0);


   for(int i=limit; i>=0; i--)
   {
       MAOSBuffer[i]   = FastBuffer[i] - SlowBuffer[i];
       ColorsBuffer[i] = (MAOSBuffer[i] > 0 ? (MAOSBuffer[i] > MAOSBuffer[i=1] ? 0 : 1) : MAOSBuffer[i] < 0 ? (MAOSBuffer[i] < MAOSBuffer[i+1] ? 2: 3) : 4);
   }

   return(rates_total);
}
//+------------------------------------------------------------------+
Archivos adjuntos:
MaOsC_sv.mq5  11 kb
MaOsC_dr.ex5  11 kb
 
MatveySt #:


1) Ambos deben ser sma_h

   fma_h = iMA(NULL,PERIOD_CURRENT, FastPeriod, 0, MaMethod, MaAppliaedPrice);
   if (fma_h == INVALID_HANDLE)
   {
      Print("Не удалось инициализировать индикатор Moving Average");
      return INIT_FAILED;
   }
   
   fma_h = iMA(NULL,PERIOD_CURRENT, SlowPeriod, 0, MaMethod, MaAppliaedPrice);
   if (sma_h == INVALID_HANDLE)
   {
      Print("Не удалось инициализировать индикатор Moving Average");
      return INIT_FAILED;
   } 

2) poner "+"

   for(int i=limit; i>=0; i--)
   {
       MAOSBuffer[i]   = FastBuffer[i] - SlowBuffer[i];
       ColorsBuffer[i] = (MAOSBuffer[i] > 0 ? (MAOSBuffer[i] > MAOSBuffer[i=1] ? 0 : 1) : MAOSBuffer[i] < 0 ? (MAOSBuffer[i] < MAOSBuffer[i+1] ? 2: 3) : 4);
   }
 
Tretyakov Rostyslav #:

1) Ambos deben ser sma_h

2) poner "+"

¡¡¡Gracias!!! ¡Todo está funcionando!
Razón de la queja: