请观看如何免费下载自动交易
请在Facebook上找到我们!
加入我们粉丝页
有趣的脚本?
因此发布一个链接 -
让其他人评价
喜欢这个脚本? 在MetaTrader 5客户端尝试它
显示:
110
等级:
(4)
已发布:
\MQL5\Include\
MQL5自由职业者 需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务

变量定义

首先,你需要修改文件的第一行,使其与变量和数组的名称相匹配。下图中的 MqlRates 变量使用了 g_rates,其中包含蜡烛图的开盘价、收盘价、最高价和最低价。你应该用你的变量名替换 g_rates。i "是一个虚拟变量名,不会干扰代码中的任何其他变量。变量 "i "是正在使用的蜡烛图的编号。例如:要使用蜡烛 3 的收盘价,请使用 CANDLECLOSE(3)。


// Candle (define g_rates as: MqlRates g_rates[];)
#define  CANDLELOW(i)    g_rates[i].low
#define  CANDLEHIGH(i)   g_rates[i].high
#define  CANDLEOPEN(i)   g_rates[i].open
#define  CANDLECLOSE(i)  g_rates[i].close
#define CANDLETIME(i)   g_rates[i].time

此外,您可以使用 MqlTick 获取 ASK 和 BID 值,就像我在下面所做的那样,或者您也可以调用 SymbolInfoDouble(_Symbol,SYMBOL_ASK)。这对返回的值没有任何影响。

// Prices (define g_tick as: MqlTick g_tick;))
#define  ASK             g_tick.ask
#define  BID             g_tick.bid

最后,还为移动平均线、atr 或任何其他需要的数组定义了数组。例如:要使用蜡烛 1 的平均真实范围,请使用 ATR(1)。
重要:假定数组为 AsSeries(例如,ArraySetAsSeries(g_MA20_arr, true); )。这在稍后显示的 #define 语句中至关重要。

// 将这些数组定义为: double g_MA20_arr[];
// 移动平均线和 ATR
#define  MOVAVG20(i)     g_MA20_arr[i]
#define  MOVAVG40(i)     g_MA40_arr[i]
#define  MOVAVG50(i)     g_MA50_arr[i]
#define  MOVAVG200(i)    g_MA200_arr[i]
#define  ATR(i)          g_atr_arr[i]


一旦定义了上述语句,就不需要再修改其他内容了。如果需要,您还可以添加其他适合您的 EA 的 #define 语句。


蜡烛图功能

蜡烛图的特性在开发 EA 时非常有用,尤其是在 EA 基于价格行为的情况下。以下定义的名称说明了它们所代表的含义。WICK 指蜡烛上影线,TAIL 指蜡烛下影线。例如:要获取最后一根蜡烛中间的价格,请使用 CANDLEBODYMIDDLE(1)。

// 蜡烛特点
#define  CANDLEBODYTOP(i)      fmax(CANDLEOPEN(i),CANDLECLOSE(i))
#define  CANDLEBODYBOT(i)      fmin(CANDLEOPEN(i),CANDLECLOSE(i))
#define  CANDLEMEDIAN(i)       (0.5*(CANDLEHIGH(i)+CANDLELOW(i)))
#define  CANDLEWEIGHTED(i)     (0.25*(CANDLEHIGH(i)+CANDLELOW(i)+2*CANDLECLOSE(i)))
#define  CANDLETYPICAL(i)      (1./3.*(CANDLEHIGH(i)+CANDLELOW(i)+CANDLECLOSE(i)))
#define  CANDLEBODYMIDDLE(i)   (0.5*(CANDLEBODYTOP(i)+CANDLEBODYBOT(i)))
#define  CANDLESIZE(i)         (CANDLEHIGH(i)-CANDLELOW(i))
#define  CANDLEBODYSIZE(i)     fabs(CANDLECLOSE(i)-CANDLEOPEN(i))
#define  CANDLEWICKSIZE(i)     (CANDLEHIGH(i)-CANDLEBODYTOP(i))
#define  CANDLETAILSIZE(i)     (CANDLEBODYBOT(i)-CANDLELOW(i))

此外,我们还以 ATR 为参考定义了两种大小。例如:想知道蜡烛图 4 相对于 ATR 有多大,使用 ATRCANDLESIZE(4)。

#define  ATRCANDLESIZE(i)      (CANDLESIZE(i)/ATR(i))
#define  ATRCANDLEBODYSIZE(i)  (CANDLEBODYSIZE(i)/ATR(i))

如果收盘价==开盘价,则方向=0。 示例: if(CANDLEDIRECTION(10)==1) Print("蜡烛 10 是一根向上的蜡烛");

#define  CANDLEDIRECTION(i)    (CANDLECLOSE(i)>CANDLEOPEN(i)?1:(CANDLECLOSE(i)<CANDLEOPEN(i)?-1:0))

定义了两种 "运行 "类型:上行和下行。运行 "用于捕捉价格在一个方向上的强烈波动。例如,使用 CANDLERUNUP(3) 获取蜡烛图 3 的上涨。

#define  CANDLERUNUP(i)        ((CANDLECLOSE(i)>CANDLEOPEN(i))?(CANDLECLOSE(i)-CANDLELOW(i)):0)
#define  CANDLERUNDOWN(i)      ((CANDLECLOSE(i)<CANDLEOPEN(i))?(CANDLEHIGH(i)-CANDLECLOSE(i)):0)


蜡烛图特征查询

这些定义是布尔变量,告诉我们一个或一组蜡烛的行为。它们使用以前的 #define 语句来缩短长度。

isCANDLERIGHTDIR(i,dir) 如果蜡烛(i)的方向等于 dir,则为 true,否则为 false;

有两种分形:一种使用五根蜡烛,另一种(弱分形)使用三根蜡烛。在下面的分形 #定义中,蜡烛图(i)是具有最高点(TOP)或最低点(BOT)的中间蜡烛图。对于五根蜡烛图分形,请确保有蜡烛图 i-2、i-1、i、i+1、i+2 的数据。还有使用严格不等式">"或"<",以及使用"<="或">="的其他变化。最后,还有用于识别顶部(TOP)或底部(BOT)分形的 #定义。通过观察这些定义,你就可以知道应该使用哪个定义。

is3CANDLEGAPUP(i,gap,size) 用于查找向上缺口(一根蜡烛的高点低于两根蜡烛之后的低点)。Candle(i) 将是三根蜡烛中最新的一根。再次假设蜡烛是 "AsSeries"(系列)。"缺口 "是缺口的最小价格-三角洲,"大小 "是中间蜡烛体大小的最小价格-三角洲。

is3CANDLEGAPDOWN(i,gap,size) 使用相同的逻辑查找下跌缺口。

is3CANDLEGAPUPTREND(i,gap,size) 与is3CANDLEGAPUP(i,gap,size) 相同 ,但增加了一个为真的条件:三根蜡烛中最长的必须是正方向。

有两种方法可以查询蜡烛是否为十字星:isCANDLEDOJIPOINTS(i,n) 和 isCANDLEDOJIFRACTION(i,f)。第一个版本使用 n*_Point,第二个版本使用 f*CANDLESIZE(i) 来判断蜡烛是否是十字星(真或假)。

例如:如果想知道蜡烛 20 是否为非严格(使用等式)分形顶部,使用 isCANDLEFRACTALEQTOP(20),输出结果将是 true 或 false。

如您所见,这些定义是查询的压缩形式,使您的 EA 代码更简短、更易读。

// 蜡烛功能查询(布尔值)
#define  isCANDLEUP(i)               (CANDLEDIRECTION(i)==1)
#define  isCANDLEDOWN(i)             (CANDLEDIRECTION(i)==-1)
#define  isCANDLEFLAT(i)             (CANDLEDIRECTION(i)==0)
#define  isCANDLEWICKLESS(i)         (CANDLEWICKSIZE(i)==0)
#define  isCANDLETAILLESS(i)         (CANDLETAILSIZE(i)==0)
#define  isCANDLESOLID(i)            (CANDLEWICKSIZE(i)==0 && CANDLETAILSIZE(i)==0)
#define  isCANDLERIGHTDIR(i,dir)     (dir*(CANDLECLOSE(i) - CANDLEOPEN(i))>0)
#define  isCANDLEFRACTALTOP(i)       (CANDLEHIGH(i) > CANDLEHIGH(i-1) && CANDLEHIGH(i-1) > CANDLEHIGH(i-2) && CANDLEHIGH(i) > CANDLEHIGH(i+1) && CANDLEHIGH(i+1) > CANDLEHIGH(i+2))
#define  isCANDLEFRACTALBOT(i)       (CANDLELOW(i) < CANDLELOW(i-1) && CANDLELOW(i-1) < CANDLELOW(i-2) && CANDLELOW(i) < CANDLELOW(i+1) && CANDLELOW(i+1) < CANDLELOW(i+2))
#define  isCANDLEFRACTALEQTOP(i)     (CANDLEHIGH(i) >= CANDLEHIGH(i-1) && CANDLEHIGH(i-1) >= CANDLEHIGH(i-2) && CANDLEHIGH(i) >= CANDLEHIGH(i+1) && CANDLEHIGH(i+1) >= CANDLEHIGH(i+2))
#define  isCANDLEFRACTALEQBOT(i)     (CANDLELOW(i) <= CANDLELOW(i-1) && CANDLELOW(i-1) <= CANDLELOW(i-2) && CANDLELOW(i) <= CANDLELOW(i+1) && CANDLELOW(i+1) <= CANDLELOW(i+2))
#define  isCANDLEWEAKFRACTALTOP(i)   (CANDLEHIGH(i) > CANDLEHIGH(i-1) && CANDLEHIGH(i) > CANDLEHIGH(i+1))
#define  isCANDLEWEAKFRACTALBOT(i)   (CANDLELOW(i) < CANDLELOW(i-1) && CANDLELOW(i) < CANDLELOW(i+1))
#define  isCANDLEWEAKFRACTALEQBOT(i) (CANDLELOW(i) <= CANDLELOW(i-1) && CANDLELOW(i) <= CANDLELOW(i+1))
#define  isCANDLEWEAKFRACTALEQTOP(i) (CANDLEHIGH(i) >= CANDLEHIGH(i-1) && CANDLEHIGH(i) >= CANDLEHIGH(i+1))
#define  is3CANDLEGAPUP(i,gap,size)  (CANDLELOW(i)-CANDLEHIGH(i+2)>gap && CANDLEBODYSIZE(i+1)>=size)
#define  is3CANDLEGAPDOWN(i,gap,size) (CANDLELOW(i+2)-CANDLEHIGH(i)>gap && CANDLEBODYSIZE(i+1)>=size)
#define  is3CANDLEGAPUPTREND(i,gap,size)  (CANDLELOW(i)-CANDLEHIGH(i+2)>gap && CANDLEBODYSIZE(i+1)>=size &&  isCANDLEUP(i+2))
#define  is3CANDLEGAPDOWNTREND(i,gap,size) (CANDLELOW(i+2)-CANDLEHIGH(i)>gap && CANDLEBODYSIZE(i+1)>=size &&  isCANDLEDOWN(i+2))
#define  isCANDLEDOJIPOINTS(i,n)     (CANDLEBODYSIZE(i) <= n*_Point)
#define  isCANDLEDOJIFRACTION(i,f)   (CANDLEBODYSIZE(i) <= f*CANDLESIZE(i))


数学函数和运算

我们现在定义一些在 EA 中有用的数学函数和运算。其中一些是我开发的 EA 所特有的,但如果你愿意,也可以更改或删除它们。

BRACKET(x,minV,maxV) 将返回 x 在区间 [minV,maxV] 内的值。这对于在 EA 中对输入变量进行框约束非常有用。

CONVEXCOMB(a,x1,x2) 是 x1 和 x2 的凸组合,即 a*x1+x2。当计算 x1 和 x2 之间的中间值,但需要的不仅仅是平均值(a=0.5)时,此函数非常有用。

EVALLINE(x,x1,y1,x2,y2,ymin,ymax) 是对由两点 [x1,y1] 和 [x2,y2] 定义的直线的求值。在 x 处求值后,返回 [ymin, ymax] 内的一个带括号的值。

MAPAB11(x,A,B) 将 x 值从括号 [A,B] 映射到括号 [-1,1]。MAP11AB(x,A,B) 将 x 值从括号 [-1,1] 映射到括号 [A,B]。这两个函数对于处理 [-1,1] 范围内的归一化变量非常有用。

最后四个函数在我的 EA 中使用,不一定对每个人都有用,但我还是把它们留在了这里,以备不时之需。

#define  BRACKET(x,minV,maxV)                 (x<minV?minV:(x>maxV?maxV:x))
#define  CONVEXCOMB(a,x1,x2)                  (a*x1+(1.0-a)*x2)
#define  EVALLINE(x,x1,y1,x2,y2,ymin,ymax)    BRACKET((y2-y1)/(x2-x1)*(x-x1)+y1,ymin,ymax)
#define  MAPAB11(x,A,B)                       (2./(B-A)*(BRACKET(x,A,B)-A)-1.)
#define  MAP11AB(x,A,B)                       ((B-A)/2.*(BRACKET(x,-1,1)-1)+B)
#define  SIGMOID(x,a)                         (1.0/(1.0 + exp(-a*x)))
#define  NN1(x,w,b)                           (w*x+b)
#define  EVALPOLY(X,X0,X1,Y0,Y1,EX,ymin,ymax) BRACKET(Y1*pow((X-X0)/(X1-X0),EX)+Y0,ymin,ymax)
#define  EVALPOLY2P(X,X0,X1,Y0,Y1,EX,ymn,ymx) BRACKET((Y1-Y0)*pow((X-X0)/(X1-X0),EX)+Y0,ymn,ymx)


此外,作为函数和操作,还有差值计算(作为斜率的替代)。

MA20DIFF(i,n)给出了相隔 n 根蜡烛线的 20 期移动平均线两个值之间的差值。其他函数也遵循同样的逻辑。例如:要计算 200 期移动平均线在蜡烛 3 和蜡烛 13 之间的差值,请使用 MA200DIFF(3,10)。

#define  MA20DIFF(i,n)                        (MOVAVG20(i)-MOVAVG20(i+n))
#define  MA40DIFF(i,n)                        (MOVAVG40(i)-MOVAVG40(i+n))
#define  MA50DIFF(i,n)                        (MOVAVG50(i)-MOVAVG50(i+n))
#define  MA200DIFF(i,n)                       (MOVAVG200(i)-MOVAVG200(i+n))
#define  CANDLECLOSEDIFF(i,n)                 (CANDLECLOSE(i)-CANDLECLOSE(i+n))
#define  CANDLEOPENDIFF(i,n)                  (CANDLEOPEN(i)-CANDLEOPEN(i+n))
#define  CANDLEHIGHDIFF(i,n)                  (CANDLEHIGH(i)-CANDLEHIGH(i+n))
#define  CANDLELOWDIFF(i,n)                   (CANDLELOW(i)-CANDLELOW(i+n))
#define  CANDLEMEDIANDIFF(i,n)                (CANDLEMEDIAN(i)-CANDLEMEDIAN(i+n))
#define  CANDLEWEIGHTEDDIFF(i,n)              (CANDLEWEIGHTED(i)-CANDLEWEIGHTED(i+n))
#define  CANDLETYPICALDIFF(i,n)               (CANDLETYPICAL(i)-CANDLETYPICAL(i+n))
#define  CANDLEBODYMIDDLEDIFF(i,n)            (CANDLEBODYMIDDLE(i)-CANDLEBODYMIDDLE(i+n))

查询也包括数学函数。下面将检查括号和凸性。

#define  isINBRACKET(x,minV,maxV)             (x<=maxV && x>=minV)
#define  isINBRACKETSTRICT(x,minV,maxV)       (x<maxV && x> minV)
#define  isOUTBRACKET(x,minV,maxV)            (x>=maxV || x<=minV)
#define  isOUTBRACKETSTRICT(x,minV,maxV)      (x> maxV || x< minV)
#define  isCONVEX(yl,yc,yr)                   (yl>=yc && yc<=yr)
#define  isCONCAVE(yl,yc,yr)                  (yl<=yc && yc>=yr)
#define  isCONVEXTSTRICT(yl,yc,yr)            (yl>yc && yc<yr)
#define  isCONCAVESTRICT(yl,yc,yr)            (yl<yc && yc> yr)


常数

我定义了一些我使用的常量。您可以选择是否使用它们。

// 常量
#define  PIVALUE                              (M_PI)
#define  MINSTOPPOINTS                        (30)
#define  MINFREEZEPOINTS                      (30)
#define  STOPLEVEL                            (fmax(MINSTOPPOINTS,(double)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL))*_Point)
#define  FREEZELEVEL                          (fmax(MINFREEZEPOINTS,(double)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_FREEZE_LEVEL))*_Point)


调试

任何经验丰富的程序员都知道,调试代码的最佳工具就是打印语句。通过下面的定义,可以在程序中设置所有 Print 语句,并根据所需的调试级别值打开/关闭它们。

首先,你需要使用 #define DEBUG_LEVEL0、#define DEBUG_LEVEL1 #define DEBUG_LEVEL2 来 定义调试级别。使用DEBUG_LEVEL0,不会在 Metatrader 5 终端的日志选项卡上打印。使用DEBUG_LEVEL1,只有 PRINTVARn 语句有效,并将打印在日志选项卡上。使用DEBUG_LEVEL2,PRINTVARnVPRINTVARn 语句都将打印在日志选项卡上。DEBUG_LEVEL2 是使用VPRINTVARn 的 "V "级详细情况。

PRINTVARn 将打印 n 个变量。例如,如果要打印 i、x 和 z,请使用 PRINTVAR3(i,x,z);如果要打印字符串,请使用 PRINTTEXT("any string");打印输出将包括函数名称和插入 PRINTVARn 语句的文件的行号。

// 使用打印进行调试 
// 在代码开头定义调试级别 x={0,1,2}:#define DEBUG_LEVELx 
#ifdef  DEBUG_LEVEL0
#define  PRINTTEXT(text)
#define  PRINTVAR(x1)
#define  PRINTVAR1(x1)
#define  PRINTVAR2(x1,x2)
#define  PRINTVAR3(x1,x2,x3)
#define  PRINTVAR4(x1,x2,x3,x4)
#define  PRINTVAR5(x1,x2,x3,x4,x5)
#define  PRINTVAR6(x1,x2,x3,x4,x5,x6)

#define  VPRINTTEXT(text)
#define  VPRINTVAR(x1)
#define  VPRINTVAR1(x1)
#define  VPRINTVAR2(x1,x2)
#define  VPRINTVAR3(x1,x2,x3)
#define  VPRINTVAR4(x1,x2,x3,x4)
#define  VPRINTVAR5(x1,x2,x3,x4,x5)
#define  VPRINTVAR6(x1,x2,x3,x4,x5,x6)

#endif
                                                                                                
#ifdef  DEBUG_LEVEL1
#define  PRINTTEXT(text)           Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :",text)
#define  PRINTVAR(x1)              Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1))
#define  PRINTVAR1(x1)             Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1))
#define  PRINTVAR2(x1,x2)          Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2))
#define  PRINTVAR3(x1,x2,x3)       Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2),", " #x3 + "=", (x3))
#define  PRINTVAR4(x1,x2,x3,x4)    Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2),", " #x3 + "=", (x3),", " #x4 + "=", (x4))
#define  PRINTVAR5(x1,x2,x3,x4,x5) Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2),", " #x3 + "=", (x3),", " #x4 + "=", (x4),", " #x5 + "=", (x5))
#define  PRINTVAR6(x1,x2,x3,x4,x5,x6) Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2),", " #x3 + "=", (x3),", " #x4 + "=", (x4),", " #x5 + "=", (x5),", " #x6 + "=", (x6))

#define  VPRINTTEXT(text)
#define  VPRINTVAR(x1)
#define  VPRINTVAR1(x1)
#define  VPRINTVAR2(x1,x2)
#define  VPRINTVAR3(x1,x2,x3)
#define  VPRINTVAR4(x1,x2,x3,x4)
#define  VPRINTVAR5(x1,x2,x3,x4,x5)
#define  VPRINTVAR6(x1,x2,x3,x4,x5,x6)
#endif

#ifdef   DEBUG_LEVEL2
#define  PRINTTEXT(text)           Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :",text)
#define  PRINTVAR(x1)              Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1))
#define  PRINTVAR1(x1)             Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1))
#define  PRINTVAR2(x1,x2)          Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2))
#define  PRINTVAR3(x1,x2,x3)       Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2),", " #x3 + "=", (x3))
#define  PRINTVAR4(x1,x2,x3,x4)    Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2),", " #x3 + "=", (x3),", " #x4 + "=", (x4))
#define  PRINTVAR5(x1,x2,x3,x4,x5) Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2),", " #x3 + "=", (x3),", " #x4 + "=", (x4),", " #x5 + "=", (x5))
#define  PRINTVAR6(x1,x2,x3,x4,x5,x6) Print("*/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2),", " #x3 + "=", (x3),", " #x4 + "=", (x4),", " #x5 + "=", (x5),", " #x6 + "=", (x6))

#define  VPRINTTEXT(text)           Print("V/*/*/* ",__FUNCTION__,"(",__LINE__,") :",text)
#define  VPRINTVAR(x1)              Print("V/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1))
#define  VPRINTVAR1(x1)             Print("V/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1))
#define  VPRINTVAR2(x1,x2)          Print("V/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2))
#define  VPRINTVAR3(x1,x2,x3)       Print("V/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2),", " #x3 + "=", (x3))
#define  VPRINTVAR4(x1,x2,x3,x4)    Print("V/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2),", " #x3 + "=", (x3),", " #x4 + "=", (x4))
#define  VPRINTVAR5(x1,x2,x3,x4,x5) Print("V/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2),", " #x3 + "=", (x3),", " #x4 + "=", (x4),", " #x5 + "=", (x5))
#define  VPRINTVAR6(x1,x2,x3,x4,x5,x6) Print("V/*/*/* ",__FUNCTION__,"(",__LINE__,") :", #x1 + "=", (x1),", " #x2 + "=", (x2),", " #x3 + "=", (x3),", " #x4 + "=", (x4),", " #x5 + "=", (x5),", " #x6 + "=", (x6))
#endif


由MetaQuotes Ltd译自英文
原代码: https://www.mql5.com/en/code/56149

Download all ticks of a symbol's history Download all ticks of a symbol's history

从经纪商处下载市场观察中所有符号的所有刻度线。 下载所有历史记录或直至过去某个特定日期的历史记录(如果有)。

MACD 彩色柱状图 MACD 彩色柱状图

MACD 彩色柱状图是经典 MACD(移动平均收敛背离)指标的增强版,旨在提供更清晰、更直观的市场动量视觉分析。该指标将传统的 MACD 功能与动态柱状图相结合,根据 MACD 线与信号线之间的关系改变颜色,使交易者能够快速识别趋势、反转点和市场中的犹豫不决时刻。

Self Optimized SMA Self Optimized SMA

该指标绘制两条线。下线根据导致反弹的最新 SMA 周期计算。上线根据导致反弹下跌的最近 SMA 周期计算。

Auto SL TP by Risk Reward Ratio Auto SL TP by Risk Reward Ratio

按风险回报比自动设置止损和获利水平(Auto SL TP by Risk Reward Ratio)脚本是一款简单而强大的工具,专为希望简化风险管理流程的 MetaTrader 5 交易者而设计。该脚本可根据用户定义的风险回报比和止损点数,自动设置未结头寸的止损(SL)和止盈(TP)水平。无论您是初学者还是经验丰富的交易者,该脚本都能节省时间,确保一致的风险管理。