エラー、バグ、質問 - ページ 1786

 
fxsaber:
OnCalculateをOnTickに置き換えた場合、エラーは発生しません。問題はSymbolInfoTickではなく、インジケータがスキップなしを適切に設定できていないことです。
測定はどのくらいやっていたのですか?それと、インジケーターチューニングは どう関係があるのでしょうか?現在のティックの到着時刻は10、前のティックの到着時刻は11です。現在値を返さない関数にエラーがあります。現在の時間値が以前の時間値より小さくなることはありえないということに同意するのですね?
 
Alexey Kozitsyn:
測定にはどれくらいの時間がかかりましたか?それと、指標の設定 とはどういう関係があるのでしょうか?現在のティックの到着時刻は10、前のティックの到着時刻は11です。これは、現在値を返さない関数のエラーです。現在の時間値が以前の時間値より小さくなることはありえないということに同意するのですね?

SymbolInfoTick は、インジケータと EA で異なる動作をします。

インジケータでは、常にOnCalculateの呼び出しの開始点であったティックを返します。そして、インジケーターのこのイニシエーター・ティックを省略してはならない、これが開発者の思想です。問題は、このダニの行列の形成にある。

EAでは、OnTickのSymbolInfoTickは、OnTickの呼び出しを開始したティックを返すのではなく、現在の状態を完全に要求するものである。

Siで10分計測。

 
fxsaber:

SymbolInfoTick は、インジケータと EA で異なる動作をします。

インジケータでは、常にOnCalculateの呼び出しの開始点であったティックを返します。そして、インジケーターのこのイニシエーター・ティックを省略してはならない、これが開発者の思想です。問題は、このダニの行列の形成にある。

Expert Advisor では、OnTick の SymbolInfoTick は、OnTick の呼び出しを開始したティックを返さず、現在の状態を完全に要求します。

つまり、ティックキューが斜めになっているのです。いずれにせよ、指標となる仕事を整理する必要があります。Expert Advisorと連携するための関数のテストに主眼が置かれているようです。これが最初の1枚です。次に、SymbolInfoTick() が同期関数であることは間違いないでしょうか?第三に、SymbolInfoTick()がOKでも、CopyTicks()よりも実際の値を多く返すことが多いので、やはりCopyTicks()の方がうまくいくのです。とにかく、さっきも言ったようにティックではエラーが多いんです。そして、開発者は黙っている...。
 
fxsaber:

Siで10分計測。

それはとても少ないですね。数時間測定する。いくつかの楽器で。
 
Alexey Kozitsyn:
第三に、たとえSymbolInfoTick()がOKでも、CopyTicks()よりもよく機能し、より最新の値が返されることが多いからです。
LATERを呼び出したSymbolInfoTickよりも CopyTicksの方が新しいデータを返すという状況を捉えました。そのため、2つの関数で同時にクエリを作成し、その中から最新のティックを選択するようにしています。
 
fxsaber:
LATERと呼ばれるSymbolInfoTickよりもCopyTicksの方が新しいデータを与える状況を捕捉しました。そのため、一度に2つの関数でクエリを作成し、その中から最新のティックを選択するようにしています。
SymbolInfoTick() を最初に呼び、その後CopyTicks()を呼び出すことでテストしました。いずれにせよ、この動作は正しく、何も変える必要はないとお考えでしょうか。
 
fxsaber:

SymbolInfoTick は、インジケータと EA で異なる動作をします。

インジケータでは、常にOnCalculateの呼び出しの開始点であったティックを返します。そして、インジケーターのこのイニシエーター・ティックを省略してはならない、これが開発者の思想です。問題は、このダニの行列の形成にある。

Expert Advisor では、OnTick の SymbolInfoTick は、OnTick の呼び出しを開始したティックを返さず、現在の状態を完全に要求します。

ならば、それを補完するのが筋というものでしょう。

OnCalculate( ..., const MqlTick& tick );

特にお金がかからないので、原因となったダニと一緒に。

また、SymbolInfoTick()関数は IndicatorとExpert Advisorに完全に実装されるべきです(OnCalculateの 呼び出しの瞬間の価格ではなく、現在の価格を返します

 

MT4は予測不可能で驚かされ続けている ))取引機能の実装は誰が書いているのですか?MT4ビルド1045

まずはユーモラスな情報から。ザドルノフに送るべきですね。彼はいつも愚かなアメリカ人について話していますからね。

シンボリックトレードティック値

SYMBOL_TRADE_TICK_VALUE_PROFIT

二重

シンボル・トレード・チック・バリュー・プロフィット

非対応

二重

シンボル・トレード・チック・バリュー・ロス

非対応

二重


一方、SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE, tickValue)は値を生成する。しかし!!!!!!!チャート上にインジケータを投げると、起動時にOKになります。また、ターミナルを再起動すると、この関数は最初の呼び出しでtrueを返してtickValueがゼロになります!エキスパートアドバイザー開発者の皆さん、気を抜かずに、全ては自分の手で確認しなければなりません。

//переводит котировку в цену/1_лот в валюте депозита, например 0.00015 для EURUSD будет равно $15/лот
bool Quote2Price(double diff,double &price4lot,string symbol="EURUSD")
  {
   int dig=(int)MarketInfo(symbol,MODE_DIGITS);
   if(dig == 0)
      return(false); // symbol is none
   double tickSize = MarketInfo(symbol, MODE_TICKSIZE);   // пункт в валюте котировки (0,00001 для EURUSD на 5-знаке)
   //double tickValue = MarketInfo(symbol, MODE_TICKVALUE); // пункт в валюте депозита ($1 для EURUSD на 5-знаке)
   double tickValue;
   if(!SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE, tickValue)) // пункт в валюте депозита ($1 для EURUSD на 5-знаке)
      Print(__FUNCTION__, "  SymbolInfoDouble(...) returns false"); // всегда возвращается true!!
   Print("tickSize= ", tickSize, "  tickValue= ", tickValue);
   if(tickValue == 0.0) // исключений нет, терминал врет, надо тупо везде проверять на деление на ноль...
      return false;
   double price=diff/(tickSize/tickValue); // а то завалимся c  tickValue == 0
   price4lot=NormalizeDouble(price,2);
   return (true);
  }

退出する。

2017.02.07 16:08:25.332 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 1.0

2017.02.07 16:08:25.332 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 1.0

2017.02.07 16:08:24.515 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 0.0です。

2017.02.07 16:08:23.037 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 0.0です。

2017.02.07 16:08:23.037 ShowImportantParams EURUSD.e,M15: 初期化されました。

2017.02.07 16:08:23.002 カスタム インジケータ ShowImportantParams EURUSD.e,M15: ロードに成功しました。


 
A100:

それなら、補足するのが筋だろう

OnCalculate( ..., const MqlTick& tick );

特にコストがかからないので、それを呼び出したダニで

また、SymbolInfoTick()関数は IndicatorとExpert Advisorで完全に機能する必要があります(OnCalculate 呼び出しの瞬間の価格ではなく、現在の価格を返す

現在のキューにあるティックの数を追加することも論理的に可能でしょう。
 
fxsaber:
現在のキューにティックナンバーを追加することにさえ意味があるのです。
なぜティックナンバーが必要なのですか?正しく与えられ、正しく受け取れる、正しい流れがあればいいのです。