MQLの目利きの方に質問です - ページ 8

 

ありがとうございます。

 

皆さん、こんにちは。

アドバイスをお願いします。 インジケーターは、商品の価格ラインを表示し

右側にはテキストコメントがあり、彼らの名前とポジションの大きさが記されています。

すべて正常に動作しています。5桁の気配値を持つ商品のチャートにインジケータを貼らない限りは。

価格のラインが引かれている。しかし、右側のコメントは完全に消えてしまいます。または、ポジションサイズの代わりにゼロが表示される。

ログにはZERO DIVIDYが 表示されている(アルパリチャート参照)

- EURUSDとGBPUSDで、サイズの代わりにゼロが表示される...

これはポジションサイズの計算と関係があると思うんです。

double vol1=1, vol2, vol3, k1;

  k1=MarketInfo(Symbol_1, MODE_TICKVALUE)*iOpen(Symbol_1,0,0)/
     MarketInfo(Symbol_1, MODE_TICKSIZE);

  vol2=k1/(MarketInfo(Symbol_2, MODE_TICKVALUE)*iOpen(Symbol_2,0,0)/
           MarketInfo(Symbol_2, MODE_TICKSIZE))*vol1;

  vol3=k1/(MarketInfo(Symbol_3, MODE_TICKVALUE)*iOpen(Symbol_3,0,0)/
           MarketInfo(Symbol_3, MODE_TICKSIZE))*vol1;

    // пишем комментарий в окне индикатора с правой стороны: 
 object("Symbol1", DoubleToStr(N1,0)+"*"+Symbol_1+" -"+DoubleToStr(vol1,2), 10, indicator_color1, 5);
 object("Symbol2", DoubleToStr(N2,0)+"*"+Symbol_2+" -"+DoubleToStr(vol2,2), 10, indicator_color2, 18);
 object("Symbol3", DoubleToStr(N3,0)+"*"+Symbol_3+" -"+DoubleToStr(vol3,2), 10, indicator_color3, 31);
 object("SymbolS", "AVERAGE", 10, indicator_color4, 44);   
           

比率 k1=MarketInfo(Symbol_1, MODE_TICKVALUE)...。/MarketInfo(Symbol_1, MODE_TICKSIZE )

は、5桁で「ゼロによる除算」を行います。

どうすれば直るのか、アドバイスをお願いします。

 

履歴の中で、○月○日から○月○日までというように、それ以前に行われた取引を表示するスクリプトやインジケーターがあれば教えてください。とても便利なものだと思います。

ありがとうございます。

ユーリ

 
leonid553:

皆さん、こんにちは。

この問題を解決する方法を教えてください。


簡単に言うと、MODE_TICKSIZEをMODE_POINTに置き換えてみてください。しかし、実際には、Null MarketInfo() を考慮したコードに書き換える必要があります。
 
tyn:

履歴の中で、○月○日から○月○日までの取引というように、それ以前に行われた取引を表示するスクリプトやインジケーターがあれば教えてください。とても便利なものだと思います。

とても便利だと思います。

ユーリ

https://www.mql5.com/en/code- スクリプト。 端末の履歴で時間帯を設定することができます。

VisualOrders.mq4 - インジケータ

ファイル:
 

こんにちは。

mt4 EXNESSでは、私の「多通貨」インジケータは、なぜかインターネットに接続しているときだけ動作します(他の証券会社のmt4とは異なります)。

使っていないのにエラーが出て、マイナス評価になってしまった。ログは「ゼロディブ」を出します。

インターネットに接続するとき、最初にTFをクリックしないと指標の線が表示されないことがよくあるんです。

何が問題なのか、どうすれば解決できるのかを教えてください。

インターネットを遮断した場合。

接続時。

 
leonid553:

こんにちは。

mt4 EXNESSでは、私の「多通貨」インジケータは、なぜかインターネットに接続しているときだけ動作します(他の証券会社のmt4とは異なります)。

FXのインジケーターとの相性は良いですね。ログは「ゼロディブ」を出します。

インターネットに接続する際、最初にTFをクリックしないとインデックスの線が表示されないことがよくあるんです。

何が問題なのか、どうすれば解決できるのかを教えてください。

インターネットを遮断した場合。

接続時。


当たり前のことなんですけどね。それはよくあることで、いつも対処できるわけではありません。ゼロで割る のは直りますが。問題は、市場環境が整っていないことの方が多いのです。
 

よくわからないんだ、ビクター。

これは「当たり前のこと」なのでしょうか?明らかに不具合です!

市場環境がない」という言葉がよくわからない。

除算をゼロに固定した場合 - 価格線は表示されるのか?そんなことはないだろう。

インジケーターウィンドウ右隅のコメントは正常に表示されます。つまり、ObjectCreate などの関数が正常に動作している。

同様に、コメントで設定された数値の数学的計算も 正常に動作しています。

インジケータの価格ラインだけが残る。そこには何もないのです。

プライスラインはバッファに設定されます。各価格線は2つのMAの差に過ぎない。

int start() {
     int limit;  int counted_bars=IndicatorCounted();
  //---- проверка на возможные ошибки
     if(counted_bars<0) return(-1);
  //---- последний посчитанный бар будет пересчитан
     if(counted_bars>0) counted_bars-=10;      limit=Bars-counted_bars;
  //---- основной цикл
 for(int i=0; i<limit; i++)       {
 
   Symbol1[i]= N1*
     (iMA(Symbol_1,Period(),MA_fast,0,MA_Mode,MA_Price,iBarShift(Symbol_1,0,Time[i],false))-
     iMA(Symbol_1,Period(),MA_per,0,MA_Mode,MA_Price,iBarShift(Symbol_1,0,Time[i],false)))  ;
  .... ....

つまり、これが「ゼロ除算」をする部分なんですね!しかし、ここにはまったく除算がなく、ましてやゼロによる除算などないのです

したがって、この場合のエラーは、サーバー(またはプラットフォーム)からバックグラウンドで返されるのでしょうか。あるいは、MT4の開発者がそのような不具合を考慮せず、そのようなエラーの本質に正確に対応しない「ゼロ除算」のリターンを設定しているのかもしれません。

また、MT4でインジケーターが正常に動作するのはなぜですか? インジケーターが正常に動作するのはなぜですか?

同じようなプラットフォームでも、このシンプルなコードが異なるように動作するのはどうしてでしょうか?

 

ゼロによる除算も 扱えますが、インジケータが正しく動作することも必要です。これはもっと難しい。

 

この単純なコード(4行分)で理論的に何が間違っているのでしょうか?)

int start() {
     int limit;  int counted_bars=IndicatorCounted();
  //---- проверка на возможные ошибки
     if(counted_bars<0) return(-1);
  //---- последний посчитанный бар будет пересчитан
     if(counted_bars>0) counted_bars-=10;
     limit=Bars-counted_bars;

  //---- основной цикл
 for(int i=0; i<limit; i++)       {
   //РИСУЕМ ЛИНИИ СИМВОЛОВ, ЕСЛИ ИМЕЮТСЯ БАРЫ

   Symbol1[i]= N1*
     (iMA(Symbol_1,Period(),MA_fast,0,MA_Mode,MA_Price,iBarShift(Symbol_1,0,Time[i],false))-
     iMA(Symbol_1,Period(),MA_per,0,MA_Mode,MA_Price,iBarShift(Symbol_1,0,Time[i],false)))  ;
   Symbol2[i]= N2*
     (iMA(Symbol_2,Period(),MA_fast,0,MA_Mode,MA_Price,iBarShift(Symbol_2,0,Time[i],false))-
     iMA(Symbol_2,Period(),MA_per,0,MA_Mode,MA_Price,iBarShift(Symbol_2,0,Time[i],false)))  ;
   Symbol3[i]= N3*
     (iMA(Symbol_3,Period(),MA_fast,0,MA_Mode,MA_Price,iBarShift(Symbol_3,0,Time[i],false))-
     iMA(Symbol_3,Period(),MA_per,0,MA_Mode,MA_Price,iBarShift(Symbol_3,0,Time[i],false)))  ; 
   Symbol4[i]= N4*
     (iMA(Symbol_4,Period(),MA_fast,0,MA_Mode,MA_Price,iBarShift(Symbol_4,0,Time[i],false))-
     iMA(Symbol_4,Period(),MA_per,0,MA_Mode,MA_Price,iBarShift(Symbol_4,0,Time[i],false)))  ;
    
      
      
   }
   return (0);
} // конец функции СТАРТ