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.
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" ??
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// Доступ к файлу для записи.constuint 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 3string 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);
}
intOnInit()
{
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);
}
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));
elsereturn(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...
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!
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...
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 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
Der Code (Experte) bringt die 64er Klemme durcheinander... Entwickler, Hilfe! #956630
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.
Die Wegweiser wurden offenbar überprüft
int lpOverlapped ???