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

 

hoz:

1. Если эксперт снять с графика тоже поступит команда ТРУ от IsStopped() ?

2.フクロウやスクリプトをチャートから外す時だけ頻繁に発生するのですが、他にこの機能が発動する理由はあるのでしょうか?

3.どこで読むことができますか?

4.そして、関数本体ですでに条件を作成し、その条件が満たされたときに、IsStopped() = trueに なりますよね?

1.はい。

2.チャートをはずすことしか知らない。

3.わからない

4.はい、できますし、うまくいきます。

 
4.?
 
tara:
4.?

?
 
tara:
4.?

私は質問を誤解していたようです。自分でIsStopped()=trueに すると、できなくなるんです。
 
hoz:

?

二次三次関数として想像もつかないので、実装を見せてください。
 
Integer:

私は質問を誤解していたようです。自分でIsStopped()=trueにすると、できなくなる。

以上です。疑問が解消される。
 
Integer:

私は質問を誤解していたようです。自分でIsStopped()=trueにすると、無理です。


それは理解できる。自分でやったつもりはないんですけどね。実際、ループ内で何かが実行されると、Expert Advisorやスクリプトがチャートから削除されるまで実行され、それに応じて、その時点でサーバーにコマンドが送信されることになるのです。

IsStoped() = true;

TarasByさんが 書かれた関数を開いてみました(私のは自分で書いていますが、面白いアプローチなので定期的に調べています)。そこで、彼はそのような機能を持っているのです。

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Запускаем в цикл получение рыночной цены.                                  |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double fGet_TradePrice (int fi_Price,           // Цена: 0 - Bid; 1 - Ask
                        bool fb_RealTrade,      // реальная торговля или оптимизация\тестирование
                        string fs_Symbol = "")  // валютная пара
{
    double ld_Price = 0.0;
//----
    if (fs_Symbol == "")
    {
       fs_Symbol = Symbol();
    }
    //RefreshRates();
    switch (fi_Price)
    {
       case 0:
          if (fb_RealTrade)
          {
             while (ld_Price == 0.0)
             {
                if (fs_Symbol == Symbol())
                {
                   ld_Price = Bid;
                }
                else
                {
                   ld_Price = MarketInfo (fs_Symbol, MODE_BID);
                }
                if (!IsExpertEnabled() || IsStopped())
                {
                   break;
                }
                Sleep (50);
                RefreshRates();
             }
          }
          else
          {
             if (fs_Symbol == Symbol())
             {
                return (Bid);
             }
             else
             {
                return (MarketInfo (fs_Symbol, MODE_BID));
             }
          }
          break;
       case 1:
          if (fb_RealTrade)
          {
             while (ld_Price == 0.0)
             {
                if (fs_Symbol == Symbol())
                {
                   ld_Price = Ask;
                }
                else
                {
                   ld_Price = MarketInfo (fs_Symbol, MODE_ASK);
                }
                if (!IsExpertEnabled() || IsStopped())
                {
                   break;
                }
                Sleep (50);
                RefreshRates();
             }
          }
          else
          {
             if (fs_Symbol == Symbol())
             {
                return (Ask);
             }
             else
             {
                return (MarketInfo (fs_Symbol, MODE_ASK));
             }
          }
          break;
   }
//----
   return (ld_Price);
}

なぜ条件があるのでしょうね。

if (!IsExpertEnabled() || IsStopped())

一気にBIDを取得し、IsStopped()、IsExpertEnabled()関数のフラグをチェックします。論理はどこにあるのか?私見ですが、一度に確認し、何か問題があれば機能を終了させる方が楽だと思います。

次に、RefreshRates() コマンドです。最初は市場データがリフレッシュされず、最終的にBID変数のデータが既に届いている場合はリフレッシュされます。私の考え方が間違っているのか、それとも作者の考え方が特殊で、私の考え方と合わないのか、どちらかです。何が言いたいのか?

 
hoz:

TarasByの 書いた関数を開いてみました(私自身は自分で書いていますが、彼のアプローチは面白いので時々覗いています)。だから、彼はそこにそういう機能を持たせている。

なぜ条件があるのでしょうね。

一気にBIDを取得し、IsStopped()、IsExpertEnabled()関数のフラグをチェックします。論理はどこにあるのか?私見ですが、一度に確認し、何か問題があれば機能を終了させる方が楽だと思います。

次に、RefreshRates() コマンドです。最初は市場データがリフレッシュされず、最終的にBID変数のデータが既に届いている場合はリフレッシュされます。私の考え方が間違っているのか、それとも作者の考え方が特殊で、私の考え方と合わないのか、どちらかです。何が言いたいのか?

明日、イゴールさんが答えてくれるかも・・・。

私ならそうします。

switch (fi_Price)
 {
  case 0: return(MarketInfo(fs_Symbol, MODE_BID));
  case 1: return(MarketInfo(fs_Symbol, MODE_ASK));
 }

それ以外は余計なお世話だと私は思います。
 

皆さん、こんにちは。

最後にトリガーされたアラートを参照するようにEAを教えることが可能かどうか教えてください。

 
Zhunko:

明日、イゴールさんが答えてくれるかも・・・。

私ならそうします。

それ以外は余計なお世話だと私は思います。


Vadim、私はあなたが書いたとおりのことをしただろうね。だから質問したんです。もしかしたら、何か見落としているのかもしれないと思いました。今も自分のロジックと他のプログラマーのロジックを観察しています。基本的なロジックに加え、さまざまな要素を考慮する必要があることがわかったからです。