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

 
stringo:

入力変数を変更することはできません

externの代わりにキーワードinputを使用すると、コンパイラはこのようなことをさせません。

昔の4分割の機能を維持するために、どうするか。

PS 話題にしていただき、ありがとうございます。


だから、変えようという狙いはなかったんです

さらなる計算のために使われるだけです。これ以上ないくらいにね。

なるほど、原理的には、余分な変数を導入することでこの問題を解決していたんですね。

extern int TakeProfit_= 10;
int TakeProfit;
......  
   int dig = (int)MarketInfo(Symbol(), MODE_DIGITS);
   if (dig == 5 || dig == 3)
   {
      TakeProfit  = TakeProfit_* 10;
.....
 
Night63:


だから、変える意味がなかったんです

これらは単に計算のために使われるだけである。それ以上はダメです!

まあ、原理的には、追加の変数を導入することでこの問題を解決しているのですが。


それはそうなんですが...。しかし、なぜわざわざ不変の定数をtick 毎にチェックするのでしょうか?init()の中で一度だけ定義すれば十分です。
 
stringo:

入力変数を変更することはできません

外部変数の値(一部の変数)をデフォルト値として使用し、同じパラメータの残りのデータをiniファイルから読み込んでいます。

エキスパートアドバイザーは、独自の入力パラメータを持つ複数のストラテジーと同時に動作します。例

extern int TF = 15;
int gia_TF[5];
void start()
{
    for (int li_TF = 0; li_TF < ArraySize (gia_TF); li_TF++)
    {
        TF = gia_TF[li_TF];
    }
}

はい - この問題は、追加の変数を入力することで解決できますが、なぜですか?この機能は、新しいMTでは奪われるのでしょうか?

 
TarasBY:
外部変数の値(一部の変数)をデフォルト値として使用し、同じパラメータに対する他のデータをini-fileから読み込んでいます。

アドバイザーは、独自の入力パラメータを持つ複数の戦略を同時に使用します。例

はい - 問題は、追加の変数を入力することによって解決できますが、なぜですか?この機能は、新しいMTでは奪われるのでしょうか?

だから言ったでしょ?:-))

これは余計なお世話です。つまり、外部変数を外部変数としたインラインは不要である。externを削除することができます。その違いに気づくことはないでしょう。とにかくINIファイルから初期化するのです。

 
TarasBY:
外部変数の値(一部の変数)をデフォルト値として使い、同じパラメータの残りのデータをini-fileから読み込んでいます。

アドバイザーは、独自の入力パラメータを持つ複数の戦略を同時に使用します。例

そうです。この問題は、追加の変数を導入することで解決できるのですが、なぜでしょうか!この機能は、新しいMTでは奪われるのでしょうか?


いいえ、奪われることはありません。

すべてが旧4と同じになる。長く書いたコードは(新しいコンパイラで再コンパイルしても)以前と同じように動作します。

 
Zhunko:

だから言ったでしょ...:-))

冗長なんです。外部変数として外部変数との包含が不要であることを意味する。externを省略してもよい。その違いに気づくことはないでしょう。とにかくINIファイルから初期化することです。

ヴァディム!普遍性と多変量性の闘士は誰だ!:)
 
stringo:

いいえ、そうではありません。

全ては旧クワッドと同じになります。長く書いたコードは(新しいコンパイラで再コンパイルしても)以前と同じように動作します。

ありがとうございます。OKです。
 
avtomat:

それはそうなんですが...。しかし、なぜわざわざ不変の定数をtick毎にチェックするのでしょうか?init()の中で一度だけ定義すれば十分です。


確かに、最初はそうでしたね。問題解決の段階で、いろいろと試してみただけです。

さて、initに戻りますが、欠陥のご指摘ありがとうございます

 
stringo:

コードの物理的な意味を説明してもらえますか?

このExpert Advisorが動作するチャートが開かれている場合、シンボルは既に選択されています。

すでに選択されている記号は、再選択できません。チャートが開いているシンボルを隠すことができません。


物理的なポイントは、EAの入力パラメータに文字列として入力されているシンボルが取引可能であるかどうかを確認することです。MT5で同じコードが動作します。

引用したコードはあくまで一例です。そこは少し違いますが、意味は変わりません。

P.S. テスターのエラー138は?

コード

void OnTick()
  {
   if(OrdersTotal()==0)
     {
      string SYMBOL=Symbol();
      int digits=(int)SymbolInfoInteger(SYMBOL,SYMBOL_DIGITS);
      MqlTick lasttick={0};
      if(!SymbolInfoTick(SYMBOL,lasttick))
         return;
      double ask=lasttick.ask;
      double bid=lasttick.bid;

      OrderSend(SYMBOL,OP_BUY,0.1,NormalizeDouble(ask,digits),1000,0,0,"Test",0,0,CLR_NONE);
     }
  }

結果

 
グラフィカルなオブジェクトを使ったトリビアをいくつか紹介します。

今回はOBJ_EDIT です。

1) データ入力ができない。OBJ_EDIT内をクリックしても何も起こらないし、フィールドのデータもハイライトされない(以前は「ENTER」キー以外ではフィールドを抜けることができなかったが、現在は入力できない)。

2) OBJPROP_ANCHOR が動作しない。

3) OBJ_EDITを選択すると、オブジェクトを移動させるポイントが左上に表示されますが、座標がチャートのどのコーナー(OBJPROP_CORNER)からカウントされるかによって、非常に小さいながらも一定のオフセットがあります。

その他、描画やグラフィックオブジェクトの移動に問題はありません。訂正ありがとうございます。