avatar
Untitled

dungnguyen552020 313 12th May, 2020

MARKUP 15.57 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 double stoplossEquity =  900;
     extern double takeprofitEquity = 0;

  //   string bangchucai[3]  = {"a","b","c" };
  string pair[] ;
 extern string chuoiPair = "EURUSD/GBPUSD/USDJPY/EURJPY";
 string sym;
 int thutu;
 bool  active = false;
//+------------------------------------------------------------------+
int OnInit()
  {
//---
//Comment(bangchucai[2]);
    //   sym=Symbol();
napchuoiPair(chuoiPair,"/");
   checkLisicen();
  // SendMail("tieu de","noi dung");
  /*for(int i=10;i >=0 ; i-- )
   {
       double laygiatri1 = iCustom(sym,0,"SHI_SilverTrendSig",0,30,9,1,i);
       double laygiatri2 = iCustom(sym,0,"SHI_SilverTrendSig",0,30,9,0,i);
    Comment(laygiatri1 + "/" + laygiatri2 +"/"+EMPTY_VALUE);

   }*/
//---
   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(OrdersTotal()>0){return;}  // chi cho vao 1 lenh
     if(active ==false){return;}// check lisence
    //  if(AccountEquity() < stoplossEquity && stoplossEquity !=0  ){ dongLenh_ToanBo(); active = false; return;}
//=====================================================================
      if(demsolenh( sym ) >0 ){return;}// cho moi cặp tiền vào 1 lệnh

       double laygiatri1 = iCustom(sym,0,"SHI_SilverTrendSig",0,30,9,1,1);
       double laygiatri2 = iCustom(sym,0,"SHI_SilverTrendSig",0,30,9,0,1);

       if(laygiatri1 != EMPTY_VALUE ){ Loailenh = OP_SELL;}
       if(laygiatri2 != EMPTY_VALUE ){ Loailenh = OP_BUY;}


//=========tinh khoi luong ===========
balance = AccountEquity();
double slPoint= stoploss*10* MarketInfo(sym,MODE_POINT);
   khoiLuong = get_lot_from_money_point(sym,balance,risk,slPoint);
// dieu kien vao lenh--------------
    loaiLenh = MathRand()%2;// loai lenh ngau nhien
    //iWPR
 //--------------------------------VAO LENH------------------
     vaoLenh(sym,loaiLenh,khoiLuong,0,stoploss,takeprofit,magic,Com);

  }// 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);
  }
//-------------
bool Check_inside(double gia1,double line1,double line2)
  {
   if((line1<=gia1 && gia1<=line2) || (line2<=gia1 && gia1<=line1)){return(true);}
   else {return(false);}
  }
//=====================
void dongLenh_ToanBo()
  {
   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;}
   double price; RefreshRates();
   int dem;
   while(OrderCloseTime()==0 && dem<100)// chua dong dc lenh
     { dem++;
    // OrderType()%2==0
   // OrderType()==OP_BUY
      if(MathMod(OrderType(),2)==0) {price=MarketInfo(OrderSymbol(),MODE_BID);}//buy
      else {price=MarketInfo(OrderSymbol(),MODE_ASK);}// sell
     // if(true){.....}
      if(OrderClose(ticket,lot,price,Slippage,Gold)) {break;}// thoat vong lap}
      if(!OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) {return;}
      Sleep(100); // Tam dung 0.1 s
     }
   return;
  }
//+------------------------------------------------------------------+
//-----------
void dongLenh_theo_danhdau(string  danhdauc)// "lenh gap thep"
  { //string tex = IntegerToString(num);
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {continue;}
      // if (OrderSymbol()!=sym)                       {continue;}
      //  if (OrderMagicNumber()==Ma) {    if (OrderType()>=2) {int rec = OrderDelete(OrderTicket(),CLR_NONE);} continue;      }
  //    group=StringToInteger(StringSubstr(OrderMagicNumber(),StringLen(OrderMagicNumber())-1,1));//   Print("magicnumber   "+OrderMagicNumber());    //   Print("group "+ group);
      if(StringFind(OrderComment(),danhdauc,0)>=0 && OrderType()<2) {dongLenh_Ticket(OrderTicket(),OrderLots());}
     }

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void dongLenh_theo_type(int op1,int op2)// OP_BUY , OP_BUYSTOP
  {
   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()==op1)  {dongLenh_Ticket(OrderTicket(), OrderLots());}
      if(OrderType()==op2)  { int res =OrderDelete(OrderTicket(),CLR_NONE);}
     }
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
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 napchuoiPair(string chuoiPair1 , string phancach) // "/"  ","
{
   //extern string chuoiPair = "/EURUSD/GBPUSD/USDJPY/EURJPY/";
  if(StringLen(chuoiPair1)<6){ArrayResize(pair,1);pair[0]=Symbol();return;}
 string ktra;

 int sta; int sto;string text ;
 chuoiPair1  = phancach+chuoiPair1+phancach;
 for(int i=0;i < 1000 ;i++)
   {
      sta = StringFind(chuoiPair1,phancach,sto);//1 //6
      sto = StringFind(chuoiPair1,phancach,sta+1);//6  // 12
      if(sta+1 >= StringLen(chuoiPair1)){break;}

   text = StringSubstr(chuoiPair1 ,sta +1,sto - sta -1);
    ArrayResize(pair,i+1,0);
   pair[i] = text;
   ktra  += text + ",";
   }
Print( "cac cap tien la: " +ktra);
}
                      
                                       
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.