初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1311

 
Sprut 185:

ご参加ありがとうございました。

残念ながら、ObjectSet*** 関数は私のタスクには適していませんでした。

OnDeinit()関数を 使用して自分で解決しました。

これですべてが正常に動作するようになりました。

しかし、あなたの質問には、こんな言葉があります。

スプルート185

一つ問題があるので、よろしくお願いします

私はコードを書くことを学んだばかりで、この点については、私の無教養を寛大に見ていただきたいと思います。

タイムフレームを変更したり、インジケータメニューの設定を変更したりすると、チャートのグラフィックオブジェクトが更新されるOnChartEvent 関数を理解してもらいたいと思います。

まずグラフィカルなオブジェクトを削除してから、再度作成する必要があると理解しています。しかしオブジェクトが削除されると、そのプロパティにアクセス できなくなり、そのオブジェクトをどうやって 再作成するのか.........。 それとも、私が理解していないのでしょうか?あるいは、チャート上のグラフィカルなオブジェクトを更新するという別の 方法があるのでは?

どうすればいいのか、コメント付きで例を書いてください。

また、削除しないためには、ObjectSet*** 関数の1つで必要なオブジェクトのプロパティを変更するだけです。

すべてのオブジェクトを削除する......ということですが、すべてのオブジェクトを無差別に削除する場合は、十分に注意が必要です。チャート上のオブジェクトの中には、手動や他のExpert Advisor/Indicatorが作成したオブジェクトがある可能性があります。オブジェクトの削除が好きな人は、接頭辞による削除に注目してみてください。本当は、プレフィックスで作成する必要があります。難しいことではありません。

 
の結果はどうなるのでしょうか?

iSpread ?


ターミナルのSymbols/Barsでバーを照会すると、おおよそスプレッド値に近い値になるんですね。

もちろんこれらの値はSYMBOL_SPREADで与えられる実際の値とは一致しない。

なぜ、このような違いがあるのでしょうか?そして、そんな非現実的なスプレッドが、iSpreadを使って 表示されるとは。

 
Aleksei Skrypnev:
この関数はどのような結果を 示すのでしょうか

iSpread ?


ターミナルのSymbols/Barsでバーを照会すると、おおよそスプレッド値に近い値になるんですね。

もちろんこれらの値はSYMBOL_SPREADで与えられる実際の値とは一致しない。

なぜ、このような違いがあるのでしょうか?そして、そんな非現実的なスプレッドが、iSpreadを使って 表示されるとは。

バーあたりの最小スプレッド。

チェック用のバッファを追加しました - インジケータ配列 spread[] からデータを受け取り、現在のバーのコメントを表示します - iSpread の結果です。


やり方はこちら:スプレッドコントロール

Spread Control
Spread Control
  • www.mql5.com
Просмотр спреда
ファイル:
 

ごあいさつ

変数「ATR14」が変化しない理由と、変化する様子を確認する方法を教えてください。

void OnTick()
{

double ATR14=iATR(NULL,PERIOD_CURRENT,14);

Comment(
 
      "ATR14==: ",ATR14,"\n");
}
 
Alexey Belyakov:

ごあいさつ

変数「ATR14」が変化しない理由を教えてください。 どうすれば変化するのがわかりますか?

なぜなら、MQL5ではインジケータハンドル(ちなみにint型です)は1回だけ作成され、OnInitで行われるからです。

また、インジケーターからのデータ受信には、CopyBufferを使用 します。

 
Vladimir Karputov:

なぜなら、MQL5では、インジケータハンドル(ちなみにint型です)は1回だけ作成され、OnInitで行われるからです。

また、インジケーターからのデータ受信には、CopyBufferを使用 します。

よし、仮定してみよう。

double  ATR14m[];   

int ATR14;

int OnInit()
  {
ATR14=iATR(NULL,PERIOD_CURRENT,14);
  return(0);   
  }
  
  
void OnDeinit(const int reason)
  {
//---  
  }


void OnTick()
{
CopyBuffer(ATR14,0,0,3,ATR14m);



Comment(

      "ATR14==: ",ATR14,"\n");

}



何も変わっていない。

 
Alexey Belyakov:

ごあいさつ

変数 "ATR14" が変化しない理由を教えてください。 また、どうすれば変化を見ることができますか?

以下はその一例です。

Документация по MQL5: Технические индикаторы / iATR
Документация по MQL5: Технические индикаторы / iATR
  • www.mql5.com
iATR - Технические индикаторы - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Belyakov:

まあ、それはともかくとして

何も変わっていない。

ほぼ決まりましたね。配列の呼び出しは「ATR14m」ではなく、「array_atr」を推奨します。そうすれば、'Comment'を呼び出す際のエラーがすぐに分かるでしょう。

 
Vladimir Karputov:

ほぼ正解ですね。配列の呼び出しは「ATR14m」ではなく、「array_atr」を推奨します。そうすれば、「コメント」呼び出しで自分のエラーをすぐに確認することができます。

double  array_atr[];   

int ATR14;

int OnInit()
  {
ATR14=iATR(NULL,PERIOD_CURRENT,14);
  return(0);   
  }
   
void OnDeinit(const int reason)
  {
//---  
  }

void OnTick()
{


CopyBuffer(ATR14,0,0,3,array_atr);

Comment(

      "ATR14==: ",array_atr,"\n");

}

変更したところ、以下のようなエラーが発生しました。 " 'array_atr' - invalid array access "


 
Vladimir Karputov:

ほぼ正解ですね。配列の呼び出しは「ATR14m」ではなく、「array_atr」を推奨します。そうすれば、'Comment'を呼び出す際のエラーがすぐに分かるでしょう。

子供のトイレにナイトベースと名付けると何か変わると思いますか?

このような誤解があるため、あえて提案しようとは思いませんが......ドキュメントを50回くらい読まないと理解できませんね......。