Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1894

 
Vitaly Muzichenko #:

Funziona, ma il minimo è un rientro che può essere impostato a mano e almeno

Sì, non meno del 10% della finestra.

 
Alekseu Fedotov #:

Sì, almeno il 10% della finestra.

Così finisce male.


 

Buon pomeriggio a tutti. Ho 20 strumenti aperti e ho bisogno di caricare lo stesso modello su tutti. È possibile automatizzare questo con uno script? Se è così, puoi per favore condividere il codice su come farlo?

 
DanilaMactep #:

Buon pomeriggio a tutti. Ho 20 strumenti aperti e ho bisogno di caricare lo stesso modello su tutti. È possibile automatizzare questo con uno script? Se è così, per favore condividi il codice come farlo?

fare uno script - passare attraverso i grafici a turno ( ChartFirst(), ChartNext() ) e applicare il modello richiesto ( ChartApplyTemplate() )

Puoi controllare qui: https://www.mql5.com/ru/blogs/post/747636 o personalizzarlo

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

Buon pomeriggio a tutti. Ho 20 strumenti aperti e ho bisogno di caricare lo stesso modello su tutti. È possibile automatizzare questo con uno script? Se sì, puoi per favore condividere il codice come farlo?

Il modello come predefinito sarà ricordato. E tutte le nuove finestre si apriranno con un modello predefinito.

 
Tretyakov Rostyslav #:
Basta postare il codice.

Ci sono cinque pagine di codice lì dentro. Mi tirerete tutti delle pietre, sono un dilettante... il forum dice che sono più di 64.000 caratteri.

File:
 
Sergey Dymov #:

Ci sono cinque pagine di codice lì dentro. Mi tirerete tutti delle pietre, sono un dilettante... Il forum giura che sono più di 64000 caratteri.

Dovresti specificare un carattere nella funzione'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);
}
//+------------------------------------------------------------------+
File:
MaOsC_sv.mq5  11 kb
MaOsC_dr.ex5  11 kb
 
MatveySt #:


1) Entrambi devono essere 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) mettere "+"

   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) Entrambi devono essere sma_h

2) mettere "+"

Grazie!!! Funziona tutto!