[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 5. - sayfa 245

 
Vinin :

Ve hataları halletmeye çalıştılar
Numara. Ve ne verecek? Her durumda, başka bir istekte bulunmanız gerekecek
 
AndEv :
Numara. Ve ne verecek? Her durumda, başka bir istekte bulunmanız gerekecek

Neden veri olmadığını bileceksiniz ve isteği düşüncesizce tekrarlamanız mümkün
 
AndEv :
Numara. Ve ne verecek? Her durumda, başka bir istekte bulunmanız gerekecek
Diğer para birimlerinden ve zaman dilimlerinden hangi verilere ihtiyacınız var: standart veya özel bir gösterge , fiyatlar, başka bir şey? Kodun başarısız olduğunuz kısmını gösterin.
 

sormaya korkuyorum. MQL4 spesifikasyonu hakkında soru. MSDN belgelerine göre, çağrılan işlevin parametrelerde bir işaretçisi varsa, o zaman MQL4'te parametreyi bu yerde referansla iletmeyi kullanabilirim, değil mi?

Her neyse, C++

 int a; //переменная
int *ra = &a; //адрес( * ra) равен ссылке( & a) на а (переменную)
 
paladin80 :
Diğer para birimlerinden ve zaman dilimlerinden hangi verilere ihtiyacınız var: standart veya özel bir gösterge, fiyatlar, başka bir şey? Kodun başarısız olduğunuz kısmını gösterin.
Aslında, OHLC'den başka hiçbir şeye ihtiyaç yoktur. Ve bu kodla ilgili değil. Grafikler açıkken sanal bellekte zaman serileri oluşturulur ve gelen tüm alıntılar geçmiş dosyalarına yazılmadan RAM'de saklanır. Geçmiş dosyalarına yazma işlemi yalnızca MT4'ü kapattığımızda gerçekleşir. İlgili grafiği açmadan veri talep edildiğinde, zaman serileri oluşturulmaz, ancak indirilen veriler doğrudan geçmiş dosyasına yazılır. Bu verileri almak için tekrar bir talepte bulunmanız gerekir ve sadece bu durumda (dosyadan) yeni veriler alacağız. Bir dosyadan değil, RAM'den veri almak için açık bir grafiğin varlığını simüle etmeyi bir şekilde denemek istedim.
 
AndEv :
Aslında, OHLC'den başka hiçbir şeye ihtiyaç yoktur. Ve bu kodla ilgili değil. Grafikler açıkken sanal bellekte zaman serileri oluşturulur ve gelen tüm alıntılar geçmiş dosyalarına yazılmadan RAM'de saklanır. Geçmiş dosyalarına yazma işlemi yalnızca MT4'ü kapattığımızda gerçekleşir. İlgili grafiği açmadan veri talep edildiğinde, zaman serileri oluşturulmaz, ancak indirilen veriler doğrudan geçmiş dosyasına yazılır. Bu verileri almak için tekrar bir talepte bulunmanız gerekir ve sadece bu durumda (dosyadan) yeni veriler alacağız. Bir dosyadan değil, RAM'den veri almak için açık bir grafiğin varlığını simüle etmeyi bir şekilde denemek istedim.
Dürüst olmak gerekirse, bu tür süreçlere hiç girmedim. Bunu ne tür bir görev için bilmeniz gerektiğini merak ediyorum?
 
paladin80 :
Dürüst olmak gerekirse, bu tür süreçlere hiç girmedim. Bunu ne tür bir görev için bilmeniz gerektiğini merak ediyorum?
"Üçü bir arada" görevi, araçların seçimi, ağırlık katsayılarının hesaplanması ve aynı anda üç para birimi ticareti için bir giriş noktası bulunmasıdır.
 

gyfto :  

Her şey yolunda?

 #import "kernel32.dll"
int GetModuleHandleA ( string lpModuleName); //возвращает хэндл процесса; если lpModuleName=NULL то - текущего
#import

string lpModuleName; // неинициализированная строка содержит только /0, т.е. NULL
int hInstance; // передадим в CreateWindowExA

hInstance=GetModuleHandleA(lpModuleName); // аналогично GetModuleHandleA(NULL)


Yürüyüş, yapacak... İşte gösterge kodu:

 #import "kernel32.dll" //в комментариях типы данных в С++ :
int GetModuleHandleA ( string lpModuleName); //LPCSTR, т.е. LP (указатель) на строку (STR) с завершающим /0, которая является константой (C). Имя модуля, возм. с path
//на выходе HMODULE (целое без знака, 4 байта). Дескриптор приложения (процесса)
int GetModuleFileNameA( int hModule, //HMODULE (целое без знака, 4 байта). Он же.
                         int & lpFileName[], //LPSTR, т.е. LP (указатель) на строку (STR) с завершающим /0. Это выходной параметр - path
                         int nSize); //DWORD (целое, 4 знака). Расчётная длина буфера.
//на выходе DWORD (целое, 4 знака). Длина строки с path
#import
#property indicator_chart_window

extern string     lpModuleName; //Path. Сейчас там '/0', то есть GetModuleHandleA возвращает дескриптор текущего управляющего процесса. Path задавать не через '/', a '\'.  
string path= "" ; //инициализация пустой строкой
int lpFileName[ 64 ]; //через string задать не получается. Почему не разобрался. 64 это 0х100/4 байта (длина int)=0х40=64.
int hModule; //для выхода функции GetModuleHandleA, т.е. дескриптора процесса
int nSize= 255 ; //не 256, потому что последний 256-й символ по идее будет 0х00 = '/0' (максимальная длина строки)
int sizeFileName; // так обзовём выходной параметр с GetModuleFileNameA
int i; //счётчик цикла

int start()
  {
   hModule = GetModuleHandleA(lpModuleName);
   sizeFileName = GetModuleFileNameA(hModule, lpFileName, nSize);
   for (i= 0 ; i<sizeFileName; i++){ //конвертация int[] в string 
      path=path //конкатенация с проходом от 0 до sizeFileName-1, на каждом проходе обрабатываем по одному каждый байт:
            + CharToStr(lpFileName[i] & 255 ) //битовое and, обнуление старших разрядов. Н-р, 0xkkllmmnn&0x000000FF(т.е.255)=0x000000nn, т.к. x&0=0, x&1=x (0xFF=0b11111111)
            + CharToStr(lpFileName[i] >> 8 & 255 ) //сдвиг вправо на 1 байт (8 бит), потом обнуление старших разрядов. На выходе, как и в предыдущей строке, 1 (один) байт
            + CharToStr(lpFileName[i] >> 16 & 255 ) //сдвиг вправо на 2 байта (16 бит), чтобы получить третий в int байт, и обнуление старших разрядов. 
            + CharToStr(lpFileName[i] >> 24 & 255 ) // аналогично: на 3 байта (24 бит), четвёртый байт. Параллельно везде конвертация в string.
      ;
   }
   Print ( "hmodule = " , hModule, ", sizeFileName = " , sizeFileName, ", path = " , path); //в журнал.
   path= "" ;//обнуляем строку на выходе, чтобы не было дальнейшей конкатенации по циклу
   return ( 0 );
  }

Hindinin ilk parametrelerinde uygulamaya giden yol yerine "boş" belirtilir; çıktıda, tutamacını ve tam yolunu (loga) döndürür. Devam et...

 
gyfto :


Yürüyüş, yapacak... İşte gösterge kodu:

Hindinin ilk parametrelerinde uygulamaya giden yol yerine "boş" belirtilir; çıktıda, tutamacını ve tam yolunu (loga) döndürür. Devam et...

hModule = GetModuleHandleA(lpModuleName);
sizeFileName = GetModuleFileNameA(hModule, lpFileName, nSize);

Neden ilk satırda bir dize arabelleği ve ikinci satırda bir tamsayı dizisi kullanılıyor?

Her iki durumda da başlatılmış bir dize kullanmanızı engelleyen nedir? Kod on satır azaltılacaktır.

 

Zhunko :

Her iki durumda da başlatılmış bir dize kullanmanızı engelleyen nedir?


Günlük, bir dize olarak bildirilirse, 7C902128'de dll 'kernel32.dll' kritik hatası c0000005'ten 'GetModuleFileNameA' işlevi çağrısını yazar. Nedenini çözemedim. Dışa doğru - terminal açıldıktan 3-7 saniye sonra bir yere çöküyor, günlüklere bir şey yazmak için zaman yok, yani. Terminal kendi kendine kapanmıyor.