カスタムシンボル。エラー、バグ、質問、提案。 - ページ 33

 
RusPro #:

あなたのテストを試してみましたが、全く同じで、数秒の遅れがありました。

Instrument Silv-12.21. MICEX, ブローカーBCS.でも、そんなことはどうでもいいと思うんです。

しかし、あなたのケースでは、チャートが入札に基づいていない構築されている、またはブローカーが異なる見積もりと取引の流れを持っている可能性があります(ただし、取引所で - 可能性は低いです)。

ここでの話題は、カスタム楽器についてです。

 
Andrey Khatimlianskii #:

普通の道具の話ではなく、カスタマの話をしたんです。定義によれば、それらに関するすべての情報は端末で利用可能であり、何もサーバーに行く必要はありません。

もしかしたら、サーバーの時間要求か何か、無意味なものがあるのかもしれません。一般的には、失策といえるでしょう。また、物理的な接続がない状態でテストを開始すると、どうなるのでしょうか?気になるけど、テストするものがない。

 

みなさんこんにちは!
なぜかカスタムシンボルに ストーリーがコピーされない。コードは最もシンプルなものです。エラーは出ないのですが、カスタムシンボルに引用符がないのです。

私はただ、1時間オフセットの実相場をカスタムシンボルに転送したいだけなのです。

結果が空なのはなぜか、教えてください。
ありがとうございます。


int OnInit()
  {
   
   string Sym1 = "EURUSD"; /// источник
   string Sym2 = "EURUSD2";   /// приемник
   int HBack = 1;   /// количество часов сдвига
   datetime tc = StringToTime(TimeCurrent());   /// конец участка
   datetime sht = tc - HBack * 60 * 60;
   datetime sht2 = tc - 2 * HBack * 60 * 60;
   
   MqlRates mrates[];
   
   if( CopyRates(Sym1, PERIOD_M1, sht, tc, mrates) < 0 ){
        
        Alert("Ошибка копирования исторических данных - ошибка:", GetLastError() );
        return(INIT_FAILED);
        
        }
        
   if( CustomRatesReplace(Sym2, sht2, sht, mrates, WHOLE_ARRAY) < 0 ){
      
      Alert("Ошибка вставки исторических данных - ошибка:", GetLastError() );
        return(INIT_FAILED);
        
        }
      
   
   return(INIT_SUCCEEDED);
  }
 

SymbolInfoXXXは iCloseと比較して容赦なく遅れをとって います。

カスタムシンボルの クォート(ティックとバーの両方)を作成し、更新します。

EAで呼び出されるSymbolInfoDoubleとSymbolInfoTickが、このチャート上で動作して、ある瞬間に「ハング」することがわかりました:マーケット概観では相場が変わり、チャートは更新され、iCloseとCopyTicksRangeは実際のデータを取得しますが、SymbolInfoXXXは古い情報を提供します。

解析の過程で、これらの「ハング」を検出するための最も単純なコードにたどり着きましたが、もっと早い段階で、反対側の問題を示しました:SymbolInfoXXXは iCloseに比べて、単に容赦なく遅れている のです肉眼で見ることができます。


そのようなEAをあなたのカストマーチャートで動かしてみてください。

int OnInit(void)
{
        EventSetMillisecondTimer(10);
        return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
        EventKillTimer();
        Comment("");
}

void OnTimer(void)
{
        MqlTick tick;
        SymbolInfoTick( _Symbol, tick );

        Comment( "SymbolInfoInteger( _Symbol, SYMBOL_TIME ) = ", TimeToString( SymbolInfoInteger( _Symbol, SYMBOL_TIME ), TIME_SECONDS ),
                                        "\nSymbolInfoDouble( _Symbol, SYMBOL_BID ) = ", SymbolInfoDouble( _Symbol, SYMBOL_BID ),
                                        "\ntick.time = ", TimeToString( tick.time, TIME_SECONDS ),
                                        "\ntick.bid = ", tick.bid,
                                        "\niClose[0] = ", iClose( _Symbol, PERIOD_CURRENT, 0 ) );
}

(OnTimerはOnTickに変更可能で、効果は同じです)

同様のラグがあるのでしょうか?


 
Andrey Khatimlianskii #:

こんなEAをキャスタウェイチャートで動かしてみてくださいよ。

同じようなブレーキはありますか?

更新されず、Market Watchにティックが表示されないカスタムシンボルでは、ブレーキは感じられない。

 
MOZART09 カスタムシンボルに ストーリーがコピーされない。コードは最もシンプルなものです。

最もシンプルなコードでカスタムシンボルを作成することはできません。タンブリングが多いんです。こちらをご覧ください。

Пользовательские символы: основы применения на практике
Пользовательские символы: основы применения на практике
  • www.mql5.com
Статья посвящена программной генерации пользовательских символов, с помощью которых демонстрируется несколько популярных способов отображения котировок. Предложен вариант малоинвазивной адаптации советников для торговли реальным символом с графика производного пользовательского символа. Исходные коды MQL прилагаются.
 
fxsaber #:

更新されず、Market Watchにティックがないカスタムシンボルでは、ブレーキは感じない。

おそらく、正確には更新(というか、そういうチャートで動いているEAが更新情報を受け取ること)にブレーキがかかっているからではないでしょうか?

 
Andrey Khatimlianskii #:

おそらく、更新(というか、このようなチャート上で動作するEAから更新情報を取得すること)が遅いからではないでしょうか?

更新可能なカスタムシンボルを使用していないので、意識していない。

 

Build 3091、ハングアップした見積書をキャッチ(クリック)。


SymbolInfoDoubleとSymbolInfoTickで返された最後のティックは04:52:07(ビッド61083.19)です。

同時に、より新しいティックが計測器の履歴に残り、チャートとマーケットウォッチが 更新され、iCloseは正しい値を返します。

再現するためのコードがあります。他に修正すべき点はありますか?

 

私は依存性を見つけました - チャートが開かれている(そして、それらを追跡するためにEAがそれぞれ実行されている)楽器のみがフリーズしました。

チャートインストゥルメントを別のもの(同じくcastrum、ただし今のところアクティブではない)に変えると、そこではすべてOKです。凍結された "計測器に戻ったり、その計測器の新しいチャートを開くと、SymbolInfoDouble と SymbolInfoTick はまだ同じ凍結状態のままです。