交易危机

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

QQ登录

只需一步,快速开始

搜索
查看: 355|回复: 6

[指标] 打开任意图表

[复制链接]

121

主题

1万

积分

0

精华

操盘专家

金钱
17970 美元
权重
0
发表于 2019-6-29 12:12 | 显示全部楼层 |阅读模式
有时候想打开比特币,原油或者不常见的货币对,等图表,从左边找很麻烦,用这个就可以快速打开。




111111.png




这些直接输入中文就可以打开,想要添加更多,自己修改一下这里即可
22222.png




另外附送  多空轨道源码   


指标见1楼   指标放在  \MQL4\indicators  目录下
装死

121

主题

1万

积分

0

精华

操盘专家

金钱
17970 美元
权重
0
 楼主| 发表于 2019-6-29 12:13 | 显示全部楼层
本帖最后由 sanbuxiaozhu 于 2019-7-2 09:05 编辑
  1. //+------------------------------------------------------------------+
  2. //|                                                       多空轨道.mq4 |
  3. //|                        Copyright 2018, MetaQuotes Software Corp. |
  4. //|                                             https://www.mql5.com |
  5. //+------------------------------------------------------------------+
  6. #property copyright "http://my.fx3q.com"
  7. #property link      "https://www.mql5.com"
  8. #property version   "1.00"
  9. #property strict

  10. extern int MA = 60;
  11. extern ENUM_MA_METHOD method = MODE_SMA;
  12. int 箭头间隔 = 100,juli = 20;

  13. extern double 内轨系数 = 1;
  14. extern double 外轨系数 = 8;

  15. ENUM_BASE_CORNER Corner   =1;//显示位置
  16. int FontSize =10;
  17. color Fontcolor=clrWhite;
  18. color BGcolor=clrBlack;
  19. color BRcolor=clrCoral;
  20. int Win=0;
  21. int x1=0,y1=0;


  22. double middle,up1,low1;
  23. bool upp = true,downpp = true;

  24. #property indicator_chart_window
  25. #property indicator_buffers 7
  26. #property indicator_plots   7
  27. //--- plot ma
  28. #property indicator_label1  "ma"
  29. #property indicator_type1   DRAW_LINE
  30. #property indicator_color1  clrRed
  31. #property indicator_style1  STYLE_SOLID
  32. #property indicator_width1  1
  33. //--- plot maHigh
  34. #property indicator_label2  "maHigh"
  35. #property indicator_type2   DRAW_LINE
  36. #property indicator_color2  clrGold
  37. #property indicator_style2  STYLE_SOLID
  38. #property indicator_width2  1
  39. //--- plot maLow
  40. #property indicator_label3  "maLow"
  41. #property indicator_type3   DRAW_LINE
  42. #property indicator_color3  clrDeepSkyBlue
  43. #property indicator_style3  STYLE_SOLID
  44. #property indicator_width3  1
  45. //--- plot maMax
  46. #property indicator_label4  "maMax"
  47. #property indicator_type4   DRAW_LINE
  48. #property indicator_color4  clrGold
  49. #property indicator_style4  STYLE_SOLID
  50. #property indicator_width4  2
  51. //--- plot maMin
  52. #property indicator_label5  "maMin"
  53. #property indicator_type5   DRAW_LINE
  54. #property indicator_color5  clrDeepSkyBlue
  55. #property indicator_style5  STYLE_SOLID
  56. #property indicator_width5  2
  57. //--- plot up
  58. #property indicator_label6  "up"
  59. #property indicator_type6   DRAW_ARROW
  60. #property indicator_color6  clrRed
  61. #property indicator_style6  STYLE_SOLID
  62. #property indicator_width6  3
  63. //--- plot down
  64. #property indicator_label7  "down"
  65. #property indicator_type7   DRAW_ARROW
  66. #property indicator_color7  clrDeepSkyBlue
  67. #property indicator_style7  STYLE_SOLID
  68. #property indicator_width7  3
  69. //--- indicator buffers
  70. double         maBuffer[];
  71. double         maHighBuffer[];
  72. double         maLowBuffer[];
  73. double         maMaxBuffer[];
  74. double         maMinBuffer[];
  75. double         upBuffer[];
  76. double         downBuffer[];
  77. //+------------------------------------------------------------------+
  78. //| Custom indicator initialization function                         |
  79. //+------------------------------------------------------------------+
  80. int OnInit()
  81.   {
  82. //--- indicator buffers mapping

  83.   mianban();
  84.    IndicatorShortName("多空轨道");
  85.    SetIndexBuffer(1,maHighBuffer);
  86.    SetIndexBuffer(2,maLowBuffer);
  87.    SetIndexBuffer(3,maMaxBuffer);
  88.    SetIndexBuffer(4,maMinBuffer);
  89.    SetIndexBuffer(5,upBuffer);
  90.    SetIndexBuffer(6,downBuffer);
  91. //--- setting a code from the Wingdings charset as the property of PLOT_ARROW
  92.    
  93.    SetIndexBuffer(0,maBuffer);
  94.    SetIndexLabel(0,MA+"日均线");
  95.    

  96.    SetIndexArrow(5,241);
  97.    SetIndexLabel(5,"up");
  98.    
  99.    SetIndexArrow(6,242);
  100.    SetIndexLabel(6,"down");
  101.    
  102.    if(Period() == 5){ 箭头间隔 = 15;juli = 20;}  //Period()返回当前图表的时间表  属于几分钟图  
  103.    if(Period() == 15){ 箭头间隔 = 25;juli =30;}
  104.    if(Period() == 30){ 箭头间隔 = 35;juli =40;}
  105.    if(Period() == 60){ 箭头间隔 = 66;juli =50;}
  106.    if(Period() == 240){ 箭头间隔 = 88;juli =66;}
  107.    if(Period() == 1440){ 箭头间隔 = 150;juli = 100;}
  108.    if(Period() == 10080){ 箭头间隔 = 250;juli = 120;}
  109.    if(Period() == 1){ 箭头间隔 = 10;juli =15;}
  110.    
  111.    
  112. //---
  113.    return(INIT_SUCCEEDED);
  114.   }
  115.   
  116. int OnDeinit(){
  117. ObjectsDeleteAll();
  118. return 0;

  119. }
  120. //+------------------------------------------------------------------+
  121. //| Custom indicator iteration function                              |
  122. //+------------------------------------------------------------------+
  123. int OnCalculate(const int rates_total,
  124.                 const int prev_calculated,
  125.                 const datetime &time[],
  126.                 const double &open[],
  127.                 const double &high[],
  128.                 const double &low[],
  129.                 const double &close[],
  130.                 const long &tick_volume[],
  131.                 const long &volume[],
  132.                 const int &spread[])
  133.   {
  134.   

  135.    int counted_bars=IndicatorCounted();
  136.    if (counted_bars<0) return(-1);
  137.    if (counted_bars>0) counted_bars--;
  138.    int limit=Bars-counted_bars;
  139.    
  140.    double c1,c2,d1,d2,middle1,middle2;
  141.    for(int i=limit-2; i>=0; i--)   //必须是limit-2 否则数组下标越界
  142.      {
  143.         

  144.         
  145.      
  146.         middle = iMA(Symbol(),PERIOD_CURRENT,MA,0,method,PRICE_CLOSE,i+1);  //最后一个参数表示第几个MA值
  147.         up1 = iMA(Symbol(),PERIOD_CURRENT,MA,0,method,PRICE_HIGH,i+1);  
  148.         low1 = iMA(Symbol(),PERIOD_CURRENT,MA,0,method,PRICE_LOW,i+1);  
  149.         
  150.         middle1 = iMA(Symbol(),PERIOD_CURRENT,MA,0,method,PRICE_CLOSE,i+2);  
  151.         
  152.         
  153.         maBuffer[i] = middle;
  154.         maHighBuffer[i] = (up1-low1)*内轨系数 + middle;
  155.         maLowBuffer[i] = middle - (up1-low1)*内轨系数;
  156.         
  157.         maMaxBuffer[i] = (up1-low1)*外轨系数 + middle;
  158.         maMinBuffer[i] = middle - (up1-low1)*外轨系数;
  159.         
  160.         
  161.         
  162.         if(maHighBuffer[i+1] < Close[i+1] && downpp == true){
  163.             upBuffer[i] = Low[i] - 箭头间隔*Point;
  164.             upp = true;
  165.             downpp = false;
  166.         }
  167.         
  168.         if(maLowBuffer[i+1] > Close[i+1] && upp == true){
  169.             downBuffer[i] = High[i] + 箭头间隔*Point;
  170.             upp = false;
  171.             downpp = true;
  172.         }
  173.      
  174.      }
  175.   
  176.   
  177.   
  178.    return(rates_total);
  179.   }
  180. //+------------------------------------------------------------------+



  181. void CreateLabel(long  chart_ID,
  182.                  string Name,
  183.                  int Window,
  184.                  int xPos,
  185.                  int yPos,
  186.                  int 宽,
  187.                  int 高,
  188.                  int FontSz,
  189.                  color FontColor1,
  190.                  color BGcolor1,
  191.                  color BRcolor1,
  192.                  int Corner1,
  193.                  string LblTxt,
  194.                  string tooltip)
  195.    {
  196.    if(ObjectFind(Name)!=0) ObjectCreate(chart_ID,Name,OBJ_BUTTON,Window,0,0);
  197.    ObjectSetInteger(chart_ID,Name,OBJPROP_CORNER,Corner1);
  198.    ObjectSetInteger(chart_ID,Name,OBJPROP_XDISTANCE,xPos);
  199.    ObjectSetInteger(chart_ID,Name,OBJPROP_YDISTANCE,yPos);
  200.    ObjectSetInteger(chart_ID,Name,OBJPROP_XSIZE,宽);
  201.    ObjectSetInteger(chart_ID,Name,OBJPROP_YSIZE,高);
  202.    ObjectSetString(chart_ID,Name,OBJPROP_FONT,"黑体");
  203.    ObjectSetInteger(chart_ID,Name,OBJPROP_FONTSIZE,FontSz);
  204.    ObjectSetInteger(chart_ID,Name,OBJPROP_COLOR,FontColor1);
  205.    ObjectSetInteger(chart_ID,Name,OBJPROP_BORDER_COLOR,BRcolor1);
  206.    ObjectSetInteger(chart_ID,Name,OBJPROP_BGCOLOR,BGcolor1);
  207.    ObjectSetInteger(chart_ID,Name,OBJPROP_SELECTABLE,0);
  208.    ObjectSetInteger(chart_ID,Name,OBJPROP_SELECTED,0);
  209.    ObjectSetInteger(chart_ID,Name,OBJPROP_BACK,false);
  210.    ObjectSetInteger(chart_ID,Name,OBJPROP_ALIGN,ALIGN_LEFT);
  211.    ObjectSetString(chart_ID,Name,OBJPROP_TEXT,LblTxt);
  212.    ObjectSetString(chart_ID,Name,OBJPROP_TOOLTIP,tooltip);
  213.   }


  214.   
  215. //+------------------------------------------------------------------+
  216. bool EditCreate( long             chart_ID=0,
  217.                  string           name="Edit",
  218.                  int              sub_window=0,
  219.                  int              x=0,
  220.                  int              y=0,
  221.                  int              width=50,
  222.                  int              height=18,
  223.                  color            clr=clrYellow,
  224.                  string           text="Text",
  225.                  string           tooltip="",
  226.                  ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER,
  227.                  string           font="Arial",
  228.                  int              font_size=10,
  229.                  ENUM_ALIGN_MODE  align=ALIGN_CENTER,
  230.                  bool             read_only=false,
  231.                  color            back_clr=clrBlack,
  232.                  color            border_clr=clrFireBrick,
  233.                  bool             back=false,
  234.                  bool             selection=false,
  235.                  bool             hidden=true,
  236.                  long             z_order=0
  237.                 )
  238.   {
  239.    ResetLastError();
  240.    if(!ObjectCreate(chart_ID,name,OBJ_EDIT,sub_window,0,0))
  241.      {
  242.       Print(__FUNCTION__,
  243.             ": failed to create \"Edit\" object! Error code = ",GetLastError());
  244.       return(false);
  245.      }
  246.    ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
  247.    ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
  248.    ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
  249.    ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
  250.    ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
  251.    ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
  252.    ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
  253.    ObjectSetInteger(chart_ID,name,OBJPROP_ALIGN,align);
  254.    ObjectSetInteger(chart_ID,name,OBJPROP_READONLY,read_only);
  255.    ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
  256.    ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
  257.    ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
  258.    ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);
  259.    ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
  260.    ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
  261.    ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
  262.    ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
  263.    ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
  264.    ObjectSetString(chart_ID,name,OBJPROP_TOOLTIP,tooltip);
  265.    return(true);
  266.   }



  267. //+------------------------------------------------------------------+
  268. //|   创建控制面板                                                   |
  269. //+------------------------------------------------------------------+

  270. void mianban()
  271.   {
  272.      int a1 = 80,b1=140 ,y1 = 50;
  273.      
  274.      for(int j=1;j<=3;j++)
  275.         {
  276.         
  277.          switch(j)
  278.            {

  279.             case 1 : CreateLabel(0,"hekc"+(string)j,Win,b1,290,62,25,FontSize,Fontcolor,clrPurple,clrRed,Corner,"打开图表","打开图表"); break;
  280.             case 2 : EditCreate(0,"hekc"+(string)j,Win,a1-10,290,66,25,clrWhite,"镑美","Symbol",Corner); break;
  281.             case 3 : CreateLabel(0,"hekc"+(string)j,Win,168,290,20,25,FontSize,Fontcolor,clrRed,clrRed,Corner,"X","卸载指标"); break;
  282.            }
  283.        }
  284.   }


  285. void OnChartEvent(const int    id,
  286.                   const long   &lparam,
  287.                   const double &dparam,
  288.                   const string &sparam)
  289.   {
  290.    string name,sym="";
  291.    
  292.       if(id==CHARTEVENT_OBJECT_CLICK)
  293.      {
  294.    //获取EDIT值  
  295.           if(ObjectFind(0,"hekc"+(string)2)>=0)//zhiying
  296.           {  
  297.              name=ObjectGetString(0,"hekc"+(string)2,OBJPROP_TEXT);

  298.           }

  299.         if(sparam=="hekc"+(string)1)   
  300.         {
  301.         
  302.          if(name == "美日")sym = "USDJPY";
  303.          if(name == "欧美")sym = "EURUSD";
  304.          if(name == "美加")sym = "USDCAD";
  305.          if(name == "欧日")sym = "EURJPY";
  306.          if(name == "纽美")sym = "NZDUSD";
  307.          if(name == "美瑞")sym = "USDCHF";
  308.          if(name == "镑美")sym = "GBPUSD";
  309.          if(name == "镑日")sym = "GBPJPY";
  310.          if(name == "黄金")sym = "XAUUSD";
  311.          if(name == "澳美")sym = "AUDUSD";
  312.          if(name == "磅美")sym = "GBPUSD";
  313.          if(name == "人民币")sym = "USDCNH";
  314.          if(name == "里拉")sym = "USDTRY";
  315.          if(name == "原油")sym = "XTIUSD";
  316.          if(name == "比特币")sym = "BTCUSD";
  317.          

  318.         if(ChartOpen(sym,PERIOD_H1) == false){
  319.          Alert("输入有误,打开失败");
  320.         }
  321.         
  322.         }
  323.         
  324.         if(sparam=="hekc"+(string)3)   //减
  325.         {
  326.         
  327.          ChartIndicatorDelete(0,0,"多空轨道");
  328.          ObjectsDeleteAll();
  329.         }
  330.         
  331.    }
  332.    
  333. }   
  334.       
复制代码
装死

11

主题

1万

积分

0

精华

操盘专家

金钱
10051 美元
权重
0
发表于 2019-6-29 13:37 来自手机 | 显示全部楼层
利害~

26

主题

1万

积分

0

精华

操盘专家

金钱
10004 美元
权重
1
发表于 2019-6-29 23:11 | 显示全部楼层
楼主。你这个可以再修改下:
做个货币名称字符串提取,如:如果输入的汉字是镑美,那就将镑转换成GBP,美转换成USD
就不用改你的那个输入了。

121

主题

1万

积分

0

精华

操盘专家

金钱
17970 美元
权重
0
 楼主| 发表于 2019-6-30 07:46 | 显示全部楼层
过去了 发表于 2019-6-29 23:11
楼主。你这个可以再修改下:
做个货币名称字符串提取,如:如果输入的汉字是镑美,那就将镑转换成GBP,美 ...

谢谢提醒

面板可移动怎么写?   
装死

121

主题

1万

积分

0

精华

操盘专家

金钱
17970 美元
权重
0
 楼主| 发表于 2019-6-30 16:40 | 显示全部楼层
本帖最后由 sanbuxiaozhu 于 2019-7-2 09:07 编辑

感谢 @过去了 提供建议
增加函数

  1. int strreplace(string &s){

  2.    int num=0;

  3.    if(s == "") { s = Symbol(); num = 1;}  //空返回本货币

  4.    num = StringReplace(s,"日","JPY");

  5.    num += StringReplace(s,"美","USD");

  6.    num += StringReplace(s,"加","CAD");

  7.    num += StringReplace(s,"瑞","CHF");

  8.    num += StringReplace(s,"镑","GBP");

  9.    num += StringReplace(s,"欧","EUR");

  10.    num += StringReplace(s,"澳","AUD");

  11.    num += StringReplace(s,"纽","NZD");

  12.    num += StringReplace(s,"黄金","XAUUSD");

  13.    num += StringReplace(s,"比特币","BTCUSD");

  14.    num += StringReplace(s,"人民币","USDCNH");

  15.    num += StringReplace(s,"里拉","USDTRY");
  16.    
  17.    return num;  
  18. }
复制代码



原先的这部分改成
  1.         if(sparam=="hekc"+(string)1)   
  2.         {
  3.         
  4.         strreplace(name);
  5.         
  6.         if(ChartOpen(name,PERIOD_H1) == false){
  7.          Alert("输入有误,打开失败");
  8.         }
  9.         
  10.         }
  11.         
复制代码



装死

3

主题

322

积分

0

精华

见习操盘手

金钱
322 美元
权重
0
发表于 2019-7-3 15:42 | 显示全部楼层
快速,可以用。
您需要登录后才可以回帖 登录 | 快捷注册(禁q号)

本版积分规则

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

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

浙公网安备 33011802001420号

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

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