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

 
Leo59:
Expert Advisorのdeinit()で98496行をログファイル(*.csv)に書き込んでいる。
テスターでエキスパートが終了した時のアンロードが違う理由。
- テスト終了時にアンロードする場合は、すべて正常です(98496行)。
- の場合、「停止」ボタンでアンロードした場合、約10%のデータのみとなります。
何が問題なのか、誰にもわからない。


ユーザー自身がExpert Advisorをアンロードした場合、Expert Advisorを強制終了するようにしました。

は、スタート時に直接記録した方が良い。

 
Roman.:

みんな、この警告をどう解釈する?

ありがとうございます。


関数は、変数に設定する必要があります

例えば、bool closee=OrderClose............................とする。

  • OrderSelect の戻り値をチェック する必要があります。
  • OrderDelete の戻り 値をチェックする必要があります。
  • OrderSend の戻り 値をチェックする必要があります。
  • OrderCloseの戻り 値をチェックする必要があります。
  • OrderModify の戻り値をチェックする必要があります。


このような警告を避けるには、変数への復帰を明示的に指定する必要があります。
は、例えばこんな感じです。
  • select1=OrderSelect..........................................2
  • bool delete1=OrderDelete.............
  • bool close1=OrderClose...............
  • bool modify1=OrderModify................................
  • int send1=OrderSend..................................5
 
こんにちは。OBJ_TEXT オブジェクトのグラフ上で幅/高さを定義または計算することが可能かどうか教えてください。
 
alxm:
こんにちは。OBJ_TEXTオブジェクトのグラフ上で幅/高さを定義または計算することが可能かどうか教えてください。

文字数、+フォントサイズとかの 計算方法は?
 
cipsi:

もし分かっていれば、一番最初のオープンオーダーのOrderOpenPriceを見つける方法。

1.Symbol

2.BUYオーダーは1つから多数まで開けることができる

3.マジック

4.注文の違い、おそらくチケットによるもの - 最小のチケットを見つける。


double PriceOpenFirstPos(string sy="", int op=-1, int mn=-1) {
  datetime t==0;
  double   r=0;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t>OrderOpenTime() || t==0) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
 
psdmaster:
EA作成に関する記事を読む : https://book.mql4.com/ru/samples/expert

あるバーで取引を開始し、次のバーが表示されたときに閉じる方法を教えてください。


1.取引を開始するときは、バーの時間を忘れないようにする

このように

スタート地点の外

 int timeopen;

を、トレードをオープンにしているスタート地点に置く。

 timeopen=Time[0];

このように閉じる。

if(timeopen!= Time[0]) OrderClose............
 
Zolotai:
教えてください。ループを使わずに、指定したシンボルの未決済注文の数を調べるにはどうしたらよいですか?


サイクルがないとどうしようもない。

 

親愛なる、あなたの助けが必要です。

Expert Advisorをインジケータで最適化しているのですが、インジケータのコードは以下の通りです。

最適化が遅い、新しいバーで インジケータを再計算するコードをEAで作ったが、これはかなり適していない。

インジケーターのコードを見て、再計算を速くするために何ができるかを考えてみてください。

#property indicator_separate_window
#property indicator_buffers 4
#property  indicator_color1 Lime
#property  indicator_color2 Yellow
#property  indicator_color3 Red
#property  indicator_color4 Aqua

//--- input parameters
extern int       Period_MA_1=14;
extern int       p2          =7;
extern int       p3          =5;
extern int       p4          =3;
extern int Limit=70;
//--- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_NONE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,ExtMapBuffer3);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,ExtMapBuffer4);
   IndicatorDigits(Digits+1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted(),
   i,limit1,limit2,limit3,limit4;
   double impuls;
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
 
   limit1=Bars-counted_bars-1;
   if (limit1>Limit && Limit>0) limit1=Limit;
   limit2=limit1;
   limit3=limit2;
   limit4=limit3;
   if(limit1>0) 
     {
      limit1=500-Period_MA_1-1;
      limit2=limit1-p2;
      limit3=limit2-p3;
      limit4=limit3-p4;
     }
   for(i=limit1;i>=0;i--) {ExtMapBuffer1[i]=Close[i]-Close[i+Period_MA_1];}
   for(i=limit2;i>=0;i--) {ExtMapBuffer2[i]=iMAOnArray(ExtMapBuffer1, 0, p2, 0, MODE_EMA,i);}
   for(i=limit3;i>=0;i--) {ExtMapBuffer3[i]=iMAOnArray(ExtMapBuffer2, 0, p3, 0, MODE_EMA,i);}
   for(i=limit4;i>=0;i--) {ExtMapBuffer4[i]=iMAOnArray(ExtMapBuffer3, 0, p4, 0, MODE_EMA,i);}

   return(0);
  }
 

mt4のクラスについて、どこで読むことができますか?

ヘルプを読みましたが、このセリフの意味が説明されていません。

CArray::CArray(void) : m_step_resize(16),
                       m_data_total(0),
                       m_data_max(0),
                       m_sort_mode(-1)
  {
  }

変数の初期化について教えて ください。

 
Vladon:


関数は、変数に設定する必要があります。

例)bool closee=OrderClose......................................

  • OrderSelect の戻り値をチェック する必要があります。
  • OrderDelete の戻り 値をチェックする必要があります。
  • OrderSend の戻り 値をチェックする必要があります。
  • OrderCloseの戻り 値をチェックする必要があります。
  • OrderModify の戻り値をチェックする必要があります。


このような警告を避けるには、変数への復帰を明示的に指定する必要があります。
このように
  • select1=OrderSelect.........................................2
  • bool delete1=OrderDelete.............
  • bool close1=OrderClose...............
  • bool modify1=OrderModify................................
  • int send1=OrderSend..................................5


ありがとうございます。何の警告もなく動作しました。


ハンドブックにある例を参考にしてください:-)


オーダー削除

以前に発注した保留中の注文を削除します。

bool OrderDelete()
int チケット, //注文番号
color arrow_color //
);

パラメータ

チケット

[注文の固有シリアル番号。

矢印の色

[in] チャート上の矢印の色。このパラメータがない場合、または値がCLR_NONEの場合は、チャートに矢印は表示されません。

戻り値

関数が正常に終了した場合はtrueを、エラーが発生した場合はfalseを返す。エラー 情報を取得するには、GetLastError() を呼び出します。

if(Ask>var1)
{
OrderDelete(order_ticket)。
return(0) です。
}