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

 
fxsaber:

16秒前に受信した最後のティックがOrderSendに関連すると見なされないということが起こります。これはやっぱりバグなんでしょうね。

このバグ

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

ライブラリ:MT4Orders

fxsaber さん 2018.07.24 09:46

アプリ内のスクリプトを更新しました。例えばこんな問題を素早く見つけることができます。
2018.07.24 10:24:19.177 Trades  '35247942': market buy 0.01 USDHKD
2018.07.24 10:24:19.246 Trades  '35247942': failed market buy 0.01 USDHKD [No prices]
2018.07.24 10:24:19.246 Trades  '35247942': buy limit 0.01 USDHKD at 7.83618
2018.07.24 10:24:19.315 Trades  '35247942': failed buy limit 0.01 USDHKD at 7.83618 [No prices]
2018.07.24 10:24:19.316 Trades  '35247942': buy stop 0.01 USDHKD at 7.85618
2018.07.24 10:24:19.384 Trades  '35247942': failed buy stop 0.01 USDHKD at 7.85618 [No prices]

このスクリプトは、Market Overviewで全てのシンボルを有効にしてから実行すれば、ForexTimeFXTM-Demo01で1分程度で再現することができます。

 
Ilyas:

これはシステムの制限事項(WinAPI)です。

以下は、あなたのコードを動作させるための正しいフラグです。

おいおい)

Windowsはファイルを開くことができますが、スクリプトは開くことができません。問題は、FILE_SHARE_READ フラグにあります。

 
fxsaber:

FileLoadを修正してください。

投稿ありがとうございました。

FileLoad/FileSave 関数の実装に FILE_FLAG_SHARE_READ | FILE_FLAG_SHARE_WRITE フラグを追加しました。

同じファイルを同時に書き込んだり読み込んだりする場合、同期が正しく行われていないと、読み込んだ結果が不定になってしまうので、注意が必要です。

 
Ilyas:

メッセージをありがとうございました。

FileLoad/FileSave 関数の実装に FILE_FLAG_SHARE_READ | FILE_FLAG_SHARE_WRITE フラグを追加しました。

同じファイルを同時に書き込んだり読み込んだりする場合、同期が正しく行われていないと、読み込んだ結果が不定になってしまうので、注意が必要です。

訂正ありがとうございます。タイミングレーキは影響ないはずです。

 
TheXpert:

おいおい)

問題はFILE_SHARE_READ フラグにある。

https://docs.microsoft.com/en-us/windows/desktop/FileIO/creating-and-opening-files を読むことをお勧めします。

Creating and Opening Files
Creating and Opening Files
  • 2018.05.31
  • Michael Satran
  • docs.microsoft.com
Considerations for creating or opening a file by using the CreateFile function.
 

この事実をどう受け止めるか。

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

バグ、バグ、質問

fxsaber さん 2018.07.23 16:48

このようなフラグがある場合、サードパーティーのアプリケーションは問題なくファイルを読み込むので、明らかにバグである。


そんなファイル。

FILE_READ | FILE_WRITE | FILE_IS_TEXT | FILE_SHARE_READ

FileCloseをせずにTotalCommanderで表示しています。FILE_SHARE_READがないと動作しない。

 
Ilyas:

一読をお勧めします

はい、ちょうど投げ入れようと思っていたところです。

最初のハンドルが書き込み可能な場合、2番目のハンドルはFILE_SHARE_WRITE フラグを追加する必要があります。

が、もう一つ、全く記録のないa100さんのコメントが あります。
 
Ilyas:

オープナーは、ライタが存在するため、読み込みにFILE_SHARE_WRITE(書き込み許可)フラグを使用することができません。

これはシステムの制限事項(WinAPI)です。

以下は、あなたのコードが動作する正しいフラグです。

私もMSDNを読んでいます。マイクロソフトが英語を知らないのか、自分たちのドキュメントを読んでいないのか、それとも最後の選択肢であるMQLのフラグはWinApiと似た名前だが違う方法で機能しているのか、説明してください。

ここから引用 - https://docs.microsoft.com/en-us/windows/desktop/api/FileAPI/nf-fileapi-createfilea

FILE_SHARE_READ -ファイルまたはデバイスに対する後続のオープン操作で読み取りアクセスを要求できるように します。そうでない場合、他のプロセスが読み取りアクセスを要求しても、ファイルまたはデバイスを開く ことはできません。

FILE_SHARE_WRITE -ファイルまたはデバイスのオープン操作で、書き込みアクセスを要求できるように します。そうしないと、他のプロセスが書き込みアクセスを要求しても、ファイルまたはデバイスを開く ことができません。

したがって、最初のプログラムは、2番目のプログラムが読むためにFILE_SHARE_READを設定する必要があるだけです。FILE_SHARE_WRITE は、2番目のプログラムもファイルに書き込むことが分かっている場合にのみ設定する必要があります。

CreateFileA function
CreateFileA function
  • 2018.06.14
  • windows-sdk-content
  • docs.microsoft.com
Creates or opens a file or I/O device. The most commonly used I/O devices are as follows:\_file, file stream, directory, physical disk, volume, console buffer, tape drive, communications resource, mailslot, and pipe.
 

開発者の方に質問です。

同期機能があります。

//+------------------------------------------------------------------+
//| Проверка синхронизации символов                                                                                             |
//+------------------------------------------------------------------+
bool CheckSync()
        {
         //--- Проверка синхронизации символов
         if( !SymbolIsSynchronized( inpSymbol_1 ) )
                {
                 Print( __FUNCTION__,": ОШИБКА #",GetLastError(),": SymbolIsSync("+inpSymbol_1+") = false!" );
                 return( false );
                }
         if( !SymbolIsSynchronized( inpSymbol_2 ) )
                {
                 Print( __FUNCTION__,": ОШИБКА #",GetLastError(),": SymbolIsSync("+inpSymbol_2+") = false!" );
                 return( false );
                }
         //--- Если символы синхронизированы
         return( true );
        }

私はそれで時々このエラーが出ます。

2018.07.24 15:14:27.415 Indicator (USDJPY,M5)   CheckSync: ОШИБКА #4014:  SymbolIsSync(EURGBP) = false!

例えば、USDJPYでインジケータが動作し、EURGBPのシンボルでエラーが発生します。同時にターミナルにはEURGBPのチャートが開かれて います。

エラー4014には、こうあります。

システム関数の呼び出しを許可していない

どうしてでしょう?

 
TheXpert:

はい、ちょうど投げ入れようとしていたところです。

最初のハンドルが書き込み可能な場合、2番目のハンドルはFILE_SHARE_WRITE フラグを追加する必要があります。

が、全く記録のないa100さんのコメントも あります。
私の場合、ServiceDeskは、再生できないと書いています。は、部屋からの助けが必要です...後で私はそれを行う方法を説明します...