问吧! - 页 82

 

编剧大师请帮忙

编码员大师

我想为牛熊指标写一个越过零线时的声音提示,我对MQL没有经验,但把其他几个指标的一些代码放在一起,在编译代码时没有错误。

非常感谢

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

//| |

//| |

//| |

//| |

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

#财产版权 "forex-tsd"

#property link "https://www.forex-tsd.com"

#属性 indicator_separate_window

#属性 indicator_buffers 2

#属性 indicator_color1 Lime

#属性 indicator_color2 Crimson

#属性 indicator_level1 0

double ExtMapBuffer1[];

double ExtMapBuffer2[];

double valbull[];

double valbear[];

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

//|自定义指标 初始化函数|

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

int init()

{

IndicatorBuffers(3);

SetIndexBuffer(0,ExtMapBuffer1);

SetIndexDrawBegin(0,2);

SetIndexLabel(0, "ExtMapBuffer1")。

SetIndexBuffer(1,ExtMapBuffer2);

SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 4);

SetIndexDrawBegin(1,2);

SetIndexLabel(1, "ExtMapBuffer2")。

//---- 指标

//----

return(0);

}

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

//|Custor指标去初始化功能|

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

int deinit()

{

//---- TODO:在这里添加你的代码

//----

return(0);

}

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

//| 自定义指标迭代函数|

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

int start()

{

int shift,counted_bars=IndicatorCounted()。

double valbear[], valbull[];

//----,检查可能的错误

if(counted_bars<0) return(-1);

//---- 最后一个被计算的柱子将被重新计算

if(counted_bars>0) counted_bars--;

shift=Bars-1。

while(shift>=0)

{

valbull[shift]=iBullsPower(NULL, 0, 13,PRICE_CLOSE,0)。

valbear[shift]=iBearsPower(NULL, 0, 13,PRICE_CLOSE,0)。

如果(valbull[shift]>0)

{

ExtMapBuffer1[shift]=valbull[shift]。

ExtMapBuffer2[shift]=0。

}

否则

{

ExtMapBuffer2[shift]=valbull[shift]。

ExtMapBuffer1[shift]=0。

}

shift--;//

}

//---- 警报模块

#define SIGNAL_BAR 1

//---- 静态变量,最后一棒的时间

//---- 和最后的警报方向。

static int PrevSignal = 0, PrevTime = 0;

//---- 如果选择要分析的条形图不是一个零条形图。

// 就没有必要多次检查警报。

//---- 几次。如果没有新条形开始形成,则退出。

if(SIGNAL_BAR > 0 && Time[0] <= PrevTime )

return(0);

//---- 标志着此条线被检查

PrevTime = Time[0];

如果(PrevSignal <= 0)

{

如果(valbull[SIGNAL_BAR] > 0 )

{

PrevSignal = 1;

Alert("BullChannell_positiv (", Symbol(), ", ", Period(), ") - 买入!!!")。

}

}

如果(PrevSignal >= 0)

{

如果(valbull[SIGNAL_BAR] < 0 )

{

PrevSignal = -1;

Alert("BearChannell_negativ (", Symbol(), " , " , Period(), " ) - 卖出!!!")。

}

}

//---- end alert module

//----

return(0);

}

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

 

如何使用函数来区分已建订单和挂单

如何使用函数来区分已开订单和待处理订单?

谢谢。

 
vntb:
如何使用函数来区分开仓订单和挂单?谢谢。

检查 OrderType()。

OrderType() == OP_BUY //BuyOrder (已打开)

OrderType() == OP_SELL //卖出订单(已打开)

OrderType() == OP_BUYLIMIT //买入限价单(待定)

OrderType() == OP_SELLLIMIT //卖出限价单(待定)

OrderType() == OP_BUYSTOP //买入止损单(待定)

OrderType() == OP_SELLSTOP //卖出止损单(待定)

 

EA中的iMAOnArray

大家好。

我想根据指标(如CCI、Force、RSI)上的移动平均线的交叉点来做一个EMA。然而,我无法理解如何声明一个数组并运行iMAOnArray函数 来制造变量。

例如,在下面的代码中,我想把图表中的RSI数据放在一个缓冲区中,然后利用这些数据产生一个移动平均线,用它来触发交易。我做错了什么?

谢谢你的任何评论或建议。

秋天

double RSI[];

ArrayResize(RSI,Bars)。

ArraySetAsSeries(RSI,true)。

for(int i=Bars; i>=0; i--)

{

RSI = (iRSI(NULL,0,RSIPeriod,RSIPrice,i))。

}

double Green0 = iMAOnArray(RSI,0,GreenPeriod,0,GreenPrice,0);

 

你好

有谁拥有带警报的阶梯动量

我认为这将是一个伟大的指标

谢谢

问候!

 

按级别关闭交易

你好,我想知道如何在价格达到一定水平时关闭交易。例如,在MA线以上55点。我试图在订单发送的获利部分包含MA,但是测试人员拒绝了我的EA。"无效的东西 "错误信息。谢谢你。

 
Sendra:
你好,我想知道如何在价格达到一定水平时关闭交易。例如,在MA线以上55点。我试图在OrderSend的TakeProfit部分包含MA,但测试人员拒绝了我的EA。"无效的东西 "错误信息。谢谢你。

首先得到移动 平均线。

double MA = iMA(...);

然后像这样计算TakeProfit。

double TP = MA + (55*Point); // 或者TP = MA-(55*Point); 在卖出情况下。

 

成功了!!

嘿,谢谢,CodersGuru。它确实有效。但这也让我想到:如果我可以把止盈 移到某个不是静态的水平,我也可以对我的止损做同样的事情(不使用追踪止损)。

我试了一下。

它确实起作用了,但效果不好。所以,我想我必须使用追踪止损。这样做对吗?(请注意,我还没有学会如何编写追踪止损的代码)。

谢谢你。

 

内部追踪止损

Sendra:
嘿,谢谢,CodersGuru。这确实有效。但这也让我想到:如果我可以将止盈移到某个不是静态的水平,我也可以对我的止损做同样的事情(不使用追踪止损)。

我试过了。

它确实起作用了,但结果不好。所以,我想我必须使用拖曳止损。这样做对吗?(请注意,我还没有学会如何编写追踪止损的代码)。

谢谢你。

我对内部追踪止损是这样做的。(这是一个多头订单的例子)它似乎是有效的。 希望这有帮助。

extern int Trailing_Stop=20;

static double Trailing_Long;

bool Read_Long_Open;

如果(插入你的多头条目决定)

{

这里有Ordersend()函数

Read_Long_Open=true。

}

如果(Read_Long_Open==true)

{

如果(OrderSelect(T_1L, SELECT_BY_TICKET)==true)

{

Trailing_Long=OrderOpenPrice();

Print(" Trailing_Long =",Trailing_Long);

Read_Long_Open=false。

}

}

如果(Read_Long_Open==false)

{

如果 (Trailing_Long < Bid)

{

Trailing_Long=Bid;

Print("调整后的Trailing_Long =",Trailing_Long);

}

}

如果(Bid <= Trailing_Long-Trailing_Stop*Point)

{

OrderClose()函数

Print("多头订单关闭")。

}

 

谢谢

你好,Wolfe。

我试了一下你的代码,但得到的结果却是否定的。请不要问为什么,因为我也不知道答案。你要知道,我在编码方面还处于打了就跑的阶段。但还是要感谢你,你的代码给了我足够的灵感,让我自己写出了足够的结果。

所以,谢谢。