[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 434

 
zorber:

皆さん、ごきげんよう。

保留中の注文を出す(作成時間:例:11:31)
そして、この注文は12:01にトリガーされます。

質問:注文がすでにマーケットに入り、OrderOpenTime( )関数がマーケットに入った時刻を返す場合、保留中の注文が発注された日時を知るにはどうしたらよいでしょうか?

この問題を解決する方法を知っている人はいますか?

よろしくお願いします。


MT4では注文の一覧からでは無理です。

一つの方法は、置く時間を覚えておくことです

 
Roger:
テキストファイルがどのように構成され、どのような内容で構成されているのか、そろそろ理解してもいい頃ではないでしょうか。行読みのたびにカーソル位置をアンプリントするのは
intFileTell() int handle)
すぐにわかるようになります。

皮肉なことに、私が上に出した質問のきっかけは、あなたのアドバイスとほぼ一致する状況だったのです...。

FileIsEnding関数とFileIsLineEnding関数の動作を理解するために、次のようなスクリプトを書きました。

//+------------------------------------------------------------------------------------------+
//|                                                                   Конец_Строки_Файла.mq4 |
//+------------------------------------------------------------------------------------------+
//+------------------------------------------------------------------------------------------+
//|                         script program start function                                    |
//+------------------------------------------------------------------------------------------+
#property show_inputs                                                    //выводим перед запуском скрипта окно свойств
extern int  position=0;                                                  //внешняя переменная: смещение файлового указателя ОТ НАЧАЛА ФАЙЛА (в БАЙТАХ)
//---------------------------------------------------------------------------------------- 1 -
int start()                                                              //функция start
  {                                                                      //начало start
   double Timestart=GetTickCount();                                      //переменная, с помощью которой вычисляется время (в милисекундах) начала выполнения эксперта 
   string name="Копия Запись чисел в файл.csv";                          //имя создаваемого файла
   bool h;                                                               //переменная: значение функции FileIsEnding
   bool h_l;                                                             //переменная: значение функции FileIsLineEnding
   int error;                                                            //переменная: ошибка
   int handle=FileOpen(name,FILE_CSV|FILE_WRITE,';');                    //открываем заданный файл n записываем туда данные
   int запись=FileWrite(handle,DoubleToStr(1.3584,4));                   //записываем число в файл csv (в преобразованном виде, т.е в виде текста)
   FileClose(handle);                                                    //закрываем файл
//---------------------------------------------------------------------------------------- 2 -
   handle=FileOpen(name,FILE_CSV|FILE_READ,';');                         //открываем заданный файл
   bool pos=FileSeek(handle,position,SEEK_SET);                          //смещаем от начала вправо указатель файла
   double чтение=FileReadNumber(handle);                                 //считываем число из текущей позиции (уже измененной функцией FileSeek) файлового указателя
   int size=FileSize(handle);                                            //вычисляем размер заданного файла
   h=FileIsEnding(handle);                                               //устанавливаем текущее значение переменной h
   h_l=FileIsLineEnding(handle);                                         //устанавливаем текущее значение переменной h_l
   error=GetLastError();                                                 //значение ошибки, производимой функцией FileIsEnding
   if(error!=0)Alert("Текущая ошибка ",error);                           //если код текущей ошибки не равен 0, то получаем номер текущей ошибки
   FileClose(handle);                                                    //закрываем файл
//----------------------------------------------------------------------------------------- 3 -
   Comment("Размер файла ",name," составил ",size," байт",
           "\nФункция FileSeek вернула: ",pos,
           "\nФункция FileReadNumber(handle) вернула: ",чтение,
           "\nФункция FileIsLineEnding(handle) вернула: ",h_l,
           "\nФункция FileIsEnding(handle) вернула: ",h,
           "\nСкрипт выполнялся всего ",GetTickCount()-Timestart," миллисекунд, из них: ",MathFloor((GetTickCount()-Timestart)/1000)," секунд ",((GetTickCount()-Timestart)/1000-MathFloor((GetTickCount()-Timestart)/1000))*1000," миллисекунд");//печать сообщения на экран
//----------------------------------------------------------------------------------------- 4 -
   return(0);                                                             //выход из start
  }                                                                       //конец start
//-------------------------------------- КОНЕЦ START -------------------------------------- 5 -

ブロック1-2では、1.3584という数字を開いてファイルに書き込んでいます(DoubleToStr関数でテキストに変換しています)。

ブロック3-4では、ファイルを開いて、そこに書かれた数字を読んでいる。

外部変数extern int positionの意図するところは、FileTell 関数を使ってファイルポインタを移動させることで、FileIsEnding関数と FileIsLineEnding関数の動作と ファイルポインタとは何かを理解しようとすることです。

MQL4.communityの 本には、ファイルポインタはテキストカーソルのアナログであると書かれています。

しかし、このスクリプトを何度か実行し、そのたびに外部変数postitonを1ずつ増やす(つまり、この方法でファイルポインタをファイルの先頭から1バイト右に移動させる)と、Comment関数は次のような一連のメッセージを出力する。

postiton=7とすると、以下のようなメッセージになります。

postiton=7とすると、以下のようなメッセージになります。


文字列定数はPCのメモリで8バイトを占め、変換後の数値は1つしかないので、ファイルポインタを8バイト右にずらすと4099エラー(ファイルの末尾に到達したことを意味します)になることは理解できました。また、FileIsEnding関数が同じ理由(ファイルの終了に達した)で1(true)を返したことも理解しています。しかし、FileIsLineEnding関数が 0(false、つまりファイルポインタが行末に到達していない)を返した理由がわからないのです。結局、MQLの本に書いてある例え(ファイルポインタはテキストカーソルとほぼ同じ)を元に、ファイルの終わりは文字列の終わりでもあると推論しました。しかし、FileIsEndingとFileIsLineEndingは、ファイルポインタがファイルの終端に達したときに値が不一致になることを考えると、WHAT IS A FILE Pointerの観点から、私はつまずきました。しかし、どこかで質問を始めなければならないので、433ページに掲載されているように質問したのです。

そこで、ヒートアップした脳をクリアにして、以下の質問に答えて欲しいという大願があります(少なくとも、残りの質問の理解に役立つようなものを)。

1.ファイルポインタについての私の理解は間違っている(質問はP.433の私の投稿に記載されています)。

2.指定されたチェック(ブロック5-6の最後の2行)を外すと、実行時に余分なオブジェクトが 生成される」という意味です。そして、その後にのみwhile ループの終了条件が発生し、制御はブロック8-9に移行する」(質問は433ページの私の投稿に記載されています。)

3.FileIsLineEnding がファイルの終端に到達したときに 1 ではなく 0 を返すのはなぜですか?

追伸:掲示板を乱雑にしないためにも、回答をよろしくお願いします。

 

みんなに楽しい時間を

横線((Bid+Ask)/2+0.00333)の引き方を教えてください:)

 

こんにちは。

皆さん......どうしましょう?

モバイルコンピューターがネットワークを見ることができない。"NO COMMUNICATION"

 
Ragen:

こんにちは。

皆さん......どうしましょう?

モバイルコンピューターがネットワークを見ることができない。"NO COMMUNICATION"


新しいデモを作成する。古いデモは時間の都合で削除されたのだろう。
 
sergeev:

自分用の新しいデモを作成する。古いデモは期限切れで削除されたはずです

デモではなく、3つのリアルアカウントで

しかし、すべて同じdtzから、それは何か影響を与えるのでしょうか?

 
Ragen:

デモではなく、3つのリアルアカウントで。

しかし、すべて同じdtzから、これは何か影響を与えることができますか?


:) まあ、証券会社に電話してください。これがMQLプログラミングフォーラムとどう関係があるのでしょうか?
 
sergeev:

MQLプログラミングフォーラムと何か関係があるのでしょうか?

なぜかすぐに端末が "転がる" :)

任せてください!

 

プロの方、アドバイスお願いします。逆指値注文を 保留しているのに、ストップロスを超えるスプレッドが広がった状態で入ってしまった場合・・・。どうなるんだろう?

注文はスプレッドで食べることになる...。それとも、エラーが発生して注文が発動されないのでしょうか?

 

同僚たちよ、最も細かいアドバイスをお願いします。

保留中の注文が あるX

保留中の注文が作成された時点からN時間後に注文を閉じるにはどうすればよいですか?

追加条件:保留中の注文が成行注文になる場合がある。

保留中の注文が残っている場合は、すべてがシンプルになります。

興味深いのは、保留中の注文が成行注文になる場合です(保留中の注文が成行注文になった瞬間に、その注文を作成する時間も変化します)。

この問題を解決するために、プロの方々からアイデアを頂きたいし、もっと良いのは、この状況に対応するためのコードを頂きたい