エラー、バグ、質問 - ページ 367

 
Yedelkin:
問題は別のところにある可能性が高い。OnInit()で全く同じ配列宣言をして いますが、問題なく動作していますし、今も動作しています。ArrSybols配列の名前にラテン文字のmが省略されていますね。もしかして、これはプログラマーの問題なのか?

欠けているのかもしれませんが、何か違いがあるのでしょうか?

また、ネイティブで書くと(私の理解では禁止されていない)ターミナル全体がクラッシュするはずですが?

このような配列宣言がなくても、次元を指定するだけで、コードは正確に動作します。

//Вот так работает
string ArrSybols[10];

元の配列の宣言は次のようなものでした。

//List of symbols for trade on the Championship 2010
string ArrSymbolsChampionship2010[10] = {"EURUSD","GBPUSD","USDJPY","USDCHF","USDCAD",
                                        "AUDUSD","EURJPY","EURCHF","GBPJPY","GBPCHF"};
 

という疑問は まだ残っています。

OBJ_CHARTに別ウィンドウでインジケータを添付することはできましたが、インジケータウィンドウのサイズを変更すると、OBJ_CHARTの高さが500なら、インジケータウィンドウの高さは最大493に設定されてしまい、あまりよろしくない状態になっています。その結果、醜いトップが残ってしまうのです。どうすればいいのか?

コード

   if(ObjectFind(0,"MW_chart")!=0)
     {
      ObjectCreate(0,"MW_chart",OBJ_CHART,0,time[0],close[0]);
      ObjectSetString(0,"MW_chart",OBJPROP_SYMBOL,_Symbol);
      ObjectSetInteger(0,"MW_chart",OBJPROP_PERIOD,_Period);
      ObjectSetInteger(0,"MW_chart",OBJPROP_CORNER,CORNER_LEFT_UPPER);
      ObjectSetInteger(0,"MW_chart",OBJPROP_XSIZE,1000);

      ObjectSetInteger(0,"MW_chart",OBJPROP_DATE_SCALE,false);
      ObjectSetInteger(0,"MW_chart",OBJPROP_PRICE_SCALE,false);
      ObjectSetInteger(0,"MW_chart",OBJPROP_SELECTABLE,1);
      ObjectSetInteger(0,"MW_chart",OBJPROP_CHART_SCALE,2);
      ObjectSetInteger(0,"MW_chart",OBJPROP_YSIZE,500);
     }
   int h=iCCI(Symbol(),Period(),14,PRICE_TYPICAL);
   long id=ObjectGetInteger(0,"MW_chart",OBJPROP_CHART_ID);
   ChartIndicatorAdd(id,1,h);
   ChartSetInteger(id,CHART_HEIGHT_IN_PIXELS,1,493);
 
Interesting:

見逃されていたかもしれませんが、違いはあるのでしょうか?

もちろん、そうです。説明するまでもないでしょう :)ある配列がある名前で定義され、その配列の要素が別の配列名で呼ばれる場合、... :)

もし、手動で配列を初期化しなくてもすべてがうまくいくのであれば、あなた自身が理解しているように、コードを見てみてください。結局のところ、文字列配列の初期化を明示的に行わないことで、クライアント端末が勝手にこの配列を初期化することを防げない。

繰り返すが、このような文字列は「思い切り」機能したし、今も機能している。

 
Yedelkin:

もちろん、そうでしょう。説明するまでもないでしょう :)ある配列がある名前で宣言され、この配列の要素が別の配列名でアクセスされる場合、... :)

もし、手動で配列を初期化しなくてもすべてがうまくいくのであれば、あなた自身が理解しているように、コードを見てみてください。結局のところ、文字列配列の初期化を明示的に行わないことで、クライアント端末が勝手にこの配列を初期化することを防げない。

繰り返すが、このような文字列は機能したし、今も機能している。

いやいや、問題は名前ではなく、宣言時に配列に列挙が入ることなんです。

文字列を除くすべての型でうまく動作します。文字列があると、どんなプログラム(エキスパートやスクリプトは関係ない)も本当にクラッシュしてしまいます。

これは明らかなバグでservicedeskに書き込んで います。

このような仕組みになっています。

// string a[2]={"a","b"};
long   b[2]={2,3};
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
  Print("Работает");   
  }
//+------------------------------------------------------------------+

が、文字列配列の宣言をアンコメントすると、動作しません。

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
Renat:
設定でウィンドウ内の最大バー 数を確認する
100000から1000000に変更しました。ヘルプには、OKを押した後の変更の影響について書かれています)。
 

Renatさん、またまたワイルドタフィーです!本当にエラーは見つかりましたか?


 
トラフィックの問題は解決しましたが、まだliveupdateでサーバーコンポーネントをリリースしていないことです。これまでクライアント端末のアップデートが 公開されており、サーバーは次回のアップデートで公開される予定です。まだテストはしていません。
 
Renat:
トラフィックの問題は解決しましたが、まだliveupdateでサーバーコンポーネントをリリースしていないことです。これまでクライアント端末のアップデートが 公開されており、サーバーは次回のアップデートで公開される予定です。まだテストはしていません。
なるほど。ご返信ありがとうございました。私からも情報を発信していきます。
 

最後のビルド(430)でForward periodとCustom Maxでテストすると-ハングする(Forwardテストに切り替えた瞬間のようです)。最初はExpert Advisorのせいにしていたのですが、次のコードを確認しました。

input int a1;
input int a2;
input int a3;
int OnInit(){return(0);}
void OnDeinit(const int reason){}
void OnTick(){}
double OnTester() {
   return(rand());
}

1から1000まで、すべてのティック、USDCAD、2011年1月1日から今日までのM4(Forwardで - 任意の期間)を最適化するようにパラメータを設定しました。フリーズする。リモートエージェントを無効にする - ターミナルを再起動する - それもハングアップする。フォワードピリオドを削除 - 動作します。カスタムマックスが原因かどうか......確認はしていない。このビルドの前 - すべてが機能していました。

 

どういう意味ですか?

2011.04.17 15:21:22 Tester テスターエージェントに失敗しました。