avatar
kHOÁ HỌC MQL4 - OBJECT BUTTON

chamelions 1,770 8th May, 2020

CPP 17.20 KB
                                           
                         //+------------------------------------------------------------------+
//|                                                       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;
  }
//+------------------------------------------------------------------+
//|
                      
                                       
To share this paste please copy this url and send to your friends
RAW Paste Data

Comments

Authentication required

You must log in to post a comment.

Log in
    There are no comments yet.