2: ログにエラーが表示されるのですが、その意味が知りたいです。[B]1-Signal-failed parse signals,[/B] [B]2-DataCenter connecting failed [2] and [6][/B] 3-(I do not remember exactly but it says complete disabled when modifying order)ですか?そのような場合、あるいはその他の場合、どうしたらよいのか、アドバイスをお願いします!本当にありがとうございました。
何が起こっているのかを理解するためには、計算結果をプリンターに出力する必要があります。
と分析する。私は何か誤解していたようです。
ifヘッダーの条件の実行を どうイメージしたか
-プログラムはBid変数の値(0.86084)を取得します。
-変数Bid(0.86084)の値を変数massiv[S](0.85375)に落とします。
-得られた差分0.00709を定数0に対応させる
-差分が0以上の場合、if文本体の制御は行わず、注文を開けない。
-差分≦0の場合、if文本体に制御が渡され、注文が開始される
関数ArrayBsearch( massiv, value,WHOLE_ARRAY, 0, MODE_ASCEND)の 実行を 想像していたとおりです。
ヒント:配列の1次元目で最初に見つかった要素のインデックスを返します。
配列中に指定した値を持つ要素が 存在しない場合、この関数は、指定した値に最も近い要素のインデックスを返します。
-最後のティック値(Bid-0.86084)と等しい 値を取得します。
-この関数は,配列の値を小さい方から大きい方へと辿っていきます.
- つまり、0 .820864(first), 0.81074,0.85375,0.80084,0.81084,0.86088(last) つまり、 0.86084 より小さい値に最も近い のは 0.85375 となるわけです。0.85375から 0.86088の 間が 求める値=0.86084 です。
=====================================================================================================
関数printのパラメータは、要素 massiv[S]の値以外に massiv[S-1]とmassiv[S+1]があります。 massiv[S] (0.85375) からまず1を引き、次に1を足すということです。
ヘッダで(あるいは ArrayBsearch()で)arrayiv[S]の値からまず1を引き、次に1を足すというのは読んだことがないのですが、どうでしょうか?
この点について、ご説明いただくか、リンクを貼っていただければ幸いです。
ありがとうございます。
関数printには もう一つパラメータが あり、massiv[S-1]とmassiv[S+1]です。 massiv[S]( 0.85375) の値から1を引き、その後に1を足したいのですが、どうすればよいでしょうか?
ヘッダー(または ArrayBsearch())が最初にmassiv[S]の値から1を引き、それに1を足すかどうかは、どのMQL教科書でも読んだことがありません。
この点について、ご説明いただくか、リンクを貼っていただければ幸いです。
ありがとうございます。
このリンク先で印刷する。
http://clip2net.com/s/4MRjJe
ということに気づきました。
- massiv[0]の値(おそらく[S])は、そもそも配列の最初の値
- massiv[1]の値(おそらく[S+1])は,配列の2番目の値,つまり配列の先頭の値に続く値です。
-これらの値は、PRINTが 発生するたびに繰り返されます。
=============================================
- 2000年当時は、ドットの後にさらに4桁の値がついていました。
- チャート上のテスターで-5桁
-結果のテスターで- 5つのサイン
-テスター内のログ プリンター内のログ - 4文字
そして、配列の中に5桁の数字が入っているんです。
QUESTION - ソフトウェアは何桁まで読み取れるのか?
このリンク先で印刷する。
https://www.mql5.com/go?link=http://clip2net.com/s/4MRjJe
何も見えないのか?
ArrayBsearch()はどこでも(要素のインデックスとして)0を返すんですね。配列の0番目のセルには、1.0408という数字があります。コードに戻ろう。
ここで、得られた変数の値をこの条件に代入する(カリテBidは0.8~0.9の範囲にあるので、この範囲の最大値-0.9を取ることにしよう)。if (0.9000 - 1.0408 <= 0) OrderSend().条件を満たしているRIGHT!!!配列の完成に誤りがないかを確認する。おそらく、ArrayBsearch()関数のこの句に注意を払わなかったのでしょう。
注)バイナリサーチはソートされた配列しか扱えません。ArraySort() 関数は、数値配列の並べ替えに使用します。
P.S. プリントは画像で提供するのではなく、ターミナルウィンドウでプリントの数行(10-20行で十分)を同時に選択し(やり方がわからなければSHIFTを使って)、選択した行をSRCボタンを使ってコードとして投稿にコピー&ペーストすることが望ましいです。
追伸:明らかな構文エラーに気づきました。この行は、start()関数の外側(前)に配置されるべきです。
#include <MASSIV.mqh>
ということに気づきました。
-テスター内のログ プリンター内の ログ 4文字
ドキュメントを読む https://docs.mql4.com/ru/common/print
Print()に配列を渡すことはできません。配列は、要素ごとに印刷する必要があります。
double 型のデータは、ポイントの後に小数点以下4桁を印字します。よ り正確な値を得るには、DoubleToStr() 関数を使用する必要があります。
何も見てないのか?
ArrayBsearch()はどこでも(要素のインデックスとして)0を返すんですね。配列の0番目のセルには、1.0408という数字があります。コードの話に戻ります。
ここで、得られた変数の値をこの条件に代入する(カリテBidは0.8〜0.9の範囲にあるので、この範囲の最大値-0.9を取ることにしよう)。if (0.9000 - 1.0408 <= 0) OrderSend().条件を満たしているRIGHT!!!配列の完成に誤りがないかを確認する。おそらく、ArrayBsearch()関数のこの句に注意を払わなかったのでしょう。
注)バイナリサーチはソートされた配列しか扱えません。ArraySort() 関数は、数値配列の並べ替えに使用します。