[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 645

 
artmedia70:

ロジックはほとんどなく、順番に行を出力していくだけの簡単なものですが......。




機能を使いこなすと、より分かりやすくなる

//--------------------------------------------------------------- 1 --
// Функция вывода на экран графических сообщений.
//--------------------------------------------------------------- 2 --
  int Informations()
  {
   int   Win_ind;                     // Номер окна индикатора
   int   x,y;
   
   trH4     =Trend_PSAR(NULL,240);  // Четырёхчасовой тренд
   trH1     =Trend_PSAR(NULL,60);   // Часовой тренд
   trM30    =Trend_PSAR(NULL,30);   // Получасовой тренд
   trM15    =Trend_PSAR(NULL,15);   // 15-ти минутный тренд

//--------------------------------------------------------------- 3 --
   Win_ind= WindowFind("Info");        // Ищем номер окна индикатора
   if (Win_ind<0)return;               // Если такого окна нет, уходим
//--------------------------------------------------------------- 4 --
   x =10; y =17;
   MyObject("Equ",         x,    y,   "Свободные средства",                   9, "Tahoma", Gold);
   MyObject("EquVal",      x*23, y,   DoubleToStr(Equ_NEW,2),                 9, "Tahoma", Yellow);

//.................................
   WindowRedraw();                      // Перерисовываем все объекты
   return;
  }


void MyObject(string Name, int X, int Y, string Text, int Size, string Srift, color CL){
   if (ObjectFind(Name)==-1)
      ObjectCreate(Name,OBJ_LABEL,1,0,0,0,0);
   ObjectSet(Name,OBJPROP_XDISTANCE,X);
   ObjectSet(Name,OBJPROP_YDISTANCE,Y);
   ObjectSetText(Name, Text, Size, Srift, CL);
}
 
ToLik_SRGV:

私も不思議に思いましたが、役に立つものは見つかりませんでした。最適化に関しては、iCustomの素晴らしいブレーキについて既にご存知でしょう :) インジケータでは、計算できるバーの数に制限があります (IndicatorCounted() またはバーの数によって)。コードの中で、ifやwhileなどの 様々な構文の数や複雑さに悩む意味はありません。あまり得るものはありませんが、時間と経験とともに、コードはより「美しく」なっていきます。まあ、可視化モードでは、すべての「跳ね返り」をモデル化すると、ほとんどどんな場合でも遅くなります(もちろん、システムの複雑さにもよりますが)。どこかで、複雑な計算をDLLで行うと高速化されると読んだのですが、確認していません。dllでも、十分なニュアンスがあります。

TimeCurrent()の ようなコマンドは、(コード内にいくつもある場合)かなり遅くなった記憶があります。

- 変数に入れ、その変数にアクセスするというように、一回で 済ませる方がよっぽど良い。

 
Vinin:


簡単に認識できる機能を使いたい

はい、もちろんです、ビクターさん、より読みやすくなりましたね。でも、もう、可能な限り、「真正面から」書くようにしています。とても遅いので、可能な限り、ミリ秒単位で節約するようにしています......。
 
chief2000:

TimeCurrent()のようなコマンドは非常に遅かったと記憶しています(コード内にいくつもある場合)

- 変数に入れ、その変数にアクセスするというように、一回で 済ませる方がよっぽど良い。

素晴らしいコードに目を通して、やり直す価値はあると思うのですが...。
 
chief2000:

TimeCurrent()のようなコマンドは非常に遅かったと記憶しています(コード内にいくつもある場合)。

- 一度だけ使う、つまり変数に格納して、その変数にアクセス する方がよっぽど良い。

このような変数を後で呼び出せるように正しく設定するにはどうしたらよいでしょうか?

まずグローバル 変数に宣言する

datetime CurTime。

そして、start()の中で

値を割り当てています。

CurTime=TimeCurrent()です。

というエラーが表示され、'CurTime' - 変数が予想されます。

正しいやり方は?

また、もう一つの質問ですが、start()ではなく、init()でいくつかの変数に値を代入した場合、それらは正しく動作するのでしょうか?

つまり、start()の最初にこの関数に変数を代入すると、TimeCurrent()などのいくつかの関数が毎ティックごとに呼び出されるようになる、ということです。

 
ガッカリ!CurTimeは エラーが出るが、CurrTimeは 出ない...。何が問題なのか?
 
artmedia70:
ガッカリ!CurTimeは エラーが出るのに、CurrTimeは 出ない...。何のために?
要は、CurTimeはTimeCurrent関数の 旧名なので、変数名と関数名が一致するとコンパイラは必ず文句を言う...ということです。
 
keekkenen:
要は、CurTimeはTimeCurrent関数の旧名なので、変数名と関数名が一致すると、コンパイラは必ず眉をひそめる...ということです。
まあ!ありがとうございます、今後知っておきます。
 

友よ、私の個人的な論理ブロックは、少し故障している。このままでは、どうしたらいいのか判断がつかない。

私たちは2つの方向、つまり買い手と売り手がそれぞれ別のコントロールユニットをもって仕事をしています。ポジションは逆向きに建てることもでき、すべては各TFの相場の動き方によります。

売りと買いが(M5とM15に)開いているときに、突然、M5とM15に開いている売りとは逆の方向に相場が転換したとします(まあ、世の中の状況はどうであれ・・・)。この場合、すべての売り建玉がドローダウンを大きく増加させ始め、買い建玉も持っているので、買い、売りともに一部のポジションを決済し、決済した買いを犠牲にして損切りした売りを最小限の損失で決済することが可能です。

だから、この状況の論理を判断することはできない。あるべき姿とは?

念のため、一例をご紹介します。


 

昨日の話題に戻って、良い人たち。

   double c1b[];
   for(i=1;i<=PeriodB;i++)
   {
   c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);
   }
   double c1b_1=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,1);
   double c1b_2=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,2);
   double c1b_3=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,3);
   
   double c1s[];
   for(i=1;i<=PeriodS;i++)
   {
   c1s[i]=iCCI(NULL,0,PeriodS,PRICE_TYPICAL,i);
   }
   double c1s_1=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,1);
   double c1s_2=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,2);
   double c1s_3=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,3);

if (NormalizeDouble(c1s_1,4)>NormalizeDouble(c1s_2,4)&&NormalizeDouble(c1s_2,4)<NormalizeDouble(c1s_3,4))
//if (c1s_1>c1s_2&&c1s_2<c1s_3)
     {                                          // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
if (NormalizeDouble(c1b_1,4)<NormalizeDouble(c1b_2,4)&&NormalizeDouble(c1b_2,4)>NormalizeDouble(c1b_3,4))
//if (c1b_1<c1b_2&&c1b_2>c1b_3)
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

ログブックからのメッセージの意味を教えてください。

2010.06.24 17:28:26 TestGenerator: 不一致データエラー (2010.01.06 08:00 のボリューム制限 5357 を超えました)