FORTS 助けてください - ページ 5

 

誰かが嘘をついているのか、マイケルが技術サポートの反論を受け入れていないのか、技術サポートが問題を認めたくないのか。

Mikalas 2015.03.26 00:44  RU

またもやservicedexkはエラーを再現できない!


alexvd2015.03.26 15:16.

最初の投稿のコードも間違っています。

 
MigVRN:

友達になろうよ :)

しかし、すぐにではなく、ロードが成功したときです。

あなたのコードを見ると、OnInit関数が 役に立たないか、開発者がしくじったことがわかります。

 
Mikalas:

ええ、まあ、本当にデータがなかったらどうするんですか?

では、どうするのか?1サイクル、何回繰り返すのですか?

ここには具体的なレシピはありませんが...。

指標が全く好きではない...それだけの理由です。

指標と同じスレッドで、そのシンボルに対して他の操作、つまりティックの処理と履歴の同期が 順次実行されます。インジケーターでエンドレス・アクションが実行された場合、そのシンボルの他のイベントはすべて実行 されないということです。

チャットをはじめ、あらゆるものをスローダウンさせることができるのです。そのため、近隣のチャットからの見積もり依頼もなく、カスタムイベントの提供者として利用しています。一般に、OnCalculate()で来たものだけで作業します。

Serj_Che:

あなたのコードを見ると、OnInit関数が 無駄になっているか、開発者がねじ込んでいることがわかります。

これはあなたのコードで、私はalexvdが 言ったことを貼り付けただけです。なぜOnInit関数が 役に立たないということになるのか、理解できていません。

 
alexvd:
あなたのコードでは、ResetLastError()の直後に、グローバル変数 is_failedのエラーをクリアすればいいのです。そうでない場合は、エラーを検出すると、それに関するメッセージが表示されます。

ビンゴ!あと少しです)信用はしても、検証はするなと言われる所以です。最終的な文章は以下の通りです。

#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//
bool is_failed = false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
  SymbolSelect( "MIX-6.15", true );
  SymbolSelect( "RTS-6.15", true );
  SymbolSelect( "Si-6.15", true );
//---  
  ResetLastError();
//---  
  int total_bars = Bars( "MIX-6.15", PERIOD_M1 );
  if ( total_bars > 0 )
  {
    total_bars = Bars( "RTS-6.15", PERIOD_M1 );
    if ( total_bars > 0 )
    {
      total_bars = Bars( "Si-6.15", PERIOD_M1 );
      {
        if ( total_bars > 0 )
        {
           is_failed = false;
           Print( "Init OK." );
        }
        else
        {
          is_failed = true;
          Print( "Get Bars failed Si-6.15 Last error = ", string(GetLastError() ) );
        }
      }
    }
    else
    {
      is_failed = true;
      Print( "Get Bars failed RTS-6.15 Last error = ", string(GetLastError() ) );
    }
  }
  else
  {
    is_failed = true;
    Print( "Get Bars failed MIX-6.15 Last error = ", string(GetLastError() ) );
  } 
//---
   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[])
  {
  ResetLastError();
//---  
 int total_bars = Bars( "MIX-6.15", PERIOD_M1 );
  if ( total_bars > 0 )
  {
    total_bars = Bars( "RTS-6.15", PERIOD_M1 );
    if ( total_bars > 0 )
    {
      total_bars = Bars( "Si-6.15", PERIOD_M1 );
      {
        if ( total_bars > 0 )
        {
          Print( "Init OK." );
          is_failed = false;
        }
        else
        {
          is_failed = true;
          Print( "Get Bars failed Si-6.15 Last error = ", string(GetLastError() ) );
        }
      }
    }
    else
    {
      is_failed = true;
      Print( "Get Bars failed RTS-6.15 Last error = ", string(GetLastError() ) );
    }
  }
  else
  {
    is_failed = true;
    Print( "Get Bars failed MIX-6.15 Last error = ", string(GetLastError() ) );
  } 
//---
   if ( is_failed )
   {
     Print( "Sorry! Get Bars failed." );
   }
   else Print( "Bingo! We done.");
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
MigVRN:

ここには具体的なレシピはありませんが...。

指標が全く好きではない...それだけの理由です。

指標と同じスレッドでは、ティックの処理や履歴の同期など、シンボルに関する他の動作が順次実行されます。インジケーターで無限アクションが実行された場合、このシンボルの他のすべてのイベントは決して実行さ れないことを意味します。

チャットをはじめ、あらゆるものをスローダウンさせることができるのです。そのため、近隣のチャットからの見積もり依頼もなく、カスタムイベントの提供者として利用しています。一般に、OnCalculate()で来たものだけを扱うようにします。

これはあなたのコードです - 私はalexvdが 言及したものだけを入れました。なぜOnInit関数が 無駄だということになるのか、理解できない。

私のは何番?ここにはコードを載せていません。

インジケータは、他のすべてを減速させることはありません。要は、MT5ではすべてが同期しておらず、インジケータは彼らのスレッドで、EAは彼らのスレッドで動作しているのです。ガラスは自前です。

私もインジケータは好きではありませんが、時々は使わざるを得ません。

 
Dima_S:

ビンゴ!あと少しです)信頼はともかく、検証は大切だと言われる所以です。最終的な文章は以下の通りです。

なぜOnInitで 行ったことをOnCalculateで 繰り返すのですか?そんな呪文なのでしょうか(笑)
 
Serj_Che:

私のコードは何ですか?ここにはコードを載せていない。

OH...すみません、Dima_Sと 混同して しまいました。

Serj_Che:

指標のために他のことを遅くすることはありません。MT5ではすべてが同期しておらず、インジケータは彼らのスレッドで、EAは彼らのスレッドで動作するということです。ガラスは自前です。

私もインジケータは好きではありませんが、時々は使わざるを得ません。

インジケータは、そのスレッドで動作します...でも、この流れでチャットが機能するんです。インジケータに異常が発生した場合(OnCalculate() での永遠ループ)。独自のスレッドで実行されるExpert Advisorは、チャットから何も表示されません...

 
MigVRN:

OOO...すみません、Dima_Sと 間違えました

インジケータが自分のスレッドで動いている...。同じスレッド内ではチャットのみ動作します。また、インジケータで何か問題が発生した場合(OnCalculate() の永遠のループ)。そのスレッドで実行されているExpert Advisorは、そのチャットから何も表示されません...

どうでしょう、そうではなくExpert Advisorが勝手に動いてくれるはずだと、さらに思うようになりました。私はそのようなトラブルはありませんが、もしよろしければ、この極限状態を確認してみてください。

 
Serj_Che:

そうかな、そうでないならなおさらEAが勝手に動くはずだと思うのですが。具体的にそのようなバイオリンが出てきたわけではありませんが、その気になればそんな極端な確認も可能です。

チェックコードの概要を説明します。2-3時間後に確認します。しかし、チャットの1インジケータが「遅くなる」と、他のインジケータも一緒に遅くなることは、私が何度も経験した事実です。
 
MigVRN:
テストコードをスケッチしてみる。約2~3時間で。しかし、チャットの1つの指標が「遅くなる」と、他の指標も一緒に遅くなる--これは、私が何度も直面した事実です。

なるほど、面白い!

インジケータは自分のスレッドで、EAは自分のスレッドで作業します。もちろん、単芯石であれば話は別ですが。