[ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 3. - ページ 309

 
artmedia70:

そうです、自分の出したゴミは自分で片付けるのがマナーなのです...。

しかし、この文脈で、「ゴミ」を今すぐ片付ける必要があるのか、逆に、「ゴミ」ではなく、さらなる計算のために必要なデータであるのか、どうやって見分けるのでしょう?

私の理解では、deinit()はゴミを掃除するために使われるはずですが、、、。取引商品のチャート削除、EA削除時だけでなく、TF変更時にも実行されます。この場合、TFに蓄積されたデータはすべて失われ、Expert Advisorは前のタイムフレームに戻るとゼロ配列で動作を再開します。Expert Advisorのパラメータを変更しても同じことが起こります。

状況によっては、「ゴミの収集」は単純な配列サイズの変更ではなく、複雑な論理処理であることが判明したのです。


まあ、複雑な話ではないんですけどね。ループ内で、配列を値で初期化する。そして、出来上がった配列を使って作業します。仕事が終わったら、長さをゼロにする。もし疑問があれば、コードの最後、return(0)の直前でやってもよいでしょう。
 

ログファイルを読むには、以下のようなコードを提案してください。現在のログファイルを日付ごとに自動的に読み出して、プリンターに出力します。

どこで

while (result>0) {

ファイルを部品から組み立てているところです。しかし、ファイル全体は必要なく、最後の一行だけでいいのです。修正にご協力ください。

void ReadWrite() {
   string tekTime=TimeStr1(CurTime(),1);
   string path=TerminalPath()+"\\logs\\"+tekTime+".log";
   string title="Чтение из файла";
   string msg;
   int result;
   int handle=_lopen(path,4);
   if (handle<0) {
      msg="Ошибка открытия файла";
      //MessageBox(msg,title,MB_OK|MB_ICONERROR);
      Print(msg);
      return;
   }
   result=_llseek (handle,0,0);
   string buffer="";
   //string char="x                      ";
   string char="x                                                                                                                                                                                                                                                         ";
   int count=0;
   result=_lread (handle,char,250);
   while (result>0) {
      buffer=buffer+char;
      char="x                                                                                                                                                                                                                                                         ";
      count++;
      result=_lread (handle,char,250);
   }
   result=_lclose (handle);
   msg=StringTrimRight(buffer);
   //MessageBox(msg,title,MB_OK|MB_ICONINFORMATION);
   Print(msg);
}

//------------------расчет времени----------------
string TimeStr1(int taim,int tip)
{
   string sTaim;
   string sTaim1,sTaim2,sTaim3;
   if (tip==1) 
   {
      int GD=TimeYear(taim);                  
      int MN=TimeMonth(taim);                  
      int DD=TimeDay(taim);  
      
      sTaim1 = DoubleToStr(GD,0);
      if (MN<10) sTaim2 = StringConcatenate(sTaim2,"0"+DoubleToStr(MN,0));
      else sTaim2 = StringConcatenate(sTaim2,DoubleToStr(MN,0));
      if (DD<10) sTaim3 = StringConcatenate("0",DoubleToStr(DD,0));
      else sTaim3 = DoubleToStr(DD,0);
      sTaim=sTaim1+sTaim2+sTaim3;
   }
   return(sTaim);
}
 
drknn:

まあ、難しくはないんですけどね。ループの中で、配列は値で初期化さ れます。そして、出来上がった配列を使って作業しました。作業が終わったら、長さゼロの配列に するんです。もし疑問があれば、コードの最後、return(0)の直前でやってもよいでしょう。

誤解された。

この会話の前提を正しく理解すれば)ループとはEAそのものの ことです。結局のところ、ティックが来るたびに、新しい値を書き込む必要があるかどうかによって、配列は増えるか、変わらないかのどちらかになるのです。

例えば、ある人が時間軸を変更したとかではなく、仕事が 終わったとどうしてわかるのでしょうか。偶然にも...。この場合、deinit()が呼び出され、すべてのデータが失われます。Expert Advisorは、新しいタイムフレーム(新しいサイクル)で得られた値に基づいて、それらを新たに保存(動的配列に 書き込む)し始める。

本気です。

 
artmedia70:

私は理解されなかった。

今回の議論の前提を正しく理解すれば、)サイクルはExpert Advisor自体の働き です。結局のところ、ティックが来るたびに、新しい値を書き込む必要があるかどうかによって、配列は増加するか、あるいは変化しないかのどちらかになるのです。

例えば、人が時間軸を変えているだけでなく、仕事が終わっているかどうか、どうやって見分ける のですか?偶然にも...。この場合、deinit()が呼び出され、すべてのデータが失われます。エキスパートアドバイザーは、新しいタイムフレーム(新しいサイクル)で得られた値に基づいて、それらを新たに蓄積(動的配列に書き込む)し始めます。

私が言いたいのは、こういうことです。

細かく言えば、この 機能を使うことができます。初期化解除の理由を教えてくれます。
 

私は、この端末のある特殊な機能に気づきました。注文の利益計算ではOrderSwap()を考慮しないので、一気に決済してほしい。


この計算式を使って、利益で注文を終わらせるべきだということです。

(OrderProfit()+OrderSwap()+OrderCommission())>0とする。

私はコミッションを使ったことがなく、コミッションはデモでは使われないので、アカウントで確認できないのです。

私の計算は正しいのでしょうか?

 
Zhunko:
細かく言えば、この 機能を使うことができます。初期化解除の理由を教えてくれます。

まったくもってその通り...。:)

忘れてた。さて、「フールプルーフ」の口癖で、使ってみますと...。

 
artmedia70:

ObjectGetValueByShift()を使って

そして、それをどう使うかは、自分だけが知って いる......。


親切な方、ありがとうございました。
 
2つの質問です。

1.配列doubleab=a*bに 1つ目以降の変数double abc[10] を書き込み/入力するにはどうしたらよいですか?
2.最初の変数を削除して、11番目の変数を配列に書き込むにはどうすればよいですか?

変数が配列に書かれる順序(前方または後方)は重要ではありません。配列内の変数は、算術平均を求めるために必要です。
 
保留中の注文の ロットサイズを変更することはできますか?
 
Parn25:
保留中の注文のロットサイズを変更することはできますか?


いや、無理でしょう。

変更できる項目はすべてこちらで説明していますhttps://docs.mql4.com/ru/trading/OrderModify