如何编码? - 页 119

 

我想弄清楚这是否是错误的。

for (int i=qqea_alert_x_candles_ago; i>0; i--) {

// int i = 1;

qqea_up = iCustom(NULL,0, "QQE Alert v3",0,i)。

qqea_down = iCustom(NULL,0, "QQE Alert v3",1,i)。

如果(qqea_up < qqea_down) {

if (i == 1) qqeacross = True;

qqea_long = True。

qqea_short = False。

} else if (qqea_up > qqea_down) {

如果(i == 1)qqeacross = True。

qqea_long = False。

qqea_short = True。

}

}

}

它应该检查 有效的信号,直到 "qqea_alert_x_candles_ago "条,但它有(i == 1),i==1只发生一次?

 
matrixebiz:
我想弄清楚这是否是错误的。

for (int i=qqea_alert_x_candles_ago; i>0; i--) {

// int i = 1;

qqea_up = iCustom(NULL,0, "QQE Alert v3",0,i)。

qqea_down = iCustom(NULL,0, "QQE Alert v3",1,i)。

Print("qqea_up: " , qqea_up, "qqea_down: " , qqea_down);

如果(qqea_up < qqea_down) {

如果(i == 1)qqeacross = True。

qqea_long = True。

qqea_short = False。

} else if (qqea_up > qqea_down) {

如果(i == 1)qqeacross = True。

qqea_long = False。

qqea_short = True。

}

}

}

它应该检查有效的信号,直到 "qqea_alert_x_candles_ago "条,但它有(i == 1),i==1只发生一次?

从表面上看,你的代码看起来没有问题,那是假设 "qqea_alert_x_candles_ago">0。

如果你的问题是不工作,很可能是与iCustom有关。

为了使这个函数 正常工作,你需要为实际指标中的每个输入元素传递一个输入元素。如果你不这样做,或传递错误的数据类型,那么icustom将不返回任何东西。

我在上面的代码中添加了一个 Print 语句。使用它来确定从iCustom返回的值是否真的包含任何东西。

欢呼吧。

欢欢

 

需要帮助来计算条形图的代码

我的EA有许多选项来计算未结头寸的止损。 其中一个选项是使用过去 "x "个价格柱的低点。

目前在EA中用于计算多头头寸的止损(SL)的代码行是。

SL=iLow(Symbol(),Period(),iLowest(Symbol(),Period(),MODE_LOW,StopLossBars,0)) 。

StopLossBars是一个外部输入的变量。

我遇到的问题是,我想让StopLossBars的值随着开仓后的每一个柱子的计算而增加,直到我的其他止损条件之一超过这个条件。 我猜想有这样一行代码。

StopLossBars = StopLossBars + BarsCountedSincePositionOpened

就可以做到这一点。 不幸的是,我的编码仅限于剪切和粘贴,我不知道如何计算或编码BarsCountedSincePositionOpened。

谁能告诉我怎么做呢?

 
hiachiever:
从表面上看,你的代码看起来不错,那是假设 "qqea_alert_x_candles_ago">0。

你的问题如果不工作,很可能是与iCustom有关。

为了使这个函数正常工作,你需要为实际指标中的每个输入元素传递一个输入元素。如果你不这样做,或传递错误的数据类型,那么icustom将不返回任何东西。

我在上面的代码中添加了一个 Print 语句。使用它来确定从iCustom返回的值是否真的包含任何东西。

干杯。

捌月壹伍日

这段代码来自另一个EA,但我在想,当循环到 "qqea_alert_x_candles_ago">1时,这个语句 "if (i == 1) qqeacross = True; "现在将是假的,对吗?在i>qqea_alert_x_candles_ago之前,它应该保持为真。

 

帮助

亲爱的各位。

我从一个同事那里得到了这个编码。他告诉我,这应该是一个非常好的指标,可以指示SMA的上升或下降条目。谁能帮我用下面这个编码创建一个指标。

/*[[

名称 :=SMA向上和向下

单独窗口 :=无

第一颜色 := 蓝色

第一绘图类型:=线

使用第二数据 := 是

第二颜色 := 红色

第二绘图类型 := 线条

]]*/

输入 : MAPeriod(10), Bandwide_UP(20),Bandwide_DOWN(20)。

变量 : shift(0), cnt(0), sum(0), loopbegin1(0), loopbegin2(0), first(True), prevbars(0);

变量:MA(0);

SetLoopCount(0);

// 初始检查

如果MAPeriod < 1 那么退出。

// 检查是否有额外的柱状体加载或全部重载

如果Bars 1 那么first = True。

prevbars = Bars;

// loopbegin1和loopbegin2防止已计数的条形图的耦合,不包括当前条形图。

如果第一条,那么开始

loopbegin1 = Bars-MAPeriod-1;

如果loopbegin1<0,则退出;//没有足够的条数进行计数

loopbegin2 = Bars-MAPeriod-1;

如果loopbegin2<0,则退出;//没有足够的条数可供计算

first = False; // 此块只被评估一次

结束。

// 收敛-分歧

loopbegin1 = loopbegin1+1; // 当前条形也要被重新计算。

For shift = loopbegin1 Downto 0 开始

MA = iMA(MAPeriod,MODE_SMA,shift)。

SetIndexValue(shift,(MA+Bandwide_UP*point))。

SetIndexValue2(shift,(MA-Bandwide_DOWN*point))。

loopbegin1 = loopbegin1-1; //防止重新计算以前的小节。

结束。

最好的问候。

罗杰欧

 

需要帮助的代码

我需要以下代码的帮助,目前它只在AC高于或低于0的情况下开单,我希望它在红色变为绿色时开单,然后再签证。

double AC1 = iAC(NULL, 0, Current + 0);

双AC2 = iAC(NULL, 0, Current + 1);

如果((AC1<AC2))Order = SIGNAL_CLOSEBUY;

 
matrixebiz:
这段代码来自另一个EA,但我在想,当循环到 "qqea_alert_x_candles_ago">1时,这个语句 "if (i == 1) qqeacross = True; "现在应该是假的,对吗?而在i>qqea_alert_x_candles_ago之前,它应该保持真。

不,这是不正确的。

在for循环中,你从6开始,递减到1。这意味着在for循环执行的最后一环,它进行了 "if (i == 1) qqeacross = True; "检查。最终结果是,如果qqeacross发生了,输出将是真。

这可能带来的唯一问题是,如果qqeacross在之前的循环中被设置为真。为了克服这个问题,你应该在for循环之前设置qqeacross = false; 。通过这种方式,你可以确保如果qqeacross = true,那么它是由刚刚完成的循环设置的。

干杯。

hiachiever

 
Pussy Galore:
我的EA有许多选项来计算未结头寸的止损。其中一个选项是使用过去 "x "个价格条的低点。

目前EA内用于计算该期权多头头寸的止损(SL)的一行代码是。

SL=iLow(Symbol(),Period(),iLowest(Symbol(),Period(),MODE_LOW,StopLossBars,0)) 。

StopLossBars是一个外部输入的变量。

我遇到的问题是,我想让StopLossBars的值随着开仓后的每一个柱子的计算而增加,直到我的其他止损条件之一超过这个条件。我猜想有这样一行代码。

StopLossBars = StopLossBars + BarsCountedSincePositionOpened

就可以做到这一点。不幸的是,我的编码仅限于剪切和粘贴,我不知道如何计算或编码BarsCountedSincePositionOpened。

谁能告诉我怎么做呢?

做到这一点的方法是在全局范围内创建一个变量(即在init之前)。

例如

int BarCount。

int init ()

然后在你的止损 代码中使用以下内容。

如果(BarCount<Bars)

{

SL=iLow(Symbol(),Period(),iLowest(Symbol(),Period(),MODE_LOW,StopLossBars,0)) 。

StopLossBars++;

BarCount=Bars。

}

这将使StopLossBars在每个新条形上增加1。

对你的代码唯一的补充是,当新的交易开始时,将 "StopLossBars "重置为原来的默认值。

干杯。

欢欢

 
denis68:
我需要以下代码的帮助,目前它只在AC高于或低于0的情况下开单,我希望它在红色变为绿色时开单,然后是签证。

double AC1 = iAC(NULL, 0, Current + 0);

double AC2 = iAC(NULL, 0, Current + 1);

如果((AC1 < AC2))订单 = SIGNAL_CLOSEBUY;

我所做的是在指标代码中打开或显示另外两个缓冲区,将这两行删除。

// SetIndexLabel(1,NULL);

// SetIndexLabel(2,NULL)。

然后用我修改过的AC做了一个iCustom调用

double ac1 = iCustom(NULL, 0, "AcceleratorMod", 1, 1);

double ac2 = iCustom(NULL, 0, "AcceleratorMod", 2, 1);

double ac11 = iCustom(NULL, 0, "AcceleratorMod", 1, 2);

双倍ac22 = iCustom(NULL, 0, "AcceleratorMod", 2, 2)。

bool acbuy = ac2==0 && ac11==0; // 红色变为绿色

bool acsell = ac1==0 && ac22==0; // 绿色变为红色

希望这对你有帮助

 

matrixebiz 你说的删除这两行是什么意思;我怎么做呢,我无法进入我试过的AC指标的代码。