PROFIからSUPER PROFIへの質問-1. - ページ 34

 
もう十分でしょう。
 

関数の高速化を模索しているのですが、グローバル変数と ローカル変数のアクセスにかかる時間は同じなのかなと思い、スクリプトを作りました。

double H_global[1000],L_global[1000];
int start(){
   int i,j,start_local,start_global,GetTick;
   double H_local[1000],L_local[1000];
   start_local=GetTickCount();
   for(j=0;j<10000;j++)
      for(i=0;i<1000;i++){
         H_local[i] = High[i];
         L_local[i] = Low[i];
      }
//---------------------
   start_global=GetTickCount();
   for(j=0;j<10000;j++)
      for(i=0;i<1000;i++){
         H_global[i] = High[i];
         L_global[i] = Low[i];
      }
   GetTick = GetTickCount();
//---------------------   
   Print("локальный массив: " , GetTick-start_local , " миллисекунд.");
   Print("глобальный массив: ", GetTick-start_global, " миллисекунд.");
return(0);
}

私のログはこんな感じです。

2012.03.23 13:26:49 test EURUSD,H1: グローバル配列: 1343 milliseconds.

2012.03.23 13:26:49 test EURUSD,H1: ローカル配列: 2703 milliseconds.

なぜこのような違いがあるのでしょうか?もしかしたら、変数のアクセス時間を見誤って いるのかもしれません。

 
そして考えること :)
 

なぜ注文が開始されないのか、誰か教えてください。

テスターが「ログによると、トレードフローはビジー状態です」と言うのですが?

の注文を手作業で開ける。

 
IgorM:

関数の高速化を模索しているのですが、グローバル変数とローカル変数のアクセスにかかる時間は同じなのかなと思い、スクリプトを作りました。

私のログはこんな感じです。

2012.03.23 13:26:49 test EURUSD,H1: グローバル配列: 1343 milliseconds.

2012.03.23 13:26:49 test EURUSD,H1: ローカル配列: 2703 milliseconds.

変数へのアクセス時間の見積もりが間違っていたのでしょうか?

double H_global[1000],L_global[1000];
int start(){
   int i,j,start_local,start_global,GetTick;
   double H_local[1000],L_local[1000];
   start_local=GetTickCount();
   for(j=0;j<10000;j++)
      for(i=0;i<1000;i++){
         H_local[i] = High[i];
         L_local[i] = Low[i];
      }
   GetTick = GetTickCount();
   Print("локальный массив: " , GetTick-start_local , " миллисекунд.");
//---------------------
   start_global=GetTickCount();
   for(j=0;j<10000;j++)
      for(i=0;i<1000;i++){
         H_global[i] = High[i];
         L_global[i] = Low[i];
      }
   GetTick = GetTickCount();   
   Print("глобальный массив: ", GetTick-start_global, " миллисекунд.");
return(0);
}
 
TheXpert: と考えること :)

ああ、何がいけないのか、30分もここで考えていたよ!手で後頭部をこする習慣があったら、今頃ハゲているよ)))))

しかし、真剣に、なぜスクリプトは、このような大きな違いを示すのですか? 私がボーランドのコンパイラを持っていた場合、それはおそらく逆、遠くの呼び出しが説明されるかもしれませんが、MT4は、Javaの原則のように動作します - すべての1つの山で?

どうでもいいことですが、要はアクセス時間の見積もりが正しいか どうかで、それが正しければ、半分のコードをグローバル変数 に移動させます

 
VOLDEMAR:

端末を再起動することで解決するはずです。これはコードの問題ではありません。

 
IgorM:

このように試してみてください :)

   Print("локальный массив: " , start_global-start_local , " миллисекунд.");
   Print("глобальный массив: ", GetTick-start_global, " миллисекунд.");
 
Zhunko:
うわあああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああPrint() で出力するのに時間がかかると思ってたら
 
IgorM:
うわあああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ Print()で出力するのに時間がかかると思ってたんですが

こんなやり方もあるんですね。

double H_global[1000],L_global[1000];
int start(){
   int i,j,start_local,start_global
,GetTickG,GetTickL;

;
   double H_local[1000],L_local[1000];
   start_local=GetTickCount();
   for(j=0;j<10000;j++)
      for(i=0;i<1000;i++){
         H_local[i] = High[i];
         L_local[i] = Low[i];
      }
   GetTickL = GetTickCount();
//---------------------
   start_global=GetTickCount();
   for(j=0;j<10000;j++)
      for(i=0;i<1000;i++){
         H_global[i] = High[i];
         L_global[i] = Low[i];
      }
   GetTickG = GetTickCount();   
   Print("локальный массив: " , GetTickL-start_local , " миллисекунд.");
   Print("глобальный массив: ", GetTickG-start_global, " миллисекунд.");
return(0);
}