どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 1087

 
rabanik:
こんにちは。EA用に以下のコードを書くのを手伝ってください。配列を通して行いたいのですが(他に良い方法があれば教えてください)。一般的にEAはメッセージを送信しますが、配列(temporary)を介して送信させたいのです。つまり、Expert Advisorはメッセージの送信を開始する際に、以前に送信したことがあるかどうかをチェックし(配列にメッセージが格納されているかどうかをチェック)、なければメッセージを送信し、メッセージが見つかれば送信を省略します。わかりやすいといいのですが)ありがとうございました。

問題文に間違いはないか?

単純に、選択肢がある。

- 最後のメッセージを繰り返さない

- を無視する(タイムラグを設定する),つまり,メッセージを繰り返す必要がある。

追伸:最初のバリエーションは、2番目の特殊なケースですが、実装はより簡単です。あなたの問題の定義も、無限ラグを持つ第2変形の特殊なケースです。

もし興味があるなら、ここで悩みを解決してあげましょう。

メッセージを格納するtext配列と、メッセージを検索するindex配列の2つを定義する。

インデックス配列は int型である。1次元目には、テキストメッセージのチェックサムを書き込む。2番目は,1番目の配列の行番号です.インデックス配列は1次元でソートされます。

新しいメッセージを受け取る。そのチェックサムを読み取る。ArrayBsearch() 関数を使用すると、このようなメッセージを見つける ことができます。見つからなければ、オリジナルのメッセージになります。それをメッセージの配列に追加し、インデックス配列を参照してチェックサムを行い、ソートを忘れないようにします。

チェックサムのオプションは何ですか?私ならこうする:文字数やチェックサムを考慮する。例えば、テキストのチェックサムは、文字コードの合計である。最近の変化を考えると、65 536*256を超えることはできません。つまり、メッセージのチェックサムは以下のようになります。

を1000万倍した文字数で、テキストチェックサムを付加します。

 

プロ!アングルの線に問題があります。

座標を使ってTRENDBYANGLEを 作りました。

ObjectCreate(0,"anglestok",OBJ_TRENDBYANGLE,0,0,0);
ObjectSet("anglestok",OBJPROP_TIME1,X1); ObjectSet("anglestok",OBJPROP_PRICE1,Y1);
ObjectSet("anglestok",OBJPROP_TIME2,X2); ObjectSet("anglestok",OBJPROP_PRICE2,Y2);

- 角度が必要です。

anglestok= ObjectGetDouble(0,"anglestok",OBJPROP_ANGLE);

のヘルプによると、プログラムが作成したライン-ZEROの角度はOKだそうです。

同じ座標で、線に触れずにもう一度同じコードを実行したところ、0度ではなく、正しい度数が表示されました。なぜ、どうすれば最初から正しくできるのでしょうか?

あるいは、ある座標を与え、角度を尋ねると0と答え、次に別の座標を与えると、前の座標の角度と 答えました。

 
どのような場合に、関数シグネチャの記述の後にconstを置くのでしょうか?これに関する情報が見つからない。
void qwe(int abc) const {...}
 
ここで本当の知識のある人を見つけることができないようだ、ただ何もせずに登録した =/。
 
K_i_r_i_t_o:
誰も回答していないので、このコメントを最初に移しましたが、本当に必要なんです =/。
それはこれを実装することは可能ですか:私は任意のキーを押すと、インジケータコードの一部がオンになっている(マウスクリックでオブジェクトを作成するための責任)、その後イベントが発生した場合(コードの第二部、イベントは、例えば、同じオブジェクトを作成することがあります)、コードの最初の部分が無効になっている(としない場合は、オブジェクトは、それぞれのクリックによって作成されます)と、キーを押したときに実行し、その周りに)
できます。OnChartEvent ブロックを追加。その中で、必要なプレス、測定値を記録し、それに対する反応を自分のアイデアに従って記述します。
 
SunnYtheDreamer:
できます。OnChartEvent ブロックを追加。その中で、あなたのアイデアに従って、必要なプレス、測定を記録し、それに対する反応を記述してください。
キーを押す前の時間だけコードの一部を無効にする実装は不可能です =/ もっと簡単な方法がありますが、1つ問題が あります。キーを押したときに、その値を最初の if 文の 最初に戻さなければ なりません。
#define  VK_D 0x44
void OnChartEvent(const int id,         // идентификатор события   
                  const long& lparam,   // параметр события типа long 
                  const double& dparam, // параметр события типа double 
                  const string& sparam) // параметр события типа string 
{ 
 Comment(__FUNCTION__,": id=",id," lparam=",lparam," dparam=",dparam," sparam=",sparam);

int      y     =(int)dparam;
datetime dt    =0;
double   price =0;  
int      window=0;
int i;
int x=(int)lparam;

if (id==CHARTEVENT_CLICK)
{
ChartXYToTimePrice(0,x,y,window,dt,price);
ObjectCreate("Trend Line"+i,OBJ_TREND,0,dt,price,dt,price);
ObjectSetInteger(0,"Trend Line"+i,OBJPROP_SELECTED,true);

if(id==CHARTEVENT_KEYDOWN) 
{ switch(int(lparam)) 
{ case VK_D:
i=rand();
}}}}
 
K_i_r_i_t_o:
キー入力の前のピリオドを無効にする部分が実装できない =/ もっと簡単な方法があるのですが、一つ問題があります。キーが押されたときに、最初の if 文の最初にその値を 返す必要が あるのです。
if (id==CHARTEVENT_CLICK)
{
   ChartXYToTimePrice(0,x,y,window,dt,price);
   ObjectCreate("Trend Line"+i,OBJ_TREND,0,dt,price,dt,price);
   ObjectSetInteger(0,"Trend Line"+i,OBJPROP_SELECTED,true);

   if(id==CHARTEVENT_KEYDOWN) 
   {
      switch(int(lparam)) 
      {
         case VK_D: i=rand();
      }
   }
}
このコードは、マウスがクリックされたときだけ実行されます。 この場合、3行のコードの後に、キーを押したときのイベントがチェックされます。そして、この3行のコードは数ミリ秒で実行され、現在のOnChartEventの 呼び出し中のidが変更できたとしても、3行のコードの実行中にキーが押される確率=0%になります。明らかに、あるidの値でトリガーされるブロックの中でidをチェックし、異なる値をそこで待つことは無意味です。まず、キーが押されたことを確認し、別のブロックで、キーの番号または目的のキーを押したことだけを変数に保存します。そして、この変数で、ブロック内にあるマウスクリック用のコード片を有効にしたり、無効にしたりします。
char key = -1; //эта переменная должна быть объявлена за пределами блока OnCharEvent
if(id==CHARTEVENT_KEYDOWN)
key = lparam;

if (id==CHARTEVENT_CLICK && key == 'D')
{
   ChartXYToTimePrice(0,x,y,window,dt,price);
   ObjectCreate("Trend Line"+i,OBJ_TREND,0,dt,price,dt,price);
   ObjectSetInteger(0,"Trend Line"+i,OBJPROP_SELECTED,true);
   i=rand();
   key = -1;
}
 
SunnYtheDreamer:
このコードは、マウスがクリックされた場合にのみ実行され、キーストローク・イベントをチェックする3行のコードがあります。そして、この3行のコードは数ミリ秒で実行され、現在のOnChartEventの呼び出し中にidが変更できたとしても、その間に3行のコードを実行し、キーが押される確率は0%です。明らかに、あるidの値でトリガーされるブロックの中でidをチェックし、異なる値をそこで待つことは無意味です。まず、キーが押されたことを確認し、別のブロックで、キーの番号または目的のキーを押したことだけを変数に保存します。そして、この変数で、ブロック内にあるマウスクリック用のコード片を有効にしたり、無効にしたりします。

ありがとうございました!)これは私が探していたラインです if (id==CHARTEVENT_CLICK && key == 'D'), could not connect two events, this didn't work if (id==CHARTEVENT_CLICK & id==CHARTEVENT_KEYDOWN) Thanks much again)

 

こんにちは、私は過去n本のローソクの平均サイズを計算する関数を持っています。時々それは次の値を出力します: "5e-05.0"。NormalizeDouble()は役に立ちません。このような数値をプログラムで計算し、切り捨てる方法を教えてください。

 
pycha:

こんにちは、私は過去n本のローソクの平均サイズを計算する関数を持っています。時々それは次の値を出力します: "5e-05.0"。NormalizeDouble()は役に立ちません。このような数値をプログラムで計算し、切り捨てる方法を教えてください。


5e-05(5*10の-5乗)=0.00005。
何を切り捨てるか、だ。
if(val >= 0.00001)
このような小さなローソク足、5ピップス、低緯度でのみ、5桁の口座で、低い時間枠で発生する可能性があります。スキャルピングを扱わないのに、n本のローソク足に対して平均値がやたらと小さいことがあるのなら、この関数の実装を疑うべきでしょう。