if (NumberOfPositions("" ,-1,Magic)>=2) флаг1=1;//если число позиций >= 2if (NumberOfPositions("" ,-1,Magic)<1 ) флаг1=0;//если нет откр. позицийif ( TradeDOWN==true && флаг1==0) {//если условия соответствуют заданным //продаем 1-й символ и покупаем второй символ//----------------------------------------if (NumberOfPositions(Symbol_1,OP_SELL,Magic)<1){//если нет поз.селл и поз.бай по 1-му символуif (NumberOfPositions(Symbol_1,OP_BUY,Magic)<1)
{
SL=0;TP=0;//открываем позицию, задаем стопы :if(StopLoss_1>0) SL=Bid_Tiker1+POINT_Tiker1*StopLoss_1;
if(TakeProfit_1>0) TP=Bid_Tiker1-POINT_Tiker1*TakeProfit_1;
ti=OpenPosition(Symbol_1, OP_SELL, Lots_1,0 ,0,Magic);
if(StopLoss_1>0 || TakeProfit_1>0) {//ставим стопы if (OrderSelect(ti, SELECT_BY_TICKET)) ModifyOrder(-1, SL, TP, clModifySell);}
}}//если нет поз.селл и поз.бай по 1-му символу//--------------------------------------if (NumberOfPositions(Symbol_2,OP_BUY,Magic)<1){//если нет поз. бай и поз. селл по 2-му символу if (NumberOfPositions(Symbol_2,OP_SELL,Magic)<1)
{
SL=0;TP=0;//открываем позицию, задаем стопы :if(StopLoss_2>0) SL=Bid_Tiker2-POINT_Tiker2*StopLoss_2;
if(TakeProfit_2>0) TP=Ask_Tiker2+POINT_Tiker2*TakeProfit_2;
ti=OpenPosition(Symbol_2, OP_BUY, Lots_2,0,0,Magic);
if(StopLoss_2>0 || TakeProfit_2>0) {//ставим стопы if (OrderSelect(ti, SELECT_BY_TICKET))ModifyOrder(-1, SL, TP, clModifyBuy); }
}}//если нет поз. бай и поз. селл по 2-му символу
你好...
我写了一个EA,但遇到了这个问题。
我有相反的订单,例如,对于买入,我有150个点的止损和150个点的利润,对于卖出,设置了同样的水平,但只是相反(即买入的利润,然后是卖出的止损),也就是说,实际上我必须同时关闭一切,既卖出与买入,又买入与卖出.....,但还有另一件事,就是点差!))而从这两个相反的订单中,其他8个已经打开了(当然,如果需要所有8个,对它们的条件是不同的,它们也是相反的4/4)。
我怎样才能正确地编写代码,在所有订单同时达到相同的价格时关闭它们?因为在测试器中,当我测试时,价格有时会达到一个理想的水平,例如,卖出平仓(没有达到预定的水平,我相信这是一个差价)和买入挂牌,短时间后下跌,买入平仓在停止,所以我不能看到正确的结果。
如果你能以编程的方式表达你的想法,即代码,我将不胜感激。
为了更详细地了解它,我把我的两个相反的(第一)订单打开的部分给你。
大家好。
问题是,你是否有一个函数可以检测到一个新条形 的开口(无论什么时间框架),或者更准确地说,找到一个新条形的不同变种。
大家好。
问题是,你是否有一个功能可以检测到一个新条形的开口(无论什么时间框架),或者更准确地说,不同的变体(拖车)可以找到一个新条形。
记忆时间 oldtime = Time[0]并比较记忆的时间 if( oldtime !=Time[0])Print("Hurray for a new bar!!!" )。
SZY: 拖车是在iTime()函数中。
:)
IgorM,问题是这个f-fi是在一个合成图上,iTime[0]可能等于iTime[1],所以我们如何摆脱时间,使EA在一个新条形上只开一个交易?
如果第0条和第1条的时间由于某种未知的原因而无法匹配--数据类型以秒 为单位存储数据,那么至少要将第1条的时间改为1秒。
然后试着记住 第一个闭合 柱的所有特征,即OHLC、成交量和开盘时间--如果你改变了哪怕一个 参数,就意味着一个新的柱。
iBars()将显示当前时间框架内的条数,并将受到终端设置 的限制,你可以尝试将条数与存储的条数和新条数出现的时刻进行比较,这些数值是不同的--但并不总是如此,对我来说这种方式是有效的,但可能由于MT4的构建数量,这个选项可能不工作
你没有现成的代码吧? 我想不出如何记住OHLC[1]并与OHLC[0]进行比较......
OHLC是Open,High,Low,Close的常用缩写。
不与零进行比较,而是与之前记忆的第一项进行比较,即
init(){
oldHigh = High[1];
///
}
start(){
double tmp = High[1];
如果(tmp !=oldHigh) {oldHigh = tmp;
//检查其余的酒吧参数
}
}
谢谢你的建议,我将研究一下...
请告知如何在开仓 条件下设置正确的检查--该仪器是否有开仓的情况。如果有一个符号的头寸(任何卖出或买入),那么开仓就不会发生,否则就会触发开仓的信号?
下面是代码(我认为它负责开仓)。
从逻辑上看,这似乎是正确的,但它仍然为一个符号打开了几个位置。
P.S. 我不是程序员。如果有可能的话,请向傻瓜解释更多细节。