交易危机

 找回密码
 快捷注册(禁q号)

QQ登录

只需一步,快速开始

搜索
广告位
查看: 2539|回复: 10

[指标] 分享:品种和周期一键切换工具

[复制链接]

1105

主题

2万

积分

17

精华

操盘专家

金钱
24261 美元
权重
251
发表于 2020-4-12 18:00 | 显示全部楼层 |阅读模式
//+------------------------------------------------------------------+
//|  品种和周期一键切换模块                                          |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 0
#property strict

extern string  Symbols="EURUSDm;GBPUSDm;XAUUSDm;BTCUSDm;USDJPYm;USDCADm;USDCHFm;AUDUSDm;NZDUSDm;USOILm"; // List of symbols (separated by ";")
extern string  UniqueID="changer";     // Indicator unique ID

extern int     ButtonsInARow = 1;      // Buttons in a horizontal row
extern int     Corner        = 1;      // Corner
extern int     XShift        = 170;    // Horizontal shift
extern int     YShift        = 50;     // Vertical shift
extern int     XSize         = 150;     // Width of buttons
extern int     YSize         = 50;     // Height of buttons
extern int     FSize         = 18;     // Font size
extern string  FontType      = "Consolas" ; // Font
extern color   Bcolor=8192;        // Button color
extern color   Dcolor=clrGreen;        // Button border color
extern color   Tncolor=clrChocolate;       // Text color - normal
extern color   Sncolor= clrWhite;    // Text color - selected
extern bool    Transparent= False;     // Transparent buttons?

//+------------------------------------------------------------------+

string aSymbols[];
                                                               
//+------------------------------------------------------------------+
int OnInit()
{

   Symbols=StringTrimLeft(StringTrimRight(Symbols));
   if(StringSubstr(Symbols,StringLen(Symbols)-1,1)!=";")
      Symbols=StringConcatenate(Symbols,";");

   int s=0,i=StringFind(Symbols,";",s);
   string current;
   while(i>0)
     {
      current=StringSubstr(Symbols,s,i-s);
      ArrayResize(aSymbols,ArraySize(aSymbols)+1);
      aSymbols[ArraySize(aSymbols)-1]=current;
      s = i + 1;
      i = StringFind(Symbols,";",s);
     }

   int xpos=0,ypos=0,maxx=0,maxy=0;
   for(i=0; i<ArraySize(aSymbols); i++)
     { if(i>0 && MathMod(i,ButtonsInARow)==0) { xpos=0; ypos+=YSize+10; } createButton(UniqueID+":symbol:"+string(i),aSymbols[i],XShift+xpos,YShift+ypos); xpos+=XSize+10; }
   xpos=0; ypos+=YSize*2;
   for(i=0; i<ArraySize(sTfTable); i++)
     { if(i>0 && MathMod(i,ButtonsInARow)==0) { xpos=0; ypos+=YSize+10; } createButton(UniqueID+""+string(i),sTfTable[i],XShift+xpos,YShift+ypos); xpos+=XSize+10; }

   setSymbolButtonColor();
   setTimeFrameButtonColor();
   
   return(0);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   switch(reason)
     {
      case REASON_CHARTCHANGE :
      case REASON_RECOMPILE   :
      case REASON_CLOSE       : break;
      default :
        {
         string lookFor       = UniqueID+":";
         int    lookForLength = StringLen(lookFor);
         for(int i=ObjectsTotal()-1; i>=0; i--)
           {
            string objectName=ObjectName(i);  if(StringSubstr(objectName,0,lookForLength)==lookFor) ObjectDelete(objectName);
           }
        }
     }
  }
//+------------------------------------------------------------------+
void createButton(string name,string caption,int xpos,int ypos)
  {
   if(ObjectFind(name)!=0)
      ObjectCreate(name,OBJ_BUTTON,0,0,0);
   ObjectSet(name,OBJPROP_CORNER,0);
   ObjectSet(name,OBJPROP_XDISTANCE,xpos);
   ObjectSet(name,OBJPROP_YDISTANCE,ypos);
   ObjectSet(name,OBJPROP_XSIZE,XSize);
   ObjectSet(name,OBJPROP_YSIZE,YSize);
   ObjectSetText(name,caption,FSize,FontType,Tncolor);
   ObjectSet(name,OBJPROP_FONTSIZE,FSize);
   ObjectSet(name,OBJPROP_BORDER_TYPE,BORDER_FLAT);
   ObjectSet(name,OBJPROP_COLOR,Tncolor);
   ObjectSet(name,OBJPROP_BGCOLOR,Bcolor);
   ObjectSet(name,OBJPROP_BACK,Transparent);
   ObjectSet(name,OBJPROP_BORDER_COLOR,Dcolor);
   ObjectSet(name,OBJPROP_STATE,false);
   ObjectSet(name,OBJPROP_HIDDEN,true);
   ObjectSet(name,OBJPROP_CORNER,Corner);
   
  }
//+------------------------------------------------------------------+
void setSymbolButtonColor()
  {
   string lookFor       = UniqueID+":symbol:";
   int    lookForLength = StringLen(lookFor);
   for(int i=ObjectsTotal()-1; i>=0; i--)
     {
      string objectName=ObjectName(i);
      if(StringSubstr(objectName,0,lookForLength)==lookFor)
        {
         string symbol=ObjectGetString(0,objectName,OBJPROP_TEXT);
         if(symbol!=_Symbol)
            ObjectSet(objectName,OBJPROP_COLOR,Tncolor);
         else  ObjectSet(objectName,OBJPROP_COLOR,Sncolor);
        }
     }
  }
//+------------------------------------------------------------------+
void setTimeFrameButtonColor()
  {
   string lookFor       = UniqueID+"";
   int    lookForLength = StringLen(lookFor);
   for(int i=ObjectsTotal()-1; i>=0; i--)
     {
      string objectName=ObjectName(i);
      if(StringSubstr(objectName,0,lookForLength)==lookFor)
        {
         int time = stringToTimeFrame(ObjectGetString(0,objectName,OBJPROP_TEXT));
         if(time != _Period)
            ObjectSet(objectName,OBJPROP_COLOR,Tncolor);
         else  ObjectSet(objectName,OBJPROP_COLOR,Sncolor);
        }
     }
  }

//+------------------------------------------------------------------+
string sTfTable[] = {"M1","M5","M15","M30","H1","H4","D1","W1","MN"};
int    iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};
//+------------------------------------------------------------------+
string timeFrameToString(int tf)
  {
   for(int i=ArraySize(iTfTable)-1; i>=0; i--)
      if(tf==iTfTable[i]) return(sTfTable[i]);
   return("");
  }
//+------------------------------------------------------------------+
int stringToTimeFrame(string tf)
  {
   for(int i=ArraySize(sTfTable)-1; i>=0; i--)
      if(tf==sTfTable[i]) return(iTfTable[i]);
   return(0);
  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
   if(id==CHARTEVENT_OBJECT_CLICK && ObjectGet(sparam,OBJPROP_TYPE)==OBJ_BUTTON)
     {
      if(StringFind(sparam,UniqueID+":symbol:",0)==0) ChartSetSymbolPeriod(0,ObjectGetString(0,sparam,OBJPROP_TEXT),_Period);
      if(StringFind(sparam,UniqueID+""  ,0)==0) ChartSetSymbolPeriod(0,_Symbol,stringToTimeFrame(ObjectGetString(0,sparam,OBJPROP_TEXT)));
      if(StringFind(sparam,UniqueID+":back:"  ,0)==0) ObjectSet(sparam,OBJPROP_STATE,false);
     }
  }
//+------------------------------------------------------------------+
int start() { return(0); }
//+------------------------------------------------------------------+
太阳每天升起,每天都是新的一天。

1105

主题

2万

积分

17

精华

操盘专家

金钱
24261 美元
权重
251
 楼主| 发表于 2020-4-12 18:01 | 显示全部楼层
QQ截图20200412180042.png
太阳每天升起,每天都是新的一天。

1105

主题

2万

积分

17

精华

操盘专家

金钱
24261 美元
权重
251
 楼主| 发表于 2020-4-13 15:21 | 显示全部楼层
继续做按钮

QQ截图20200413152006.png
太阳每天升起,每天都是新的一天。

1105

主题

2万

积分

17

精华

操盘专家

金钱
24261 美元
权重
251
 楼主| 发表于 2020-4-13 21:28 | 显示全部楼层
QQ截图20200413212801.png
太阳每天升起,每天都是新的一天。

1105

主题

2万

积分

17

精华

操盘专家

金钱
24261 美元
权重
251
 楼主| 发表于 2020-4-13 21:29 | 显示全部楼层
其它都正常,就是止盈设置键按下没反应 不知哪里出了问题?


  1. void modifyduo(double duotp)
  2.   {
  3.    int t=OrdersTotal() ;
  4.    for(int i=t-1; i>=0; i--)
  5.       if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
  6.          if(OrderSymbol()==Symbol())
  7.             double p=MarketInfo(OrderSymbol(),MODE_POINT) ;
  8.    if(OrderType()==OP_BUY)
  9.      {
  10.       OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(),OrderTakeProfit(),0,Red);
  11.      }
  12.   }

  13. //+------------------------------------------------------------------+
  14. //|                                                                  |
  15. //+------------------------------------------------------------------+
  16. void modifykong(double kongtp)
  17.   {
  18.    int t=OrdersTotal() ;
  19.    for(int i=t-1; i>=0; i--)
  20.       if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
  21.          if(OrderSymbol()==Symbol())
  22.             double p=MarketInfo(OrderSymbol(),MODE_POINT) ;
  23.    if(OrderType()==OP_SELL)
  24.      {
  25.       OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(),OrderTakeProfit(),0,Red);
  26.      }
  27.   }
复制代码
太阳每天升起,每天都是新的一天。

30

主题

1万

积分

0

精华

操盘专家

金钱
13785 美元
权重
1
发表于 2020-4-13 23:00 | 显示全部楼层
五爷,单步调试下,或者用Print大法查一下。就知道在哪里出错了。
一眼看上去感觉这个参数kongtp没用上。

1105

主题

2万

积分

17

精华

操盘专家

金钱
24261 美元
权重
251
 楼主| 发表于 2020-4-13 23:13 | 显示全部楼层
过去了 发表于 2020-4-13 23:00
五爷,单步调试下,或者用Print大法查一下。就知道在哪里出错了。
一眼看上去感觉这个参数kongtp没用上。
  1. //+------------------------------------------------------------------+
  2. //|                                                      ProjectName |
  3. //|                                      Copyright 2018, CompanyName |
  4. //|                                       http://www.companyname.net |
  5. //+------------------------------------------------------------------+

  6. #property copyright "573"
  7. #property link      "https://www.mql5.com"
  8. #property version   "1.00"
  9. #property strict

  10. //+------------------------------------------------------------------+
  11. //|                                                                  |
  12. //+------------------------------------------------------------------+
  13. int OnInit()
  14.   {

  15.    anniu("closeall",clrWhite,260,30,"全部清仓");
  16.    anniu("delgua",clrWhite,260,70,"删除挂单");
  17.    anniu("closeallduo",clrWhite,260,110,"多单全平");
  18.    anniu("closeallkong",clrWhite,260,150,"空单全平");
  19. //biaoqian("duotp","输入止盈价格",280,197,14,White);
  20.    shurukuang("duotp",Black,350,190);
  21.    anniu("duotpm",clrWhite,260,190,"多单止盈");
  22.    shurukuang("kongtp",Black,350,230);
  23.    anniu("kongtpm",clrWhite,260,230,"空单止盈");

  24.    return(INIT_SUCCEEDED);
  25.   }
  26. //+------------------------------------------------------------------+
  27. //| Expert deinitialization function                                 |
  28. //+------------------------------------------------------------------+
  29. void OnDeinit(const int reason)
  30.   {
  31. //---

  32.   }
  33. //+------------------------------------------------------------------+
  34. //| Expert tick function                                             |
  35. //+------------------------------------------------------------------+
  36. void OnTick()
  37.   {
  38. //---

  39.   }
  40. //+------------------------------------------------------------------+
  41. //| ChartEvent function                                              |
  42. //+------------------------------------------------------------------+
  43. void OnChartEvent(const int id,
  44.                   const long &lparam,
  45.                   const double &dparam,
  46.                   const string &sparam)
  47.   {
  48.    if(id==CHARTEVENT_OBJECT_CLICK)
  49.      {
  50.       if(sparam=="closeall")
  51.         {
  52.          closeall();
  53.         }
  54.       if(sparam=="delgua")
  55.         {
  56.          delgua();
  57.         }
  58.       if(sparam=="closeallduo")
  59.         {
  60.          closeallduo();
  61.         }
  62.       if(sparam=="closeallkong")
  63.         {
  64.          closeallkong();
  65.         }
  66.       if(sparam=="duotpm")
  67.         {
  68.          string duotp=ObjectGetString(0,"duotp",OBJPROP_TEXT);
  69.          //Alert ("输入框的文字为:"+duotp);
  70.          modifyduo(StringToDouble(duotp));
  71.         }
  72.       if(sparam=="kongtpm")
  73.         {
  74.          string kongtp=ObjectGetString(0,"kongtp",OBJPROP_TEXT);
  75.                   //Alert ("输入框的文字为:"+kongtp);
  76.          modifykong(StringToDouble(kongtp));
  77.         }
  78.      }
  79.   }
  80. //+------------------------------------------------------------------+
  81. void anniu(string name,color yanse,int x,int y,string text,int changdu=0)
  82.   {
  83.    ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
  84.    ObjectSetInteger(0,name,OBJPROP_COLOR,yanse);
  85.    ObjectSetInteger(0,name,OBJPROP_BGCOLOR,clrDarkGreen);
  86.    ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
  87.    ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
  88.    if(changdu==0)
  89.      {
  90.       int as=StringLen(text);
  91.       ObjectSetInteger(0,name,OBJPROP_XSIZE,as*20);
  92.      }
  93.    else
  94.      {
  95.       ObjectSetInteger(0,name,OBJPROP_XSIZE,changdu);
  96.      }
  97.    ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
  98.    ObjectSetString(0,name,OBJPROP_FONT,"Arial");
  99.    ObjectSetString(0,name,OBJPROP_TEXT,text);
  100.    ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
  101.    ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,clrOrange);
  102.    ObjectSetInteger(0,name,OBJPROP_CORNER,1);
  103.   }

  104. //+------------------------------------------------------------------+
  105. //|                                                                  |
  106. //+------------------------------------------------------------------+
  107. void shurukuang(string name, color yanse, int x, int y)
  108.   {
  109.    ObjectCreate(0,name,OBJ_EDIT,0,0,0) ;
  110.    ObjectSetInteger(0, name, OBJPROP_XDISTANCE,x) ;
  111.    ObjectSetInteger(0, name, OBJPROP_YDISTANCE,y) ;
  112. //--- set object size
  113.    ObjectSetInteger(0, name, OBJPROP_XSIZE, 81) ;
  114.    ObjectSetInteger(0, name, OBJPROP_YSIZE,30) ;
  115.    ObjectSetInteger(0, name, OBJPROP_FONTSIZE,14) ;
  116. //--- set the type of text alignmerk in the object
  117.    ObjectSetInteger(0, name, OBJPROP_ALIGN, ALIGN_LEFT) ;
  118. //--- enable (true) or cancle (false) read-only mode
  119.    ObjectSetInteger(0, name, OBJPROP_READONLY, false) ;
  120. //--- set the chart's corner, relative to which object coo
  121.    ObjectSetInteger(0, name, OBJPROP_CORNER,1) ;
  122. //--- set text color
  123.    ObjectSetInteger(0, name, OBJPROP_COLOR, yanse) ;
  124. //--- set border color
  125.    ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,clrBlue);
  126. //--- display in the foreground (false) or background ()
  127.    ObjectSetInteger(0,name,OBJPROP_BACK,false);
  128.    ObjectSetString(0,name,OBJPROP_TEXT,"");
  129.   }

  130. //+------------------------------------------------------------------+
  131. //|                                                                  |
  132. //+------------------------------------------------------------------+
  133. void biaoqian(string name, string neirong,int x,int y,int daxiao,color yanse)
  134.   {
  135.    if(ObjectFind(name)<0)
  136.      {
  137.       ObjectCreate(name, OBJ_LABEL,0,0,0);
  138.       ObjectSetText(name, neirong, daxiao, "宋体", yanse);
  139.       ObjectSet(name, OBJPROP_XDISTANCE,x);
  140.       ObjectSet(name, OBJPROP_YDISTANCE,y);
  141.       ObjectSet(name, OBJPROP_CORNER,1);
  142.      }
  143.    else
  144.      {
  145.       ObjectSetText(name,neirong,daxiao,"宋体", yanse);
  146.       WindowRedraw();
  147.      }
  148.   }

  149. //+------------------------------------------------------------------+
  150. //|                                                                  |
  151. //+------------------------------------------------------------------+
  152. void closeall()
  153. {
  154. int cnt, total;
  155. total=OrdersTotal();
  156. for(cnt=total-1;cnt>=0;cnt--)
  157.   {
  158.    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

  159.    if(OrderType()==OP_SELL)
  160.     {
  161.      OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
  162.     }
  163.    if(OrderType()==OP_BUY)
  164.     {
  165.      OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
  166.   }

  167. }

  168. }
  169. //+------------------------------------------------------------------+
  170. //|                                                                  |
  171. //+------------------------------------------------------------------+
  172. void closeallduo()
  173. {
  174. int cnt, total;
  175. total=OrdersTotal();
  176. for(cnt=total-1;cnt>=0;cnt--)
  177.   {
  178.    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);


  179.    if(OrderType()==OP_BUY)
  180.     {
  181.      OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
  182.     }

  183.   }

  184. }
  185. //+------------------------------------------------------------------+
  186. //|                                                                  |
  187. //+------------------------------------------------------------------+
  188. void closeallkong()
  189. {
  190. int cnt, total;
  191. total=OrdersTotal();
  192. for(cnt=total-1;cnt>=0;cnt--)
  193.   {
  194.    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

  195.    if(OrderType()==OP_SELL)
  196.     {
  197.      OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
  198.     }
  199.   

  200. }

  201. }
  202. //+------------------------------------------------------------------+
  203. //|                                                                  |
  204. //+------------------------------------------------------------------+
  205. void delgua()
  206. {
  207.   int total = OrdersTotal();
  208.   for(int i=total-1;i>=0;i--)
  209.   {
  210.     OrderSelect(i, SELECT_BY_POS);
  211.     int type   = OrderType();

  212.     bool result = false;
  213.    
  214.     switch(type)
  215.     {
  216.       //Close pending orders
  217.       case OP_BUYLIMIT  :
  218.       case OP_BUYSTOP   :
  219.       case OP_SELLLIMIT :
  220.       case OP_SELLSTOP  : result = OrderDelete( OrderTicket() );
  221.     }
  222.    
  223.     if(result == false)
  224.     {
  225.       //Alert("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
  226.       //Sleep(3000);
  227.     }  
  228.   }

  229. }
  230. //+------------------------------------------------------------------+
  231. //|                                                                  |
  232. //+------------------------------------------------------------------+



  233. void modifyduo(double duotp)
  234.   {
  235.    int t=OrdersTotal() ;
  236.    for(int i=t-1; i>=0; i--)
  237.       if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
  238.          if(OrderSymbol()==Symbol())
  239.             double p=MarketInfo(OrderSymbol(),MODE_POINT) ;
  240.    if(OrderType()==OP_BUY)
  241.      {
  242.       OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(),OrderTakeProfit(),0,clrOrangeRed);
  243.      }
  244.   }

  245. //+------------------------------------------------------------------+
  246. //|                                                                  |
  247. //+------------------------------------------------------------------+
  248. void modifykong(double kongtp)
  249.   {
  250.    int t=OrdersTotal() ;
  251.    for(int i=t-1; i>=0; i--)
  252.       if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
  253.          if(OrderSymbol()==Symbol())
  254.             double p=MarketInfo(OrderSymbol(),MODE_POINT) ;
  255.    if(OrderType()==OP_SELL)
  256.      {
  257.       OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(),OrderTakeProfit(),0,clrDodgerBlue);
  258.      }
  259.   }
复制代码
太阳每天升起,每天都是新的一天。

1105

主题

2万

积分

17

精华

操盘专家

金钱
24261 美元
权重
251
 楼主| 发表于 2020-4-13 23:14 | 显示全部楼层
过去了 发表于 2020-4-13 23:00
五爷,单步调试下,或者用Print大法查一下。就知道在哪里出错了。
一眼看上去感觉这个参数kongtp没用上。

帮我调试一下,我弄不好了
太阳每天升起,每天都是新的一天。

1105

主题

2万

积分

17

精华

操盘专家

金钱
24261 美元
权重
251
 楼主| 发表于 2020-4-14 07:23 来自手机 | 显示全部楼层
过去了 发表于 2020-4-13 23:00
五爷,单步调试下,或者用Print大法查一下。就知道在哪里出错了。
一眼看上去感觉这个参数kongtp没用上。

终于弄好了,,正是你说的这个参数的问题。

19

主题

1万

积分

3

精华

蟹老板

操盘专家

金钱
19094 美元
权重
3
发表于 2020-4-14 09:04 | 显示全部楼层
几年下来,5爷都已经精通编程了,再过几年不想玩外汇了,改走区块链工程师
不要怂、满仓干。

1105

主题

2万

积分

17

精华

操盘专家

金钱
24261 美元
权重
251
 楼主| 发表于 2020-4-14 10:31 | 显示全部楼层
老五 发表于 2020-4-14 09:04
几年下来,5爷都已经精通编程了,再过几年不想玩外汇了,改走区块链工程师

门都没入,也就是拼拼凑凑,修修改改
太阳每天升起,每天都是新的一天。
您需要登录后才可以回帖 登录 | 快捷注册(禁q号)

本版积分规则

QQ|黄金吧|黄金论坛|手机版|指标下载|非农|目录|交易危机

版权所有: ©2014-2021 fx3q.com Powered by Discuz! X3
浙ICP备: ICP14039028

浙公网安备 33011802001420号

风险提示:杠杆风险高,交易要谨慎 声明:坛友发言和回复均为个人观点,不代表论坛立场。
若有侵权请联系fx3q@qq.com删除

快速回复 返回顶部 返回列表