//+------------------------------------------------------------------+
//| HandTester3.mq4 |
//| Copyright 2019, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
//--- Inputs
extern double KTake = 2; // увеличение тейка
extern int BULevel = 150; // уровень БУ
extern int BUPoint = 30; // пункты БУ
extern int TrailingStop = 200; // трал
extern int TrailingStep = 20; // шаг трала
extern int Slip = 30; // реквот
extern int Magic = 123; // магик
double lot=1;
double risk=1;
double stop=0;
double take=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
PutButton("B",140,30,"BUY");
PutButton("S",80,30,"SELL");
PutEdit("R",90,70,"1000");
PutLable("LR",140,67,"RISK $");
PutEdit("T",90,100,"");
PutLable("LT",115,97,"TP");
PutEdit("L",90,130,"1.1060");
PutLable("LL",115,127,"SL");
PutEdit("P",90,160,"");
PutLable("LP",115,157,"PR");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
ObjectDelete(0,"B");
ObjectDelete(0,"S");
ObjectDelete(0,"R");
ObjectDelete(0,"LR");
ObjectDelete(0,"T");
ObjectDelete(0,"LT");
ObjectDelete(0,"L");
ObjectDelete(0,"LL");
ObjectDelete(0,"P");
ObjectDelete(0,"LP");
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutButton(string name,int x,int y,string text)
{
ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
//--- установим координаты кнопки
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
ObjectSetInteger(0,name,OBJPROP_XSIZE,50);
ObjectSetInteger(0,name,OBJPROP_YSIZE,20);
//--- установим угол графика, относительно которого будут определяться координаты точки
ObjectSetInteger(0,name,OBJPROP_CORNER,3);
//--- установим текст
ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,10);
//--- установим цвет текста
ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger(0,name,OBJPROP_HIDDEN,false);
//--- установим приоритет на получение события нажатия мыши на графике
ObjectSetInteger(0,name,OBJPROP_ZORDER,0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutEdit(string name,int x,int y,string text)
{
//--- создадим поле ввода
ObjectCreate(0,name,OBJ_EDIT,0,0,0);
//--- установим координаты объекта
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размеры объекта
ObjectSetInteger(0,name,OBJPROP_XSIZE,60);
ObjectSetInteger(0,name,OBJPROP_YSIZE,20);
//--- установим текст
ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,10);
//--- установим способ выравнивания текста в объекте
ObjectSetInteger(0,name,OBJPROP_ALIGN,ALIGN_CENTER);
//--- установим (true) или отменим (false) режим только для чтения
ObjectSetInteger(0,name,OBJPROP_READONLY,false);
//--- установим угол графика, относительно которого будут определяться координаты объекта
ObjectSetInteger(0,name,OBJPROP_CORNER,3);
//--- установим цвет текста
ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutLable(string name,int x,int y,string text)
{
//--- создадим текстовую метку
ObjectCreate(0,name,OBJ_LABEL,0,0,0);
//--- установим координаты метки
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим угол графика, относительно которого будут определяться координаты точки
ObjectSetInteger(0,name,OBJPROP_CORNER,3);
//--- установим текст
ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,10);
//--- установим цвет
ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
{
int r=0;
color clr=Green;
double sl=0,tp=0;
if(type==1 || type==3 || type==5)
{
clr=Red;
if(stop>0)
sl=NormalizeDouble(stop,_Digits);
if(take>0)
tp=NormalizeDouble(take,_Digits);
}
if(type==0 || type==2 || type==4)
{
clr=Blue;
if(stop>0)
sl=NormalizeDouble(stop,_Digits);
if(take>0)
tp=NormalizeDouble(take,_Digits);
}
r=OrderSend(NULL,type,lot,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
return;
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(BULevel>0)
BU();
if(TrailingStop>0)
Trailing();
risk=(double)ObjectGetString(0,"R",OBJPROP_TEXT);
stop=(double)ObjectGetString(0,"L",OBJPROP_TEXT);
if(stop<Ask)
{
lot=NormalizeDouble((risk)/((Ask-stop)/_Point),2);
take=NormalizeDouble(Bid+(Ask-stop)*KTake,_Digits);
ObjectSetString(0,"T",OBJPROP_TEXT,(string)take);
}
if(stop>Bid)
{
lot=NormalizeDouble((risk)/((stop-Bid)/_Point),2);
take=NormalizeDouble(Ask+(stop-Ask)*KTake,_Digits);
ObjectSetString(0,"T",OBJPROP_TEXT,(string)take);
}
if(ObjectGetInteger(0,"B",OBJPROP_STATE)==1)
{
PutOrder(0,Ask);
ObjectSetInteger(0,"B",OBJPROP_STATE,false);
}
if(ObjectGetInteger(0,"S",OBJPROP_STATE)==1)
{
PutOrder(1,Bid);
ObjectSetInteger(0,"S",OBJPROP_STATE,false);
}
Comment("\n Lot: ",lot,
"\n Stop: ",ObjectGetString(0,"L",OBJPROP_TEXT),
"\n Take: ",ObjectGetString(0,"T",OBJPROP_TEXT));
}
//+------------------------------------------------------------------+
ни одной сделки, вот код:
AM2