下载MetaTrader 5

请观看如何免费下载自动交易

有趣的脚本?
因此发布一个链接 -
让其他人评价

喜欢这个脚本? 在MetaTrader 5客户端尝试它

2015.04.17 13:13
程序库

一套自由形式的按钮类 - MetaTrader 5程序库

| Chinese English Русский Español Deutsch 日本語 Português

显示:
646
等级:
投票: 20
Class.mqh (24.14 KB)预览
img.zip (139.78 KB)

这个类设计用于创建价格图表上的多种交互按钮。

开发此类是为了参加由慷慨的 TheXpert 举办的大赛。多谢您。


类 CBtn 的演示


类方法

Create(long chart_id,int sub_wnd,string name,int x,int y,int dx,int dy) - 创建带参数的按钮:

  1. 窗口标识符
  2. 子窗口号码
  3. 按钮名称
  4. X 坐标
  5. Y 坐标
  6. 水平尺寸
  7. 垂直尺寸

Resources(string img_up,string img_up_active="",string img_dn="",string img_dn_active="",string img_up_disable="",string img_dn_disable="",string img_mask="") - 定义按钮的不同状态图像:

  1. 正常未按压按钮
  2. 按钮被光标悬浮
  3. 按压按钮
  4. 按压的按钮被光标悬浮
  5. 禁止按钮
  6. 按钮轮廓蒙版

SetUseMask(ENUM_USEMASK mask,int x=0,int y=0) - 设置指定像素颜色的蒙版; 蒙版从标准未按压按钮图像形成。

  1. 使用蒙版类型
  2. X 坐标
  3. Y 坐标

SetUseMask(ENUM_USEMASK mask,uint acolor) - 设置蒙版颜色; 蒙版从标准未按压按钮图像形成。

  1. 使用蒙版类型
  2. 颜色

SetCorner(ENUM_BASE_CORNER corner) - 设置按钮位于图表角落的锚点

SetAnchor(ENUM_ANCHOR_POINT anchor) - 设置锚点类型

SetX(int x) - 设置 X 坐标

SetY(int y) - 设置 Y 坐标

SetXY(int x,int y) - 单一方法设置 X 和 Y 坐标

On(bool state) - 设置按钮状态 (true 按压, false 未按压)

Enable(bool state) - 启用/禁用按钮

Paint(void) - 绘制按钮

Event(int id,long lparam,double dparam,string sparam) - 传递事件至按钮
所有参数从 OnChartEvent 函数复制

GetX(void) - 获取 X 坐标

GetY(void) - 获取 Y 坐标

GetEnable(void) - 获取启用/禁用状态

GetOn(void) - 获取按压/未按压状态

GetCorner(void) - 获取按钮位于图表角落的锚点

GetAnchor(void) - 获取锚点类型

AddText(int x,int y,string font_name,int font_size,color text_color,string text) - 添加按钮文本

  1. X 坐标
  2. Y 坐标
  3. 字体名称
  4. 字体大小
  5. 文本颜色
  6. 文本

Text(string text) - 更新按钮文本 (未调用 AddText(...) 则不工作) 

创建按钮

省缺, 一个按钮有以下参数:

  • 未按压
  • 启用
  • 图表左上角的锚点
  • 按钮左上角锚点

设置按钮蒙版

省缺, 按钮从正常的未按压按钮图形创建。透明像素作为蒙版。

  • UseMask(MASK_STANDALONE_RESOURCE) - 蒙版使用在 Resources() 里指定的图像。如果图像未设置, 整个按钮区域 (长方形) 将作为工作区域。
  • UseMask(MASK_PIXEL,x,y) - 蒙版使用指定像素的颜色。如果像素颜色与指定颜色不匹配, 它变为蒙版。如果坐标未设置, 则使用 [0,0] 坐标。
  • UseMask(MASK_COLOR,color) - 指定用于蒙版的颜色。如果像素颜色与指定颜色不匹配, 它变为蒙版。颜色应设置为 ARGB 格式。

例如

//+------------------------------------------------------------------+
//|                                                    3dButtons.mq5 |
//|                                           Copyright 2015, fyords |
//|                           https://login.mql5.com/ru/users/fyords |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, fyords"
#property link      "https://www.mql5.com/en/users/fyords"
#property version   "1.01"
//+------------------------------------------------------------------+
//| Insert resources                                                 |
//+------------------------------------------------------------------+
#resource "img\\200_1.bmp"
#resource "img\\200_2.bmp"
#resource "img\\200_3.bmp"
#resource "img\\200_4.bmp"
#resource "img\\200_5.bmp"
#resource "img\\200_6.bmp"
//+------------------------------------------------------------------+
#include "Class.mqh"
//+------------------------------------------------------------------+
enum Adjust
  {
   UpperLeft,
   UpperRight,
   LowerLeft,
   LowerRight
  };
//+------------------------------------------------------------------+
//| Input property                                                   |
//+------------------------------------------------------------------+
input Adjust adj_corner=UpperLeft;     //Corner
//+------------------------------------------------------------------+
//| Global variables                                                 |
//+------------------------------------------------------------------+
CBtn *btn[];

int num_buttons;
//+------------------------------------------------------------------+
//| Initialization function                                          |
//+------------------------------------------------------------------+
int OnInit()
  {
   long wnd=ChartID();
   int sub_wnd=ChartWindowOnDropped();

   ArrayFree(btn);
   int n=0;
   num_buttons=0;

   for(int y=0;y<3;y++)
     {
      for(int x=0;x<3;x++)
        {
         ArrayResize(btn,n+1);
         btn[n]=new CBtn;
         btn[n].Create(wnd,sub_wnd,"3dButtons_"+(string)MathRand(),x*152+10,y*152+10,200,200);
         btn[n].Resources("img\\200_1.bmp","img\\200_2.bmp","img\\200_3.bmp","img\\200_4.bmp","img\\200_5.bmp","img\\200_6.bmp");
         btn[n].AddText(80,80,"Arial",25,clrWhite,"Button"+(string)(n+1));
         switch(adj_corner)
           {
            case UpperLeft:
               btn[n].SetAnchor(ANCHOR_LEFT_UPPER);
               btn[n].SetCorner(CORNER_LEFT_UPPER);
               break;
            case UpperRight:
               btn[n].SetAnchor(ANCHOR_RIGHT_UPPER);
               btn[n].SetCorner(CORNER_RIGHT_UPPER);
               break;
            case LowerLeft:
               btn[n].SetAnchor(ANCHOR_LEFT_LOWER);
               btn[n].SetCorner(CORNER_LEFT_LOWER);
               break;
            case LowerRight:
               btn[n].SetAnchor(ANCHOR_RIGHT_LOWER);
               btn[n].SetCorner(CORNER_RIGHT_LOWER);
               break;
           }
         btn[n].Paint();
         n++;
        }
     }
   ChartRedraw();

   num_buttons=ArraySize(btn);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Deinitialization function                                        |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   for(int i=0;i<num_buttons;i++) delete btn[i];
   ArrayFree(btn);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   for(int i=0;i<num_buttons;i++) btn[i].Event(id,lparam,dparam,sparam);
  }

本文译自 MetaQuotes Software Corp. 撰写的俄文原文
官方代码: https://www.mql5.com/ru/code/12637

蜡烛结束时间和点差 蜡烛结束时间和点差

此指标在同一时间显示当前点差和距收盘的剩余时间 (蜡烛条)。

AFL_Winner_Signal AFL_Winner_Signal

此 AFL_Winner_Signal 指标基于 AFL_Winner 指标显示当前趋势信息和信号。

类 СBmpButtonTransparent 类 СBmpButtonTransparent

一套用于透明按钮的类。

风险管理器 风险管理器

此 EA 控制并限制账户的总体亏损, 以及每笔交易的亏损。它含有账户的尾随停止。