mql5言語の特徴、微妙なニュアンスとテクニック - ページ 181

 
Andrey Khatimlianskii:

こういう端末にはたいてい1-2個のチャートがついていて、混乱しにくいんです。しかし、ポイントははっきりしています。

より多くのシンボルを取引し、より多くのEAが稼働しています。非取引可能なシンボルのモニタリングはまだです。カスタムシンボルの 作成、テスターの実行など。

一般的に言えば、仕事人間。
 
fxsaber:

より多くのシンボルを取引し、より多くのEAを稼働させる。非取引可能なシンボルのモニタリングはまだです。カスタムシンボルが作成されている、テスターが起動している、など。

一般的に言えば、仕事人間。

私は、すべてのアカウントの投資家パスワードの下にのみ、ワークホースを置いています。そこにEAがあってもなくても関係ないですしね。

 
trader_number_one:

全アカウントの投資用パスワードの下には、ワークホースしか入れていません。そして、そこにアドバイザーがいるかいないかなんて、どうでもいいんです。

アドバイザーは取引だけではありません。しかも、ワークホースでトレードできるようにしなければならない。

 
fxsaber:

端末を10台持っています。1で混乱し、別のアカウントに切り替えた。時間が経ち、ターミナルを見ると、別のアカウントが必要なことがわかったので、古いアカウントに切り替えた。そして、EAがぶら下がっていることを全く予想せずに、EAがスタートしたことを確認する。

このシンプルなコードは、アカウント切り替えに対応しますか?

bool IsShowMessageBox = true;
//+------------------------------------------------------------------+
int OnInit()
{
   if(IsShowMessageBox && MessageBox("Произвести запуск эксперта?", "Run EA", MB_OKCANCEL) == IDCANCEL) return(INIT_FAILED);
   IsShowMessageBox = false;
   return(INIT_SUCCEEDED);
}


で、再ログインは、接続が中断されたときにこのコードを実行するのでしょうか?

 
Igor Makanu:

は、このような簡単なコードで、アカウント変更に対応できるのでしょうか?

いいえ。

接続が切れたときに再ログインすると、このコードが発動するのでしょうか?

自動再ログインができない。マニュアルは

 

解決策は表面にある。切り替えてもグラフが変化しないのは?そうです、グラフィカルなオブジェクトです。ロボットの起動時にグラフィカルなオブジェクトを作成し、それをDeInitで削除し、通常の状態では、それぞれOnInitでオブジェクトをチェックし、もし存在すれば、何か問題が発生し、INIT_FAILEDを返します。

おおよそこのような感じです。

#define  NAME "test"

int OnInit()
  {
   static const string symbol=_Symbol;
   if (ObjectFind(0,NAME)>=0||symbol!=_Symbol) return INIT_FAILED;
   else ObjectCreate(0,NAME,OBJ_HLINE,0,0,0);
   return INIT_SUCCEEDED;
  }

void OnDeinit(const int reason){
   switch(reason){
      case REASON_PARAMETERS:
      case REASON_PROGRAM:
      case REASON_REMOVE:
      case REASON_INITFAILED:
      case REASON_CLOSE:
      case REASON_CHARTCLOSE:
      case REASON_TEMPLATE:
      case REASON_CHARTCHANGE: ObjectDelete(0,NAME);
      case REASON_RECOMPILE:
      case REASON_ACCOUNT: break;
   }
}

void OnTick(){
}
 
Vladimir Simakov:

解決策は表面にある。切り替えてもグラフが変化しないのは?そうです、グラフィカルなオブジェクトです。ロボットの起動時にグラフィカルなオブジェクトを作成し、それをDeInitで削除し、通常の状態では、それぞれOnInitでオブジェクトをチェックし、もし存在すれば、何か問題が発生し、INIT_FAILEDを返します。

おおよそこのような感じです。

保存は問題ない、ここでは一般的にEAの初期化を正しく分散させる必要がある、口座を切り替えるケースは心配ないが、チャート自体の起動とチャートの準備が出来ていない時はどうするのかは闇に包まれた謎である ))))

は、解説を読んでみると...。スムーズではありません - 存在しないシンボルでアカウントを切り替えると、「黒い画面」でも表示されません ;)

int OnInit()
{
   string arr_comm[];
   if(StringSplit(ChartGetString(0, CHART_COMMENT), StringGetCharacter(";", 0), arr_comm) == 2) Print("_StopFlag = ", (bool)((int)arr_comm[0]), " ; _UninitReason = ", (int)arr_comm[1]);
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   Comment((string)_StopFlag + ";" + (string)_UninitReason);
}
 
Vladimir Simakov:

解決策は表面にある。切り替えてもグラフが変化しないのは?そうです、グラフィカルなオブジェクトです。ロボットの起動時にグラフィカルなオブジェクトを作成し、それをDeInitで削除し、通常の状態では、それぞれOnInitでオブジェクトをチェックし、もし存在すれば、何か問題が発生し、INIT_FAILEDを返します。

こんな感じです。

端末のグローバル変 数を利用するのもよいでしょう。それらも削除されない。

 
Konstantin Nikitin:

ターミナルのグローバル変数を 使用したほうがよいでしょう。削除されることもありません。

味覚と味覚...嫌いなんです...。

 
Vladimir Simakov:

味と色に...嫌いなんです...。

例えば、私はVDS上のすべてのオブジェクトを削除します。ただ、スケジュールを読み込まないというのは不要ですね。そして、そこに必要なものはないのです。グローバルを使っています。だから、すべて状況次第なんです。

理由: