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

 

こんにちは。

バッチファイルでMT4を動かしたいのですが、どうすればいいですか?

どうすればいいのか、なぜ私のコードが動かないのか、教えてください。

SET MY_PATH=C:\"Program Files (x86)"
%MY_PATH%\001\terminal.exe
TIMEOUT /T 160
%MY_PATH%\002\terminal.exe
TIMEOUT /T 160
%MY_PATH%\003\terminal.exe
TIMEOUT /T 160
%MY_PATH%\004\terminal.exe
TIMEOUT /T 160
%MY_PATH%\005\terminal.exe
TIMEOUT /T 160
%MY_PATH%\006\terminal.exe
TIMEOUT /T 160
%MY_PATH%\007\terminal.exe
TIMEOUT /T 160
%MY_PATH%\008\terminal.exe
TIMEOUT /T 160
%MY_PATH%\009\terminal.exe
TIMEOUT /T 160
%MY_PATH%\010\terminal.exe
TIMEOUT /T 160
%MY_PATH%\011\terminal.exe
TIMEOUT /T 160
%MY_PATH%\012\terminal.exe
TIMEOUT /T 160

せいぜいMT4が数台動く程度で、あとはハングアップしてしまう。

もちろん、RAMが不足することはありません。

その上、別のPCで試したところ

 
Igor Zakharov:

いいえ、そんなことはありません。

ちなみに、サーバーの時間は土曜日に止まるわけではありません。 例えば、市場概要で1つのシンボルしか開いていない場合(テスター上だけでなく、現実にも)、5秒間刻みがありません - この間、サーバータイムのタイマーは動きません。これは土曜日にも当てはまります:サーバータイムは動いていますが、刻みがないため、ターミナルはそれを知りません。

すでに確認済みです。テスターでは、TimeLocalは 週末に動作し、TimeTradeServerも 動作しますが、TimeCurrentは もちろん動作しません。刻みはありませんが、サーバーの時刻はそのままです。

int OnInit()
{
  Print(__FUNCTION__," TimeCurrent     ",TimeCurrent());
  Print(__FUNCTION__," TimeLocal       ",TimeLocal());
  Print(__FUNCTION__," TimeTradeServer ",TimeTradeServer());

    EventSetTimer(3*3600);
 return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnTimer()
{
  Print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
  Print(__FUNCTION__," TimeCurrent     ",TimeCurrent());
  Print(__FUNCTION__," TimeLocal       ",TimeLocal());
  Print(__FUNCTION__," TimeTradeServer ",TimeTradeServer());
}
 
Igor Zakharov:

https://www.mql5.com/ru/forum/328008/page2#comment_14166682

いつものように自転車。

ここで問題になるのは、なぜそれが通らないのかということです。
結局、パラメータからの変数は、初期値を持っています。

void MxResize(int row=1, int col=1)
{
   int A[row][col];    
      
}

また、寸法を数字で指定した場合

void MxSize(int row=1, int col=1)
{
   int A[1][1];    
      
}

コンパイラがスキップしてしまうのですが、何かコツがあるのでしょうか?

開発者からコメントはありますか?

 
Andrey Khatimlianskii:

何のために?週末に自動最適化を実行するには?それならOnTickから数分離れたところにタイマーを設定 すればうまくいくでしょう。うまくいけば、ティックが止まっているので、最適化することができます。

他の目的の場合は、それを策定する。

いいえ、他の目的ではありません。

TimeLocalが週末に機能するとは思わなかったので、こうしてみました:TimeCurrentに数時間追加して曜日を確認しました。もし土曜日なら、最適化を開始する。

もちろん、金曜日や祝日は市場の閉まり方が違うので、土曜日の始まりは断言できませんが。

また、マーケットが閉じているかどうかを判断する手段がどこにもありません。

 
Petros Shatakhtsyan:

いいえ、それ以外の目的ではありません。

TimeLocalが週末に機能するとは思わなかったので、こうしてみました:TimeCurrentに数時間追加して、曜日をチェックしました。もし土曜日なら、最適化を開始する。

もちろん、金曜日や祝日は市場の閉まり方が違うので、土曜日の始まりは断言できませんが。

また、マーケットが閉じているかどうかを判断する手段がどこにもありません。

試してみましたか?

SymbolInfoSessionTrade

または

SymbolInfoInteger(SYMBOL_TRADE_MODE)

何か良いものがあるはず

 
Aleksey Mavrin:

試してみましたか?

SymbolInfoSessionTrade

または

SymbolInfoInteger(SYMBOL_TRADE_MODE)

どちらかが良いはずだ、と記憶しています。

いいえ、していません。マニュアルには、マーケットが開いているかどうかを判断する方法は明記されていません。

月曜日にマーケットが「オープン」すると、例えばあるブローカーでは、02:05に相場が入り始めますが、数分間は取引が受け付けられず、「マーケットクローズ」と表示されるということです。

これが役に立つかどうかはわからない。

シンボル開始時刻

商品の開始日(通常、先物に使用されます。)

 
Petros Shatakhtsyan:

いいえ、していません。このガイドには、市場が開いているかどうかを判断する方法は特に書かれていません。

月曜日にマーケットが「オープン」すると、例えばあるブローカーでは02h.05に相場が入り始めますが、さらに数分間は取引が受け入れられず、「マーケットクローズ」と表示されることです。

これが役に立つかどうかはわからない。

シンボル開始時刻

これは、symbol_start_time(通常、先物に使用される)です。

SymbolInfoSessionTradeは 取引の開始を、SymbolInfoSessionQuoteは 気配値の到着を示します。

ap:これは役に立つはずです。

boolIsTradeAllowed()
const string symbol// シンボル
datetimetested_time//時刻
);

Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
  • www.mql5.com
Получение рыночной информации / SymbolInfoSessionQuote - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Roman:

いつものように自転車。

ここで問題になるのは、なぜそのようなエントリーが通らないのかということです。
パラメータからすべての変数に初期値が設定された後。

また、寸法を数字で指定した場合

を実行すると、コンパイラがそれをスキップしてしまいますが、何か?

開発元からコメントはありますか?

ローマン、君がドキュメントを 読もうとしない初歩的なことに引っかかるのはこれで2度目だ。

配列のインデックスには整数 値のみを 指定することができます。4次元以上の配列は許されない。配列の要素番号は0から始まります。1次元配列の最後の要素には,配列サイズより1小さい番号が振られます.つまり,50個の整数からなる配列の最後の要素にアクセスすると,a[49]のように表示されます.多次元配列の場合も同様で、1次元は0から次元数-1までのインデックスを持つ。例の2次元配列の最後の要素は、m[6][49]のようになります。

静的配列は時系列に表現できない。すなわち、配列の終端から始端までの配列要素へのアクセスを設定するArraySetAsSeries() 関数は、静的配列に適用できない。時系列の ような配列へのアクセスを提供したい場合は、動的配列オブジェクトを 使用します。

配列外にアクセスした場合、実行サブシステムはクリティカルエラーを発生させ、プログラムの実行を停止します。

また、記憶が正しければ、mql4のドキュメントには、変数を配列のサイズとして使ってはいけないと明記されていました。

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные должны быть объявлены перед их использованием. Для идентификации переменных используются уникальные имена. Описания переменных используются для их определения и объявления типов. Описание не является оператором. Индексом массива может быть только целое число. Допускаются не более чем четырехмерные массивы. Нумерация элементов...
 
Roman:

いつものように自転車。

ここで問題になるのは、なぜこのようなエントリーがうまくいかないのかということです。
結局のところ、パラメータから変数、初期値を持つ。

また、寸法を数字で指定した場合

すると、コンパイラはそれをスキップしてしまうのですが、何かコツがあるのでしょうか?

開発者からコメントはありますか?

開発者ではありませんが、コメントさせていただきます。

静的配列の 場合、コンパイラはコンパイル時にすでに一定数のバイトをメモリ上に確保しなければならない。

コンパイル時にrowとcolがわからない場合、コンパイラが確保しなければならないメモリはどれくらいですか?

呼び出し時にパラメータが省略された場合のみ、初期値が使用される。実際のパラメータは、実行時にしかわからない。

だから、小細工はせず、言葉を覚える。

 
Aleksey Mavrin:

いいえ、そうではありません。SymbolInfoSessionTradeは 取引があるとき、SymbolInfoSessionQuoteは 相場が来たときに表示 されます。

ap:これは役に立つはずです。

boolIsTradeAllowed()
const string symbol// シンボル
datetimetested_time//時刻
);

それはないと思います。ここに特別なトピックがあります :https://www.mql5.com/ru/forum/40295

特にMQL4用なので、最後まで見ませんでした。

マーケットが閉じているときは、サーバーはシンボルクォートを送信すべきでは ないと思います。

私のロボットは、マーケットが「オープン」した後、ティックが入ってくると、トレンドやその反転を分析し、それには時間がかかるので、あまり影響を受けません。この間、マーケットがオープンします。

しかし、この時間帯に手動で取引を行いたい場合には、邪魔になるのです。成行執行の場合は、マーケットが開くまで保留となり、当然ながら現在の価格で執行されます。

シンボル名を受け取り、true/false(市場のオープン/クローズ)を返す直接関数が明らかに欠落しています。

Как правильно выяснить, что рынок закрыт? (mql4)
Как правильно выяснить, что рынок закрыт? (mql4)
  • 2015.01.31
  • www.mql5.com
Перевел советника в режим работы OnTimer() теперь когда рынок закрыт он этого не понимает и пытается торговать, в общем обращается к серверу и естественно получает ошибки и забивает логи журнала.