Fehler, Irrtümer, Fragen - Seite 1103

 
ingram:
Danke für den Tipp, über CTrade funktioniert alles wie gewünscht. Aber es ist trotzdem nicht schön, dass die dokumentierten Funktionen nicht so funktionieren, wie sie sollten. (((( hat gestern 4 Stunden damit verbracht, meinen Expert Advisor zum Laufen zu bringen, und es handelt sich nicht um eine zufällige Bibliothek, sondern um eine dokumentierte native Funktion. Sehr seltsam!
Das Wichtigste ist, dass alles so funktioniert hat, wie es sollte.
 
MetaDriver:

1) Welche Version des Terminals ist bereits installiert?

2) Und was für einen Prozessor haben Sie? Unterstützt er SSE2-Befehle?

Tut mir leid, dass ich lange nicht geantwortet habe, es war viel Arbeit.

1. Terminalversion 4.0 Ticket 509 ist installiert.

2. AMD Duron 1,2 GHz Prozessor SSE-Befehle werden unterstützt SSE2 wird nicht unterstützt...

Dateien:
fiwq5lfx.JPG  174 kb
Report.txt  31 kb
 
cichiniov:

Tut mir leid, dass ich so lange nicht geantwortet habe, es war eine arbeitsreiche Zeit.

1. Terminalversion 4.0 Ticket 509 ist installiert.

2. AMD Duron 1,2 GHz Prozessor SSE-Befehle werden unterstützt SSE2 wird nicht unterstützt...

Das ist der Punkt. Neue Builds werden ohne SSE2-Anweisungen nicht funktionieren. Sie müssen Ihre Hardware aufrüsten.
 
Können Sie mir bitte sagen, was dieser Fehler des Expert Advisors bedeutet? "2014.02.13 05:29:06.885 stop_gambling EURUSD,H1: Fehler beim Setzen des Sell Trailing Stops: 130" ??
 

Das steht in der Hilfe:

STAT_RECOVERY_FACTOR

Der Wiederherstellungsfaktor ist das Verhältnis STAT_PROFIT/STAT_BALANCE_DD

Vielleicht sollte die Hilfe korrigiert werden. Ich habe es überprüft. Der Rückgewinnungsfaktor wird mit Hilfe von Mitteln berechnet.

 

Der Code (Experte) bringt die 64er Klemme durcheinander... Entwickler, Hilfe! #956630

#import "msvcrt.dll"
   int memcpy(int &dst[], double &src[], int cnt);

#import "ntdll.dll"
   int RtlGetLastWin32Error();
   int RtlSetLastWin32Error(int dwErrCode);

#import "kernel32.dll"
   int   DeleteFileW (string lpFileName);
   
   int   CloseHandle(int hObject);
   int   CreateFileW(      string lpFileName,         int dwDesiredAccess, 
                           int dwShareMode,           int lpSecurityAttributes,
                           int dwCreationDisposition, int dwFlagsAndAttributes, 
                           int hTemplateFile
                     );

   int   SetFilePointer(int hFile, int lDistanceToMove, int& lpDistanceToMoveHigh[], int dwMoveMethod);
   int   SetEndOfFile (int hFile);
   int   ReadFile(int hFile, ushort& lpBuffer[], int nNumberOfBytesToRead, int& lpNumberOfBytesRead[], int lpOverlapped);
   int   WriteFile(int  hFile, int& lpBuffer[], int nNumberOfBytesToWrite, int& lpNumberOfBytesWritten[], int  lpOverlapped);
   int   GetFileSize(int hFile,  int notUsed = 0);
   
   int   FindFirstFileW(string path, int& answer[]);
   int   FindNextFileW(int handle, int& answer[]);
   int   FindClose(int handle);
   
   int   CreateDirectoryW(string path, int securityAttributes /*set to 0*/);
   
#import

#define  F_GENERIC_WRITE                0x40000000 // Доступ к файлу для записи.
const uint F_GENERIC_READ            = 0x80000000; // Доступ к файлу для чтения.

// ---- Параметр "dwShareMode".
#define  F_FILE_SHARE_NO                0x00000000 // Запрещает процессы открытия файла.
#define  F_FILE_SHARE_READ              0x00000001 // Подготавливает работу без ограничений в файле или устройстве для чтения.
#define  F_FILE_SHARE_WRITE             0x00000002 // Подготавливает работу без ограничений в файле или устройстве для записи.
#define  F_FILE_SHARE_DELETE            0x00000004 // Подготавливает работу без ограничений в файле или устройстве для удаления. 

// ---- Параметр "dwCreationDisposition".
#define  F_CREATE_NEW                   1          // Создает новый файл, если его ещё нет. Если файл есть, будет ошибка.
#define  F_CREATE_ALWAYS                2          // Создает новый файл, всегда.
#define  F_OPEN_EXISTING                3          // Открывает файл или устройство, если он существует.
#define  F_OPEN_ALWAYS                  4          // Открывает файл, всегда.
#define  F_TRUNCATE_EXISTING            5          // Открывает файл и исключает это чтобы размер - нулевые байты, только если он существует.

//==== Константы для функции "SetFilePointer()".
#define  F_FILE_BEGIN                   0          // От начала файла.
#define  F_FILE_CURRENT                 1          // От текущей позиции.
#define  F_FILE_END                     2          // От конца файла.

#define  INVALID_SET_FILE_POINTER -1
#define  INVALID_FILE_ATTRIBUTES -1
#define  INVALID_HANDLE_VALUE -1
#define  INVALID_FILE_SIZE 0xFFFFFFFF

#define  FILE_ATTRIBUTE_DIRECTORY 0x10

#define  ERROR_FILE_NOT_FOUND 2
#define  ERROR_PATH_NOT_FOUND 3

string StringFromBuffer(int& buffer[])
{
   string text = "";

   for (int pos = 11; pos < 75; pos++) 
   {
      int curr = buffer[pos];
      text = text + 
         CharToString(uchar(curr       & 0x000000FF)) +
         CharToString(uchar(curr >> 8  & 0x000000FF)) +
         CharToString(uchar(curr >> 16 & 0x000000FF)) +
         CharToString(uchar(curr >> 24 & 0x000000FF)); 
   }

   return (text);
}

int GetFileList(string path, string filter, string& list[])
{
   int Win32Data[80];
   ArrayInitialize(Win32Data, 0);

   RtlSetLastWin32Error(0);
   int hFind = FindFirstFileW(path + filter, Win32Data);
   
   if (INVALID_HANDLE_VALUE == hFind)
   {
      return (RtlGetLastWin32Error());
   }
   
   ArrayResize(list, 0);
   
   if ((Win32Data[0] & FILE_ATTRIBUTE_DIRECTORY) == 0) // if found item is file, not directory
   {
      ArrayResize(list, 1);
      list[0] = StringFromBuffer(Win32Data);
   }
   ArrayInitialize(Win32Data, 0);
   
   while (FindNextFileW(hFind, Win32Data) != 0)
   {
      if ((Win32Data[0] & FILE_ATTRIBUTE_DIRECTORY) == 0) // if found item is file, not directory
      {
         int size = ArraySize(list);
         ArrayResize(list, size + 1);
         list[size] = StringFromBuffer(Win32Data);
      }
      ArrayInitialize(Win32Data, 0);
   }
   
   FindClose(hFind);
   
   return (0);
}

int TryToCaptureFile(string fileName, int& err)
{
   RtlSetLastWin32Error(0);
   int hFile = CreateFileW(fileName, F_GENERIC_WRITE | F_GENERIC_READ, F_FILE_SHARE_NO, 0, F_OPEN_ALWAYS, 0, 0);
   err = RtlGetLastWin32Error();
   return (hFile);
}

bool CheckDirectoryExists(string path)
{
   int Win32Data[80];
   ArrayInitialize(Win32Data, 0);

   RtlSetLastWin32Error(0);
   int hFind = FindFirstFileW(path, Win32Data);

   if (INVALID_HANDLE_VALUE == hFind)
   {
      return (false);
   }

   FindClose(hFind);
   
   return ((Win32Data[0] & FILE_ATTRIBUTE_DIRECTORY) != 0); // if found item is directory
}

string LockFileName = "VolumeDataReceiver";

int hLockFile;
string ClusterDeltaPath;
string LockPath;

int UpdateIntervalSec;

int CheckLock()
{
   int err = 0;
   if (INVALID_HANDLE_VALUE != hLockFile) return (0);
   
   string path = StringSubstr(LockPath, 0, StringLen(LockPath) - 1);
   bool exists = CheckDirectoryExists(path);
   
   if (!exists)
   { // try to create if not available
      RtlSetLastWin32Error(0);
      int res = CreateDirectoryW(LockPath, 0);
      
      if (res == 0)
      {
         err = RtlGetLastWin32Error();
         if (err != 183) // ERROR_ALREADY_EXISTS
         {
            Print("Failed to create directory -- \"", LockPath, "\"");
         }
         return (err);
      }
   }
   
   if (INVALID_HANDLE_VALUE == hLockFile)
   {
      return (err);
   }
   
   return (0);
}

int OnInit()
{
   if (!MQL5InfoInteger(MQL5_DLLS_ALLOWED) ) 
   { 
      Alert("Dlls are not allowed. You should allow dll imports.");
      return (1); 
   }

   hLockFile = INVALID_HANDLE_VALUE;
   
   ClusterDeltaPath = TerminalInfoString(TERMINAL_DATA_PATH) + "\\ClusterDelta\\Volume\\";
   LockPath = TerminalInfoString(TERMINAL_DATA_PATH) + "\\ClusterDelta\\";

   if (UpdateIntervalSec < 30)
   {
      UpdateIntervalSec = 30;
   }

   int err = CheckLock();
   if (err != 0)
   {
      Alert("Failed initializing (Data Receiver already running?), error = ", err);
      return (1);
   }
   
   return (0);
}
 
TheXpert:

Der Code (Experte) bringt die 64er Klemme durcheinander... Entwickler, Hilfe! #956630

DerZeiger muss lang sein.
 
TheXpert:

Der Code (Experte) bringt die 64er Klemme durcheinander... Entwickler, Hilfe! #956630


Schauen Sie im MSDN nach, wo Handles oder Zeiger sind - fügen Sie Versionen zu langen

Ich tue dies.

#import "kernel32.dll"
    int   CloseHandle(int hObject);
    int   CloseHandle(long hObject);
#import 

int   CloseHandle(long hObject)
{
  if (_Is64) return(kernel32:: CloseHandle(hObject));
  else return(kernel32:: CloseHandle((int)hObject));
}

в коде
::CloseHandle(h); // где h - long типа
 
Danke, ich hab's. Ich glaube, ich habe mir die Zeiger angesehen, aber die Griffe hatte ich vergessen. Und es bricht so, dass man nicht sagen kann, was die Ursache dafür ist...
 
TheXpert:
Die Wegweiser wurden offenbar überprüft
int lpOverlapped ???
Grund der Beschwerde: