System z użyciem bazy danych

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
fryk
Gaduła
Gaduła
Posty: 228
Rejestracja: 10 mar 2006, 13:24

System z użyciem bazy danych

Nieprzeczytany post autor: fryk »

Zabieram sie za to. Moze ktos przerabial temat to bylaby duza pomoc. Jesli nie to czeka mnie zabawa z DLLami (http://www.forex-tsd.com/tools-utilitie ... ement.html).

Pozdrawiam

Awatar użytkownika
fryk
Gaduła
Gaduła
Posty: 228
Rejestracja: 10 mar 2006, 13:24

Nieprzeczytany post autor: fryk »

A wiec aby moc korzystac z dobrodziejstw bazy danych MySQL nalezy zainstalowac i uruchomic serwer np lokalnie (mysql.com). Nastepnie skopiowac biblioteke "libmysql.dll" z katalogu MYSQL/bin/ do MT4/experts/include.

Baze wypelniamy w ten sposob:

Kod: Zaznacz cały

#import "libmysql.dll"
int mysql_init(int db);
int mysql_errno(int TMYSQL);
int mysql_real_connect( int TMYSQL,string host,string user,string password, string DB,int port,int socket,int clientflag);
int mysql_real_query(int TMSQL,string query,int length);
void mysql_close(int TMSQL);
#import
int mysql;
int init(){

//----

   mysql=mysql_init(mysql);
   if (mysql!=0) Print("allocated");
   string host="localhost";
   string user="user";
   string password="pwd";
   string DB="mt4";
   int clientflag=0;
   int port=3306;
   string socket="";
   int
res=mysql_real_connect(mysql,host,user,password,DB,port,socket,clientflag);
   int err=GetLastError();
   if (res==mysql) Print("connected");
   else Print("error=",mysql," ",mysql_errno(mysql)," ");
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   mysql_close(mysql);
//----
   return(0);
  }


int start()
  {
   string query="";
   int length=0;
      query=StringConcatenate("insert into ticks(margin,freemargin,date,ask,bid,symbol,equity) values(",AccountMargin(),",",AccountFreeMargin(),",\"",TimeToStr(CurTime(),TIME_DATE|TIME_SECONDS),"\",",NormalizeDouble(Ask,4),",",NormalizeDouble(Bid,4),",\"",Symbol(),"\",",AccountEquity(),");");
      length=StringLen(query);
      mysql_real_query(mysql,query,length);
      int myerr=mysql_errno(mysql);
      if (myerr>0)Print("error=",myerr);

  }

hope this helps.
Pytamy natomiast z malym obejsciem (wynik do pliku i odczyt z pliku):

Kod: Zaznacz cały

int GetClientTrades() {
   FileDelete(queryFile);
   string query="SELECT * INTO OUTFILE \'"+queryPFile+"\' FIELDS TERMINATED BY \';\' LINES TERMINATED BY \'\n\'FROM clients_trades;";
   Print(query);
   int length=StringLen(query);
   mysql_real_query(mysql,query,length);
   int myerr=mysql_errno(mysql);
   if (myerr>0) Print("error=",myerr);

   int handle,res,size,i;
  	ArrayResize(clientTrades,0);
	handle=FileOpen(queryFile,FILE_CSV|FILE_READ);
	if(handle<1) {
   	Print("File " + queryFile + " not found, the last error is ", GetLastError());
   	return(0);
	}
	while (!FileIsEnding(handle)) {
		size++;
		ArrayResize(clientTrades,size);
		clientTrades[size-1][0]=FileReadNumber(handle);
		clientTrades[size-1][1]=FileReadNumber(handle);
		clientTrades[size-1][2]=FileReadNumber(handle);
		clientTrades[size-1][3]=FileReadNumber(handle);
		clientTrades[size-1][4]=FileReadNumber(handle);
		clientTrades[size-1][5]=FileReadNumber(handle);
		clientTrades[size-1][6]=FileReadNumber(handle);
		clientTrades[size-1][7]=FileReadNumber(handle);
		clientTrades[size-1][8]=FileReadNumber(handle);
		clientTrades[size-1][9]=FileReadNumber(handle);
	}
	ArrayResize(clientTrades,size-1);
	size--;
	//if (clientTrades[size-1][0]==0.0) ArrayResize(clientTrades,size-1);
	FileClose(handle);
   return(1);
}
Dziala jak marzenie! :) Wlasnie wypelnilem sobie tabelki danymi H1 i M1 :) Zaraz przystapie do buszowania po tych danych!

Pozdrawiam!
Owoce sukcesu rosną na drzewach cierpliwości...

xeo
Bywalec
Bywalec
Posty: 16
Rejestracja: 25 wrz 2004, 18:05

Nieprzeczytany post autor: xeo »

A można w ten sposób zapisać wyniki wskażników na przykład na 1H?

Awatar użytkownika
fryk
Gaduła
Gaduła
Posty: 228
Rejestracja: 10 mar 2006, 13:24

Nieprzeczytany post autor: fryk »

:) mozesz sobie do bazy wrzucac wszystko do czego masz dostep z poziomu mt4, czyli TAK :)
Owoce sukcesu rosną na drzewach cierpliwości...

xeo
Bywalec
Bywalec
Posty: 16
Rejestracja: 25 wrz 2004, 18:05

Nieprzeczytany post autor: xeo »

A można wyniki wskażnika wrzucic do excela ale nie przez mysql, a bezpośrednio z mt4 do excela lub do accesa?

Awatar użytkownika
fryk
Gaduła
Gaduła
Posty: 228
Rejestracja: 10 mar 2006, 13:24

Nieprzeczytany post autor: fryk »

Sadze ze na pewno ale nie znam sie na tym. Jesli chcesz robic cokolkiek z danymi to nie ma sie co rozdrabniac na excela i od razu uczyc sie sqla. To potezne narzedzie do _ultraszybkiego_ przeszukiwania duzych ilosci danych.

Jesli nadal upierasz sie przy excelu ;) to utworz nowy watek zanim dostaniesz po uszach od moderatora za posty niedotyczace tego watku. Pozdrawiam.
Owoce sukcesu rosną na drzewach cierpliwości...

xeo
Bywalec
Bywalec
Posty: 16
Rejestracja: 25 wrz 2004, 18:05

Nieprzeczytany post autor: xeo »

Przy excelu się nie opieram po prostu wszystkie analizy robie w excelu z użyciem makr i bazy danych accessa. Oczywiście jak się nie da w excelu lub accessa to będe ładował wyniki wskażników z bazy mysql do excela bo excel jest potężnym narzędziem do analiz zwłaszcza z użyciem vba i baz danych. To mam jeszcze jedno pytanko czy ładowałeś wyniki jakiegoś wskażnika do bazy mysql?

Awatar użytkownika
fryk
Gaduła
Gaduła
Posty: 228
Rejestracja: 10 mar 2006, 13:24

Nieprzeczytany post autor: fryk »

Jeszcze nie ale na pewno bede to robil.
Owoce sukcesu rosną na drzewach cierpliwości...

xeo
Bywalec
Bywalec
Posty: 16
Rejestracja: 25 wrz 2004, 18:05

Nieprzeczytany post autor: xeo »

Oki, to jak to zrobisz to daj znać jak Ci poszło :)

Awatar użytkownika
CoVal
Gaduła
Gaduła
Posty: 320
Rejestracja: 06 paź 2005, 22:45

Nieprzeczytany post autor: CoVal »

tyle, ze excell ma ograniczenie co do ilosci rekordow i jezeli chcesz przeprowadzic dokładniejszą analize (np. na 1 minutowkach) czegokolwiek co ma wiecej niz 64k rekordow to raczej nie w excellu.
no i jeszcze ten czas potrzebny na przetworzenie danych... chyba, ze dysponujesz jakąś gigantyczna jednostką obliczeniowa.

ODPOWIEDZ