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

 
Vitaly Muzichenko:

これが調整後のものです。オリジナルはただただ暗いだけです。

P.S. Dot.mq4 - フルオリジナル

仕事が忙しく、長い間すみませんでした。

お待たせしました。

//+------------------------------------------------------------------+
//|                                                      VMTest1.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                             https://mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 7
#property indicator_plots   3
//--- plot ARR
#property indicator_label1  "MaOSC"
#property indicator_type1   DRAW_COLOR_ARROW
#property indicator_color1  clrLimeGreen,clrOrangeRed,clrSilver
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot ArrUP
#property indicator_label2  "Up"
#property indicator_type2   DRAW_ARROW
#property indicator_color2  clrBlue
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- plot ArrDN
#property indicator_label3  "Down"
#property indicator_type3   DRAW_ARROW
#property indicator_color3  clrCrimson
#property indicator_style3  STYLE_SOLID
#property indicator_width3  1
//---
#include <MovingAverages.mqh>

//--- input parameters
input uint     InpA=40;
//--- indicator buffers
double         BufferMAOSC[];
double         BufferColorsARR[];
double         BufferArrUP[];
double         BufferArrDN[];
double         BufferMAV[];
double         BufferMAA[];
double         BufferTMP[];
//--- gv
int a=0;
int per=0;
int val=0;
int handle_mav=INVALID_HANDLE;
int handle_maa=INVALID_HANDLE;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,BufferMAOSC,INDICATOR_DATA);
   SetIndexBuffer(1,BufferColorsARR,INDICATOR_COLOR_INDEX);
   SetIndexBuffer(2,BufferArrUP,INDICATOR_DATA);
   SetIndexBuffer(3,BufferArrDN,INDICATOR_DATA);
   SetIndexBuffer(4,BufferMAV,INDICATOR_CALCULATIONS);
   SetIndexBuffer(5,BufferMAA,INDICATOR_CALCULATIONS);
   SetIndexBuffer(6,BufferTMP,INDICATOR_CALCULATIONS);
   
//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
   PlotIndexSetInteger(0,PLOT_ARROW,159);
   PlotIndexSetInteger(1,PLOT_ARROW,225);
   PlotIndexSetInteger(2,PLOT_ARROW,226);
//---
   ArraySetAsSeries(BufferMAOSC,true);
   ArraySetAsSeries(BufferColorsARR,true);
   ArraySetAsSeries(BufferArrUP,true);
   ArraySetAsSeries(BufferArrDN,true);
   ArraySetAsSeries(BufferMAV,true);
   ArraySetAsSeries(BufferMAA,true);
   ArraySetAsSeries(BufferTMP,true);
//---
   a=(InpA<4 ? 4 : InpA);
   per=(int)floor(sqrt(a));
   val=(int)floor(a/1.9);
//---
   handle_mav=iMA(NULL,PERIOD_CURRENT,val,0,MODE_SMA,PRICE_LOW);
   if(handle_mav==INVALID_HANDLE)
     {
      Print("Не удалось создать хэндл индикатора MA(",val,"), ошибка ",GetLastError());
      return INIT_FAILED;
     }
   handle_maa=iMA(NULL,PERIOD_CURRENT,a,0,MODE_SMA,PRICE_LOW);
   if(handle_maa==INVALID_HANDLE)
     {
      Print("Не удалось создать хэндл индикатора MA(",a,"), ошибка ",GetLastError());
      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[])
  {
//---
   int limit=rates_total-prev_calculated;
   if(limit>1)
     {
      limit=rates_total-2;
      ArrayInitialize(BufferMAOSC,EMPTY_VALUE);
      ArrayInitialize(BufferColorsARR,2);
      ArrayInitialize(BufferArrUP,EMPTY_VALUE);
      ArrayInitialize(BufferArrDN,EMPTY_VALUE);
      ArrayInitialize(BufferMAV,0);
      ArrayInitialize(BufferMAA,0);
      ArrayInitialize(BufferTMP,0);
     }
//--- Подготовка данных
   int count=(limit>1 ? rates_total : 1),copied=0;
   copied=CopyBuffer(handle_mav,0,0,count,BufferMAV);
   if(copied!=count) return 0;
   copied=CopyBuffer(handle_maa,0,0,count,BufferMAA);
   if(copied!=count) return 0;

//--- Предварительный расчёт
   for(int i=limit;i>WRONG_VALUE;i--)
      BufferTMP[i]=2.0*BufferMAV[i]-BufferMAA[i];
      
//--- Расчёт индикатора
   if(SimpleMAOnBuffer(rates_total,prev_calculated,a,per,BufferTMP,BufferMAOSC)==0)
      return 0;
   for(int i=limit;i>WRONG_VALUE;i--)
     {
      BufferArrUP[i]=EMPTY_VALUE;
      BufferArrDN[i]=EMPTY_VALUE;
      BufferColorsARR[i]=(BufferMAOSC[i]>BufferMAOSC[i+1] ? 0 : BufferMAOSC[i]<BufferMAOSC[i+1] ? 1 : 2);
      if((BufferColorsARR[i]==0 && BufferColorsARR[i+1]==1) || (BufferColorsARR[i]==0 && BufferColorsARR[i+1]==2))
         BufferArrUP[i]=BufferMAOSC[i];
      if((BufferColorsARR[i]==1 && BufferColorsARR[i+1]==0) || (BufferColorsARR[i]==1 && BufferColorsARR[i+1]==2))
         BufferArrDN[i]=BufferMAOSC[i];
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Valeriy Yastremskiy:

この考え方は理解できますし、便利なのですが、今回の件ではうまくいきません。テスターの 時間を計りたい インジケーターの停止ボタンが押された 状態

ボタンを押してもログに書き込まれるとは限りません。

だから、ファイルですべての新しいバーを書いてみて ください環境での作業のすべての機能 - 取引の禁止、テスト、プログラムの終了......https://docs.mql4.com/ru/check

ヘルプがない場合は、WinAPIによって何かを探すことができません。

HH: ボタンを作ってクリックし、それを押すとすべてのアクションが実行され、ビジュアライザーは検索よりも速く実行を終了させることができます。

 
Igor Makanu:

ボタンが押された後、ログにプリントが書き込まれるかどうかは定かではありません

取引禁止、テスト、プログラム終了......など、環境に応じて動作するように、それぞれの新しいバーの すべての関数をファイルに書き込んでみてください。

もし、それが役に立たなければ、WinAPIによって何かを探してください。

HH:ボタンを作り、それを押す - それを押して、すべてのアクションを行い、そしてビジュアライザーがぼんやりと実行を終了するようにします。

テスター マガジンの印刷停止ボタン:停止ボタンが押された 状態

でも、ドキュメントには載っていないんです。Expert Advisorの場合はOnDynitで停止が呼び出され、Indicatorの場合はジャーナルに印刷されるだけです。インジケータがテストを停止して終了です。実は、間があるんです。しかし、それは雑誌には掲載されていない。

備考

一般的には、インジケーターを削除したり、ウィンドウを手動で閉じたりすることは難しいことではありません。しかし、その疑問は面白い。第三者のシンボルへのリクエストを通じてリアルタイムにアクセスするようなものです) ストップボタンでテストの終了をどうにか追跡するようになっています)。

 
Valeriy Yastremskiy:

テスター マガジンのストップボタン印刷:ストップボタンが押された 状態

でも、ドキュメントには載っていないんです。Expert Advisorの場合はOnDeinitで停止が呼び出され、インジケータの場合はジャーナルに印刷されるだけです。インジケーターのテストが止まってしまったので、それでおしまいです。実は、間があるんです。しかし、それは雑誌には掲載されていない。

備考

一般的には、インジケーターを削除したり、ウィンドウを手動で閉じたりすることは難しいことではありません。しかし、その疑問は面白い。第三者のシンボルへのリクエストを通じてリアルタイムにアクセスするようなものです) テストボタンの停止を何とか追跡する必要があるようです)

わからん

フォーラムを検索 IsTesting() - 類似の議論が見つかりました。

ZZY:ログがターミナルをプリントアウトすると思うのですが、そのためのMQLのコードが必要です

ZZZY:EAを書く、イミフ、インジケーターの可視化が面倒 )))。

 
Artyom Trishkin:

仕事が忙しく、遅くなりました。

お待たせしました。

変化はドラスティックですが、それは問題ではありません。

iMAOnArrayに対応する、それが目標でした。

ありがとう ございました。

 
Vitaly Muzichenko:

劇的な変化ですが、問題はそこではありません。

iMAOnArrayに対応する、それが目標でした。

ありがとう ございました。

ただ、ここではすべてがあちらとまったく同じなんです。しかし、MQL5ではそれが簡単にできるのです。

 

こんにちは。ObjectCreate() に記述されていない定数を削除した場合の理由。

例えば、z_orderやhidden?コンパイル後にエラーになりますか?線引きに参加しない。

bool VLineCreate(const long            chart_ID=0,        // ID графика 
                 const string          name="VLine",      // имя линии 
                 const int             sub_window=0,      // номер подокна 
                 datetime              time=0,            // время линии 
                 const color           clr=clrRed,        // цвет линии 
                 const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линии 
                 const int             width=1,           // толщина линии 
                 const bool            back=false,        // на заднем плане 
                 const bool            selection=true,    // выделить для перемещений 
                 const bool            ray=true,          // продолжение линии вниз 
                 const bool            hidden=true,       // скрыт в списке объектов 
                 const long            z_order=0)         // приоритет на нажатие мышью 
  { 
//--- если время линии не задано, то проводим ее через последний бар 
   if(!time) 
      time=TimeCurrent(); 
//--- сбросим значение ошибки 
   ResetLastError(); 
//--- создадим вертикальную линию 
   if(!ObjectCreate(chart_ID,name,OBJ_VLINE,sub_window,time,0)) 
     { 
      Print(__FUNCTION__, 
            ": не удалось создать вертикальную линию! Код ошибки = ",GetLastError()); 
      return(false); 
     } 
 
Дмитрий:

こんにちは。ObjectCreate() に記述されていない定数を削除した場合の理由。

例えば、z_orderやhidden?コンパイル後にエラーになりますか?線引きに参加しない。

入力関数のパラメータを1つ削除する場合、カンマや閉じ括弧の扱いに注意する。

 
Alexey Viktorov:

関数の入力パラメータを1つ削除する場合、カンマと閉じ括弧に注意してください。

アレクセイ、ありがとうございます。まず句読点に気をつけました。スクリプトは、ObjectCreate()に必要なもの(アンカーポイント、symv、AND TD)を最低限残すようにした。そして、それは唯一のヘッダでどこでもコード内のそれらの定数が発生しないことが判明した)これに疑問が生じた、なぜ少なくとも一つのエラーが発生した削除します。そして、ヘッダーに定数のリストがある必須条件があるのではないかという疑問が生じます。function header))?
 
Dzmitry Zaitsau:
アレクセイ、ありがとうございます。まず句読点に気をつけました。スクリプトは、ObjectCreate()に必要なもの(アンカーポイント、symv、AND TD)を残し、必要最小限にしました。そして、それは唯一のヘッダでどこでもコード内のそれらの定数が発生しないことが判明した)これに疑問が生じた、なぜ少なくとも一つのエラーが発生した削除します。そして、ヘッダーに定数のリストがある必須条件があるのではないかという疑問が生じます。function header))?

どんなエラーが出るのか書いてもらえるとわかりやすいのですが、そうでないとテレパシーとして出てきてしまうので、どんなエラーが出たのか当ててみてください)