bool exit_for=false;double max_1=0;double max_2=0;for(int k=0; k<Bars; k++){if(iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k)<iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+1)&&iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+1)>iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+2)){//Если это первый максимум:if( max_1==0)
max_1=iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+1);//Записываем номер бара экстремумаelse//Если первый найден, записываем второй{
max_2=iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+1);
exit_for=true;}}//Выход из цикла, когда найдены оба максимумаif( exit_for==true) k=Bars+1;}
// ищем самый последний закрытый ордерfor( i=OrdersHistoryTotal(); i>=0; i--){if(OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)){if(OrderSymbol()==Symbol()){if(OrderMagicNumber()== MagicNumber){if(OrderCloseTime()!=0){if(OrderCloseTime()> time){
time =OrderCloseTime();
tikcet=OrderTicket();
profit=OrderProfit();
type =OrderType(); <-----
}}}}}}
int ORDtype;
// ищем самый последний закрытый ордерfor( i=OrdersHistoryTotal(); i>=0; i--){if(OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)){if(OrderSymbol()==Symbol()){if(OrderMagicNumber()== MagicNumber){if(OrderCloseTime()!=0){if(OrderCloseTime()> time){
time =OrderCloseTime();
tikcet=OrderTicket();
profit=OrderProfit();
ORDtype =OrderType(); <-----
}}}}}}
// торг условия
if(ORDtype=1)&&....
它不是这样工作的。结果我得到的是,我在历史中寻找最大值(它找到了前一天的最大值),但我需要它在这个函数采取行动后等待实现(比如第一条的值>70)...如果这个条件得到满足(不是在条形图>70之前,而是之后),第一条马奇比第二条马奇低,那么订单就被关闭。
有什么建议要改吗?
谢谢你
还有一个问题--帮助我们)
在历史上选择了一个订单后,如何确定其类型(该订单是由买入还是卖出关闭)?
你声明了一个变量,然后试图使用另一个。
Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!!!!!!!!!!!!!!!!!!!好吧,你应该马上说出来...........,否则老了就没意思了--但年轻是讨厌的.....
>>SPASSYBOO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
请您提供建议
我需要清楚地了解一个订单是在止损还是盈利时关闭
我制作了变量priceprofitbuy和pricestopbuy
在订单结束前,我使pricebuy = Ask,然后订单被提交到pricebuy,如果成功,则提醒并记住priceprofitbuy和pricestopbuy,基于pricebuy
进一步的条件priceprofitbuy >= Bid= Bid和pricestopbuy <= Bid,我检查订单是否在盈利或停止时关闭
;然而,有时Bid已经达到止盈水平,订单被关闭,但当循环到达priceprofitbuy >= Bid时,Bid已经变低,循环不能正确工作。
问题--有什么方法可以清楚地检测到订单已经盈利平仓吗?
,我试着给订单的票号 分配一个变量,然后在历史中检查利润,但是订单不能从票中选择--历史中只显示利润。
我做了priceprofitbuy和pricestopbuy的变量
我把pricebuy=Ask放在ordersend之前,然后通过pricebuy发送订单;如果成功,则根据pricebuy提醒并存储priceprofitbuy和pricestopbuy。
然后使用价格买入>=出价和价格止损买入<=出价条件,我检查订单是否在盈利或止损时被关闭。
然而,它发生在Bid已经达到获利水平,订单被关闭,但当循环达到priceprofitbuy >= Bid时,Bid已经变低,然后循环不能正常工作。
问题是--有什么办法可以清楚地检测到订单已经获利平仓?
我试着给订单票号分配一个变量,然后在历史中检查利润,但订单不能从票中选择--只有利润值在历史中起作用。
这并不完全正确。
一个头寸可能以滑点(通常是较差的价格)而不是准确的价格开仓。
更正确的做法是使用OrderOpenPrice()函数确定未平仓订单的价格,之前已经使用OrderSelect(...)选择了它。
或者,在其收盘后,计算开盘价和收盘价之间的差异。后者是由OrderClosePrice()函数决定的。
OrderType()将返回你的类型(买/卖)。
对xrust:非常感谢你。
只是不清楚如何在交易条件中写明,如果平仓单的类型是OP_BUY,那么胡说八道(
我是这样想的。
在条件中,我正确地写道:如果订单类型 是OP_BUY,那么胡说八道?
如果(ORDtype=1)&&....
我在条件中正确地写道:如果订单类型是OP_BUY,那么blablabla?
应该是这样。
如果(ORDtype==1)&&....
应该是这样。
如果(ORDtype==1)&&....
如果没有历史记录--在我的案例中,ORDtype ==0,会有什么后果?
如果没有历史--在我的案例中,ORDtype ==0?
它将等于声明该变量时指定的值,即在你的例子中是0,因为没有明确地给它分配值。顺便说一下,我没有注意到在你之前的帖子中,你想选择OP_BUY订单--这个常数是0,而1是OP_SELL。所以最好用-1的值来声明变量ORDtype。
int ORDtype=-1;
为了避免混淆什么值对应什么类型的操作,你也可以在条件中指定它。
if (ORDtype==OP_BUY) ...
它将等于声明该变量时指定的值,即在你的例子中是0,因为没有明确的赋值给它。顺便说一下,我没有注意到在你之前的帖子中,你想选择OP_BUY订单--这个常数正好是0,而1是OP_SELL。所以最好用-1的值来声明变量ORDtype。
int ORDtype=-1;
为了避免混淆什么值对应什么类型的操作,你也可以在条件中指定它。
if (ORDtype==OP_BUY) ...
如果历史上有一个卖出订单,然后专家顾问关闭了它(在历史类型中,它(它的关闭)被显示为T/P或S/L - 它不会被认为是最后一个吗? 不能达到预期的效果(()。