MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1894

 
Vitaly Muzichenko #:

動作しますが、手で設定できるインデントで、最低でも

はい、ウィンドウの10%以下ではありません。

 
Alekseu Fedotov #:

はい、ウィンドウの10%以上です。

だから、悪い結果になるんです。


 

皆さん、こんにちは。20個のツールを開いていて、すべてのツールに同じテンプレートをロードする必要があります。スクリプトで自動化することは可能でしょうか?もしそうなら、その方法のコードを教えていただけませんか?

 
DanilaMactep #:

皆さん、こんにちは。20個のツールを開いていて、すべてのツールに同じテンプレートをロードする必要があります。スクリプトで自動化することは可能でしょうか?もしそうなら、それを行う方法のコードを共有してください?

スクリプトを作成する - チャートを順番に見ていき ( ChartFirst(), ChartNext() ) 、必要なテンプレートを適用する ( ChartApplyTemplate() ) 。

こちらで確認できます :https://www.mql5.com/ru/blogs/post/747636 またはカスタマイズする

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

皆さん、こんにちは。20個のツールを開いていて、すべてのツールに同じテンプレートをロードする必要があります。スクリプトで自動化することは可能でしょうか?もしそうなら、それを行う方法をコードで教えていただけますか?

デフォルトのテンプレートが記憶されます。そして、すべての新しいウィンドウは、デフォルトのテンプレートで開かれます。

 
Tretyakov Rostyslav #:
コードを貼ってください。

5ページ分のコードがあるんですよ。みんな石を投げてくるよ、素人なんだから...。64,000文字以上と表示されているのですが。

ファイル:
 
Sergey Dymov #:

5ページ分のコードがあるんですよ。みんな石を投げてくるよ、素人なんだから...。フォーラムでは64000文字以上と断言しています。

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);
}
//+------------------------------------------------------------------+
ファイル:
MaOsC_sv.mq5  11 kb
MaOsC_dr.ex5  11 kb
 
MatveySt #:


1) 両方とも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)"+"をつける

   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) 両方ともsma_hであること

2)"+"をつける

ありがとうございます!!!すべてうまくいっている!