|
| | Усредненное движение валют - Программа расчета на (С++) | << | >> |
#include "stdafx.h"
#include "DlgMain.h"
#include "CDataBase.h"
#include "CHttpLoader.h"
#include "Utils.h"
#include "string.h"
#include "stdio.h"
CDataBase *db;
CHttpLoader* httpLoader;
//CData *dt;
// 2007.12.31 12:00
double gbpusd_0 = 2.00300000;
double eurgbp_0 = 0.73673333;
double gbpjpy_0 = 224.26333333;
double gbpchf_0 = 2.25123333;
double gbpaud_0 = 2.27860000;
double gbpcad_0 = 1.96390000;
double eursgd_0 = 2.11333333;
double eurnzd_0 = 1.90023333;
double usdhkd_0 = 7.80190000;
double gbpeur_0 = 1.0/eurgbp_0;
double sgdeur_0 = 1.0/eursgd_0;
double gbpsgd_0 = gbpeur_0/sgdeur_0;
double nzdeur_0 = 1.0/eurnzd_0;
double gbpnzd_0 = gbpeur_0/nzdeur_0;
double hkdusd_0 = 1.0/usdhkd_0;
double gbphkd_0 = gbpusd_0/hkdusd_0;
double usdgbp_0 = 1.0/gbpusd_0;
double usdeur_0 = usdgbp_0/eurgbp_0;
double jpygbp_0 = 1.0/gbpjpy_0;
double usdjpy_0 = usdgbp_0/jpygbp_0;
double chfgbp_0 = 1.0/gbpchf_0;
double usdchf_0 = usdgbp_0/chfgbp_0;
double audgbp_0 = 1.0/gbpaud_0;
double usdaud_0 = usdgbp_0/audgbp_0;
double cadgbp_0 = 1.0/gbpcad_0;
double usdcad_0 = usdgbp_0/cadgbp_0;
double usdsgd_0 = usdeur_0/sgdeur_0;
double usdnzd_0 = usdeur_0/nzdeur_0;
double eurusd_0 = eurgbp_0/usdgbp_0;
double eurjpy_0 = eurgbp_0/jpygbp_0;
double eurchf_0 = eurgbp_0/chfgbp_0;
double euraud_0 = eurgbp_0/audgbp_0;
double eurcad_0 = eurgbp_0/cadgbp_0;
double eurhkd_0 = eurusd_0/hkdusd_0;
double jpyusd_0 = 1.0/usdjpy_0;
double jpyeur_0 = 1.0/eurjpy_0;
double jpychf_0 = jpygbp_0/chfgbp_0;
double jpyaud_0 = jpygbp_0/audgbp_0;
double jpycad_0 = jpygbp_0/cadgbp_0;
double jpysgd_0 = jpyeur_0/sgdeur_0;
double jpynzd_0 = jpyeur_0/nzdeur_0;
double jpyhkd_0 = jpyusd_0/hkdusd_0;
double chfusd_0 = 1.0/usdchf_0;
double chfeur_0 = 1.0/eurchf_0;
double chfjpy_0 = 1.0/jpychf_0;
double chfaud_0 = chfgbp_0/audgbp_0;
double chfcad_0 = chfgbp_0/cadgbp_0;
double chfsgd_0 = chfeur_0/sgdeur_0;
double chfnzd_0 = chfeur_0/nzdeur_0;
double chfhkd_0 = chfusd_0/hkdusd_0;
double audusd_0 = 1.0/usdaud_0;
double audeur_0 = 1.0/euraud_0;
double audjpy_0 = 1.0/jpyaud_0;
double audchf_0 = 1.0/chfaud_0;
double audcad_0 = audgbp_0/cadgbp_0;
double audsgd_0 = audeur_0/sgdeur_0;
double audnzd_0 = audeur_0/nzdeur_0;
double audhkd_0 = audusd_0/hkdusd_0;
double cadusd_0 = 1.0/usdcad_0;
double cadeur_0 = 1.0/eurcad_0;
double cadjpy_0 = 1.0/jpycad_0;
double cadchf_0 = 1.0/chfcad_0;
double cadaud_0 = 1.0/audcad_0;
double cadsgd_0 = cadeur_0/sgdeur_0;
double cadnzd_0 = cadeur_0/nzdeur_0;
double cadhkd_0 = cadusd_0/hkdusd_0;
double sgdgbp_0 = 1.0/gbpsgd_0;
double sgdusd_0 = 1.0/usdsgd_0;
double sgdjpy_0 = 1.0/jpysgd_0;
double sgdchf_0 = 1.0/chfsgd_0;
double sgdaud_0 = 1.0/audsgd_0;
double sgdcad_0 = 1.0/cadsgd_0;
double sgdnzd_0 = sgdeur_0/nzdeur_0;
double sgdhkd_0 = sgdusd_0/hkdusd_0;
double nzdgbp_0 = 1.0/gbpnzd_0;
double nzdusd_0 = 1.0/usdnzd_0;
double nzdjpy_0 = 1.0/jpynzd_0;
double nzdchf_0 = 1.0/chfnzd_0;
double nzdaud_0 = 1.0/audnzd_0;
double nzdcad_0 = 1.0/cadnzd_0;
double nzdsgd_0 = 1.0/sgdnzd_0;
double nzdhkd_0 = nzdusd_0/hkdusd_0;
double hkdgbp_0 = 1.0/gbphkd_0;
double hkdeur_0 = 1.0/eurhkd_0;
double hkdjpy_0 = 1.0/jpyhkd_0;
double hkdchf_0 = 1.0/chfhkd_0;
double hkdaud_0 = 1.0/audhkd_0;
double hkdcad_0 = 1.0/cadhkd_0;
double hkdsgd_0 = 1.0/sgdhkd_0;
double hkdnzd_0 = 1.0/nzdhkd_0;
double gbpusd;
double eurgbp;
double gbpjpy;
double gbpchf;
double gbpaud;
double gbpcad;
double eursgd;
double eurnzd;
double usdhkd;
double gbpeur;
double sgdeur;
double gbpsgd;
double nzdeur;
double gbpnzd;
double hkdusd;
double gbphkd;
double usdgbp;
double usdeur;
double jpygbp;
double usdjpy;
double chfgbp;
double usdchf;
double audgbp;
double usdaud;
double cadgbp;
double usdcad;
double usdsgd;
double usdnzd;
double eurusd;
double eurjpy;
double eurchf;
double euraud;
double eurcad;
double eurhkd;
double jpyusd;
double jpyeur;
double jpychf;
double jpyaud;
double jpycad;
double jpysgd;
double jpynzd;
double jpyhkd;
double chfusd;
double chfeur;
double chfjpy;
double chfaud;
double chfcad;
double chfsgd;
double chfnzd;
double chfhkd;
double audusd;
double audeur;
double audjpy;
double audchf;
double audcad;
double audsgd;
double audnzd;
double audhkd;
double cadusd;
double cadeur;
double cadjpy;
double cadchf;
double cadaud;
double cadsgd;
double cadnzd;
double cadhkd;
double sgdgbp;
double sgdusd;
double sgdjpy;
double sgdchf;
double sgdaud;
double sgdcad;
double sgdnzd;
double sgdhkd;
double nzdgbp;
double nzdusd;
double nzdjpy;
double nzdchf;
double nzdaud;
double nzdcad;
double nzdsgd;
double nzdhkd;
double hkdgbp;
double hkdeur;
double hkdjpy;
double hkdchf;
double hkdaud;
double hkdcad;
double hkdsgd;
double hkdnzd;
double dataSrc[9];
double _gbp;
double _usd;
double _eur;
double _jpy;
double _chf;
double _aud;
double _cad;
double _sgd;
double _nzd;
double _hkd;
int step1()
{
for(int i = 0; i < 9; i++)
if(dataSrc[i] <= 0) return 0;
gbpusd = dataSrc[0];
eurgbp = dataSrc[1];
gbpjpy = dataSrc[2];
gbpchf = dataSrc[3];
gbpaud = dataSrc[4];
gbpcad = dataSrc[5];
eursgd = dataSrc[6];
eurnzd = dataSrc[7];
usdhkd = dataSrc[8];
gbpeur = 1.0/eurgbp;
sgdeur = 1.0/eursgd;
gbpsgd = gbpeur/sgdeur;
nzdeur = 1.0/eurnzd;
gbpnzd = gbpeur/nzdeur;
hkdusd = 1.0/usdhkd;
gbphkd = gbpusd/hkdusd;
usdgbp = 1.0/gbpusd;
usdeur = usdgbp/eurgbp;
jpygbp = 1.0/gbpjpy;
usdjpy = usdgbp/jpygbp;
chfgbp = 1.0/gbpchf;
usdchf = usdgbp/chfgbp;
audgbp = 1.0/gbpaud;
usdaud = usdgbp/audgbp;
cadgbp = 1.0/gbpcad;
usdcad = usdgbp/cadgbp;
usdsgd = usdeur/sgdeur;
usdnzd = usdeur/nzdeur;
eurusd = eurgbp/usdgbp;
eurjpy = eurgbp/jpygbp;
eurchf = eurgbp/chfgbp;
euraud = eurgbp/audgbp;
eurcad = eurgbp/cadgbp;
eurhkd = eurusd/hkdusd;
jpyusd = 1.0/usdjpy;
jpyeur = 1.0/eurjpy;
jpychf = jpygbp/chfgbp;
jpyaud = jpygbp/audgbp;
jpycad = jpygbp/cadgbp;
jpysgd = jpyeur/sgdeur;
jpynzd = jpyeur/nzdeur;
jpyhkd = jpyusd/hkdusd;
chfusd = 1.0/usdchf;
chfeur = 1.0/eurchf;
chfjpy = 1.0/jpychf;
chfaud = chfgbp/audgbp;
chfcad = chfgbp/cadgbp;
chfsgd = chfeur/sgdeur;
chfnzd = chfeur/nzdeur;
chfhkd = chfusd/hkdusd;
audusd = 1.0/usdaud;
audeur = 1.0/euraud;
audjpy = 1.0/jpyaud;
audchf = 1.0/chfaud;
audcad = audgbp/cadgbp;
audsgd = audeur/sgdeur;
audnzd = audeur/nzdeur;
audhkd = audusd/hkdusd;
cadusd = 1.0/usdcad;
cadeur = 1.0/eurcad;
cadjpy = 1.0/jpycad;
cadchf = 1.0/chfcad;
cadaud = 1.0/audcad;
cadsgd = cadeur/sgdeur;
cadnzd = cadeur/nzdeur;
cadhkd = cadusd/hkdusd;
sgdgbp = 1.0/gbpsgd;
sgdusd = 1.0/usdsgd;
sgdjpy = 1.0/jpysgd;
sgdchf = 1.0/chfsgd;
sgdaud = 1.0/audsgd;
sgdcad = 1.0/cadsgd;
sgdnzd = sgdeur/nzdeur;
sgdhkd = sgdusd/hkdusd;
nzdgbp = 1.0/gbpnzd;
nzdusd = 1.0/usdnzd;
nzdjpy = 1.0/jpynzd;
nzdchf = 1.0/chfnzd;
nzdaud = 1.0/audnzd;
nzdcad = 1.0/cadnzd;
nzdsgd = 1.0/sgdnzd;
nzdhkd = nzdusd/hkdusd;
hkdgbp = 1.0/gbphkd;
hkdeur = 1.0/eurhkd;
hkdjpy = 1.0/jpyhkd;
hkdchf = 1.0/chfhkd;
hkdaud = 1.0/audhkd;
hkdcad = 1.0/cadhkd;
hkdsgd = 1.0/sgdhkd;
hkdnzd = 1.0/nzdhkd;
return 1;
}
void step2()
{
_gbp = 100.0*
(
(gbpusd - gbpusd_0)/gbpusd_0 +
(gbpeur - gbpeur_0)/gbpeur_0 +
(gbpjpy - gbpjpy_0)/gbpjpy_0 +
(gbpchf - gbpchf_0)/gbpchf_0 +
(gbpaud - gbpaud_0)/gbpaud_0 +
(gbpcad - gbpcad_0)/gbpcad_0 +
(gbpsgd - gbpsgd_0)/gbpsgd_0 +
(gbpnzd - gbpnzd_0)/gbpnzd_0 +
(gbphkd - gbphkd_0)/gbphkd_0
)/9.0;
_usd = 100.0*
(
(usdgbp - usdgbp_0)/usdgbp_0 +
(usdeur - usdeur_0)/usdeur_0 +
(usdjpy - usdjpy_0)/usdjpy_0 +
(usdchf - usdchf_0)/usdchf_0 +
(usdaud - usdaud_0)/usdaud_0 +
(usdcad - usdcad_0)/usdcad_0 +
(usdsgd - usdsgd_0)/usdsgd_0 +
(usdnzd - usdnzd_0)/usdnzd_0 +
(usdhkd - usdhkd_0)/usdhkd_0
)/9.0;
_eur = 100.0*
(
(eurgbp - eurgbp_0)/eurgbp_0 +
(eurusd - eurusd_0)/eurusd_0 +
(eurjpy - eurjpy_0)/eurjpy_0 +
(eurchf - eurchf_0)/eurchf_0 +
(euraud - euraud_0)/euraud_0 +
(eurcad - eurcad_0)/eurcad_0 +
(eursgd - eursgd_0)/eursgd_0 +
(eurnzd - eurnzd_0)/eurnzd_0 +
(eurhkd - eurhkd_0)/eurhkd_0
)/9.0;
_jpy = 100.0*
(
(jpygbp - jpygbp_0)/jpygbp_0 +
(jpyusd - jpyusd_0)/jpyusd_0 +
(jpyeur - jpyeur_0)/jpyeur_0 +
(jpychf - jpychf_0)/jpychf_0 +
(jpyaud - jpyaud_0)/jpyaud_0 +
(jpycad - jpycad_0)/jpycad_0 +
(jpysgd - jpysgd_0)/jpysgd_0 +
(jpynzd - jpynzd_0)/jpynzd_0 +
(jpyhkd - jpyhkd_0)/jpyhkd_0
)/9.0;
_chf = 100.0*
(
(chfgbp - chfgbp_0)/chfgbp_0 +
(chfusd - chfusd_0)/chfusd_0 +
(chfeur - chfeur_0)/chfeur_0 +
(chfjpy - chfjpy_0)/chfjpy_0 +
(chfaud - chfaud_0)/chfaud_0 +
(chfcad - chfcad_0)/chfcad_0 +
(chfsgd - chfsgd_0)/chfsgd_0 +
(chfnzd - chfnzd_0)/chfnzd_0 +
(chfhkd - chfhkd_0)/chfhkd_0
)/9.0;
_aud = 100.0*
(
(audgbp - audgbp_0)/audgbp_0 +
(audusd - audusd_0)/audusd_0 +
(audeur - audeur_0)/audeur_0 +
(audjpy - audjpy_0)/audjpy_0 +
(audchf - audchf_0)/audchf_0 +
(audcad - audcad_0)/audcad_0 +
(audsgd - audsgd_0)/audsgd_0 +
(audnzd - audnzd_0)/audnzd_0 +
(audhkd - audhkd_0)/audhkd_0
)/9.0;
_cad = 100.0*
(
(cadgbp - cadgbp_0)/cadgbp_0 +
(cadusd - cadusd_0)/cadusd_0 +
(cadeur - cadeur_0)/cadeur_0 +
(cadjpy - cadjpy_0)/cadjpy_0 +
(cadchf - cadchf_0)/cadchf_0 +
(cadaud - cadaud_0)/cadaud_0 +
(cadsgd - cadsgd_0)/cadsgd_0 +
(cadnzd - cadnzd_0)/cadnzd_0 +
(cadhkd - cadhkd_0)/cadhkd_0
)/9.0;
_sgd = 100.0*
(
(sgdgbp - sgdgbp_0)/sgdgbp_0 +
(sgdusd - sgdusd_0)/sgdusd_0 +
(sgdeur - sgdeur_0)/sgdeur_0 +
(sgdjpy - sgdjpy_0)/sgdjpy_0 +
(sgdchf - sgdchf_0)/sgdchf_0 +
(sgdaud - sgdaud_0)/sgdaud_0 +
(sgdcad - sgdcad_0)/sgdcad_0 +
(sgdnzd - sgdnzd_0)/sgdnzd_0 +
(sgdhkd - sgdhkd_0)/sgdhkd_0
)/9.0;
_nzd = 100.0*
(
(nzdgbp - nzdgbp_0)/nzdgbp_0 +
(nzdusd - nzdusd_0)/nzdusd_0 +
(nzdeur - nzdeur_0)/nzdeur_0 +
(nzdjpy - nzdjpy_0)/nzdjpy_0 +
(nzdchf - nzdchf_0)/nzdchf_0 +
(nzdaud - nzdaud_0)/nzdaud_0 +
(nzdcad - nzdcad_0)/nzdcad_0 +
(nzdsgd - nzdsgd_0)/nzdsgd_0 +
(nzdhkd - nzdhkd_0)/nzdhkd_0
)/9.0;
_hkd = 100.0*
(
(hkdgbp - hkdgbp_0)/hkdgbp_0 +
(hkdusd - hkdusd_0)/hkdusd_0 +
(hkdeur - hkdeur_0)/hkdeur_0 +
(hkdjpy - hkdjpy_0)/hkdjpy_0 +
(hkdchf - hkdchf_0)/hkdchf_0 +
(hkdaud - hkdaud_0)/hkdaud_0 +
(hkdcad - hkdcad_0)/hkdcad_0 +
(hkdsgd - hkdsgd_0)/hkdsgd_0 +
(hkdnzd - hkdnzd_0)/hkdnzd_0
)/9.0;
}
char *filePath="C:\\Program Files\\MetaTrader - Alpari\\experts\\files\\";
void stripEnd(char*s)
{
int n = strlen(s);
if(n < 1) return;
for(int i = n-1; i >0; i--)
{
if(s[i]>= ' ') break;
s[i] = 0;
}
}
int lastWriteFile(FILETIME* ft1)
{
__int64 t1,t2;
memcpy(&t1,ft1,sizeof(__int64));
t1 = t1 & 0x00ffffffffffffff;
t1 /= 10000000;
FILETIME ft2;
SYSTEMTIME st;
GetSystemTime(&st);
SystemTimeToFileTime(&st, &ft2);
memcpy(&t2,&ft2,sizeof(__int64));
t2 = t2 & 0x00ffffffffffffff;
t2 /= 10000000;
return int(t2 - t1);
}
void scanFile(FILETIME* ft,char* fn)
{
char name[1024];
//char name2[1024];
int t = lastWriteFile(ft);
if(t < 50) return;
//if(t > 600) return;
sprintf(name,"%s%s",filePath,fn);
char line1[512];
char line2[512];
FILE *f = fopen(name,"rt");
if(f == 0)return;
if(fgets(line1,511,f) != 0)
{
stripEnd(line1);
while(fgets(line2,511,f) != 0)
{
stripEnd(line2);
db->setValue(line2);
}
}
fclose(f);
char key[20];
CData* dt;
int n = 0;
int k;
char s[1024];
strcpy(s,"GBP USD EUR JPY CHF AUD CAD SGD NZD HKD");
httpLoader->reset();
httpLoader->addPrmOut("VALUTA",s);
httpLoader->addPrmOut("COLS","10");
db->iterBegin();
double d1,d2,d3,d4;
char dttm1[512];
char dttm2[512];
while(db->iterGetData(key,&dt))
{
db->iterNext();
if(!dt)break;
if(dt->z)continue;
k = sscanf(dt->s,"%s %s %Lf %Lf %Lf %Lf %Lf %Lf %Lf %Lf %Lf",
dttm1,dttm2,
&dataSrc[0],&dataSrc[1],&dataSrc[2],&dataSrc[3],&dataSrc[4],
&dataSrc[5],&dataSrc[6],&dataSrc[7],&dataSrc[8]);
if(k != 11) continue;
if(!step1()) continue;
step2();
dttm1[4]='-';
dttm1[7]='-';
dttm1[10]=0;
strcat(dttm2,":00");
sprintf(s,"%s %s %.4Lf %.4Lf %.4Lf %.4Lf %.4Lf %.4Lf %.4Lf %.4Lf %.4Lf %.4Lf",
dttm1,dttm2,
_gbp,_usd,_eur,_jpy,_chf,_aud,_cad,_sgd,_nzd,_hkd
);
sprintf(key,"ROW%i",n);
httpLoader->addPrmOut(key,s);
n++;
//if(n > 40) break;
}
if(n == 0) return;
itoa(n,s,10);
httpLoader->addPrmOut("ROWS",s);
httpLoader->load();
if(httpLoader->serverAnswer == 200)db->setOk();
n++;
}
// CDlgMain
CDlgMain::CDlgMain()
{
}
CDlgMain::~CDlgMain()
{
}
LRESULT CDlgMain::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam,
BOOL& bHandled)
{
CAxDialogImpl::OnInitDialog(uMsg, wParam, lParam, bHandled);
bHandled = TRUE;
SendDlgItemMessage(IDC_LIST1,LB_RESETCONTENT,0,0);
startNetAndRand();
db = new CDataBase();
httpLoader = new CHttpLoader();
return 1;
}
LRESULT CDlgMain::OnClickedCancel(WORD wNotifyCode, WORD wID, HWND hWndCtl,
BOOL& bHandled)
{
EndDialog(wID);
return 0;
}
LRESULT CDlgMain::OnBnClickedButton1(WORD /*wNotifyCode*/,
WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
HANDLE hFind;
WIN32_FIND_DATA FindFileData;
char DirSpec[1024];
char p[1024];
SendDlgItemMessage(IDC_LIST1,LB_RESETCONTENT,0,0);
sprintf(DirSpec,"%s%s",filePath,"*.fbn");
hFind = FindFirstFile(DirSpec, &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
sprintf(p,"Invalid File Handle. GetLastError reports %d", GetLastError ());
SendDlgItemMessage(IDC_LIST1,LB_ADDSTRING,NULL,(LPARAM)p);
return (0);
}
SendDlgItemMessage(IDC_LIST1,LB_ADDSTRING,NULL,(LPARAM)FindFileData.cFileName);
scanFile(&FindFileData.ftLastWriteTime,FindFileData.cFileName);
int t3 = lastWriteFile(&FindFileData.ftLastWriteTime);
char bb[256];
itoa(t3,bb,10);
SendDlgItemMessage(IDC_LIST1,LB_ADDSTRING,NULL,(LPARAM)bb);
while (FindNextFile(hFind, &FindFileData) != 0)
{
SendDlgItemMessage(IDC_LIST1,LB_ADDSTRING,NULL,(LPARAM)FindFileData.cFileName);
scanFile(&FindFileData.ftLastWriteTime,FindFileData.cFileName);
}
FindClose(hFind);
return 0;
}
|
|
|