初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1384

 

leonerd #:
Здравствуйте. А как программно узнать символ и таймфрейм активного чарта в клиентском терминале? Т.е. чарта выбранного в настоящее время во вкладке. Есть какая-то функция из MQL5 для этого?

long  ChartGetInteger(
   long  chart_id,          // идентификатор графика
   int   prop_id,           // идентификатор свойства
   int   sub_window=0       // номер подокна, если требуется
   );

チャートトップ

チャートを他のすべてのチャートの上に表示する

ブール


string  ChartSymbol(
   long  chart_id=0      // идентификатор графика
   );
ENUM_TIMEFRAMES  ChartPeriod(
   long  chart_id=0      // идентификатор графика
   );

チャート識別子も表示されるようにするにはどうしたらいいですか?

Документация по MQL5: Операции с графиками
Документация по MQL5: Операции с графиками
  • www.mql5.com
Операции с графиками - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov #:

チャートトップ

チャートを他のすべてのチャートの上に表示する

ブール


チャートIDも表示するように定義するにはどうしたらいいですか?

https://www.mql5.com/ru/docs/constants/chartconstants/charts_samples#chart_foreground

ありがとうございます。CHART_FOREGROUND が最も適していると思われます。無理にアクティブなチャートを設定する必要はなく、どのチャートがアクティブかを判断すればよいのです。CHART_FOREGROUNDを チェックするために、開いているすべてのチャートを調べなければならないと考えていいのでしょうか?

Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Примеры работы с графиком
Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Примеры работы с графиком
  • www.mql5.com
Примеры работы с графиком - Константы графиков - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
leonerd #:

https://www.mql5.com/ru/docs/constants/chartconstants/charts_samples#chart_foreground

ありがとうございます。CHART_FOREGROUND が最も適していると思われます。無理にアクティブなチャートを設定する必要はなく、アクティブなものだけを特定すればいいみたいです。CHART_FOREGROUNDを チェックするために、開いているすべてのチャートを通過しなければならないというのは正しい理解でしょうか?

CHART_FOREGROUNDは 、上部にチャートがあります。

そして、それを強制するのではなく、ChartSetIntegerをChartGetIntegerに置き換える必要があります。

 


ヒントを教えてください。私はロボットについて考えていて、4つの異なる条件があります。

つまり、4つの条件(f1,f2,f3,f4)です。(0,0,1,1)や(1,0,1,0)などの多くの組み合わせがあり、合計16通りの組み合わせがあるのです。ちょうど 15 - 変形 (0, 0, 0, 0) は考慮されません。

質問:15通りの組み合わせをすべてコードに記述しないためのプログラムロジックの作成方法。それぞれの条件を確認するための機能があり、どの組み合わせで適用されるのか、つまりHow elseを確認します。

多くの条件を簡潔なコードで入力できるExpert Advisorを紹介していただけると幸いです。

 
qadexys #:


ヒントを教えてください。私はロボットについて考えていて、4つの異なる条件があります。

つまり、4つの条件(f1,f2,f3,f4)です。(0,0,1,1)や(1,0,1,0)などの多くの組み合わせがあり、合計16通りの組み合わせがあるのです。より正確には、15 - 変形 (0, 0, 0, 0) は考慮されません。

質問:15通りの組み合わせをすべてコードに記述しないためのプログラムロジックの作成方法。それぞれの条件を確認するための機能があり、どの組み合わせで適用されるのか、つまりHow elseを確認します。

複数の条件を簡潔なコードで導入できるExpert Advisorがあれば教えてください。

こんな感じで行くかもしれません。

input bool F1;
input bool F2;
input bool F3;
input bool F4;

   ...
   if(  ( !F1 || f1)
      &&( !F2 || f2)
      &&( !F3 || f3)
      &&( !F4 || f4)
     )
     {
      open_pos();
     }
   ...

あるいはこんな感じ。

#define  MODE_f1    0x1
#define  MODE_f2    0x2
#define  MODE_f3    0x4
#define  MODE_f4    0x8

bool expert::create_strategy(ulong m, int om, int cm)
  {
   magic=m;
   open_mode=om;
   close_mode=cm;
   ...
  }

int OnInit()
  {
   ...
   my_strat[i].create_strategy(MAGIC, MODE_f1|MODE_f2|MODE_f4,MODE_c2|MODE_c3);
   ...
  }

expert::check_open()
  {
   ...
   if(  ((open_mode & MODE_f1)==0 || f1)
      &&((open_mode & MODE_f2)==0 || f2)
      &&((open_mode & MODE_f3)==0 || f3)
      &&((open_mode & MODE_f4)==0 || f4)
     )
     {
      open_pos();
     }
   ...
  }
 
Alexey Viktorov #:

CHART_FOREGROUNDは 上部のチャート

そして、それを強制しないために、ChartSetIntegerをChartGetIntegerに置き換えてください。

しゃい

 
JRandomTrader #:

こんなこともできるんですね。

あるいはこんな感じ。

そして、ここからが最初の組み立てです。(0, 1, 0, 1)の条件下で、コードの振る舞いはどうなるでしょうか?

If条件の本文を説明してください。

 
qadexys #:

そして、ここからが最初の組み立てです。(0, 1, 0, 1)の条件下で、コードの振る舞いはどうなるでしょうか?

ボディ・オブ・コンディションについて教えてください。

ここはとてもシンプルです。F1==falseであれば、条件f1に関わらず( !F1 || f1)は真となる。

つまり、Fn==trueなら条件fnをチェックし、Fn==falseなら条件fnをチェックしない。

したがって、(0, 1, 0, 1)では、条件f2とf4だけがチェックされ、両方が成立するとopen_pos()のコードが実行されます。

 
JRandomTrader #:

これはとてもシンプルなことです。F1==falseであれば、条件f1に関係なく( !F1 || f1)は真となる。

つまり、Fn==trueなら条件fnをチェックし、Fn==falseなら条件fnをチェックしない。

(0, 1, 0, 1)の場合、条件f2とf4だけがチェックされ、両方が成立するとopen_pos()というコードが実行されます。

ただし、f1などが0や1だけでない場合について。ショートポジションで条件f1が満たされれば、1が返されるのでは?ロングポジションの場合は、2が返されます。条件を全く満たさない場合-0。

しかし、このような構成では、パラメータの値の多様性をあてにせず、他の方法で条件を定式化したほうがいいのではないでしょうか?

 
qadexys #:

ただし、f1などが0や1だけでない場合。ショートポジションで条件f1が満たされた場合、1が返されると考えた。ロングポジションの場合は、2が返されます。条件を全く満たさない場合-0。

しかし、この構成では、このようなパラメータ値の多様性をあてにせず、何か別の方法で条件を定式化した方が良いのではないでしょうか?

ロングとショートの開始条件を別々に考える。

例えば、こんな感じです。

 ...
   if(  ( !F1 || f1==1 )
      &&( !F2 || f2==1 )
      &&( !F3 || f3==1 )
      &&( !F4 || f4==1 )
     )
     {
      open_short();
     }
   else if(  ( !F1 || f1==2 )
           &&( !F2 || f2==2 )
           &&( !F3 || f3==2 )
           &&( !F4 || f4==2 )
          )
     {
      open_long();
     }
 ...

私の本物のコードの一部を販売することもできます。変数の「戦闘」値やポジション保持の条件などの情報がなければ、何のノウハウも見えてきません。

ここで実際に指定できるのは、224種類のオプションのうちの1つです。

   if(true
      && ((OpenMode & MODE_St1)==0 || St_Buf[St_Rq-1]>80)
      && ((OpenMode & MODE_St2)==0 || St_Buf2[St_Rq-1]>80)
      && ((OpenMode & MODE_BB1)==0 || last_tick.bid > bb[BandsReq-1].U)
      && ((OpenMode & MODE_BB2)==0 || last_tick.bid > bb2[BandsReq-1].U)
      && ((OpenMode & MODE_D1)==0  || rt[RtReq-1].high<rt[RtReq-2].high) 
     )
     {
      switch(OpenMode & (MODE_VR|MODE_OR|MODE_A))
        {
         case 0 :
         case MODE_A :
           res=-2;
           break;
         case MODE_VR :
           if((1/VR)>VRO)
             res=-2;
           break;
         case MODE_OR :
           if((1/OR)>VRO)
             res=-2;
           break;
         case MODE_VR|MODE_A :
           if((1/AVR)>VRO)
             res=-2;
           break;
         case MODE_OR|MODE_A :
           if((1/AOR)>VRO)
             res=-2;
           break;
         case MODE_VR|MODE_OR :
           if((1/VR)>VRO && (1/OR)>VRO)
             res=-2;
           break;
         case MODE_VR|MODE_OR|MODE_A :
           if((1/AVR)>VRO && (1/AOR)>VRO)
             res=-2;
           break;
        }
理由: