intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//--- будем хранить время открытия текущего нулевого бараstaticdatetime currentBarTimeOpen=0;
//--- перевернем доступ к массиву time[] - сделаем как в таймсерииArraySetAsSeries(time,true);
//--- return value of prev_calculated for next callreturn(rates_total);
}
他のインジケータのデータも計算したい場合は、以下の方法で行います。まず、独自のデータ計算方法を持つ別のインディケータを作成し、このインディケータのハンドル(MQL5 Reference Guide / Technical Indicators/ iCustom )を取って、このハンドルを新しいインディケータで使用します。例をよく見てください。例題についてご質問がある場合
疑問がある。 まだ理解できていない。
では、Custom Moving Average.mq5をベースにしてみましょう。
新しいスムージングプロシージャMODE_MYMAを追加する - 問題ありません。
別のインジケータのi-castを使うのでしょうか? 第二フォームで作ったインジケータを例にとると(第一フォームで作ったインジケータだと・・・ハイローの取り方がわからない・・・第二フォームだけってこと?)
よし、宣言しよう
int newHandl;
onInitで定義する(放物線状、つまり何でもいい、メインは2番目のタイプでしょ? 私のはどう実装するか理解している)。
newHandl=iCustom(_Symbol,0, "ParabolicSAR.mq5",0.02,0.2);
そして、onCalculateで、標準価格の代わりに、その価格を入力するのですか?
CalculateEMA(rates_total,prev_calculated,begin,newHandl);?・・・・・・?
それとも何ですか?(((((
ループ、データ(何でも!)の取得、スムージング、出力というシンプルなものです。
しかし、ここで...。何をつかめばいいのかわからない...。
(第1形態でインジケータを作った場合...どこからハイローを取るのかが分からなかったので...第2形態のみということでしょうか?)
そうですね、ハイローについては、あくまで自分で記事を扱う場合の例です。 最初の形は、close[i]/2 [またはsqrt(close[i]/2)] という線を引くというタスクを取ればいいのです。一般に、配列も1つでたくさんのバリエーションを考えることができます。
よし、宣言しよう
int newHandl;
は、onInitで定義します(例として、放物線を描きます。)
newHandl=iCustom(_Symbol,0, "ParabolicSAR.mq5",0.02,0.2);
それでいいんです。これから完成させます。
インジケーターのハンドルが正しい場合は、このインジケーターのバッファにアドレス指定できることを意味します。MQL5 Reference / Technical Indicators / iCustomの例をもう一度見てください。 線があります。
今度はMQL5 Reference / Access to Timeseries and Indicators / CopyBuffer(...繰り返しになりますが、例を一行ずつ解析していくといろいろなことが分かってきます)を読んでみてください。
選択した任意のインジケータ・バッファのデータを受信してみる。私は端末を持っていませんが、パラボリックでは、どのバッファが計算されているか、その番号も確認することができます。
ArrayIsSeries()、ArrayGetAsSeries()関数の説明について質問です。
リファレンスマニュアルには、「関数に渡された配列は価格データを反映している、つまりこれらの配列は時系列符号を持ち、 ArrayIsSeries()関数は これらの配列をチェックすると真を返す 」というような文言があるのです。しかし、それでも、いずれにせよ、 インデックスの方向は 、 関数 ArrayGetAsSeries() でだけ確認する必要が あります".
直訳すると、ArrayIsSeries() 関数が真を返しても(つまりチェック対象の配列が時系列配列であることを確認しても)、インデックスの方向はArrayGetAsSeries() 関数によってのみチェックされるべきであるということになります。それなら、ArrayIsSeries() 関数の結果を追加でチェックしなければならないのであれば、導入する意味がわかりません。何が言いたいの?配列が時系列であっても、インデックスの方向が時系列と同じにならない(AS_SERIESフラグが設定されない)ことはあり得るのでしょうか?
Mql4からMql5へ移植する際、Lotエラーが発生するようになりました。
'Lot' - 定数は変更できません。
修正方法は?
Mql4からMql5へ移植する際、Lotエラーが発生しました。
'Lot' - 定数は変更できません。
どのように修正するのですか?
無理でしょう。バグではなく、機能です。:)
mql5では、入力変数は変更不可(const)です。
簡単なデカップリングを作る。
MQL5マニュアル/ 配列操作/ ArraySetAsSeriesの項に、ArraySetAsSeries() 関数が const datetime 配列&time[]にtick毎に適用される場合の例があります。
これは、配列を時系列で扱うために、誰もがやっていること(tickごとに 配列を反転させる)でしょうか。
もう一つの質問:OnCalculate() で使用される配列は、インデックスの方向を任意に変更できますか?それとも、この方向は一度確認すれば十分なのでしょうか?
Mql4 から Mql5 への移植時にエラー SymbolInfoDouble:
'SymbolInfoDouble' -関数 呼び出しにオーバーロードのいずれかを適用できない
どうすれば修正できますか?
Mql4からMql5へ移植する際、SymbolInfoDoubleエラーが発生するようになった。
'SymbolInfoDouble' - 関数呼び出しに適用できるオーバーロードは一つもありません。
どうすれば修正できますか?
なぜ、一番下に0があるのですか?
https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants#enum_symbol_info_double
さらに、これに加えて、0による除算をチェックします。
ストラテジーテスターの結果がチャートで表示されます。
チャートの色の違いが何を意味するのか、どこで調べられるか教えてください。
ストラテジーテスターの 結果がチャートで表示されます。
チャートの色の違いが何を意味するのか、どこで調べられるか教えてください。