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

 
Санек:

1) - ファイル 11112222.txt を開き、そこからデータを読み込む部分です。

//=================================BUY=========================================
    int handle2 = FileOpen("11112222.txt", FILE_CSV|FILE_READ, ";");//код открывает файл для чтения

2) - 次に、handle2>0であれば、その条件となります。


  if(handle2>0) // если в файле больше 0, то есть 1, то открывать BUY
   {

3)-ここが理解できないところです。


       Print(FileReadString(handle2));

4) - この部分はファイルを閉じます。


       FileClose(handle2); // закрытие текстового файла

5) - handle2>0 の条件を満たす、つまりファイル 11112222.txt に 1 が含まれているので、買い注文が 出される。

  //ОТКРЫТИЕ ОРДЕРА НА ПОКУПКУ      
                    if(OrdersTotal() == 0) // если нет открытых ордеров то открывать ордер на покупку
                     {
                        OrderSend(Symbol(), OP_BUY, 0.01, Ask, 3, 0, 0); // первым указывается ЛОСЬ, вторым ПРОФИТ
                        FileClose(handle2); // закрытие текстового файла
                     }
                    else
                      Print("NE USPESHNO!!!");
                      FileClose(handle2); // закрытие текстового файла

   }
//=================================конец кода BUY=========================================

どの部分が混同してしまったのでしょうか?

1) ファイルを開くが、中身は読まない。

2) ファイルのハンドルは、常にゼロより大きい。したがって、ファイルが存在すれば、その内容にかかわらず、常にこの条件が成立する。

3)これはまさにファイルの中身を読んでいるのです。数字を読み取るのならともかく、文字列を読み取るのは理解できないが...。しかし、それでも別の問題が発生することがあります。あとは、一連の動作を記述することがメインとなります。

4)もちろん、ファイルを閉じなければならないので、閉じます。

そして、第3節を読んだ内容によって次の節だけ条件付けが必要ですが、第2節は必要ありません。

 
Alexey Viktorov:

1) ファイルを開くが、その内容は読み込まない。

2)ファイルハンドルは常に0より大きい。したがって、ファイルが存在すれば、その内容にかかわらず、常にこの条件が成立する。

3)これはまさにファイルの中身を読んでいるのです。でも、数字を読むならともかく、文字列を読むのは理解できない...。しかし、それでも別の問題を参照することができます。あとは、一連の動作を記述することがメインとなります。

4) ファイルはもちろん閉じなければならないし、閉じている最中である。

そして、第3節を読んだ内容によって次の節だけが条件となるはずですが、第2節はそうではありません。

いや...INVALID_HANDLEの値は-1です。

それは、ファイルオープニングエラーが発生した時に、売りシグナルが出るのですが・・・。

その他の定数

パラメータや変数の状態を示すために使用される特殊な定数。以下の値を設定することができる。

定数

商品説明

価値

NULL

任意の型のNull。また、空文字列の状態も示す

0

EMPTY

パラメータが空の状態であることを示す

-1

EMPTY_VALUE

インジケーターバッファに空値がある

2147483647 (0x7FFFFFF)

CLR_NONE, clrNONE

色なし。デフォルト値、空値へのポインタ。カスタムインジケータで 使用

-1

CHARTS_MAX

ターミナルで同時に開くことのできるチャートの最大数

100

INVALID_HANDLE

不適切なハンドル

-1

IS_DEBUG_MODE

デバッグモードでのmq5-programのサイン

デバッグモードで0でなければ0

is_profile_mode

プロファイリングモードでのmq5-programのサイン

プロファイリングモードで0でない場合,0となります。

ホールアレイ

配列の最後まで残っている要素数,つまり配列全体を処理することを表す

0

WRONG_VALUE

定数は暗黙のうちに任意の列挙型にキャストすることができます。

-1

 

このスレッドを見ていなかったので、新しいスレッドを作成しました。https://www.mql5.com/ru/forum/206126 を見てください。

Как в тестере стратегий получить TimeGMT();
Как в тестере стратегий получить TimeGMT();
  • 2017.06.28
  • www.mql5.com
Справочник MQL5, Дата и время, TimeGMT TimeGMT - При работе в тестере стратегий время TimeGMT() всегда равно моделируемому серверному времени TimeT...
 
Alexey Viktorov:

1) ファイルを開くが、その内容は読み込まない。

2) ファイルハンドルは常に0より大きい。そのため、ファイルが存在すれば、その内容にかかわらず、常にその条件が成立します。

3)これはまさにファイルの中身を読んでいるのです。でも、数字を読むならともかく、文字列を読むのは理解できない...。しかし、それでも別の問題を参照することができます。あとは、一連の動作を記述することがメインとなります。

4) ファイルはもちろん閉じなければならないし、閉じている最中である。

そして、3の項目で読み取った内容によって、次の項目だけが条件となるはずですが、2の項目は条件となりません。

MQLの達人たちへ - もし問題なければ、このコードで私を助けてください!検索エンジンで半日を費やしましたが、似たようなものを見つけられませんでした。

ほんの数行なのでしょうが、経験者にとっては数分のことです)))

 

c++のDLLは、どのようにmql4から文字列を受け取り、char*に変換することができますか?

struct MqlStr
{
        int               len;
        char             *string;
};

static int proc_func(char* Name);

MT4_EXPFUNC int __stdcall myfunc(MqlStr sym_name)
{
        proc_func(sym_name[0].string);
        
}
int proc_func(char* Name)
{
}
これは正しいコードですよね?
 

こんにちは、皆さん、アドバイスをお願いします。1年ほど前に書いたEAが うまく動作していました。今までずっと使っていなかった。どうしたらいいのか、わからないのです。ビルドを変えたからということでいいのでしょうか?現在、Build 1090を使用しています。

 
Санек MQLの達人へ - もしあなたがこのコードで私を助けるのが難しいのでなければ、私は半日を費やして検索エンジンで掘り返してみましたが、似たようなものを見つけることができません。

数行で済むようで、知識のある人にとっては3分 程度の問題です)))

2時間かかりました。システムをひとつひとつチェックしていかなければならないのです。隣接するチャートで両方のEAを一度に実行する - すべてが表示されます。Expert Advisor 1 =ファイルに書き 込む

//+------------------------------------------------------------------+
//| Запись в файл -1  0  1                                     1.mq4 |
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| Инициализация - установка интервала таймера                      |
//+------------------------------------------------------------------+
void OnInit()
{
   EventSetTimer(7);
}


//+------------------------------------------------------------------+
//| Деинициализация - удаление метки                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int Зачем)
{
   ObjectDelete("Семафор");
}


//+------------------------------------------------------------------+
//| По таймеру каждые 7 секунд                                       |
//+------------------------------------------------------------------+
void OnTimer()
{
   int x=0;
   if(rand()<20000)
   {
     x=1;
     if(rand()<16000) x=-1;
   }

   ObjectCreate("Семафор",OBJ_LABEL,0,0,0);
   ObjectCreate("Семафор", OBJ_LABEL, 0, 0, 0);  // Создание
   ObjectSet("Семафор", OBJPROP_CORNER, 3);      // В правый нижний угол
   ObjectSet("Семафор", OBJPROP_XDISTANCE, 0);   // Координата X   
   ObjectSet("Семафор", OBJPROP_YDISTANCE, 40);  // Координата Y
   ObjectSetText("Семафор",(string)x+" Открываю",20,"Arial",Yellow);
   ChartRedraw(0);
   Sleep(2000);

   int handle = FileOpen("123.txt", FILE_BIN | FILE_WRITE);
   if(handle == -1)
   {
      ObjectSetText("Семафор","Ошибка",20,"Arial",Salmon);
      ChartRedraw(0);
      return;
   }

   ObjectSetText("Семафор",(string)x+" Записываю",20,"Arial",DeepSkyBlue);
   ChartRedraw(0);

   FileWriteInteger(handle, x, 4);
   Sleep(2000);

   ObjectSetText("Семафор","",20,"Arial",White);
   ChartRedraw(0);
   FileClose(handle);
}

EA 2 = ファイルを読む

//+------------------------------------------------------------------+
//| Чтение файла  -1  0  1                                     2.mq4 |
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| Инициализация - установка интервала таймера                      |
//+------------------------------------------------------------------+
void OnInit()
{
   EventSetTimer(1);
}


//+------------------------------------------------------------------+
//| Деинициализация - удаление метки                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int Зачем)
{
   ObjectDelete("Семафор");
}


//+------------------------------------------------------------------+
//| По таймеру каждую секунду                                        |
//+------------------------------------------------------------------+
void OnTimer()
{
   int x=0;

   ObjectCreate("Семафор",OBJ_LABEL,0,0,0);
   ObjectCreate("Семафор", OBJ_LABEL, 0, 0, 0);  // Создание
   ObjectSet("Семафор", OBJPROP_CORNER, 2);      // В правый нижний угол
   ObjectSet("Семафор", OBJPROP_XDISTANCE, 0);   // Координата X   
   ObjectSet("Семафор", OBJPROP_YDISTANCE, 40);  // Координата Y
   ObjectSetText("Семафор","",20,"Arial",Yellow);
   ChartRedraw(0);

   Sleep(500);
   int handle = FileOpen("123.txt", FILE_BIN | FILE_READ);  // Получаем НОМЕР файла в ОС
   if(handle == -1)                // Если производится запись, файл занят, будет ошибка
   {
      ObjectSetText("Семафор","Ошибка",20,"Arial",Salmon);
      ChartRedraw(0);
      return;
   }

   x = FileReadInteger(handle,4);                          // Получаем СОДЕРЖИМОЕ файла
   ObjectSetText("Семафор",(string)x+" Прочитал",20,"Arial",DeepSkyBlue);
   ChartRedraw(0);

   FileClose(handle);
}
削除済み  
toni_stark:

こんにちは、皆さん、アドバイスをお願いします。1年ほど前に書いたEAが うまく動作していました。今までずっと使っていなかった。どうしたらいいのか、わからないのです。ビルドを変えたからということでいいのでしょうか?現在、Build 1090を使用しています。


可能性は十分にありますね、いろいろな工夫がされています。まず、コンパイルエラーがないかを確認します。Directiveの#PropertyStrictを使用した場合。

 
Vladimir Zubov:

いろいろな工夫があったかもしれませんね。まず、コンパイルエラーがないかを確認します。Directive「#PropertyStrict」で。

そのような指令はありません。

ありますね。

#property strict
 
Vladimir Zubov:

いろいろな工夫があったかもしれませんね。まず、コンパイルエラーがないかを確認します。Directive「#PropertyStrict」で。


アルチョム・トリシキン

そのような指令はありません。

ありますね。


しかし、私のコンピュータにある拡張子がex4のEAファイルはMetaEditorで開く ことができません。その理由は何なのか、教えてください。