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

 
hoz:
1.まあ、新しいデータが届いたのであれば、これはこれでいいんじゃないでしょうか?
2.そうですね、もちろんバー0からのデータも必要です。MarketInfo()はゼロバーからデータを引っ張ってくる、それだけです。では、なぜ他のものと比較するのか。

3.歴史に穴があっても、現在の計算には影響しない。穴が開いていた当時はインパクトがあったのでしょう。つまり、現在のAskを取得する場合、数本前の価格(形式的な意味ではなく、ある市場変数に関する現在の瞬間に関する意味です、0本目のバーの現在の瞬間に関しては、関数RefreshRates()がトリックを行いますので!)はあまり気になりません。

もちろん、深堀りはしましたが、より良い振る舞いを理解したいと思います。

4.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); // Некорректно! Что функция будет возвращать, если цена равна нулю?
}

あなたの意見では、どこが悪いのでしょうか?

1.データがない場合はともかく、何もわからないのでは?FALSE を返します。どのように評価されるべきか?データがないのか、エラーなのか、それともまだデータがあるのか?
2.1の問題を解決するために、和解する必要があります。
3.力学的なことを考えてないんですね。コンピュータ、端末の電源を入れる。データはすべて入ってきたようです。すべてがゼロバーに収束していく。信号が見つかりました。取引は成立している。すべてのデータが届いていないことが判明した。5分後、1,2,3,4,5の数字が書かれた欠けた棒を手に入れました。信号が消えた。どうすればいいのか?

4.赤でマークしました。スイッチで誤った識別子を選択した場合に起こりうるエラーは、まだ処理されていません。上にどうあるべきかを書きました。

結果を待たずにRefreshRates()を呼び出しても意味がない。長い間故障する可能性があります。

 
皆さん、こんにちは。そんな疑問があります。私は複数の口座で取引をしているので(1つの証券会社に2つ、別の証券会社に1つ)、Best copierを使っています、とても便利です。一つの口座(エクスポーター)で任意のチャートにインストールし、他の口座(インポーター)にコピーすると、同じチャートにこのEAもインストールされます(インポーターで、複数のチャートに置くと、同じ数だけ注文が出ます)。ある証券会社で動作確認をしようと思い、デモ口座を開設したところ、ある素晴らしい瞬間に複数のチャートに自発的に設定され、もちろん注文も多数開設されました。それからあまり気にせず、この証券会社の端末の不具合だと思っていました。その後、上記の口座で長い間取引していましたが、そのようなことはありませんでした。しかし、昨日ちょうどニュースリリースの 時に、ある口座でそのような状況が再び起こりました(別の証券会社のもので、エクスポータをインストールしていないもの)。 6つのチャートでアドバイザーが自動的に配置され、最も興味深いのは、一つのシンボルで16の注文が開かれたことです。なぜそうなるのか、その理由は何なのか。Expert Advisor 自体のデメリットなのか、それとも他の理由なのでしょうか?何か解決する方法はありますか?ありがとうございました。
 
// Зачем этот тормоз без обработки возвращаемого значения?

誰がそんな質問をするのか?
 
hoz:

あなたから見て、どこが悪いのでしょうか?


間違っているのではなく、濁っているのです。

エンディングです。

 if (ld_price != 0)
return (ld_price); 

ld_price = 0 の場合、この関数はそれ自体で 0 を返します。したがって、チェックは不要です。

こちらは故障です。

 if (fs_symbol == Symbol())
         {
             RefreshRates();
             ld_price = Bid;
         }
         else
             ld_price = MarketInfo(fs_symbol, MODE_BID);

また、不要です。MraketInfo()は全てのケースで使用可能です。

最終的に、この関数は(不要なものをすべて取り除けば)純粋なMarketInfo()関数になります。

 

原理的に、理論的に、これらは正しい場所なのです。

RefreshRates();
ld_price = Bid;
RefreshRates();
ld_price = Ask;

RefreshRates() が何を返すかは気にしませんが、Ask と Bid の変数が端末に知られている最新の値であることが重要です。

 

こんにちは。

同じEAでテスターの結果が異なる理由は何ですか?

テスト期間、通貨ペア、時間枠は同じですが、本日得られた結果は以前とは大きく異なり、EAがロングポジションを開くのをやめました。

端末の相場が原因なのか、週末のせいなのかはわかりません。もしかしたら、知識のある方々は、明白な理由に私の目を開かせることができるかもしれませんね。

 
skyjet:

こんにちは。

同じEAでテスターの結果が異なる理由は何ですか?

テスト期間、通貨ペア、時間枠は同じですが、本日得られた結果は以前とは大きく異なり、EAがロングポジションを開くのをやめました。

端末の相場が原因なのか、週末のせいなのかはわかりません。もしかしたら、知識のある方々は、明白な理由に私の目を開かせることができるかもしれませんね。


2つのテストを連続して行った場合でも、非常に顕著に異なることがあります。ブローカーがスプレッドを変更し、異なるスプレッドでテストが行われます。1点でも変われば十分です。

だいぶ前にテストがあったのなら、もしかしたら設定が緩んでいるのかもしれません。

 
Zhunko:

1.もし、データがないのと同時に、これだけのデータがありながら、何もわからないとしたら?FALSE を返します。これはどう解釈したらいいのでしょうか。データがないのか、エラーなのか、データはあるのか。

私はあなたを理解していません。それでは順番に...。RefreshRates() を呼んでも、データが来ない...。でも、データはある。ここにあるのは、混乱です。データが来なければ、データがない、あるいは市場変数が変化していないのでデータが更新されていない...。選択肢は2つしかない。

RefreshRates() を呼び出した後にTRUを返した場合は、データが更新されたことになる。そして、FELSを返した場合、エラーがあるため更新されていないか、データが新しく更新の必要がないため更新されていないかのどちらかです。

したがって、RefreshRates()が データをチェックし、データが新しくない、つまり変化していないものは更新しない、新しければ更新する、というように捉えることができると理解しています。そのため、RefreshRates() が返すフラグにのみ依存することができます。他に選択肢はないのか?

ずん子

2.1の問題を解決するためには、リコンサイルが必要です。

とおっしゃっていましたね。

サーバーからのデータ(MarketInfo())をゼロバーで照合しています。同じになるのを待っている。

まあMarketInfo()はゼロバーからそのまま引っ張っているのですが...。YOUは何を言っているのですか?

ずん子

3.力学的なことを考えないんですね。パソコン、端末の電源を入れた。データはすべて入ってきたようです。すべてがゼロバーに収束していく。信号が見つかりました。取引は成立している。すべてのデータが届いていないことが判明した。5分後、1,2,3,4,5の数字が書かれた欠けた棒を手に入れた。信号が消えた。どうすればいいのか?

改めて更新することにしました。しかし、RefreshRates() を呼び出したときに、データの更新が遅かったらどうでしょうか?つまり、あるマーケットデータで計算し、別のデータで計算する...ということです。では、どうするのか?

ずん子

4.赤色で表示されます。また、スイッチで誤った識別子を選択した場合に起こりうるエラーは処理されません。どのように処理すべきかは上に書いたとおりです。

結果を待たずにRefreshRates()を呼び出しても意味がない。長い間故障する可能性があります。

ふむ、まぁ待っていれば見積もりは変わるかもしれないが...。ここには双方向性があるのでしょうか?

RefreshRates(); // なぜ戻り値処理なしでこのブレーキ なのか?

何度か言及されていますが、まだ具体的なことは書かれていませんね。つまり、この関数が普通に使われているのを見る限り、マーケットデータの変数が使われるコードの前だけで、それだけなんです。本当に考えていないのです。でも、よく考えて、どうすればいいかを考えることにしたんです。こういうやり方が本当に正しいのか、どんな条件下でも通用するのか、確かめること。

では、ヴァディム、この表現はどういう意味なのでしょうか。

"

戻り値を処理せずになぜこのようなブレーキがかかるのか?"

どのように処理されるのですか?上に論理を書いたが、回答がない。かなり正確に、変幻自在に描写しました。

 
Integer:


間違っているのではなく、濁っているのです。

エンディングです。

if (ld_price != 0)
    return (ld_price); 

ld_price = 0 の場合、この関数はそれ自体で 0 を返します。したがって、チェックは不要です。

なぜ、そんなことをするのだろう?この関数が他の値を返すように、elseを追加するだけで、「価格なし」を意味するようになります。理にかなっていると思う。関数を投げるときは、前のロジックのほうを考えていて、最後を気にしなかったんです。それに、0関数が勝手に0を返すのも理解できないし...。
整数


それが内訳です。

if (fs_symbol == Symbol())
{
    RefreshRates();
    ld_price = Bid;
}
else
    ld_price = MarketInfo(fs_symbol, MODE_BID);

また、必要ありません。MraketInfo()は全てのケースで使用可能です。

最終的に、この関数は(不要なものをすべて取り除けば)純粋なMarketInfo()関数になります。


また、MarketInfo(fs_symbol, MODE_ASK)を使用することができるのであれば、(特に購入価格について話しているのであれば)なぜAskするのでしょうか。結局、こうやってAskを参考にすると、今この瞬間の正確さがわからないのでは?
 
Integer:

RefreshRates()関数が何を返すかは問題ではなく、Ask変数とBid変数が端末に知られている最新の値であることが重要なのです。


現実的には、私が理解している限りでは、別のものが必要です。また、ローカル端末用ではなく、ラストアスクとビッドサーバーが必要です。そうだろ?

だから、もっと論理的に正しく整理する方法を一度理解したいと思い、ここで議論を始めたのです。理論的には正しいのですが、実際には......。