//+------------------------------------------------------------------+
//| COT_Reports.mq4 |
//| D!m@n |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "D!m@n"
#property link "http://www.metaquotes.net"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
//#property indicator_minimum -20
//#property indicator_maximum 20
extern string name="eur_Comm.csv";
extern int period=0;
int Q,Sh,f,max,min,flag,J;
double Buffer1[];
double Buffer2[5000];
double N1,N2,Max,Min,Nh;
string A,B,C,D,E,F,date,G;
datetime time;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_HISTOGRAM,0,2);
//SetIndexStyle(1,DRAW_NONE,0,1);
SetIndexBuffer(0,Buffer1);
//SetIndexBuffer(1,Buffer2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
int handle=FileOpen(name,FILE_READ,";");
//int handle2 = FileOpen("prov.csv",FILE_CSV|FILE_WRITE,";");
//int handle3 = FileOpen("prov2.csv",FILE_CSV|FILE_WRITE,";");
A=FileReadString(handle);
//----------характеристика индикатора-------------------------
IndicatorShortName(A);
IndicatorDigits(1);
SetIndexLabel(0,"Осциллятор COT");
SetLevelValue(0,0);
SetLevelStyle(STYLE_DOT,1,DarkGray);
//------------------------------------------------------------
flag=0;
if(newBar())
{
while(!FileIsEnding(handle))
{
B="";
while(B=="" || B==" ")
{
B=FileReadString(handle);
if(FileIsEnding(handle))break;
}
C="";
while(C=="" || C==" ")
{
C=FileReadString(handle);
if(FileIsEnding(handle))break;
}
D="";
while(D=="" || D==" ")
{
D=FileReadString(handle);
if(FileIsEnding(handle))break;
}
E="";
while(E=="" || E==" ")
{
E=FileReadString(handle);
if(FileIsEnding(handle))break;
}
F="";
while(F=="" || F==" ")
{
F=FileReadString(handle);
if(FileIsEnding(handle))break;
}
//Print(B+" "+C+" "+D+" "+E+" "+F);
//break;
date=D+"."+C+"."+B+" 00:00";
if(date==".. 00:00")break;
time=StrToTime(date);
for(int b=0;b<iBars(Symbol(),PERIOD_D1);b++)
{
if(time-iTime(Symbol(),PERIOD_D1,b)<518400 && time-iTime(Symbol(),PERIOD_D1,b)>0)
{
time=iTime(Symbol(),PERIOD_D1,b);
break;
}
}
N1=StrToDouble(E); //длинные
N2=StrToDouble(F); //короткие
if(time-iTime(Symbol(),PERIOD_D1,Bars-1)>=0)Sh=iBarShift(Symbol(),PERIOD_D1,time);
if(time-iTime(Symbol(),PERIOD_D1,Bars-1)<-1000)Sh++;
if(flag==0)
{
J=Sh;
flag=1;
}
if(N1!=0)Nh=N1-N2;
if(N1==0) N1=Nh;
Buffer2[Sh]=N1-N2; //спред длинные - короткие
//Print(Buffer2[Sh]);
//FileWrite(handle2,Sh,date,N1,N2,Buffer2[Sh]);
}
//FileClose(handle2);
for(b=J;b<Sh;b++)
{
max=ArrayMaximum(Buffer2,period,b);
min=ArrayMinimum(Buffer2,period,b);
Max=Buffer2[max];
Min=Buffer2[min];
//Print(Max," ",Min);
//FileWrite(handle3,b,Max," ",Min);
Buffer1[b]=Buffer2[b];
//Print(Buffer1[b]);
}
//FileClose(handle3);
}
FileClose(handle);
return(0);
}
//+------------------------------------------------------------------+
bool newBar()
{
bool a=false;
if(Bars!=Q)
{
Q=Bars;
a=true;
}
return(a);
}
//+------------------------------------------------------------------+
Comm;;;;;;;
;15;12;2015;159943;0;;
;8;12;2015;172767;0;;
;1;12;2015;193332;0;;
;24;11;2015;163809;0;;
;17;11;2015;150669;0;;
;10;11;2015;131524;0;;
;3;11;2015;131142;0;;
;27;10;2015;115137;0;;
;20;10;2015;89409;0;;
;13;10;2015;92775;0;;
Но есть одно но, он общий профит/убыток показывает, а не у каждой сделки отдельно, если их несколько.
//+------------------------------------------------------------------+
//| MiddlePrice.mq4 |
//| Copyright 2015, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
#property show_inputs
input int Shift = 55; // сдвиг метки влево
input string FileNameBuy = "20151219_BUY.txt"; // файл бай
input string FileNameSell = "20151219_SELL.txt"; // файл селл
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutLable(string name,double price,color clr)
{
ObjectDelete(0,name);
//---создадим ценовую метку
ObjectCreate(0,name,OBJ_ARROW_RIGHT_PRICE,0,Time[Shift],price);
//--- установим цвет метки
ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим стиль окаймляющей линии
ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_SOLID);
//--- установим размер метки
ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
int count1=0,count2=0;
double sum1=0,mid1=0,sum2=0,mid2=0;
//--- откроем файл
ResetLastError();
int file_handle=FileOpen(FileNameBuy,FILE_READ|FILE_TXT);
if(file_handle!=INVALID_HANDLE)
{
PrintFormat("Файл %s открыт для чтения",FileNameBuy);
PrintFormat("Путь к файлу: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
//--- вспомогательные переменные
int str_size;
string str;
//--- прочитаем данные из файла
while(!FileIsEnding(file_handle))
{
//--- узнаем сколько символов использовано для записи времени
str_size=FileReadInteger(file_handle,INT_VALUE);
//--- прочитаем строку
str=FileReadString(file_handle,str_size);
//--- распечатаем строку
PrintFormat(str);
count1++;
sum1+=StringToDouble(str);
}
//--- закроем файл
FileClose(file_handle);
PrintFormat("Данные прочитаны, файл %s закрыт",FileNameBuy);
}
else
PrintFormat("Не удалось открыть файл %s, Код ошибки = %d",FileNameBuy,GetLastError());
//--- откроем файл
ResetLastError();
int file_handle2=FileOpen(FileNameSell,FILE_READ|FILE_TXT);
if(file_handle2!=INVALID_HANDLE)
{
PrintFormat("Файл %s открыт для чтения",FileNameSell);
PrintFormat("Путь к файлу: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
//--- вспомогательные переменные
int str_size;
string str;
//--- прочитаем данные из файла
while(!FileIsEnding(file_handle2))
{
//--- узнаем сколько символов использовано для записи времени
str_size=FileReadInteger(file_handle2,INT_VALUE);
//--- прочитаем строку
str=FileReadString(file_handle2,str_size);
//--- распечатаем строку
PrintFormat(str);
count2++;
sum2+=StringToDouble(str);
}
//--- закроем файл
FileClose(file_handle2);
PrintFormat("Данные прочитаны, файл %s закрыт",FileNameSell);
}
else
PrintFormat("Не удалось открыть файл %s, Код ошибки = %d",FileNameSell,GetLastError());
mid1=sum1/count1;
mid2=sum2/count2;
PutLable("Labale"+FileNameBuy,mid1,Blue);
PutLable("Labale"+FileNameSell,mid2,Red);
Comment("\n CountBuy: ",count1,
"\n SumBuy: ",DoubleToString(sum1,Digits),
"\n MidBuy: ",DoubleToString(mid1,Digits),
"\n CountSell: ",count2,
"\n SumSell: ",DoubleToString(sum2,Digits),
"\n MidSell: ",DoubleToString(mid2,Digits));
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| MiddlePrice.mq4 |
//| Copyright 2015, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
#property show_inputs
input string FileName="20151219_BUY.txt";
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
int count=0;
double sum=0,mid=0;
//--- откроем файл
ResetLastError();
int file_handle=FileOpen(FileName,FILE_READ|FILE_TXT);
if(file_handle!=INVALID_HANDLE)
{
PrintFormat("Файл %s открыт для чтения",FileName);
PrintFormat("Путь к файлу: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
//--- вспомогательные переменные
int str_size;
string str;
//--- прочитаем данные из файла
while(!FileIsEnding(file_handle))
{
//--- узнаем сколько символов использовано для записи времени
str_size=FileReadInteger(file_handle,INT_VALUE);
//--- прочитаем строку
str=FileReadString(file_handle,str_size);
//--- распечатаем строку
PrintFormat(str);
count++;
sum+=StringToDouble(str);
}
//--- закроем файл
FileClose(file_handle);
PrintFormat("Данные прочитаны, файл %s закрыт",FileName);
}
else
PrintFormat("Не удалось открыть файл %s, Код ошибки = %d",FileName,GetLastError());
mid=sum/count;
Comment("\n Count: ",count,
"\n Sum: ",sum,
"\n Mid: ",mid);
}
//+------------------------------------------------------------------+
А все началось с того, что у меня человек спросил, как ему лот в советнике mq5 поменять.
2015.12.18 08:43:08.885 2015.12.09 04:59:58 deal performed [#1057 buy 0.50 EURUSD at 1.09032]
Задание простое. В этом советнике: www.mql5.com/en/code/1896 добавить возможность менять лот и чтобы сделки закрывались только по tp/sl, а то иногда они не только так закрываются.
я тут вновь заинтересовалась mql5
AM2