[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 403

 
solnce600:
笑顔になるボタン、元気になるボタンとは?

ウリは知らなかったし、ボタンも知らないが、時には尻尾を振ることもある.:)))
 
lottamer:

2時間かけてテストピースを作成し、さまざまな条件をさらに検証しています。

効かない!?

エラーを教えてください。

ポイントは、2pp以降に自分の方向性で注文が開くことです。

は売れ残り...



すべてが論理的に正しいようです唯一の注意点 - すべての変数は、括弧内のものを含め、開始より上に宣言されなければなりません。
 
hoz:


なぜここに条件があるのかが気になるところです。


whileループがあり、原理的に無限ループになる可能性があるため、EAをチャートから外したり、電源を切ったりしやすくする対策がとられています。

ループするよりも、何か問題が起きたら起動を終了させる方が良い。次の刻みで、それを繰り返す。

 
lottamer:

Kimの関数では、timeパラメータ="1970年以降の日付と時刻(秒"

2種類のバリエーションを試しました。

と、どちらも現在の利益ではなく、全歴史の利益を出している......。

現在の日は、現在のD1バーの始まり(iTime(NULL、PERIOD_D1、0))から始まりますが、あなたは簡単な方法を探していないのですか?:)))
 
hoz:

別の関数を書くという理屈がよくわからない。結局、RefreshRates() 関数自体が、定義済み変数のデータを更新する役割を担っている。また、Bidと Askは あらかじめ定義された変数である。RefreshRates() 関数が定義済みの変数を更新するのであれば、なぜ追加の関数を書くのですか?

そこにクセがあるんです。

bool RefreshRates( )

定義済み変数および時系列配列のデータをリフレッシュする。Expert Advisorやスクリプトが長時間計算を行い、データの更新が必要な場合に使用する機能です。データが更新された場合は TRUE、そうでない場合は FALSE を返す。 クライアント端末の 現在の状態に対応するからといって、データが更新されるとは限らない。Expert Advisorとスクリプトは、履歴データの独自のコピーで動作します。現在のシンボルのデータのコピーは、Expert Advisor またはスクリプトの最初の起動時に作成されます。Expert Advisor を次回起動するたびに(スクリプトは一度だけ実行され、受信ティックに依存しないことに留意してください)、最初に作成されたコピーが更新されます。Expert Advisor やスクリプトの実行中に、1 つまたは複数の新しいティックが到着することがあり、データが古くなることがあります。

データも瞬時に更新されるわけではありません。これをコントロールしなければならない。

 
Zhunko:

そこにクセがあるんです。

bool RefreshRates( )

定義済み変数および時系列配列のデータをリフレッシュする。Expert Advisorやスクリプトが長時間計算を行い、データの更新が必要な場合に使用する機能です。データが更新された場合は TRUE、そうでない場合は FALSE を返す。クライアント端末の現在の状態に対応するからといって、データが更新されるとは限らない。E xpert Advisorとスクリプトは、履歴データの独自のコピーで動作します。現在のシンボルのデータのコピーは、Expert Advisor またはスクリプトの最初の起動時に作成されます。Expert Advisor を次回起動するたびに(スクリプトは一度だけ実行され、受信ティックに依存しないことに留意してください)、最初に作成されたコピーが更新されます。Expert Advisor やスクリプトの実行中に、1 つまたは複数の新しいティックが到着することがあり、データが古くなることがあります。

データも瞬時に更新されるわけではありません。これをコントロールしなければならない。


与えられたリファレンスをもとに、ASK価格を出してみましょう。RefreshRates() を実行すると、定義済み変数の 配列のデータが更新されます。ASCの価格が変更された場合、RefreshRates() を実行した後、ASCは新しい 値を取得します。そして、もし そうなった場合。

クライアント端末の現在の状態と一致したからといって、データが更新されるとは限りません。

の場合、ASCの値は変化していません。したがって、前回のASK値は変更されていないため、そのまま計算に使用されます。

結局、RefreshRates()が TRUの値を返せば、それはデータの更新に成功したことを意味するので、確認する必要はないのですそう思いませんか?

 
hoz:


この参考資料をもとに、ASCの価格を出してみましょう。RefreshRates() を実行すると、定義済み変数の配列のデータが更新されます。したがって、ASCの価格が変更された場合、RefreshRates() を実行した後、ASCは新しい 値を取得します。そして、このようになれば

の場合、ASCの値は変化していません。したがって、計算には以前のASK値が使われることになり、それは変化していないためである。

結局、RefreshRates()が TRU値を返せば、データの更新に成功したことになるので、それを確認する必要はないのですそう思いませんか?

いいえ、FALSEを返すこともあり、データは新しくなります。

データが更新されない可能性があるのは、クライアント端末の 現在の状態と一致するからです。

データが新鮮であることを教えてくれる表示を見つけなければならない。タスクによって違うかもしれません。
 
Zhunko:

いいえ、FALSEを返すこともあり、データは新しくなります。

つまり、ドキュメントに明らかなバグがあるのですね。そして、ドキュメントは信用できない?

ずん子:

データが新しいと判断できるような表示を見つけなければならない。タスクによって違うかもしれません。

仮に、ASK価格の話をします。2つの変数があります。

ASC -RefreshRates() 後のアスク 値。

_ASK -Ask last knownの値です。

_____________________________________________________________________________________

何とも言えませんね。このサインは何だろう?2つのバリエーションがあります。

1.定義済み 変数の値が変更された。RefreshRates()は Trueを 返す。

2.定義済み変数の値が変化していない RefreshRates()は Falseを 返す。

反対側に目を向けると、サインを見つけることについて。2つの可能性があります。

1.定義済み変数の値が変更された。すなわち、この場合、Ask = ASC

2.定義済み変数の値が変化していない 。例:アスク=_ASK

変化した値か、変化していない値か、それ以外の選択肢はないのです。じゃあ、どうしたいんですか?

 
hoz:

では、ドキュメントに明らかな誤りがあるのですね。そして、ドキュメントは信用できない?

仮にASK価格の話とします。2つの変数があります。

ASC -RefreshRates() 後のアスク 値。

_ASK -Ask last knownの値です。

_____________________________________________________________________________________

何とも言えませんね。このサインは何だろう?2つの可能性があります。

1.定義済み変数の値が変更された。RefreshRates()は Trueを 返す。

2.定義済み変数の値が変化していない RefreshRates()は Falseを 返す。

反対側に目を向けると、サインを見つけることについて。2つの可能性があります。

1.定義済み変数の値が変更された。すなわち、この場合、Ask = ASC

2.定義済み変数の値が変化していない 。例:アスク=_ASK

変化した値か、変化していない値か、それ以外の選択肢はないのです。では、どのように進めたいのですか?

ドキュメントはすべて揃っています。まさに記述されており、それを指摘したわけです。

データが更新された場合は TRUE を、そうでない場合は FALSE を返す。データが更新されない可能性があるのは、クライアント端末の 現在の状態と一致するからである。

つまり、この関数は新しいデータが受信されたことを言うだけです。

あとはどうしたいのかわからない。サーバーからのデータ(MarketInfo())をゼロバーで確認しています。同じになるまで待ちます。ちなみに、これは近未来の歴史に「穴」がないことを保証するものではありません。1小節、2小節、3小節、あるいは数小節の欠落があっても、ゼロ小節は簡単に存在することになるのです。後から来ることもある。そうでない場合もあります。

 
Zhunko:

つまり、この機能は新しいデータが届いたというだけで、それだけです。

だから、新しいデータが入ってきたら、それはそれで必要なことなんじゃないですか?
Zhunko:

サーバーからのデータ(MarketInfo())とゼロバーを照合しています。同じになるのを待ちます。ちなみに、一番近い歴史に「穴」がないことを保証するものではありません。1小節、2小節、3小節、あるいは数小節の欠落があっても、ゼロ小節は簡単に存在することになるのです。後から来ることもある。そうでない場合もあります。

そうですね、0本目のバーのデータが必要です。MarketInfo()はゼロバーからデータを引っ張ってくる、それだけです。なぜ、他のもので確認する必要があるのでしょうか?
Zhunko:

ちなみに、直近の歴史に「穴」がないことを保証するものではありません。1小節、2小節、3小節、あるいは数小節の欠落があっても、ゼロは容易にあり得る。後から来ることもある。そうでない場合もあります。

履歴に空白があっても、現在の計算には影響しません。穴が開いていた当時はそうだったでしょう。つまり、現在のAskを取得する場合、数本前の価格(形式的な意味ではなく、ある市場変数に関する現在の瞬間に関するもので、関数 RefreshRates() が0本目のバーの現在の瞬間に関して行うため!)はあまり気にならない。

もちろん、深堀りはしていますが、よりよい振る舞いを理解したいのです。

Vadimさんが、私が上記の関数を間違って書いたとおっしゃったので、行を追加 してもう一度複製してみます。

double fGet_TradePrice(int fi_price,       // Цена: 0 - Bid; 1 - Ask
                       string fs_symbol)   // валютная пара
{
   double ld_price = 0.0;
   
   switch (fi_price)
   {
         case 0:
         if (fs_symbol == Symbol())
         {
             RefreshRates();
             ld_price = Bid;
         }
         else
             ld_price = MarketInfo(fs_symbol, MODE_BID);
         
         case 1:
         if (fs_symbol == Symbol())
         {
             RefreshRates();
             ld_price = Ask;
         }
         else
             ld_price = MarketInfo(fs_symbol, MODE_ASK);
   }
   
    if (ld_price != 0)
        return (ld_price);
}

それのどこが悪いとお考えですか?