if(Buy_Signal) { mrequest.price = NormalizeDouble(latest_price.ask,_Digits); // последняя цена ask mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit mrequest.type = ORDER_TYPE_BUY; // ордер на покупку //--- отсылаем ордер OrderSend(mrequest,mresult); }
if(Sell_Signal) { mrequest.price = NormalizeDouble(latest_price.bid,_Digits); // последняя цена Bid mrequest.sl = NormalizeDouble(latest_price.bid + STP*_Point,_Digits); // Stop Loss mrequest.tp = NormalizeDouble(latest_price.bid - TKP*_Point,_Digits); // Take Profit mrequest.type= ORDER_TYPE_SELL; // ордер на продажу //--- отсылаем ордер OrderSend(mrequest,mresult); }
结果是以下图片。
我如何检查一个交易是否已经完成了这个条件?我试过这种方式,但没有用。
// в этом цикле поочередно перебираем все открытые позиции for(i=0;i<PositionsTotal();i++) { // выбираем позиции только по "нашему" инструменту if(Symbol()==PositionGetSymbol(i)) ... }
bool BuyOne = true, SellOne = true; // только один ордер. глобальные переменные
if(Buy_Signal && // покупаем если есть сигнал на покупку PositionSelect(Symbol())==false && // ордер закрыт BuyOne) // при условии на покупку ставим только один ордер { mrequest.type = ORDER_TYPE_BUY; // ордер на покупку mrequest.price = NormalizeDouble(latest_price.ask,_Digits); // последняя цена ask mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit OrderSend(mrequest,mresult); // отсылаем ордер BuyOne = false; // на покупку только один ордер SellOne = true; // меняем флаг одного ордера на продажу }
在测试专家顾问的过程中。
Exp_TEMA.mq5, from the article:"创建一个在不同符号上交易的专家顾问"。,表达式Told[] Tnew[1]得到以下值。
Told[] 表达式不能被评估
Tnew[1] 阵列范围无效。
还有My_First_EA.mq5,来自文章。"为初学者编写MQL5专家顾问的分步指南",表示
New_Time[1]得到的值:无效的数组范围
Expression could not be evaluated,Invalid array range,这些值对EA结果有什么影响?
被告知 - 没有大小的空数组
Tnew[1] - 出了数组,数组被描述为Tnew[1],所以它的元素只能作为Tnew[0]被访问,因为索引从零开始。
被告知 - 没有大小的空数组
Tnew[1] - 出了数组,数组被描述为Tnew[1],所以它的元素只能作为Tnew[0]被访问,因为索引从零开始。
请告诉我如何在每个条件下只开一个交易。用我的代码,终端在这个条件下会打开几个交易,但我只需要一个。
结果是以下图片。
我如何检查一个交易是否已经完成了这个条件?我试过这种方式,但没有用。
请告诉我如何在每个条件下只开一个交易。用我的代码,终端在这个条件下会打开几个交易,但我只需要一个。
结果是以下图片。
我如何检查一个交易是否已经完成了这个条件?我试过这种方式,但没有用。
如果有PositionSelect 这样一个奇妙的东西,为什么还要在循环中安排搜索?
我们只是在有趣的符号上检查位置的存在,如果它是真的,我们就去喝白兰地和抽雪茄。:)
PS
根据我的理解, PositionGetString,而没有PositionSelect,应该是不行的。我们不需要知道所有开放姿势的符号,对吗?![](https://c.mql5.com/3/1/winkf11.gif)
有PositionSelect 这么好的东西,就没有必要在循环中搜索?
只需在我们感兴趣的工具上检查是否存在某个位置,如果结果是真的,我们就静静地去喝白兰地和抽雪茄。:)
PS
根据我的理解, PositionGetString,而没有PositionSelect,应该是不行的。我们不需要知道所有开放姿势的符号,对吗?
这个代码考虑到了未结头寸的存在。
但当买入信号条件满足时,它就会继续开仓。我想要的是,在Sell_Signal发生之前,Buy_Signal的头寸不会再次打开。我正试图这样实现它。
它不去了。这样的代码考虑到了未结头寸的存在。
但当买入信号条件得到满足时,它将继续开仓。我需要确保在Sell_Signal条件发生之前,Buy_Signal不会再开仓。我正试图这样实施。
它没有。为什么是这个代码?它勉强看起来像我的意思(我怀疑它是否正确)。
而我的意思是这样的。
至少你可以在一个区块中进行。
为什么是这个特定的代码?它甚至与我的意思一点也不像(我怀疑它根本不对)
而我的意思是这样的。
最起码一切都可以在一个区块内完成。
这个和上面的代码在平仓前不会开仓,但如果条件满足,在下一个交易日平仓后会重新开仓。我是这样实施的。
谢谢你!我已经考虑到了你的所有愿望。 现在一切正常了。我已经发布了专家顾问,以供发表。我可以在代码中再做一些修改。诱惑无极限)))