//+------------------------------------------------------------------+
//| baiso1.mq4 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function |
// NOI KHAI BAO BIEN
double khoiLuong= 0.01;// 0
double takeprofit = 40;
string Com ;
color maucualenh = clrRed;
int loaiLenh = OP_BUY;
double giavaolenh=0;
datetime thoigiangiaodich;
bool chophepGD = true;
int magic =999;
double lastLotsize ;
int lasttype;
double balance;// acc
extern double risk = 5;
extern double stoploss = 20;
extern string giobatdau = "06:30";
extern string giokethuc = "09:15";
string sym;
bool active = false;
//+------------------------------------------------------------------+
int OnInit()
{
//---
sym=Symbol();
checkLisicen();
// SendNotification("hello thinh");
creat_button();
creat_label();
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
// cho chạy code ben dưới dòng này khi qua nến mới
// if(thoigiangiaodich == iTime(Symbol(),0,0) ){return;}thoigiangiaodich =iTime(Symbol(),0,0) ;
// if(chophepGD == false){return;}
//if(OrdersTotal()>0){return;} // chi cho vao 1 lenh
if(active ==false){return;}
if(demsolenh( sym ) >0 ){return;}
//=====================================================================
//=========tinh khoi luong ===========
balance = AccountEquity();
double slPoint= stoploss*10* MarketInfo(sym,MODE_POINT);
khoiLuong = get_lot_from_money_point(sym,balance,risk,slPoint);
Comment(khoiLuong);
// ObjectCreate
// dieu kien vao lenh--------------
loaiLenh = MathRand()%2;// loai lenh ngau nhien
//iWPR
//--------------------------------VAO LENH------------------
vaoLenh(sym,loaiLenh,khoiLuong,0,stoploss,takeprofit,magic,Com);
// SendNotification("co lenh moi ne "+ sym+ " "+ khoiLuong );
}// end ontick
//=====================================
double get_lot_from_money_point(string symm,double balancee,double risk,double slPoint)
{
double lotsize ;
double sotien = MathAbs(risk/100*balance); // 10000 * 5 /100
double tickval = MarketInfo(symm , MODE_TICKVALUE);
double ticksize = MarketInfo(symm , MODE_TICKSIZE);
//========cong thuc chinh
if(slPoint!=0 && ticksize !=0 && tickval !=0 )
{
lotsize = sotien /(slPoint*tickval/ticksize);
}
// =========== 0.2568746655
double lotstep = MarketInfo(symm,MODE_LOTSTEP);Comment(lotstep);
int step;
if(lotstep==1){step = 0;}
if(lotstep == 0.01){step =2;}
if(lotstep == 0.001){step =3;}
if(lotstep == 0.1 ){step =1;}
lotsize = NormalizeDouble(lotsize,step);
if (lotsize < MarketInfo(symm, MODE_MINLOT)) lotsize = MarketInfo(symm, MODE_MINLOT);
if (lotsize > MarketInfo(symm, MODE_MAXLOT)) lotsize = MarketInfo(symm, MODE_MAXLOT);
return(lotsize);
}
//+------------------------------------------------------------------+
double lenhcuoicung(string symm)
{ double lastprofit; datetime lasttime ;
for(int i =0; i <= OrdersHistoryTotal()-1; i++)
{
if(OrderSelect(i, SELECT_BY_POS,MODE_HISTORY)==False) {continue;}
if(OrderSymbol() != symm){continue;}
if(OrderMagicNumber()!= magic){continue;}
if(OrderType()>1 ){continue;}
if(OrderCloseTime()> lasttime )
{
lasttime = OrderCloseTime(); // 6h
lastprofit = OrderProfit();
lastLotsize = OrderLots();
lasttype = OrderType();
}
}
return(lastprofit);
}
//======================================================================
void vaoLenh(string symm, int typee, double lott, double pricee, double slpip,double tppip,int magicc, string comm )
{
if(lott ==0){return;}
int normallotunit ;
if(MarketInfo(symm, MODE_MINLOT)== 0.01){normallotunit = 2;}
if(MarketInfo(symm, MODE_MINLOT)== 0.1){normallotunit = 1;}
if(MarketInfo(symm, MODE_MINLOT)== 0.001){normallotunit = 3;}
lott = NormalizeDouble(lott, normallotunit );
//---------------------------
double slprice, tpprice; color mau;
if(typee== OP_BUY)
{
pricee = MarketInfo(symm,MODE_ASK);
slprice = pricee - slpip*10*MarketInfo(symm ,MODE_POINT);
tpprice = pricee + tppip*10*MarketInfo(symm ,MODE_POINT);
mau = clrBlue;
}
if(typee== OP_SELL)
{
pricee = MarketInfo(symm,MODE_BID);
slprice = pricee + slpip*10*MarketInfo(symm ,MODE_POINT);
tpprice = pricee - tppip*10*MarketInfo(symm ,MODE_POINT);
mau = clrRed;
}
pricee = NormalizeDouble(pricee,MarketInfo(symm , MODE_DIGITS));
slprice = NormalizeDouble(slprice,MarketInfo(symm , MODE_DIGITS));
tpprice = NormalizeDouble(tpprice,MarketInfo(symm , MODE_DIGITS));
//-----gui lenh
double thanhcong = OrderSend(symm,typee,lott,pricee,20,0,0,comm,magicc,0,mau);
// ----- CHINH SL TP
bool sucess =false; int dem;
if(thanhcong >0 && slprice !=0 && tpprice!=0 )
{
while ( sucess == false && dem<20)
{ sucess = OrderModify(thanhcong,pricee,slprice,tpprice,0,clrNONE);
dem++; Sleep(50);
}
int error = GetLastError();
if(error !=0 && error !=1){ Print("bi loi: "+ error);}
}
/*
ECN - LIEN NGAN HANG
STP - LIEN NGAN HANG
1 , GUI LENH DI
2 , CHINH SUA SL TP
OM LENH - OM LENH */
}
//====================================================================
/*
void laygiatrinen()
{
// tim mo hinh enguffing
for(int n =500 ; n >=0; n--)
{
double highttruoc, lowtruoc , hightsau, lowsau ;
highttruoc = iHigh(Symbol(),0,n+1);
lowtruoc = iLow(Symbol(),0,n+1);
hightsau = iHigh(Symbol(),0,n);
lowsau = iLow(Symbol(),0,n);
if(highttruoc<hightsau && lowtruoc > lowsau)
{
Comment(n);// gan nhat cay nen so 0
//break;
}
}
*/
/*int caynencaonhat,caynenthapnhat;
caynencaonhat= iHighest(Symbol(),0,MODE_HIGH,100,0);// tra ve cay nen cao nhat
caynenthapnhat = iLowest(Symbol(),0,MODE_LOW,100,0);// tra ve cay nen thap nhat
double giacaonhat = iHigh(Symbol(),0,caynencaonhat);// lay gias hight cua ....
double giathapnhat = iLow(Symbol(),0,caynenthapnhat);// lay low ....
// Comment(caynencaonhat +" / "+ caynenthapnhat);
Comment(giacaonhat +" / "+ giathapnhat);*/
//+==================================================================+
int Order_Open(int ordType,string sym_,double lots,double price,double sl,double tp,int mag,string com,double bidask)
{// int ticket;
if(lots==0){return(0);}
color col; double Stoploss,TakeProfit;
double unit=1; if(bidask!=0){unit= bidask;}
if(ordType==OP_BUY) {price=MarketInfo(sym_,MODE_ASK);Stoploss=price-sl*unit; TakeProfit=price+tp*unit; col=Blue;}
if(ordType==OP_SELL) {price=MarketInfo(sym_,MODE_BID);Stoploss=price+sl*unit; TakeProfit=price-tp*unit; col=Red;}
price=NormalizeDouble(price,MarketInfo(sym_,MODE_DIGITS));
int NormalizeLot; if(MarketInfo(sym_,MODE_MINLOT)==0.1) {NormalizeLot=1;} else {NormalizeLot=2;}
lots=NormalizeDouble(lots,NormalizeLot);
int sucess=-1; int ross=0;int demm;
sucess=OrderSend(sym_,ordType,lots,price,3,0,0,com,mag,0,col);Sleep(100);
if(sucess>0 && (sl!=0 || tp!=0))
{
while(ross<=0 && demm<20){ ross=OrderModify(sucess,price,Stoploss,TakeProfit,0,clrNONE); demm++;Sleep(100); }
}
int loi = GetLastError();
if(loi!=0 && loi !=1 ){ Print("eror"+loi); Print(sym_+ "/price "+ price+ " /op "+ordType+"/lot "+lots);
}
return(sucess);
}
//+------------------------------------------
//======================================================
void checkLisicen()
{
/*datetime x = iTime(Symbol(),PERIOD_D1,0);// thoi gian dau ngay
// x= TimeCurrent();// thoi gian hien tai
//TimeHour(x);
// TimeMinute()
// dau ngay + 3 hour()?
x= x +3*60*60;
Comment(x);
*/
if(
TimeYear( TimeCurrent())<=2020
&& TimeMonth( TimeCurrent())<=4
){active= true;}
// --> file ex4 */
//ham chuyen doi
/*datetime x = StrToTime(giobatdau);
string a = "06";
string b = "30";
string c= a+ ":"+b;
datetime d = StrToTime(c)+60;
Comment(d);
StrToInteger*/
/* string commentt = "| 5 (6)lenhdautien";
int vitri= StringFind(commentt,"(",0);
string cat = StringSubstr(commentt,vitri+1,1);
Comment(cat);*/
//Str
}
//==========================================
int demsolenh(string captiencandem)
{
int dem;
for(int i = OrdersTotal()-1 ; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES)==False) {continue;}
if(OrderSymbol() != captiencandem){continue;}
if(OrderMagicNumber()!= magic){continue;}
dem ++;// dem dc 1 lenh
}
return(dem);
}
//====================================
//====================================
double dinhdangLot(double khoiLuong)
{
if(khoiLuong==0){ khoiLuong = MarketInfo(Symbol(),MODE_MINLOT) ; }
if(khoiLuong> MarketInfo(Symbol(),MODE_MAXLOT)){ khoiLuong = MarketInfo(Symbol(),MODE_MAXLOT) ; }
khoiLuong = NormalizeDouble(khoiLuong,2);
return(khoiLuong);// tra ve khoi da duoc dinh dang
}
//+==================================================================+
void OnChartEvent(const int id, // Event ID
const long& lparam, // Parameter of type long event
const double& dparam, // Parameter of type double event
const string& name_object // Parameter of type string events
)
{
if(id== CHARTEVENT_OBJECT_CLICK)// SU KIEN CLICK VAO OBJ
{
if(name_object == "nutSTOP")
{
donglenhtoanbo();
}
}
//=============================
if(id==CHARTEVENT_OBJECT_ENDEDIT)
{
if(name_object == "lotsize")
{
khoiLuong = StringToDouble(ObjectGetString(0,"lotsize",OBJPROP_TEXT,0));
Print("khoi luong da thay doi thanh "+khoiLuong);
}
}
}
//==============================================
//=======================================================================
void creat_button()
{
string name = "nutSTOP";
int chart_ID =0;
ObjectDelete(name);
// ObjectsDeleteAll();
if(!ObjectCreate(0,name,OBJ_BUTTON,0,0,0))
{
Print("Error: can't create label! code #",GetLastError());
return;
}
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,20);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,20);
//--- set button size
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,100);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,30);
//--- set the chart's corner, relative to which point coordinates are defined
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,0);
//--- set the text
ObjectSetString(chart_ID,name,OBJPROP_TEXT,"STOP");
//--- set text font
// ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- set font size
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,15);
//--- set text color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clrRed);
//--- set background color
// ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,clrGray);
//--- set border color
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,clrGreen);
//--- display in the foreground (false) or background (true)
// ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- set button state
/* ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
//--- enable (true) or disable (false) the mode of moving the button by mouse
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); }*/
}
///////////////////////////////////////
void creat_label()
{
string name = "lotsize";
int chart_ID =0;
ObjectDelete(name);
// ObjectsDeleteAll();
if(!ObjectCreate(0,name,OBJ_EDIT,0,0,0))
{
Print("Error: can't create label! code #",GetLastError());
return;
}
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,20);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,80);
//--- set button size
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,100);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,30);
//--- set the chart's corner, relative to which point coordinates are defined
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,0);
//--- set the text
ObjectSetString(chart_ID,name,OBJPROP_TEXT,khoiLuong);
//--- set text font
// ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- set font size
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,15);
//--- set text color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clrRed);
//--- set background color
ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,clrGainsboro);
//--- set border color
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,clrGreen);
//--- display in the foreground (false) or background (true)
// ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- set button state
/* ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
//--- enable (true) or disable (false) the mode of moving the button by mouse
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); }*/
}
//========================================
void donglenhtoanbo()
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {continue;}
// if (OrderSymbol()!=sym) {continue;}
// if (OrderMagicNumber()!=Magic) {continue;}
if(OrderType()<2) {DongLenh_Ticket(OrderTicket(), OrderLots());}
if(OrderType()>=2) {int rec = OrderDelete(OrderTicket(),CLR_NONE);}
}
}
//-----------
//+------------------------------------------------------------------+
void DongLenh_Ticket(int ticket,double lot)
{
int Slippage=3;
if(!OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) {return;}
if(StringFind(OrderComment(),"core",0)>=0){return;}
if(OrderCloseTime()!=0) {return;}
double price; RefreshRates();
while(OrderCloseTime()==0)
{
if(MathMod(OrderType(),2)==0) {price=MarketInfo(OrderSymbol(),MODE_BID);} else {price=MarketInfo(OrderSymbol(),MODE_ASK);}
if(OrderClose(ticket,lot,price,Slippage,Gold)) {break;}
if(!OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) {return;}
Sleep(100); // Tam dung 0.1 s
}
return;
}
//+------------------------------------------------------------------+
//|
kHOÁ HỌC MQL4 - OBJECT BUTTON
chamelions 1,770 8th May, 2020
To share this paste please copy this url and send to your friends
RAW Paste Data
There are no comments yet.