初心者の方からの質問 MQL4 MT4 MetaTrader 4 - ページ 102

 
STARIJ:

下から上への縦軸のチャートに価格、右の横軸に時間とバーナンバリングが表示される

ゼロバーとは、現在利用可能な最後のバーのことです。以下のバーは履歴に存在するが、テスターでは利用できない。その後、この小節がカウントされると、テスターは次の小節に行き、これが彼にとってゼロとなる。


つまり、次のバーのOpen価格がテスターに表示されると同時に、null[0]になるというのが正しい理解です。また、現在の[0]バーの500本前に計算するようなインジケーターの場合、テスターでは現在の[0]バーから~2年(D1 500本)前に計算することになりますが...。

このことは、次のような疑問を抱かせる。

現在、インジケータはStart()イベント処理に基づいて います - 古代のバージョンです。iCustom()の各コールでテスト中にインジケータが前の500本のバーで計算されているように感じます、1600のテスターランは1時間半で計算されました。
OnCalculate()イベント処理でインジケータを構築し、次のOnCalculate()までの未計算のバーだけを計算することができます - しかし、現在の時間の実際のデータフローで行うことができます - MQL4 Referenceで理解したとおりです。
テスターでは、iCustom()の各コールで計算されたバーの数が減少します ?

 
MikeZv:

つまり、Open の次のバーの価格がテスターに表示されると、すぐに null[0] になる、というのが正しい理解です。また、現在の[0]バーの500本前から計算を開始するようにインジケータが作られている場合、テスターは現在の[0]バーの2年前(500本D1)から計算を行うことになります...

このことは、次のような疑問を抱かせる。

現在、インジケータはStart()イベント処理に基づいて います - 古代のバージョンです。iCustom()の各コールでテスト中に、あなたが感じるように、インジケータは、過去500のバーで計算され、1600テスターランは、1時間半のために計算されました。
OnCalculate()イベント処理でインジケータを構築し、次のOnCalculate()までの未計算のバーだけを計算することができます - しかし、現在の時間の実際のデータフローで行うことができます - MQL4 Referenceで理解したとおりです。
テスターでは、iCustom()の各コールで計算されたバーの数が減りますが?


インジケータが曲がって書いてあるだけなので遅い、プロに書き換えてもらいたい、そうすれば全履歴を読み取ってくれてとても速い・・・以上。

 
Nikolay Ivanov:


インジケータが曲がって書いてあるだけなので遅い、プロのリライトが必要、そうすれば全編読めてとても速い...以上です。


すでに書き換えられている ...:)

 

古いインジケータ[on Start()]をベースに新しいインジケータ[onCalculate()]を書いたところ、上記のような疑問が生じました。
それらを5年間(期間D1)比較するスクリプトを実行すると、1対1で、すべての値が一致する。
Expert Advisorのテスト 時に、同じICustom()をExpert Advisorにコピーし、ファイルに出力しています。
古いインジケータの値はスクリプトと同じように表示されるが、新しいインジケータの値はすべて異なっている !

Expert Advisor の iCustom() で Start() のインジケータではスクリプトと同じ値が出力されるのに、OnCalculate() のインジケータでは Expert Advisor の出力がスクリプトの出力と異なるのはなぜですか。


 

皆さん、こんにちは。

みんな、これに出くわした人にアドバイスしてくれないかな?

グランドキャピタルなど一部のバイナリーブローカーでは、取引による利益ではなく、口座の残高に対する収入として、収入が発生し、口座から引き落とされます。


トレードの結果を知る方法については、いくつかの代替作業案がありますが、やはり一番正しいのは、貸借対照表の行の値と損益の金額を読むことです。

そこで質問ですが、これを「その場」ではなく、取引履歴全体にわたって行うにはどうしたらよいのでしょうか?つまり、すべてのバランスタイプのレコードに目を通し、コメントと値そのものを読み取るような(MQL4に含まれる)関数に興味があるのです。このような作業に直面するのは、数年来のプログラミングの中で初めてのことです。

 
MikeZv:

古いインジケータ[OnCalculate()]をベースに新しいインジケータ[OnCalculate()]を書きましたが、この問題は上記のようになりました。
5年間(期間D1)、互いに比較するスクリプトを実行したところ、一対一で、すべての値が一致した。
Expert Advisorのテスト 時に、同じICustom()をExpert Advisorにコピーし、ファイルに出力しています。
古いインジケータの値はスクリプトと同じように表示されるが、新しいインジケータの値はすべて異なっている !
Expert AdvisorでStart()時のインジケータのiCustom()がスクリプトと同じ値を出力するのはなぜですか?
また、OnCalculate()のインジケータでは、Expert Advisorの出力がスクリプトの出力と異なるのですか?


当てるのに時間がかかることもある。

私は、間違ったデータ型の 変換、変数名の重複(つまり、古いコードでは、現在予約されている名前が使用されている)-結果として、変数が取得すべき値を取得していないコードをチェックします(まず、OnCalculateで使用されている変数名 - open, high, low, closeなどをチェックしてください)。- 古いコードではよく見かけるかもしれません)。
そして、iCustomに関しては、それは最も単純なバリエーションであり、ここでのエラーは、(上記の理由から)正しく渡されなかったパラメータに関連する可能性が最も高いです。

すべての値を表示するか、デバッグモードで実行し、不一致のある場所を確認します。
 
Artyom Kuraev:

当てるのに時間がかかることもある。

データ型の 変換が正しくない、変数名が重複している(つまり、古いコードでは予約されている名前を使用している)、その結果、変数が取得すべき誤った値を拾っている(まず、OnCalculateで使用する変数名(open, high, low, closeなど)を確認します)、などをチェックします。- 古いコードではよく見かけるかもしれません)。
そして、iCustomに関しては、それは最も単純なバリエーションであり、ここでのエラーは、(再び、上記の理由から)間違って渡されたパラメータに関連する可能性が最も高いです。

すべての値を表示するか、デバッグモードで実行し、不一致の行き先を確認します。
スクリプト内の両指標の出力は同じです。

Expertは、スクリプトからiCustom()とCOOPERATEDラインを持っています。同じパラメータが渡される。

 
MikeZv:

Expertは、スクリプトからiCustom()を持つ行をCOPYします。同じパラメータが渡される。

コピーされることで、エラーが発生する可能性があります。私は、考えられる原因と、最初に確認することを提案しただけです。

2点目は、これはおそらく最も明白な答えですが、インジケータ自体が高値で、ヒストリーに適用した場合はある値を示し、ストラテジーテスターモードで 動作させた場合は別の値を示すということです。一度書いたことがあるのですが、2枚の写真で ご覧 いただけます。

全く主張しているわけではなく、私の経験に基づいた答えになります。もし、私が提案したどの選択肢も適切でないと確信されるのであれば、他の回答を待つか、もっと多くの背景情報を提供してください :)

 
Artyom Kuraev:

皆さん、こんにちは。

みんな、これに出くわした人にアドバイスしてくれないかな?

グランドキャピタルなど一部のバイナリーブローカーでは、取引による利益ではなく、口座の残高の増減による収入として請求し、口座から引き落とします。


トレードの結果を知る方法については、いくつかの代替作業案がありますが、やはり一番正しいのは、貸借対照表の行の値と損益の金額を読むことです。

そこで質問ですが、これを「その場」ではなく、取引履歴全体にわたって行うにはどうしたらよいのでしょうか?つまり、すべてのバランスタイプのレコードに目を通し、コメントと値そのものを読み取るような(MQL4に含まれる)関数に興味があるのです。このような作業に直面するのは、数年来のプログラミングの中で初めてのことです。


#define  OP_BALANCE 6
#define  OP_CREDIT  7

プラス

OrdersHistoryTotal
StringFind(OrderComment(),txt,0)
 
Taras Slobodyanik:

プラス

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

すべてうまくいった!