错误、漏洞、问题 - 页 1103

 
ingram:
谢谢你的提示!通过CTrade一切都能正常工作。但是,记录在案的功能不能正常工作,这仍然不是一件好事。(((( 昨天为了让我的专家顾问正常工作,我损失了4个小时,这不是一些随机的库,而是一个有记录的本地功能。非常奇怪!
最重要的是,一切都像它应该的那样工作。
 
MetaDriver:

1) 已经安装的终端的运行版本到底是什么?

2) 你的处理器是什么类型的? 它支持SSE2指令吗?

对不起,很久没有回信了,工作太忙了。

1.安装了终端4.0票509版本。

2.AMD Duron 1.2 GHz处理器 支持SSE指令 不支持SSE2...

附加的文件:
fiwq5lfx.JPG  174 kb
Report.txt  31 kb
 
cichiniov:

对不起,我已经很久没有回复了,这段时间很忙。

1.安装了终端4.0票509版本。

2.AMD Duron 1.2 GHz处理器 支持SSE指令 不支持SSE2...

这就是问题所在。 如果没有SSE2指令支持,新的构建将无法工作。 你需要升级你的硬件。
 
你能告诉我专家顾问的这个错误是什么意思吗?"2014.02.13 05:29:06.885 stop_gambling EURUSD,H1: 错误设置卖出追踪止损:130"??
 

它在帮助中说。

状态恢复因子(stat_recovery_factor

恢复系数是 STAT_PROFIT/STAT_BALANCE_DD的比率

也许应该对帮助进行纠正。检查过了。回收系数的计算方法是:。

 

代码(专家)正在搞砸64号终端...开发人员,请帮助! #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:

代码(专家)正在搞砸64号终端...开发人员,请帮助!#956630

指针 必须是长的。
 
TheXpert:

代码(专家)正在搞砸64号终端...开发人员,请帮助! #956630


在MSDN中查看,句柄或指针在哪里 - 将版本添加到长的

我这样做。

#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 типа
 
谢谢,知道了。我想我看了指针,但我已经忘记了手柄的事。而且它的断裂方式让你无法判断是什么原因造成的......
 
TheXpert:
路标似乎已经被看透了
int lpOverlapped ???