MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 353

 
tvv:

理解できない。このオプションは、ファイル - \MetaQuotesTerminal⇄Common の場所を示します。このオプションがないと、テスターで生成されたファイルを取得することができません。このオプションがない場合、ファイルはMQL4™Filesで検索され、テスターからのファイルをそこに置くことができなくなります。

私が指摘したのは、この旗がないことです。

 
Alexey Viktorov:

私が指摘したのは、この旗がないことです。

ご苦労様です。ただのタイプミスです。このフラグは知っています。テスターを使わなくても、共有読み込みモードでファイルを開こうとしないなど、問題は解決していません。このファイルがインジケータによって開かれている限り、 - スクリプトはそれを開くことができません。一方、メモ帳は問題なく開く。

 
tvv:

ありがとうございました。ただのタイプミスです。そのフラグは知っています。問題は解決していません。テスターを使わなくても、共有読み込みモードでファイルを開こうとしません。このファイルがインジケータによって開かれている限り、スクリプトはそれを開くことができません。一方、メモ帳は問題なく開く。

FileFlush()で 定期的にデータをディスクに強制送信してみてください。


うーん:もうひとつ、すぐには気づかなかったことがあります。

tvv

ExtHandle=FileOpen(c_symbol+(string)20+".csv",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_READ|FILE_COMMON) とします。
ExtHandleR=FileOpen("EURUSD20.csv",FILE_BIN|FILE_READ|FILE_SHARE_READ) というようにスクリプト内のファイルを開く。
私の間違いをご指摘ください。

と読めるのが不思議です。FILE_CSV フラグがあるはずです。
FileFlush - Файловые операции - Справочник MQL4
FileFlush - Файловые операции - Справочник MQL4
  • docs.mql4.com
При выполнении операции записи в файл физически данные могут оказаться в нем только через некоторое время. Для того чтобы данные сразу же сохранились в файле, нужно использовать функцию FileFlush(). Если не использовать функцию, то часть данных, еще не попавших на диск, принудительно записывается туда только при закрытии файла функцией...
 
Alexey Viktorov:

FileFlush() で定期的にデータをディスクに強制送信してみてください。


ヒント:少し前に気づいたもう一つのこと

と読めるのが不思議です。FILE_CSV フラグがあるはずです。

.CSVはファイルの拡張子で、どんな拡張子でも使えますが、私はメモ帳で調べられるようにこれを選びました。興味深い記事をご紹介します。https://www.mql5.com/ru/articles/2720。私のコードはそこに記述されているルールに準拠していますが、プログラムでファイルを読み込むことができません。拡張子.HSTを持つファイルEURUSD20.HSTの場合 - フラグはFILE.BINでなければならず、MTでそうなるようにします。 4 ファイルはオフラインで開くことができます。

Основы программирования на MQL5: Файлы
Основы программирования на MQL5: Файлы
  • 2016.09.28
  • Dmitry Fedoseev
  • www.mql5.com
Функции для работы с файлами есть почти во всех языках программирования, и MQL5 в этом смысле — не исключение. Хотя при программировании советников и индикаторов на MQL5 работать с использованием файлов приходится не всегда, (а скорее даже — очень редко), но тем не менее, каждый экспертописатель рано или поздно с этим сталкивается. Диапазон...
 
tvv:

.CSVはファイルの拡張子で、何でもいいのですが、私はメモ帳で調べられるように選びました。興味深い記事をご紹介します。https://www.mql5.com/ru/articles/2720。私のコードはそこに記述されているルールに準拠していますが、プログラムでファイルを読み込むことができません。拡張子.HSTを持つファイルEURUSD20.HSTの場合 - フラグはFILE.BINでなければならず、MTでそうなるようにします。 4 ファイルはオフラインで開くことができます。

テスターではなく、通常のチャート(EURUSD M1) - M20 TFを生成するインジケータを走らせてみました。

ファイルを開く には

ExtHandle= FileOpen("EURUSD20.csv",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_READ|FILE_SHARE_READ).

このファイルは、MQL4Filesフォルダに表示されます。次に、EURUSD20.csvの内容をEURUSD20.HSTにコピーするスクリプトを通常のチャート(EURUSD M5)上で実行します。ファイルEURUSD20.HSTは、MQL4と同じディレクトリのhistoryフォルダに生成されます。

スクリプトコードです。

ExtHandleR=FileOpen("EURUSD20.csv",FILE_BIN|FILE_READ|FILE_SHARE_READ) ファイルを読み込んでいます。

ExtHandleW=FileOpenHistory("EURUSD20.hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ);

M1チャートからインジケータを削除したときだけ、すべてがうまくいきます。つまり、ファイル共有の読み込みモードが機能していないんです。

 

こんにちは!ユーロドルのチャートのメタトレーダーの不具合について教えてください。2011年10月9日(日)の日足ロウソクが表示されましたが、時間足チャートではその日の23時台は1時間だけです。これは、時計が冬時間に変更されたためと思われます。どうすれば直るのか?以前はこんなキャンドルはなかった。

 
tvv: M1チャートからインジケータを削除したときだけ、すべてがうまくいきます。つまり、読み込み分割ファイルモードが動作していないのです。

ファイルを書き込むプログラムは、書き込み操作のたびにFileCloseを閉じて、他のプログラムが読み込めるようにファイルを解放しなければならないからである。これは、データが最初にバッファに書き込まれ、しばらくはファイル内に物理的に存在しないためです。ファイルをクローズ すると、バッファがファイルに解放されます。次の書き込みの前に

   // Открытие или создание файла и перемещение указателя в конец
   Файл = FileOpen(ИмяФайла, FILE_CSV | FILE_READ | FILE_WRITE, " "); // еще COMMON  SHARE...
   FileSeek(Файл, 0, SEEK_END);

の末尾に移動する。

 

こんにちは!どちらの式でも得られる点数は同じになるということでよろしいでしょうか?本当に大事なことなんです!

"Цена закрытия последнего закрытого ордера"-Ask>=30*Point

Ask-"Цена закрытия последнего закрытого ордера">=30*Point //Если цена Выше

正確には、ポイントがマイナスになることはないのでしょうか?それともまだ......なのか))

 

こんばんは。

mql5の勉強を始めたのですが、いくつか質問があるので、よろしくお願いします。

課題は、直近のn本のローソク足の値を配列に取得し、負けないローソク足だけを選んで配列をソートすることです。

関数を書きました。

double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)
   {
      double high=0;
      int k=0;
      int s=0;
      ArraySetAsSeries(High,true);
         if(CopyHigh(Symbol(),Period(),0,NumCand,High)==-1)
               {
               Print("Не удалось скопировать значения цен High! Код ошибки = ",GetLastError());
               }  
               
      
       for(int x=NumCand-1; x==0; x--)
            {
            if(IsStopped())
            break;
                  for (int j = NumCand-x-1; j == 0; j--) 
                  {
                  if (High[j+1] > High[j])
                     {
                     // Если хай не побит записываем в массив
                     temp[k] = High[j+1];
                     k++;
                     }   
                   }
            }
      s=sizeof(temp);               
      high=temp[index];
      return(high);
   } 

範囲外の エラー配列を生成します。

 high=temp[index];

私が理解した限りでは、このエラーは配列の存在しないセルをアドレス指定することによって発生します。

しかし、移動によるエラーが見つからなかったので、どこで失敗したのか、あるいはもっとエレガントなソートがあるのか、アドバイスをお願いします。

 
WhiteBerkut:

こんばんは。

mql5の勉強を始めたのですが、いくつか質問があるので、よろしくお願いします。

課題は、直近のn本のローソク足の値を配列に取得し、負けないローソク足だけを選んで配列を並べ替えることです。

関数を書きました。

範囲外の エラー配列を生成します。

私が理解した限りでは、このエラーは配列の存在しないセルをアドレス指定することによって発生します。

しかし、移動によるエラーが見つからなかったので、どこで失敗したのか、あるいはもっとエレガントなソートがあるのか、アドバイスをお願いします。

インデックス値と配列の次元を 比較する。配列の要素には 0から始まる番号が振られ,最後の要素の番号はインデックス次元より1小さいことに注意.そしてNumCandは何と等しいか?