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

 
Igor Zakharov:

これは交換用ではありません。MBはボタンを押すまで流れを止めるので、インジケーターでは機能 しません

うっかりアドバイスしてしまいましたが、ノートには全くそんなことは書いてありません。

備考

MessageBox()の呼び出しは、ユーザーの回答を待っている間、インジケータスレッドの実行を停止させるため、この関数をカスタムインジケータで使用 することは推奨 されません。また、各シンボルのインジケータはすべて1つのスレッドで実行されるため、このシンボルのすべてのタイムフレームのチャートが停止されることになります。

ストラテジーテスターで作業していると、MessageBox()関数が実行されない。

 
MakarFX:

私はプログラマーではなく、自分の都合でインジケータを編集しています。テスターで確認したわけではなく、リアルタイムで確認しました。

ちなみに、テレパスは ありません。

もし、ここで公開されているインジケーターの中で、この機能を使用しているものをご存知でしたら、教えてください。もしかしたら、そうすれば、自分で解決できるかもしれません。

感謝

すべて揃っています。

Клуб Телепатов
Клуб Телепатов
  • 2011.05.08
  • www.mql5.com
Клуб телепатов Вас послали сюда? Тогда давайте знакомиться! Как же такое могло случиться со мной...
 
Artyom Trishkin:

ローカルスコープに 構造体型の変数を宣言し、それが関数に送られるものです。同じローカルスコープ内。

ポイントは、フィールドの構造体に対して変数を作成した場合、そのスコープは関数全体であり、ローカルエリアではないことです。以下はその一例です。

int OnInit()
  {
{int In=8;
 MyPoint qr;}
qr - видна здесь
In - здесь не видна
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason){}

struct MyPoint
{
    int x[5];
    int y;
};

ローカルで仕事をすることはもはや不可能であることがわかった。

 

スクリプトでcsvファイルからデータを読み込もうとしています。運が悪く、その理由が全く理解できない。

簡単な手順で読み取るようにしています。

bool GetBiFromFile(string InFNam,int& alBars,double& xClose[],datetime& xTime[])
{  int  InHndl,nBars;
   bool fset;
   double aval;
   
   InHndl = FileOpen(InFNam+".csv",FILE_READ|FILE_CSV,",");
   if (InHndl==INVALID_HANDLE) {
       Print("File "+InFNam+" does not open. Error: ", GetLastError()); 
       return(false); 
   } else {
      fset = FileSeek(InHndl,0,SEEK_SET);
      ArrayResize(xClose,alBars);      
      ArrayInitialize(xClose,0.0);  
      ArrayResize(xTime,alBars);       
      ArrayInitialize(xTime,0);  
      nBars = 0;
      while (!FileIsEnding(InHndl)) {
         nBars++;
         xTime[nBars-1]  = FileReadDatetime(InHndl);;
         xClose[nBars-1] = FileReadDouble(InHndl);
         aval = FileReadDouble(InHndl);
         if (nBars>=alBars) break;
      }
   }
   Print("nBars = ",nBars,"   allBars = ",alBars);
   Print("Start: ",xClose[0],"   " + TimeToString(xTime[0],TIME_DATE|TIME_SECONDS));
   Print("End: ",xClose[nBars-1],"   " + TimeToString(xTime[nBars-1],TIME_DATE|TIME_SECONDS));
   return(true);
}

データの入ったファイルは、次のような形式になっています。

2012.01.02 02:00:02,1.293240,1.293410

2012.01.02 02:00:52,1.293330,1.293500

2012.01.02 02:00:55,1.293810,1.293980

....

そして、プロシージャからPrint()ステートメントを実行した結果は、以下のようになります。

nBars = 1000 alBars = 1000

開始:0.0 2020.01.29 01:00:00

終了:0.0 2020.01.29 01:00:00

つまり、読み出しループで全ての行が処理されるが、何も読み出されない。また、エラーメッセージも ない。

どなたか説明してください。


 
Yurixx:

どなたか説明してください。

バイナリ関数は、テキストファイルを読み込む。

 
Alexey Viktorov:

すべて揃っています。

お前は悪だ!

 
MakarFX:

意地悪!

フリをしているんです。

プログラミングを理解したいのなら、まずはやってみることだ。ただ必要なだけなら、無料で書いてくれるというスレッドに行き、そこにインジケータを貼って、要望を記述します。


ps: 全て確認しました。PlaySound() の前にAlert()を配置しても、なぜか選択したサウンドが再生されない。私の記憶力が悪いのかもしれないが、そんなことはどうでもいい。

Alert()をダブルタップすると、赤い十字が表示され、ミュートすることができます


で、その場合、その前にAlert()やPlaySound()が書かれていても問題ないでしょう

 
Alexey Viktorov:

フリをしているんです。


で、この場合、前にAlert()と書いてもPlaySound()と書いても変わりません。

この場合、アラートウィンドウは開きません(

 
fxsaber:

バイナリ関数でテキストファイルを読み込むと

FileReadDouble() 関数については、バイナリファイルから読み込むと書いてありますね。

しかし、FileReadDatetime() について、「CSVファイルから "YYYY.MM.DD HH:MI:SS", "YYYY.MM.DD" または "HH:MI:SS" のいずれかの形式の文字列を読み取り、それをdatetime値に変換する」と書かれているのです。

また、同じ絵は、FileReadString() を使って、自分で文字列を正しい型に 変換したときでした。

どのようにすればいいと思いますか?


 
Yurixx:

どのようにしたらいいと思いますか?

void OnStart()
{
  datetime time;
  
  double PriceBid;
  double PriceAsk;
  
  string Str = "2012.01.02 02:00:02,1.293240,1.293410";
  string StrArray[];
  
  if (StringSplit(Str, ',', StrArray) > 2)
  {
    time = (datetime)StrArray[0];
    
    PriceBid = (double)StrArray[1];
    PriceAsk = (double)StrArray[2];
  }
}