intCopyBuffer(
int indicator_handle, // handle индикатораint buffer_num, // номер буфера индикатораint start_pos, // откуда начнем int count, // сколько копируемdouble buffer[] // массив, куда будут скопированы данные
);
に変更する必要があります。
intCopyBuffer(
int indicator_handle, // handle индикатора int buffer_num, // номер буфера индикатора datetime start_time, // с какой даты int count, // сколько копируем double buffer[] // массив, куда будут скопированы данные
);
インジケータの準備ができたかどうかを確認する(OnCalculateの 最初で)。
また、Periodチェックを追加することができます。
1.ただ、明確にしておくことがあります。これで、私たちが同じことを話しているのは明らかです。
2.それはわかるが、配列を反転させないとできないのは納得がいかない。2つの端子に対して1つのインジケーターが必要なのでしょうか?2in1を鎌と斧にしたようなものですね。
3.私の理解では、Buffer[]は、関数CopyBuffer() で受信者が1つの指標値だけを取得するために使用します。
4.一番大事なことに目を向けていない。指標値のコピー開始は、バーインデックスではなく、i番目のバーの時刻で判断する必要があります。
1.OKです。
2.私は4からインジケータを書き換えるので、配列を逆にしました - その中ですべてが正常に動作し、すべてのデータが正しいです。その中のすべてが、ループの中で読み込まれる正確な順序でデータを取得することに結び付いている。バッファを反転させないと、インジケータを一から書き直さなければなりませんが、何のために?かなり複雑なんです。この指標を挙げたのは、あくまでネイティブではないCFからデータを取得することがいかに誤りであるかを示す例としてです。
Buffer[]では、ループの繰り返しごとに、AO()から取得した値を1つずつ挿入していきます。
4.コピー開始とはどういう意味ですか?
1.良い
2.配列を反転させているのは、4からインジケータを書き換えて いるためで、その中ではすべてが正しく動作し、すべてのデータが正しい。すべては、ループの中で読み込まれる正確な順序でデータを取得することに結び付いている。バッファを反転させないと、インジケータを一から書き直さなければなりませんが、何のために?かなり複雑なんです。この指標を挙げたのは、あくまでも、非ネイティブのGFからデータを取ることがいかに誤りであるかの例としてです。
Buffer[]には、ループ内に1つずつデータが挿入されます。ループの繰り返しごとに、AO()から取得した値が1つずつ挿入されます。
4.コピー開始とはどういう意味ですか?
2.0からrate_total-1までのループを構築することを妨げるものは何もありません。
3.そう、どこかで勘違いしていたのです。
4.
に変更する必要があります。
"どこから "または "何日から "指示値を受信機配列にコピーする開始点です。
3.そう、どこかで勘違いしていたのです。
4.あなたのコードで
に変更する必要があります。
"Where do we start from" または "from what date" インジケータ値を受信側配列にコピーする作業を開始します。
ループのインデックスから値を読み取るのに、なぜ日付を渡すのですか?このテストインジケータを実行しましたか?AOは常に、設定で指定されたcurrentfactorの1つだけから引き出されます。現在のタイムフレームをどのように切り替えても、AOチャートは常に設定で設定されたものに対応します。
この場合、すべてのデータが返されますが、私が改造しているインジケータでは、非ネイティブの価格からデータが返されないのです。
このテストインジケータは必要ありません - 非ネイティブの電流からのデータはすでに返されています。しかし、私のところではデータは返ってきませんが、同じように取得できています。
ループのインデックスから値を読み取るのに、なぜ日付を渡すのですか?このテストインジケータを実行しましたか?AOは常に1つだけ、つまり設定のsetffからプロットされます。現在のタイムフレームをどのように切り替えても、AOチャートは常に設定で設定されたものに対応します。
この場合、すべてのデータが返されますが、私が改造しているインジケータでは、非ネイティブの価格からデータが返されないのです。
このテストインジケータは必要ありません - 非ネイティブの電流からのデータはすでに返されています。でも、私のはそうじゃなくて、同じようにデータを取得するんです。
なぜなら、ゼロバーのH4には4本のH1バーが含まれているからです。また、期間H1のインデックス2をリクエストすると、期間H4のバー2のインジケータの値が取得されます。
自分が何を書けたのか、ほとんど理解できていない。
現在、13時35分です。現在のH1バーのオープン時間=13:00。バー=1のインデックス、つまり現在のH1期間のバー12:00でインジケータの値をコピーしようとします。しかし、12:00ではなく、8:00の時間帯のH4が表示されます。
H1の場合、最初のバーが12:00
H4の場合、最初のバーは8:00です。
あそこもここも、バーインデックスが先に...。
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
バグ、バグ、質問
fxsaber さん 2017.04.12 08:38
ちょっとだけ、お裾分け。代入演算 子のバイパストレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
ハイタイムフレームからインジケーターデータを取得することができない
アルチョム・トリシキン さん 2017.04.14 01:23
4日前から、標準のAOインジケータのデータをインジケータのシニアタイムフレームから取得しようとしているのですが、やはり無理です...。
ループの中でAOデータを読んでいるのですが、まさにループの中にはヒストリカルデータがありません。現在のバーにはデータがあります。何が問題なのか?私は何を間違えているのだろう?
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
mql5言語の特徴、TipsとTricks
fxsaber さん 2017.02.27 18:40
ご指摘ありがとうございます。荒野ではSymbolInfoMarginRateです。だから、今はこんな感じです。double GetMarginRequired( const string Symb )
{
MqlTick Tick;
double MarginInit, MarginMain;
return((SymbolInfoTick(Symb, Tick) && SymbolInfoMarginRate(Symb, ORDER_TYPE_BUY, MarginInit, MarginMain)) ? MarginInit * Tick.ask *
SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_VALUE) / (SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0);
}
MT5では、方向によって必要な証拠金が大きく異なる可能性があることを明確にしておく必要があります。すなわち、単一のMT4バリアントが機能しない場合があります。もちろん、FXの場合はそうではないでしょう。でも、忘れてはいけないことがあります。したがって、一般的には次のように書けばよいでしょう。
bool MyOrderCalcMargin( const ENUM_ORDER_TYPE action, const string symbol, const double volume, const double price, double &margin )
{
double MarginInit, MarginMain;
const bool Res = SymbolInfoMarginRate(symbol, action, MarginInit, MarginMain);
margin = Res ? MarginInit * price * volume * SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE) /
(SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0;
return(Res);
}
ハイライトは 0を返すことができます。BKSはこれにぶつかった。
このように作りました。
いろいろなことを "勘違い "しているのではないでしょうか。ステップバイステップ、ポイントバイポイントで、必要なことを記述してください。
具体的に何が問題なのでしょうか?ネイティブではないタイムフレームからインジケータデータを取得するために、私は何を間違えているのだろうか?という疑問でした。
例:AOのデータはМ5から取得する必要があるのに、インジケーターはМ1で動作している。そのため、limit>1(履歴の再計算が必要)でありながら、M5からのAOはデータエラーがなく0を返します。すべての履歴が計算された(limit=0)時点で、M5を持つAOからのデータが届き始める。