エラー、バグ、質問 - ページ 1103

 
ingram:
ありがとうございます!CTradeですべて正常に動作しています。しかし、ドキュメント化された機能が思うように動かないのは、やはり不愉快です。((( 昨日、Expert Advisor を正しく動作させるために 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.2GHzプロセッサ SSE命令対応 SSE2には対応していません...

そこがポイントです。 SSE2命令対応でないと新しいビルドは動きません。 ハードウェアをアップグレードする必要があります。
 
Expert Advisorのこのエラーは何を意味するのか、教えていただけませんか?"2014.02.13 05:29:06.885 stop_gambling EURUSD,H1: Error setting Sell trailing stop: 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

ポインタは longでなければならない。
 
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 ???