如何编码? - 页 311

 

嗨,Mladen,像往常一样,你真厉害

mladen:
Terrance 在这种情况下使用Close[0]。几乎所有的EA都在使用close来达到这个目的,所以我想它也会对你有用。
 

...

如果你的EA只在条形图开始时执行,可能有几个原因。

- 它只限于在一个新条形上工作。如果要管理跟踪止损和一些类似的东西,这种方法有一些问题,但如果它在固定的止损和止盈的 情况下工作,那就都一样了。

- 或它正在检查关闭的条形图上的信号(这是最常见的(也是最好的)检查信号的方式)。因此,它看起来好像是在新柱状体形成时执行的,而事实上,它是在刚刚形成的封闭柱状体上获得信号。在闭合条形信号上工作是EA的最佳做法,如果你的EA是这样工作的,最好不要做任何改变。

Premeus:
我注意到我的EA在M1时间段的价格波动中没有运行。我知道EA会在每一个tick进来的时候执行。

但我看到它是在每一个新条形开始时执行的。

我是不是理解错了?

有什么方法可以让EA在每一个新的点位上激活吗?

我试图通过使用利润和损失来控制我的利润和损失, ,而不是用点数。当尖峰发生时,EA在达到设定的利润或损失时不关闭订单,直到新的栏位出现。

有谁能帮助我解决这个问题?

我是EA编码的新手。

预先感谢你。
 

谢谢你,mladen。

我将尝试你的建议。

 

尊敬的编码之神。

我需要帮助找到一个控制订单发送执行的EA函数,即如果已经存在相同价格的订单,则不能打开订单。

简单的逻辑:如果订单开盘价和订单类型=现有订单开盘价和订单类型,那么退出并寻找下一个进入标准。

另外,我需要一个函数,如果一个订单与已经存在的价格相差x个点,它将被阻止执行。

简单的逻辑:如果订单的开盘价和类型<上一个订单的开盘价和类型+x点,那么退出并寻找下一个进入标准。

谢谢。

皮普

 

...

试试这两个功能
:第一是找出是否有一个完全相同的开盘价
订单

;第二是检查是否有一个距离所需价格在nn点以内的订单

如果价格相等,或者与当前一些已开订单的价格的距离在指定的距离内,两者都返回真。

bool existsAtSamePrice(int magicNumber, double price)

{

for (int i=OrdersTotal()-1; i>=0 ; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol()!=Symbol()) continue;

if (OrderMagicNumber()!=magicNumber) continue;

if (CompareDouble(OrderOpenPrice(),price)) return(true);

}

return(false);

}

//

//

//

//

//

bool existsAtApproximatePrice(int magicNumber, double price, double distance)

{

for (int i=OrdersTotal()-1; i>=0 ; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol()!=Symbol()) continue;

if (OrderMagicNumber()!=magicNumber) continue;

if (MathAbs(OrderOpenPrice()-price)< distance) return(true);

}

return(false);

}

//

//

//

//

//

bool CompareDouble(double val1, double val2)

{

return(NormalizeDouble(val1,Digits)==NormalizeDouble(val2,Digits));

}

Pip:
尊敬的编码之神。

我需要帮助找到一个控制订单发送执行的EA函数,即如果已经存在相同价格的订单,则不能打开订单。

简单的逻辑:如果订单的开盘价和订单类型=现有订单的开盘价和订单类型,那么退出并寻找下一个进入标准。

另外,我需要一个函数,如果一个订单与已经存在的价格相差x个点,它将被阻止执行。

简单的逻辑:如果订单的开盘价和类型<上一个订单的开盘价和类型+x点,那么退出并寻找下一个进入标准。

谢谢。

Pip
 
mladen:
这可能有几个原因,但最常见的是:
- 止损和/或止盈太接近当前价格

- 你的经纪商是ECN/STP类型的经纪商,在这种情况下,你首先必须先下一个订单,并将止损和止盈设置为0,只有当订单被打开,你才能将止损和/或止盈修改为所需的值(当然要尊重前面的观点

你好!

谢谢你的帮助!

所以,如果我理解得对,如果我在OrderSend中插入TakeProfit和StopLoss作为外部 "规则",这个EA只能在非ECN经纪商上工作?

对不起,我的英语不好

 

...

是的

对于ECN/STP这样的经纪商,你必须在开立订单时将止损和/或止盈设置为0,当订单已经开立时,你才可以修改止损 和/或止盈。

pearl1:
你好!

谢谢你的帮助!

所以,如果我没有理解错的话,如果我在OrderSend中插入TakeProfit和StopLoss作为外部 "规则",这个EA只能在非ECN经纪商上工作?

对不起,我的英语不好
 
mladen:
是的,在ECN/STP这样的经纪商,你必须在开立订单时将止损和/或止盈设置为0,当订单已经开立时,你才可以修改止损和/或止盈。

再次感谢,那么......我怎样才能解决这个问题? 对不起

 

...

正如我所说,你必须分两步来做。

1.步骤 - 打开一个订单(使用OrderSend()),将止损和止盈 设置为0

2.步骤--修改订单(使用OrderModify()),将止损和获利设置为理想值

因此,必须修改代码,使其分两步完成工作,而不是一步到位

pearl1:
再次感谢,那么......我怎样才能解决这个问题呢? 对不起
 

编码新手

大家好。

我是编码新手,一直在慢慢学习语言和语法,但我遇到了一个关于MT4如何更新变量的问题。

我试图编写一个简单的EA,显示当前未平仓交易的最高利润,并且只有在达到新的高点时才会更新,但现在的情况是,金额随着利润的变化而上下波动,我似乎看不到我在代码逻辑上的错误。

检查 以确保选定的交易仍在进行中

t_CloseTime=OrderCloseTime(); //如果订单没有关闭则返回0

if(t_CloseTime==0) //订单已关闭,如果不是零。

{

if(OrderProfit() > LastProfitHigh) LastProfitHigh=OrderProfit();

如果(LastProfitHigh >= MinProfit && MinProfitReached==false) MinProfitReached=true;

}//endif

那么,如果逻辑是正确的,为什么这个变量 "LastProfitHigh "会上升和下降....。

谢谢你的帮助。