초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1445

 
Evgeny Dyuka #:
질문에 답변해 주세요.

fxsaber가 부트 로더와 사용 방법에 대한 설명을 게시 한 것 같지만 위치와 방법이 기억 나지 않습니다.

내가 착각하지 않았다면 터미널 폴더 C:\ Users\username\AppData\Roaming\MetaQuotes\Terminal\E98C5173D8A802F9B8F133E800FDDE2B에 넣어야합니다.

그리고 터미널을 시작하기 전에 매번 봇닉을 실행하세요.

해결책은 특별히 편리하지는 않지만 다른 것이 없다면 ...

rem Создали RAM-Drive для Тестера.
imdisk -a -o awe -s 3 G -m Z: -p "/fs:ntfs /q /y /v:MT5Tester"

mkdir z:\Tester
mklink /j Tester z:\Tester

rem Кеш оптимизатора будет сохраняться на диске.
mkdir cache
mklink /j z:\Tester\cache cache

rem Временный RAM-Drive, чтобы на него можно было перенаправить log-папки.
imdisk -a -o awe -s 3 M -m Y: -p "/fs:ntfs /q /y /v:MT5Tester_Logs"

mkdir y:\logs
mklink /j Tester\logs y:\logs

mkdir y:\logs0
mkdir Tester\Agent-127.0.0.1-3000
mklink /j Tester\Agent-127.0.0.1-3000\logs y:\logs0

mkdir y:\logs1
mkdir Tester\Agent-127.0.0.1-3001
mklink /j Tester\Agent-127.0.0.1-3001\logs y:\logs1

mkdir y:\logs2
mkdir Tester\Agent-127.0.0.1-3002
mklink /j Tester\Agent-127.0.0.1-3002\logs y:\logs2

mkdir y:\logs3
mkdir Tester\Agent-127.0.0.1-3003
mklink /j Tester\Agent-127.0.0.1-3003\logs y:\logs3

mkdir y:\logs4
mkdir Tester\Agent-127.0.0.1-3004
mklink /j Tester\Agent-127.0.0.1-3004\logs y:\logs4

mkdir y:\logs5
mkdir Tester\Agent-127.0.0.1-3005
mklink /j Tester\Agent-127.0.0.1-3005\logs y:\logs5

mkdir y:\logs6
mkdir Tester\Agent-127.0.0.1-3006
mklink /j Tester\Agent-127.0.0.1-3006\logs y:\logs6

mkdir y:\logs7
mkdir Tester\Agent-127.0.0.1-3007
mklink /j Tester\Agent-127.0.0.1-3007\logs y:\logs7

mkdir y:\logs8
mkdir Tester\Agent-127.0.0.1-3008
mklink /j Tester\Agent-127.0.0.1-3008\logs y:\logs8

mkdir y:\logs9
mkdir Tester\Agent-127.0.0.1-3009
mklink /j Tester\Agent-127.0.0.1-3009\logs y:\logs9

mkdir y:\logs10
mkdir Tester\Agent-127.0.0.1-3010
mklink /j Tester\Agent-127.0.0.1-3010\logs y:\logs10

mkdir y:\logs11
mkdir Tester\Agent-127.0.0.1-3011
mklink /j Tester\Agent-127.0.0.1-3011\logs y:\logs11

mkdir y:\logs12
mkdir Tester\Agent-127.0.0.1-3012
mklink /j Tester\Agent-127.0.0.1-3012\logs y:\logs12

mkdir y:\logs13
mkdir Tester\Agent-127.0.0.1-3013
mklink /j Tester\Agent-127.0.0.1-3013\logs y:\logs13

mkdir y:\logs14
mkdir Tester\Agent-127.0.0.1-3014
mklink /j Tester\Agent-127.0.0.1-3014\logs y:\logs14

mkdir y:\logs15
mkdir Tester\Agent-127.0.0.1-3015
mklink /j Tester\Agent-127.0.0.1-3015\logs y:\logs15

mkdir y:\logs16
mkdir Tester\Agent-127.0.0.1-3016
mklink /j Tester\Agent-127.0.0.1-3016\logs y:\logs16

mkdir y:\logs17
mkdir Tester\Agent-127.0.0.1-3017
mklink /j Tester\Agent-127.0.0.1-3017\logs y:\logs17

mkdir y:\logs18
mkdir Tester\Agent-127.0.0.1-3018
mklink /j Tester\Agent-127.0.0.1-3018\logs y:\logs18

mkdir y:\logs19
mkdir Tester\Agent-127.0.0.1-3019
mklink /j Tester\Agent-127.0.0.1-3019\logs y:\logs19

mkdir y:\logs20
mkdir Tester\Agent-127.0.0.1-3020
mklink /j Tester\Agent-127.0.0.1-3020\logs y:\logs20

mkdir y:\logs21
mkdir Tester\Agent-127.0.0.1-3021
mklink /j Tester\Agent-127.0.0.1-3021\logs y:\logs21

mkdir y:\logs22
mkdir Tester\Agent-127.0.0.1-3022
mklink /j Tester\Agent-127.0.0.1-3022\logs y:\logs22

mkdir y:\logs23
mkdir Tester\Agent-127.0.0.1-3023
mklink /j Tester\Agent-127.0.0.1-3023\logs y:\logs23

mkdir y:\logs24
mkdir Tester\Agent-127.0.0.1-3024
mklink /j Tester\Agent-127.0.0.1-3024\logs y:\logs24
rem Убили временный RAM-Drive
imdisk -D -m Y:


젠장. 먼저 게시 한 다음 봇 닉이 테스터에서 로그를 금지하기위한 것임을 알았습니다.

죄송합니다, 도와 드릴 수 없습니다.

 
Aleksandr Slavskii #:

fxsaber가 부트닉과 사용 방법에 대한 설명을 게시한 것 같지만 어디서 어떻게 사용했는지 기억이 나지 않습니다.

제가 착각하지 않았다면 터미널 폴더 C:\사용자\사용자 이름\앱 데이터\로밍\메타 견적\터미널\E98C5173D8A802F9B8F133E800FDDE2B에 부트 스트랩을 넣어야합니다.

그리고 터미널을 시작하기 전에 매번 봇닉을 실행하세요.

해결책은 특별히 편리하지는 않지만 다른 것이 없다면 ...


젠장. 먼저 게시 한 다음 부트 닉이 테스터에서 로그를 금지하는 것을 보았습니다.

죄송하지만 도와드릴 수 없습니다.

로그를 수동으로 삭제하는 것보다 부트 로더를 실행하는 것이 더 쉽지 않나요?


사이트에서 무슨 일이 일어나고 있나요? 사진 하나를 붙여넣으면 있어야 할 사진이 표시되지만 메시지를 붙여넣으면 다른 사진이 표시됩니다....

우! 알았어요...

파일:
01.png  23 kb
 
Aleksandr Slavskii #:

fxsaber가 부트닉과 사용 방법에 대한 설명을 게시한 것 같지만 어디서 어떻게 사용했는지 기억이 나지 않습니다.

제가 착각하지 않았다면 터미널 폴더 C:\사용자\사용자 이름\앱 데이터\로밍\메타 견적\터미널\E98C5173D8A802F9B8F133E800FDDE2B에 부트 스트랩을 넣어야합니다.

그리고 터미널을 시작하기 전에 매번 봇닉을 실행하세요.

해결책은 특별히 편리하지는 않지만 다른 것이 없다면 ...


젠장. 먼저 게시 한 다음 부트 닉이 테스터에서 로그를 금지하는 것을 보았습니다.

죄송하지만 도와드릴 수 없습니다.

나는 어딘가에 상자를 체크해야한다고 생각했고 그게 다야 ))
글쎄, 나는 그것을 참 아야 해,
대답 해 주셔서 감사합니다.
 
Evgeny Dyuka #:
나는 어딘가에 상자를 체크하고 그게 다라고 생각했습니다 ))
어쨌든, 나는 그것을 참 아야 할 것입니다,
답장 주셔서 감사합니다.

그 코드를 직접 작성하셨나요? 아마도 DB가 호출되는 방법과 호출 후 몇 줄의 코드를 보여줄 수 있습니다. 뭔가 인쇄 오류라고 표시되는 것 같습니다.....

 
Alexey Viktorov #:

그 코드를 직접 작성하셨나요? 아마도 db가 호출되는 방법과 호출 후 몇 줄의 코드를 보여줄 수 있습니다. 뭔가 오류를 인쇄하라고 말하는 것 같습니다....

작업은 10초마다 현재 시간을 데이터베이스에 쓰는 것입니다.
시간별로 구분하기 위해 0에서 3 초까지 임의의 시간 인 Sleep () 형태의 목발을 추가했습니다.
그리고 10 번의 연결 시도.
로그는 최대 두 번째 시도에서 모든 것이 작동하는 것으로 나타났습니다. 즉, 일반적으로 안정적으로 작동합니다 .

.
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void db_update_lastseen(string symbol)
  {
   string comm = "UPDATE LastSeen SET utime='" +
                 IntegerToString((int)TimeGMT()) +
                 "' WHERE who='mt5' AND symbol='" + symbol + "'";
   if(!db_exe("db_update_lastseen", comm))
      Telegram("⚠MT5 DB ERROR db_update_lastseen() " + symbol, DevChannel);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool db_exe(string who, string comm, bool readonly = false)
  {
   ResetLastError();
   int count = 0;
   bool repeat = true;
   int dbmt = INVALID_HANDLE;
   while(repeat)
     {
      count++;
      Sleep((int)((float)MathRand() / 10));
      if(count > 10)
        {
         Print("DB: " + who + " failed with code ", GetLastError(), " DatabaseOpen ", " count: ", count);
         return false;
        }
      if(readonly)
         dbmt = DatabaseOpen(path_to_db, DATABASE_OPEN_READONLY);
      else
         dbmt = DatabaseOpen(path_to_db, DATABASE_OPEN_READWRITE);
      if(dbmt == INVALID_HANDLE)
        {
         DatabaseClose(dbmt);
         continue;
        }
      else
        {
         if(!DatabaseExecute(dbmt, comm))
           {
            DatabaseClose(dbmt);
            continue;
           }
         else
           {
            DatabaseClose(dbmt);
            return true;
           }
        }
     }
   DatabaseClose(dbmt);
   return false;
  }
 
Evgeny Dyuka #:
작업은 10 초마다 현재 시간을 데이터베이스에 기록하는 것입니다.
시간별로 구분하기 위해 0에서 3 초까지 임의의 시간 인 Sleep () 형태의 목발을 추가했습니다.
그리고 10 번의 연결 시도.
로그에 따르면 최대 두 번째 시도에서 모든 것이 작동합니다. 즉, 일반적으로 안정적으로 작동합니다 .

.

그래서 여기에 로그에 인쇄되는 줄이 있습니다.

         Print("DB: " + who + " failed with code ", GetLastError(), " DatabaseOpen ", " count: ", count);

앞에 //를 넣어 주석을 달거나 완전히 제거하면 충분하며 다른 곳에 다른 Print ()가 없으면 모든 질문이 제거됩니다;

 
Alexey Viktorov #:

잡지에 인쇄되는 대사는 다음과 같습니다.

앞에 //를 넣어 주석 처리하거나 완전히 삭제하면 다른 곳에 다른 Print()가 없는 경우 모든 질문이 제거됩니다;

이 줄은 10번의 시도에서 실패하면 인쇄됩니다.
함수 자체가 오류를 인쇄합니다.


 
Evgeny Dyuka #:

10회 시도 후 함수가 실패하면 이 줄이 인쇄됩니다.
오류는 함수 자체에 의해 인쇄됩니다.


알겠습니다. DB로 작업하려고 할 때 출력됩니다. 데이터베이스를 사용하기 전에 db 핸들의 유효성 검사가 있는지 확인해야 합니다.

여기서 함수를 호출했습니다.

void db_update_lastseen(string symbol)
  {
   string comm = "UPDATE LastSeen SET utime='" +
                 IntegerToString((int)TimeGMT()) +
                 "' WHERE who='mt5' AND symbol='" + symbol + "'";
   if(!db_exe("db_update_lastseen", comm))
      Telegram("⚠MT5 DB ERROR db_update_lastseen() " + symbol, DevChannel);
  }

db를 열려고 시도했지만 오류가 발생하여 텔레그램.... 으로 메시지를 보냈습니다.

그리고 dbmt 변수를 사용하는 곳에서 그 값을 확인하시나요?

if(dbmt < 0)
// ничего делать нельзя. База не открыта…

또는 다음과 같이

if(dbmt >= 0)
 {
  // Базу можно использовать.
 }
 
Alexey Viktorov #:

알겠습니다. 데이터베이스로 작업하려고 할 때 이 메시지가 출력됩니다. 데이터베이스를 사용하기 전에 db 핸들의 유효성 검사가 있는지 확인해야 합니다.

여기서는 함수

db를 열려고 했는데 오류가 발생하여 텔레그램으로 메시지를 보냈습니다...

그리고 dbmt 변수를 사용하는 곳에서 그 값을 확인하시나요?

또는 다음과 같이

예, db_exe()에서 확인하고 다시 시도하도록 전송합니다.
그리고 db_exe()는 10 번 실패하면 False를 반환합니다 (한 번도 반환 한 적이 없음).
if(dbmt == INVALID_HANDLE)
        {
         DatabaseClose(dbmt);
         continue;
        }
나는베이스 작업 라이브러리가 오류를 보내고베이스가 잠겨있을 때 상황을 처리하지 않는 것 같습니다.
파이썬에서는 이러한 문제가 발생하지 않으며 분명히 대기열과 대기에 내장되어 있습니다.

답변 해 주셔서 감사합니다.
 
Evgeny Dyuka #:
예, db_exe()를 체크인하고 다시 시도하도록 전송합니다. 그러나 db_exe()는 10 번 실패하면 False를 반환합니다 (반환되지 않음).
나는베이스 작업 라이브러리가 오류를 보내고베이스가 잠겨있을 때 상황을 처리하지 않는 것 같습니다.
파이썬에서는 이러한 문제가 발생하지 않으며 분명히 대기열과 대기가 있습니다.

답변 해 주셔서 감사합니다.

1. 베이스 핸들이 검색되지 않으면 베이스를 닫을 필요가 없습니다.

2. INVALID_HANDLE이 수신되면 프로그램 실행을 계속하는 이유는 무엇입니까? 이 경우 중단하고 반환하는 것이 더 낫다고 생각합니다.

이제 존재하지 않는베이스를 반복적으로 열고 닫으려고하는데 오류 출력을 얻을 수 없습니다. 이 출력은 열 수없는베이스에 대한 쿼리를 만드는 순간에 나온다고 생각합니다.

사유: