MetaTrader 4 Build 529 ベータ版リリース、新コンパイラー搭載 - ページ 98

 
evillive:
ここにどんな恐怖が書かれているのか、553以上の更新は当分控えることにします...。

グラフィカルなオブジェクトの出力に問題が発生するようになったんだ。コード内のある箇所で、関数

//+----------------------------------------------------------------------------+
void SetTLine(color cl, int wnd, string nm="",
              datetime t1=0, double p1=0, datetime t2=0, double p2=0,
              bool ry=False, int st=0, int wd=1) {
   if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TREND, wnd, 0,0, 0,0);
   ObjectSet(nm, OBJPROP_TIME1 , t1);
   ObjectSet(nm, OBJPROP_PRICE1, p1);
   ObjectSet(nm, OBJPROP_TIME2 , t2);
   ObjectSet(nm, OBJPROP_PRICE2, p2);
   ObjectSet(nm, OBJPROP_COLOR , cl);
   ObjectSet(nm, OBJPROP_RAY   , ry);
   ObjectSet(nm, OBJPROP_STYLE , st);
   ObjectSet(nm, OBJPROP_WIDTH , wd);
}
//+----------------------------------------------------------------------------+

は以下のように呼ばれます。

//==============================================================================
// --------------------------------- Данные -----------------------------------+
//==============================================================================
   if(DrawGraphics) {                           // если рисуем графические объекты
      wnd=WindowFind("i_StdDev("+sdperiod+")"); // номер окна индикатора
      if(wnd>0) {                               // если индикатор на графике, нарисуем метку
         nm=Prefix+"_Текущий бар";
         p1=WindowPriceMax(wnd); p2=WindowPriceMin(wnd);
         SetTLine(Blue,wnd,nm,Time[0],p1,Time[0],p2,false,2);
         }
      }
//-----------------------------------------------------------------------------+   

は、問題なくインジケータウィンドウに垂直トレンドラインを出力します(デバッグ中にインジケータポイントを視覚的に認識しやすくするためにゼロバーをマークしています)。


このようにコード内の別の場所から同じ関数を呼び出した場合。

   if(op==OP_SELLSTOP) {
      pp=MathMin(Low[x],Low[x-1])-distanceSetOrders*PointX;
      b=iLowest(sy,tf,MODE_LOW,2,(x-1));
      if(pb-level*Point>pp) {
         ll=LotsS;
         if(StopLoss==0) sl=0;
         else sl=NormalizeDouble(MathMax(pp+StopLoss*PointX, pp+(level+1)*Point),dg);
         if(TakeProfit==0) tp=0;
         else tp=NormalizeDouble(MathMin(pp-TakeProfit*PointX, pp-(level+1)*Point),dg);
         co="Отложенный";
         Message("Кто звал? Чё..., ставить? Ставлю SellStop относительно бара "+b+
                 ", от "+DoubleToStr(pp,dg)+" до "+DoubleToStr(Low[b],dg)+" рисую линию");
         SetOrder(sy, OP_SELLSTOP, ll, pp, sl, tp, mn1, co);
         if(DrawGraphics) {
            nm=Prefix+"_Наименьшая цена_"+TimeToStr(Time[b]);
            SetTLine(FireBrick,0,nm,Time[b],Low[b],Time[b],pp,false,3);
            }
         }
      }

その結果、不思議なことに、渡されたパラメータは正しい値を示しています。トレンドライン名にはバータイムが書き込まれますが、ライン自体はすべてゼロの値を持ち、さらに、このオプションに責任のある関数パラメータに "false" を渡しましたが、それは "Ray" として表示されています - Rayではありません。


コードに間違いはないのですが。不具合の可能性は?
 
グラフィックは完全に殺されてしまったようです...。画面にボタンが表示されない。何もせず、ターミナルをリロードしただけで、チャートにホバリングしてグラフィカルなオブジェクトを全て描画していたEAが普通に死んでしまったのです。グラフィカルなオブジェクトの修正に数日待ち...。ふむふむ待つだから、私も同じ運命をたどるしかないのでしょう。:)新しいビルドを待つしかないでしょう。
 
新しいビルドでプログラムを再コンパイルしましたか?
 
artmedia70:

グラフィカルなオブジェクトの出力に問題が発生するようになったんだ。コード内のある箇所で、関数

は以下のように呼ばれます。

は、問題なくインジケータウィンドウに垂直トレンドラインを出力します(デバッグ中にインジケータポイントを視覚的に認識しやすくするためにゼロバーをマークしています)。


このようにコード内の別の場所から同じ関数を呼び出した場合。

チャート上のバーをマークし、そこから保留中の注文レベルを計算するために使用することができます。奇妙に思えるかもしれませんが、それに渡されたパラメータは真の正しい値を示し、バータイムはトレンドライン名に書き込まれますが、ライン自体はすべてゼロ値で、このオプションを担当する関数パラメータに偽(レイではない)を渡しますが「レイ」として表示されています。


コードに間違いはないのですが。不具合の可能性は?
SetTLine関数内の全パラメータのプリントアウトを追加する。
 

そしてまた、タイミングについての質問ですが...。市場の本格的な立ち上げはいつ?グローバルアップデートはいつ?

11月末に1ヶ月間のテストという話がありましたが、もう12月が本格的になってきましたね.

 

レナート

近い将来、新しいME4がサポートされる予定はありますか?

ENUM_ANCHOR_POINTとENUM_LINE_STYLE ?

ありがとうございます。

 
Wahoo:

レナート

近い将来、新しいME4への対応予定はありますか?

ENUM_ANCHOR_POINT と ENUM_LINE_STYLE ?

はい、そうです。グラフィカルなモデルは、MQL5と同じになります。

ビルドのたびにグラフィカルな機能を追加し、改良しています。

 

ブローカーの一つ(少なくとも一つ)は、新しいMT4ビルドがリリースされたとき、特に大きな革新があったとき、まずデモで試して、それからリアル口座に実装します。

ベータ版のテスターの中には、意図せず隣の端末を半自動で 更新してしまう人がいるようですが、今回の変更点の導入時に、デモ機と実機が1台のコンピュータ(またはVPS)上にあり、これらの戦術を確実に観察できるのでしょうか?あるいは、システム内のすべての端末のアップデートを管理するために使用され、「避けるために」削除することが推奨されている1つのフォルダーは、すべてか何も ないかという2つの選択肢しか残らないのでしょうか。

 

ターミナルの作業コピーのあるコンピューターでテストやアップデートを実行しないでください。

コンピュータ上の少なくとも1つのコピーがアップデートを受信すると、それらはすべて自動的に更新されます。