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) {} // ну и все в этом духе
}
面白いことに、昨日はMarketBookAddとOnBookEventの機能を使って多通貨のEAを作りたかったのです。
しかし、なぜかテスターのMarketBookAddが効かない。エラー4901-Theprice stackcannot be addedが 表示される。
リアルタイムでしか使えない
そして、価格を積み上げる 必要はなく、こんなシンプルな機能があればいい。
1. Market Watchの内容をクリアする。
2.そこに希望の文字を追加する(これは利用可能です)
3.関数やイベントを使用して、各シンボルからマーケットウォッチに表示されているすべてのティックを受信するか、マルチティック関数と一緒にOptiScopeを作成します。
そして、値段の積み重ねは 必要なく、そんなシンプルな可能性を持っていることです。
1. Market Watchの内容をクリアする。
2.そこに希望の文字を追加する(これは利用可能です)
3.関数またはイベントを使用して、各シンボルから Market Watch に表示されているすべてのティックを受信するか、または MultiTick 機能と一緒に Optiсk を作成します。
マーケットオーバービューとティックで作業したいのに、なぜプライススタックを経由することにしたのかがよくわからないのですが?
また、マーケット概況に表示される、あるいは追加されるすべての相場のデータをどこから入手するのでしょうか。
また、マーケット概況に表示される、あるいは追加されるすべての相場のデータをどこから入手するのでしょうか。
また、マーケット概況に表示される、あるいは追加されるすべての相場のデータをどこから入手するのでしょうか。
よくもまあ、これだけ書き込みが多いのに、神妙な面持ちでいるものだ。
タイマーでミリ秒を使うにしても、EAが毎ティック 処理するのは非効率的です。
市場概要から直接すべてのティックを取得する簡単な方法が必要です。
EAが立っているところに次のティックが来たときのみ動作するため、スルーオプティックは不可能です。
やはりタイマーでやるしかないでしょう。タイマーは、最後のティックが前のティックと同じである場合、要求を行わないようにするアルゴリズムが必要なだけです。
BookEventはここでは役に立ちません。
やはりタイマーでやるしかないでしょう。タイマーは、最後のティックが前のティックと同じである場合、要求を行わないようにするアルゴリズムが必要なだけです。
BookEventはここでは役に立ちません。
でも、VC++ではタイマーは1つだけなので、タイマーチェックがたくさんあると、ティック数が減って、すべてがドロドロになるかもしれません。