外汇返佣网

您当前的位置:第一外汇返佣网 > 外汇学习 > 外汇百科 >

外汇百科

MQL5变色线的画法(比MQL4更加简单)

时间: 2023-06-19 15:24 文章来源: 外汇返佣网 点击次数:

  MQL5里有一种特殊指标数组“颜色数组”,他是和画线的指标数组配合使用的。通过对他的简单赋值可以使画出的线变色。
首先要在指标头部定义里指定一条线对应的数组是要使用变色画线方式,指定方法是:
#property indicator_typeX DRAW_COLOR_LINE
这里X代表画线的数组序号
DRAW_COLOR_LINE代表画线,此外还可以有如下画线方式:
复制代码 DRAW_COLOR_LINE Colorful Line彩色线 DRAW_COLOR_SECTION Multicolored section彩色块 DRAW_COLOR_HISTOGRAM Multicolored histogram from the zero line彩色柱状图 DRAW_COLOR_HISTOGRAM2 Multicolored histogram of the two indicator buffers彩色柱状图2 DRAW_COLOR_ARROW Drawing colored arrows彩色箭头 DRAW_COLOR_ZIGZAG Colorful ZigZag彩色ZigZag DRAW_COLOR_BARS Multi-colored bars彩色竹线图 DRAW_COLOR_CANDLES Multi-colored candles彩色蜡烛图
然后紧跟一个颜色的定义语句:
#property indicator_colorX Red,Green
两个颜色之间用逗号分隔
============================================
针对上面程序头部的定义,之后要开始全局数组的定义。
这里要注意实现变色需要针对一条线使用两个数组,
例如:
double bMaBuffer[],bColorBuffer[];
然后进入OnInit事件进行两个数组的分别设定:
SetIndexBuffer(0,bMaBuffer,INDICATOR_DATA);//INDICATOR_DATA表示是用于画线的数组
SetIndexBuffer(1,bColorBuffer,INDICATOR_COLOR_INDEX);//INDICATOR_COLOR_INDEX表示是用于变色的颜色数组
注意:
如果这里要画多条彩色线,第一返佣网,外汇返佣网,则画线数组和颜色数组的序号要紧邻。
============================================
下一步就是在OnCaculate事件里进行画线数组的计算,同时根据自定义的条件对颜色数组进行赋值。
赋值规则是:
当对应K线序号的颜色数组被赋值1.0时,现货黄金交易,对应画线数组的颜色为 第一个颜色
当对应K线序号的颜色数组被赋值0.0时,对应画线数组的颜色为 第二个颜色
完。
程序举例源码如下:【画出两个变色线】
复制代码 //+------------------------------------------------------------------+ // Test.mq5 // Copyright 2009, MetaQuotes Software Corp. // //+------------------------------------------------------------------+ #property copyright 2009, 520FX #property link #property version 1.00 #property indicator_chart_window #property indicator_buffers 4 #property indicator_plots 2 #property indicator_color1 Red,Green #property indicator_type1 DRAW_COLOR_LINE #property indicator_style1 STYLE_SOLID #property indicator_width1 2 #property indicator_color2 Yellow,Blue #property indicator_type2 DRAW_COLOR_LINE #property indicator_style2 STYLE_SOLID #property indicator_width2 2 input int MaPeriod=13; double bMaBuffer[],bMaBuffer1[],bColorBuffer[],bColorBuffer1[]; int iMaHandle,iMaHandle1; //+------------------------------------------------------------------+ // Custom indicator initialization function //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,bMaBuffer,INDICATOR_DATA); SetIndexBuffer(1,bColorBuffer,INDICATOR_COLOR_INDEX); SetIndexBuffer(2,bMaBuffer1,INDICATOR_DATA); SetIndexBuffer(3,bColorBuffer1,INDICATOR_COLOR_INDEX); IndicatorSetInteger(INDICATOR_DIGITS,_Digits); iMaHandle=iMA(NULL,0,MaPeriod,0,MODE_SMA,PRICE_CLOSE); iMaHandle1=iMA(NULL,0,MaPeriod+50,0,MODE_SMA,PRICE_CLOSE); //--- return(0); } //+------------------------------------------------------------------+ // Custom indicator iteration function //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime time[], const double open[], const double high[], const double low[], const double close[], const long tick_volume[], const long volume[], const int spread[]) { //--- return value of prev_calculated for next call //--- checking for bars count if(rates_total<MaPeriod) return(0); //--- detect start position int start; //if(prev_calculated>1) start=prev_calculated-1; //else start=1; if(prev_calculated<0)return(-1);else start=rates_total-prev_calculated+1; int to_copy; if(prev_calculated>rates_total prev_calculated<0) to_copy=rates_total; else { to_copy=rates_total-prev_calculated; if(prev_calculated>0) to_copy++; } if(CopyBuffer(iMaHandle,0,0,to_copy,bMaBuffer)<=0) { Print(Getting fast SMA is failed! Error,GetLastError()); return(0); } if(CopyBuffer(iMaHandle1,0,0,to_copy,bMaBuffer1)<=0) { Print(Getting fast SMA1 is failed! Error,GetLastError()); return(0); } //--- main cycle for(int i=start;i<rates_total;i++) { if(bMaBuffer[i]>close[i-1]) bColorBuffer[i]=1.0; else bColorBuffer[i]=0.0; if(bMaBuffer1[i]>close[i-1]) bColorBuffer1[i]=1.0; else bColorBuffer1[i]=0.0; } return(rates_total); } //+------------------------------------------------------------------+

,外汇返佣 第一外汇返佣网-最专业的外汇返佣平台外汇返佣:交易者不可忽

开户返佣提示
选择平台前,建议重点查看监管主体、账户类型、点差成本、出入金方式和返佣周期。不同平台交易条件不同,开户前请先咨询确认。
申请返佣
×

第一外汇返佣网声明
尊敬的投资者:
头条声明:您需要充分了解您投资外汇的经济承担和风险自担能力,否则建议远离外汇市场。
1. 因平台考核有风险,考核受管理层决策及人事变动影响较大,因此返佣高低将可能会受影响,此风险我们概不负责。
2. 所有平台默认均为月结算,周结与半月结算均是在平台商代理授权允许下我们提前透支佣金,我们有权随时终止周结算或调整周结算时间。
3. 第一外汇返佣网并非外汇平台,只提供免费的外汇信息资讯服务、外汇平台咨询及降低交易成本咨询。我们不接触客户资金和资料,不邀约任何人投资外汇和其他产品。
4. 如有滥用平台赠金、平台漏洞或违反平台交易规则导致处罚者,我们有权不负责协调处理。
5. 因佣金统计错误、信用卡漏洞或 Skrill 漏洞入金而被平台扣除佣金,我们有权进行追偿。
6. 部分平台禁止代客理财、刷延迟、刷错价、刷单、AB仓、赠金套利等,如有此类交易手法,请先向客服了解清楚。
7. 禁止任何代理以“第一外汇返佣网”名义进行商业活动,一经发现将取消代理资格,并追究相应责任。
8. 当您填好此表后,将正式成为我们代理或返佣直客,本人或客户均可享受返佣服务。
9. 我们确认您提交的账号后,会在提交返佣信息的邮箱中再次发送风险忠告,请认真阅读。
10. 第一外汇返佣网有权随时结束返佣,返佣属于平台商授权代理允许下的市场回馈奖励费用,不构成任何投资承诺。

*联系手机:
*Q Q号码:
*开户平台:
*银行卡号:
*开户邮箱:
*开户银行:
*MT4账号:
*开户姓名: