//+------------------------------------------------------------------+
//| +OPTIONS_VOLUME.mq4 |
//| Copyright © 2009, Xrust Solution. |
//| http://www.xrust.uco.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Xrust Solution."
#property link "http://www.xrust.uco.net"
#import "user32.dll"
int GetWindowDC(int dc);
int ReleaseDC(int h, int dc);
bool GetWindowRect(int h, int& pos[4]);
#import
#import "gdi32.dll"
int GetPixel(int dc, int x, int y);
#import
#import "wininet.dll"
int InternetAttemptConnect (int x);
int InternetOpenA(string sAgent, int lAccessType, string sProxyName = "", string sProxyBypass = "", int lFlags = 0);
int InternetOpenUrlA(int hInternetSession, string sUrl, string sHeaders = "", int lHeadersLength = 0,int lFlags = 0, int lContext = 0);
int InternetReadFile(int hFile, int& sBuffer[], int lNumBytesToRead,int& lNumberOfBytesRead[]);
int InternetCloseHandle(int hInet);
#import
extern string ïðåôèêñ = "";
extern string ñóôôèêñ = "";
extern bool Ïîêàçûâàòü_òåêñò = true;
extern bool Ïîêàçûâàòü_ôîíîì = true;
extern bool Ëèíèÿ_èëè_Êâàäðàò= false;
extern int ðàçìåð_øðèôòà = 14;
extern string èìÿ_øðèôòà = "Arial";
extern int Òîëùèíà_ëèíèé = 7;
extern int Ñìåùåíèå_â_áàðàõ = 0;
extern color Öâåò_ïðåäëîæåíèÿ = Coral;
extern color Öâåò_ñïðîñà = CornflowerBlue;
color Öâ_ñìåùåíèå ;
double in[15][3];
double hist[1000][61];
double prom[61];
double mno=1;
int Win_color;
int prewtime;
string inetpacth="http://xrust.land.ru//";
string name="";
#property indicator_chart_window
//+------------------------------------------------------------------+
void init(){
int len=0,strlen=0;
if(ïðåôèêñ!=""){len=StringLen(ïðåôèêñ)-1;name=StringSubstr(Symbol(),len,0);}
if(ñóôôèêñ!=""){len=StringLen(ñóôôèêñ);strlen=StringLen(Symbol());name=StringSubstr(Symbol(),0,(strlen-len+1));}
prewtime=0;
IndicatorShortName("Open Interest indicatorXR © ");
return;}
//+------------------------------------------------------------------+
void deinit(){
if(UninitializeReason()==REASON_REMOVE||UninitializeReason()==REASON_CHARTCLOSE){FileDelete(Symbol()+"_OI.csv");delgr();}
return;}
//+------------------------------------------------------------------+
void start(){static int prewmno,bpch;
int indco=IndicatorCounted();
if(indco-Bars<-1){return;}
//----
if(prewtime<TimeCurrent()-1800){
prewtime=TimeCurrent();
readinet(name);
ReadFile();
}
if(GetWndColor(Symbol())>0){Öâ_ñìåùåíèå=Blue;color txcol=Black;}else{txcol=White;Öâ_ñìåùåíèå=Green;}
int b1=5,b2=6;
if(bpch!=WindowBarsPerChart()){bpch=WindowBarsPerChart();}
if(bpch>1000){b1=50;b2=150;}
if(bpch>500&&bpch<1000){b1=23;b2=75;}
if(bpch>200&&bpch<500){b1=13;b2=38;}
if(bpch>100&&bpch<220){b1=8;b2=20;}
if(bpch>50&&bpch<100){b1=5;b2=11;}
if(bpch<50){b1=3;b2=6;}
int barst=Time[Ñìåùåíèå_â_áàðàõ]+Period()*b1*60;
int baren=Time[Ñìåùåíèå_â_áàðàõ]+Period()*b2*60;
int dl=baren-barst;
double razn=MathAbs(in[0][1]-in[1][1]);
double sumbuy,sumsell;
for(int i=0;i<15;i++){
double prise=in[i][1];
int sell= in[i][0];
int buy = in[i][2];
if(buy==0){buy=1;}
if(sell==0){sell=1;}
sumbuy=sumbuy+buy;
sumsell=sumsell+sell;
double bs = buy+sell;
if(bs<1)bs=1;
double kf = dl/bs;
int _sell=kf*sell;
int _buy=kf*buy;
if(Ëèíèÿ_èëè_Êâàäðàò){
if(Ïîêàçûâàòü_òåêñò)SetText("sell",Öâåò_ïðåäëîæåíèÿ,barst,prise,DoubleToStr(sell,0),ðàçìåð_øðèôòà);
if(sell>0)SetTLine(Öâåò_ïðåäëîæåíèÿ,"sell",barst+_sell,prise,barst,prise," "+sell);
}else{
if(Ïîêàçûâàòü_òåêñò)SetText("sell",Öâåò_ïðåäëîæåíèÿ+Öâ_ñìåùåíèå,barst,prise,DoubleToStr(sell,0),ðàçìåð_øðèôòà);
SetRestangle(Öâåò_ïðåäëîæåíèÿ,"sell",barst+_sell,prise,barst,prise-razn," "+sell);
}
if(Ëèíèÿ_èëè_Êâàäðàò){
if(Ïîêàçûâàòü_òåêñò)SetText("buy",Öâåò_ñïðîñà,baren,prise,DoubleToStr(buy,0),ðàçìåð_øðèôòà);
if(buy>0)SetTLine(Öâåò_ñïðîñà,"buy",baren,prise,baren-_buy,prise,buy);
}else{
if(Ïîêàçûâàòü_òåêñò)SetText("buy",Öâåò_ñïðîñà+Öâ_ñìåùåíèå,baren,prise,DoubleToStr(buy,0),ðàçìåð_øðèôòà);
SetRestangle(Öâåò_ñïðîñà,"buy",baren,prise,baren-_buy,prise-razn,buy);
}
}
string data="Total oi = "+DoubleToStr(sumbuy+sumsell,0)+" oi buy = "+DoubleToStr(sumbuy,0)+" oi sell = "+DoubleToStr(sumsell,0)+" sell/buy = "+DoubleToStr(sumsell/sumbuy,2);
string copyrite="Open Interest indicatorXR © ";
SetLabel("Times new roman","cp",copyrite,txcol,1,1,1,9);
SetLabel(èìÿ_øðèôòà,"oi",data,txcol,1,12,1,ðàçìåð_øðèôòà);
//----
return;}
//+------------------------------------------------------------------+
void readinet(string nm="")
{if(nm==""){nm=Symbol()+"_OI.csv";}else{nm=nm+"_OI.csv";}
if(!IsDllsAllowed()){
Alert("Íåîáõîäèìî â íàñòðîéêàõ ðàçðåøèòü èñïîëüçîâàíèå DLL");
return(0);
}
int rv = InternetAttemptConnect(0);
if(rv != 0){
Print("Îøèáêà ïðè âûçîâå InternetAttemptConnect()");
return(0);
}
int hInternetSession = InternetOpenA("Microsoft Internet Explorer",0, "", "", 0);
if(hInternetSession <= 0){
Print("Îøèáêà ïðè âûçîâå InternetOpenA()");
return(0);
}
int hURL = InternetOpenUrlA(hInternetSession,inetpacth+nm, "", 0, 0, 0);
if(hURL <= 0){
Print("Îøèáêà ïðè âûçîâå InternetOpenUrlA()");
InternetCloseHandle(hInternetSession);
return;
}
int cBuffer[256];
ArrayInitialize(cBuffer,0);
int dwBytesRead[1];
ArrayInitialize(dwBytesRead,0);
string TXT = "";
while(!IsStopped()){
bool bResult = InternetReadFile(hURL, cBuffer, 1024, dwBytesRead);
if(dwBytesRead[0] == 0)break;
string text = "";
for(int i = 0; i < 256; i++){
text = text + CharToStr(cBuffer[i] & 0x000000FF);
if(StringLen(text) == dwBytesRead[0])break;
text = text + CharToStr(cBuffer[i] >> 8 & 0x000000FF);
if(StringLen(text) == dwBytesRead[0])break;
text = text + CharToStr(cBuffer[i] >> 16 & 0x000000FF);
if(StringLen(text) == dwBytesRead[0])break;
text = text + CharToStr(cBuffer[i] >> 24 & 0x000000FF);
}
TXT = TXT + text;
Sleep(1);
}
if(TXT != ""){
int h = FileOpen(nm, FILE_CSV|FILE_WRITE);
if(h>0){
FileWrite(h,TXT);
FileClose(h);
}else{
int err=GetLastError();
Print("Îøèáêà ïðè âûçîâå FileOpen() ¹ ",err);
}
}else{Print("Íåò ñ÷èòàííûõ äàííûõ");}
InternetCloseHandle(hInternetSession);
return;}
//+------------------------------------------------------------------+
int GetWndColor(string sy)
{
int hWnd = WindowHandle(sy, Period());
int hDC = GetWindowDC(hWnd);
int rect[4];
GetWindowRect(hWnd, rect);
int wW = rect[2] - rect[0]; // øèðèíà îêíà
int wH = rect[3] - rect[1]; // âûñîòà îêíà
int col = GetPixel(hDC, 2, 2);
if(col==-1) // ëåâûé âåðõíèé óãîë íå âèäåí
{
col = GetPixel(hDC, wW-3, wH-3);
if(col==-1) // ïðàâûé íèæíèé óãîë íå âèäåí
col = GetPixel(hDC, 2, wH-3);
if(col==-1) // ëåâûé íèæíèé óãîë íå âèäåí
col = GetPixel(hDC, wW-3, 2);
if(col==-1) // ïðàâûé âåðõíèé óãîë íå âèäåí
{
ReleaseDC(hWnd, hDC);
return(Win_color);
}
}
ReleaseDC(hWnd, hDC);
return(col);
}
//+------------------------------------------------------------------+
void SetLabel(string fn,string nm, string tx, color cl, int xd, int yd, int cr=0, int fs=9) {
if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
ObjectSetText(nm, tx,fs,fn, cl);
ObjectSet(nm, OBJPROP_COLOR , cl);
ObjectSet(nm, OBJPROP_XDISTANCE, xd);
ObjectSet(nm, OBJPROP_YDISTANCE, yd);
ObjectSet(nm, OBJPROP_CORNER , cr);
ObjectSet(nm, OBJPROP_FONTSIZE , fs);
ObjectSet(nm, OBJPROP_BACK , false);
}
//+------------------------------------------------------------------+
void delgr(){
for(int i=ObjectsTotal();i>=0;i--){
if("sumoi"==StringSubstr(ObjectName(i),0,5)){ObjectDelete(ObjectName(i));}
if("opint"==StringSubstr(ObjectName(i),0,5)){ObjectDelete(ObjectName(i));}
}
ObjectDelete("oi");
ObjectDelete("cp");
return;
}
//+------------------------------------------------------------------+
void SetText(string op,color cl,int t1,double p1,string tx="",int razm=8){
string nm="sumoi"+op+DoubleToStr(p1,Digits);
if(ObjectFind(nm)<0)ObjectCreate(nm, OBJ_TEXT, 0, 0,0, 0,0);
ObjectSet(nm, OBJPROP_TIME1 , t1);
ObjectSet(nm, OBJPROP_PRICE1, p1);
ObjectSetText(nm,tx,razm,èìÿ_øðèôòà,cl);
ObjectSet(nm, OBJPROP_BACK , Ïîêàçûâàòü_ôîíîì);
return;
}
//+------------------------------------------------------------------+
void SetTLine(color cl, string nm="",
datetime t1=0, double p1=0, datetime t2=0, double p2=0,string vol="") {
nm="opint "+nm+p1;
if(ObjectFind(nm)<0)ObjectCreate(nm, OBJ_TREND, 0, 0,0, 0,0);
ObjectSet(nm, OBJPROP_TIME1 , t1);
ObjectSet(nm, OBJPROP_PRICE1, p1);
ObjectSet(nm, OBJPROP_TIME2 , t2);
ObjectSet(nm, OBJPROP_PRICE2, p2);
ObjectSet(nm, OBJPROP_COLOR , cl);
ObjectSet(nm, OBJPROP_RAY , false);
ObjectSet(nm, OBJPROP_STYLE , 0);
ObjectSet(nm, OBJPROP_WIDTH , Òîëùèíà_ëèíèé);
ObjectSetText(nm,vol,3,"Arial",White);
ObjectSet(nm, OBJPROP_BACK , Ïîêàçûâàòü_ôîíîì);
}
//+------------------------------------------------------------------+
void SetRestangle(color cl, string nm="",datetime t1=0, double p1=0,
datetime t2=0, double p2=0,string vol=""){
nm="opint "+nm+p1;
if(ObjectFind(nm)<0)ObjectCreate(nm, OBJ_RECTANGLE, 0, 0,0, 0,0);
ObjectSet(nm, OBJPROP_TIME1 , t2);
ObjectSet(nm, OBJPROP_PRICE1, p1);
ObjectSet(nm, OBJPROP_TIME2 , t1);
ObjectSet(nm, OBJPROP_PRICE2, p2);
ObjectSet(nm, OBJPROP_COLOR , cl);
ObjectSet(nm, OBJPROP_RAY , false);
ObjectSet(nm, OBJPROP_STYLE , 0);
ObjectSet(nm, OBJPROP_WIDTH , Òîëùèíà_ëèíèé);
ObjectSetText(nm,vol,3,"Arial",White);
ObjectSet(nm, OBJPROP_BACK , Ïîêàçûâàòü_ôîíîì);
}
//+------------------------------------------------------------------+
bool ReadFile(){int i,x,y;int hd;
string fn=Symbol()+"_OI.csv";
double spr=MarketInfo(Symbol(),MODE_SPREAD)*Point;
hd=FileOpen(fn,FILE_CSV|FILE_READ);
if(hd<0){
Print(GetLastError()," ",fn," File not found",hd);
return(false);
}else{
for(i=0;i<50;i++){
string out=FileReadString(hd);
for(x=0;x<4;x++){
int pos=StringFind(out,",",0);
in[i][x]=StrToDouble(StringSubstr(out,0,pos+1));
out=StringSubstr(out,pos+1,0);
}
if(FileIsEnding(hd)){break;}
}
ArrayResize(in,i);
FileClose(hd);
return(true);
}
return(true);
}
Comments