サービス , MT5アーキテックの新機能, MT4の葬式はすぐそこです。 - ページ 5

 
Petros Shatakhtsyan:


面白いことに、昨日はMarketBookAddとOnBookEventの機能を使って多通貨のEAを作りたかったのです。

しかし、なぜかテスターのMarketBookAddが効かない。エラー4901-Theprice stackcannot be addedが 表示される。

でも、リアルタイムでしか動かない...。
 
Alexey Kozitsyn:
リアルタイムでしか使えない


そして、価格を積み上げる 必要はなく、こんなシンプルな機能があればいい。

1. Market Watchの内容をクリアする。

2.そこに希望の文字を追加する(これは利用可能です)

3.関数やイベントを使用して、各シンボルからマーケットウォッチに表示されているすべてのティックを受信するか、マルチティック関数と一緒にOptiScopeを作成します。

 
Petros Shatakhtsyan:


そして、値段の積み重ねは 必要なく、そんなシンプルな可能性を持っていることです。

1. Market Watchの内容をクリアする。

2.そこに希望の文字を追加する(これは利用可能です)

3.関数またはイベントを使用して、各シンボルから Market Watch に表示されているすべてのティックを受信するか、または MultiTick 機能と一緒に Optiсk を作成します。

Market Watchやティックと連携するならば、Depth of Marketを貫こうと思った理由がよくわからないのですが?
 
Alexey Kozitsyn:
マーケットオーバービューとティックで作業したいのに、なぜプライススタックを経由することにしたのかがよくわからないのですが?

また、マーケット概況に表示される、あるいは追加されるすべての相場のデータをどこから入手するのでしょうか。
 
Petros Shatakhtsyan:

また、マーケット概況に表示される、あるいは追加されるすべての相場のデータをどこから入手するのでしょうか。
あの...OnTimer()、OnTick()、OnCalculate()...
 
Petros Shatakhtsyan:

また、マーケット概況に表示される、あるいは追加されるすべての相場のデータをどこから入手するのでしょうか。

MqlTick tickEUR;
MqlTick tickGBP;
MqlTick tickEURGBP;

GetSymbolByName(string symbol)   {    string symbol_name="";   // Имя символа на сервере //--- Если передали пустую строку, вернем пустую строку    if(symbol=="")       return(""); //--- Пройтись по списку всех символов на сервере    for(int s=0; s<SymbolsTotal(false); s++)      {       //--- Получим имя символа       symbol_name=SymbolName(s,false);       //--- Если искомый символ есть на сервере       if(symbol==symbol_name)         {          //--- Выберем его в окне "Обзор рынка"          SymbolSelect(symbol,true);          //--- Вернем имя символа          return(symbol);         }      } //--- Если искомого символа нет, вернем пустую строку    Print("Символ "+symbol+" не найден на сервере!");    return("");   } int OnInit()   { //---    GetSymbolByName("EURUSD"+SymbolSuffix);    GetSymbolByName("GBPUSD"+SymbolSuffix);    GetSymbolByName("EURGBP"+SymbolSuffix); }

void OnTimer() // или OnTick   {       if(!SymbolInfoTick("EURUSD"+SymbolSuffix,tickEUR)) {Print("EURUSD price has not been received"); return;}    if(!SymbolInfoTick("GBPUSD"+SymbolSuffix,tickGBP)) {Print("GBPUSD price has not been received"); return;}    if(!SymbolInfoTick("EURGBP"+SymbolSuffix,tickEURGBP)) {Print("EURGBP price has not been received"); return;} if(tickEUR.ask!=0 && tickEUR.bid!=0) {} // ну и все в этом духе }

 
Maxim Dmitrievsky:

よくもまあ、これだけ書き込みが多いのに、神妙な面持ちでいるものだ。
何か役に立つことを提供する人は、背中に矢が突き刺さっていることで見分けることができるのです。新しいことをすると、必ず敵対的な反応が返ってくる。特に、hrenfxからコピーしたアービトラージアドバイザーを売って儲けている人は、この証券会社の反対で、市場で直接使用することは不可能だからです。
 
Maxim Dmitrievsky:


タイマーでミリ秒を使うにしても、EAが毎ティック 処理するのは非効率的です。

市場概要から直接すべてのティックを取得する簡単な方法が必要です。

EAが立っているところに次のティックが来たときのみ動作するため、スルーオプティックは不可能です。

 
Petros Shatakhtsyan:

やはりタイマーでやるしかないでしょう。タイマーは、最後のティックが前のティックと同じである場合、要求を行わないようにするアルゴリズムが必要なだけです。

BookEventはここでは役に立ちません。

 
Alexey Kozitsyn:

やはりタイマーでやるしかないでしょう。タイマーは、最後のティックが前のティックと同じである場合、要求を行わないようにするアルゴリズムが必要なだけです。

BookEventはここでは役に立ちません。


でも、VC++ではタイマーは1つだけなので、タイマーチェックがたくさんあると、ティック数が減って、すべてがドロドロになるかもしれません。

理由: