写一个简单的MT4插件面板下单工具

adminadmin 技术推文 2023-10-26 129 0


#property copyright "Copyright 2017, MetaQuotes Software Corp."

#property link      "https://www.iebb.cn"

#property version   "1.00"

#property strict



bool isRight = true;//默认显示在右边

int magic = 345;

double lots=0.1;//下单手数


//=============================配置完成===================================

 

 /**初始化**/

 int OnInit() {

      drawRightPanel();

      return(INIT_SUCCEEDED);

}


 

 /**按钮处理事件**/

 void OnChartEvent(const int id,  const long &lparam,  const double &dparam,

                   const string &sparam) {

   if(id == CHARTEVENT_OBJECT_CLICK){//过滤,只能是点击事件

        if("buy_act" == sparam){//点击买入按钮

             lots = StrToDouble(ObjectGetString(0,"lots_num",OBJPROP_TEXT));//手数

            int sun = StrToInteger(ObjectGetString(0,"stop_num",OBJPROP_TEXT));//止损点

            int ying = StrToInteger(ObjectGetString(0,"profit_num",OBJPROP_TEXT));//止赢点

            int hua = StrToInteger(ObjectGetString(0,"move_point_num",OBJPROP_TEXT));//止赢点

            orderBuy(lots,sun,ying,hua,Symbol()+"1");

            

         }else if("sell_act" == sparam){//点击卖出按钮

             lots = StrToDouble(ObjectGetString(0,"lots_num",OBJPROP_TEXT));//手数

            int sun = StrToInteger(ObjectGetString(0,"stop_num",OBJPROP_TEXT));//止损点

            int ying = StrToInteger(ObjectGetString(0,"profit_num",OBJPROP_TEXT));//止赢点

            int hua = StrToInteger(ObjectGetString(0,"move_point_num",OBJPROP_TEXT));//止赢点

            orderSell(lots,sun,ying,hua,Symbol()+"2");

            

         }

         


   }                    




/**

 * 画右边的面板

 **/

void drawRightPanel(){

    drawButton("lots_name","手 数",clrDarkGray,150,69,65);

    drawEditText("lots_num","1",clrDarkGray,80,69);

    drawButton("buy_act","买入/Buy",clrRed,150,100,65);

    drawButton("sell_act","卖出/Sell",clrLime,80,100,65);

}




/*

* 一键开多单

* lots:下单量

* sun:止损

* ying:止赢

* comment:标记

* magic:魔术号

*/

int orderSell(double Lots,int sun,int ying,int movePoint,string comment){

      int ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,movePoint,0,0,comment,magic,0,clrWhite);

      if(ticket>0) {

        if(OrderSelect(ticket, SELECT_BY_TICKET)==true) {

           if((sun!=0)&&(ying!=0)) {

              bool isModify = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+sun*MarketInfo(Symbol(),MODE_POINT),OrderOpenPrice()-ying*MarketInfo(Symbol(),MODE_POINT),0,clrWhite);

            } 

           if((sun==0)&&(ying!=0)) {

              bool isModify = OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderOpenPrice()-ying*MarketInfo(Symbol(),MODE_POINT),0,clrWhite);

            } 

           if((sun!=0)&&(ying==0)) {

              bool isModify = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+sun*MarketInfo(Symbol(),MODE_POINT),0,0,clrWhite);

            } 

         }

      }else{

           Alert("下空单失败: "+GetLastError());

          }

      return(ticket);              

}

/*

* 一键开多单

* lots:下单量

* sun:止损

* ying:止赢

* comment:标记

* magic:魔术号

*/

int orderBuy(double Lots,int sun,int ying,int movePoint,string comment)  {

          int ticket=OrderSend(Symbol( ) ,OP_BUY,Lots,Ask,movePoint,0,0,comment,magic,0,clrRed);

          if(ticket>0) {

           if(OrderSelect(ticket, SELECT_BY_TICKET)==true) {

              if((sun!=0)&&(ying!=0))  {

                bool isModify = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-sun*MarketInfo(Symbol(),MODE_POINT),OrderOpenPrice()+ying*MarketInfo(Symbol(),MODE_POINT),0,clrRed); 

               }

              if((sun==0)&&(ying!=0))  {

                 bool isModify = OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderOpenPrice()+ying*MarketInfo(Symbol(),MODE_POINT),0,clrRed); 

               }

              if((sun!=0)&&(ying==0))  {

                 bool isModify = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-sun*MarketInfo(Symbol(),MODE_POINT),0,0,clrRed); 

               }

             }

          }else{

           Alert("下多单失败: "+GetLastError());

          }

     return(ticket);        

}

/**

 * 画按钮,文字或者按钮

 * @parmes name 按钮名

 * @parmes text 按钮上显示的内容

 * @parmes textSize 按钮上文字的大小

 * @parmes textColor 文字颜色

 * @parmes bgColor 背景颜色

 * @parmes borderColor 边框颜色

 * @parmes x X轴

 * @parmes y Y轴

 * @parmes width 按钮的宽

 */

void drawButton(string name, string text, color bgColor,int x, int y, int width){

   int coord = 0;//默认相对坐标在左上

   if(isRight == true){

      coord = 1;

   } 

   ObjectCreate(0,name,OBJ_BUTTON,0,0,0);//参见11

   ObjectSetInteger(0,name,OBJPROP_COLOR,clrWhite);//文字颜色

   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,bgColor);//背景颜色

   ObjectSetInteger(1,name,OBJPROP_BORDER_COLOR,clrWhite);//设置边框颜色

   //设置坐标

   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);

   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);

   ObjectSet(name,OBJPROP_CORNER,coord);//设置默认中心点在右上

  

   //int as=StringLen(text);

   ObjectSetInteger(0,name,OBJPROP_XSIZE,width);//设置宽

   ObjectSetInteger(0,name,OBJPROP_YSIZE,25);//设置高

   ObjectSetString(0,name,OBJPROP_FONT,"Arial");//设置字体

   ObjectSetString(0,name,OBJPROP_TEXT,text);//设置内容

   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,10);//设置字号

}


/**

 * 在页面上画输入框

 */

void drawEditText(string name,string defText,color bgColor,int x,int y){


   int coord = 0;//默认相对坐标在左上

   if(isRight == true){

      coord = 1;

   } 

   

   ObjectCreate(0,name,OBJ_EDIT,0,0,0);

   //设置坐标

   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);

   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);

   ObjectSet(name,OBJPROP_CORNER,coord);//设置默认中心点在右下

   //设置宽高

   ObjectSetInteger(0,name,OBJPROP_XSIZE,66);//宽

   ObjectSetInteger(0,name,OBJPROP_YSIZE,25);//高

   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,10);//字号

   ObjectSetInteger(0,name,OBJPROP_ALIGN,ALIGN_LEFT);//文字靠左

   ObjectSetInteger(0,name,OBJPROP_READONLY,false);//是否只读模式

 

   ObjectSetInteger(0,name,OBJPROP_COLOR,clrWhite);//文字颜色

   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,bgColor);//背景色

   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,clrGold);//边框色

   ObjectSetInteger(0,name,OBJPROP_BACK,false);//显示在前景 (false) 或背景 (true) 

   ObjectSetString(0,name,OBJPROP_TEXT,defText);//设置默认文字

}



版权声明

本文仅代表作者观点,不代表牛人量化交易网立场。
本文系作者授权牛人量化交易网发表,未经许可,不得转载。

喜欢0发布评论

评论列表

发表评论

  • 昵称(必填)
  • 邮箱
  • 网址