[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 46

[删除]  
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;  
}
下午好。请告知。对于我提出的关于在RSI值超过70后将顶部与RSI进行比较的问题,有人问我这样的解决办法(上面的代码)。

它不是这样工作的。结果我得到的是,我在历史中寻找最大值(它找到了前一天的最大值),但我需要它在这个函数采取行动后等待实现(比如第一条的值>70)...如果这个条件得到满足(不是在条形图>70之前,而是之后),第一条马奇比第二条马奇低,那么订单就被关闭。

有什么建议要改吗?

谢谢你
 
xruss писал(а)>>

还有一个问题--帮助我们)

在历史上选择了一个订单后,如何确定其类型(该订单是由买入还是卖出关闭)?

// ищем самый последний закрытый ордер
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(); <-----
          }
        }
      }
    }
  }
}
[Deleted]  
Roger >> :
你声明了一个变量,然后试图使用另一个。

Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!!!!!!!!!!!!!!!!!!!好吧,你应该马上说出来...........,否则老了就没意思了--但年轻是讨厌的.....

>>SPASSYBOO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

请您提供建议
我需要清楚地了解一个订单是在止损还是盈利时关闭
我制作了变量priceprofitbuy和pricestopbuy
在订单结束前,我使pricebuy = Ask,然后订单被提交到pricebuy,如果成功,则提醒并记住priceprofitbuy和pricestopbuy,基于pricebuy
进一步的条件priceprofitbuy >= Bid= Bid和pricestopbuy <= Bid,我检查订单是否在盈利或停止时关闭
;然而,有时Bid已经达到止盈水平,订单被关闭,但当循环到达priceprofitbuy >= Bid时,Bid已经变低,循环不能正确工作。

问题--有什么方法可以清楚地检测到订单已经盈利平仓吗?
,我试着给订单的票号 分配一个变量,然后在历史中检查利润,但是订单不能从票中选择--历史中只显示利润。

 
gramp >> :

我做了priceprofitbuy和pricestopbuy的变量
我把pricebuy=Ask放在ordersend之前,然后通过pricebuy发送订单;如果成功,则根据pricebuy提醒并存储priceprofitbuy和pricestopbuy。
然后使用价格买入>=出价和价格止损买入<=出价条件,我检查订单是否在盈利或止损时被关闭。
然而,它发生在Bid已经达到获利水平,订单被关闭,但当循环达到priceprofitbuy >= Bid时,Bid已经变低,然后循环不能正常工作。

问题是--有什么办法可以清楚地检测到订单已经获利平仓?
我试着给订单票号分配一个变量,然后在历史中检查利润,但订单不能从票中选择--只有利润值在历史中起作用。

这并不完全正确。

一个头寸可能以滑点(通常是较差的价格)而不是准确的价格开仓。

更正确的做法是使用OrderOpenPrice()函数确定未平仓订单的价格,之前已经使用OrderSelect(...)选择了它。

或者,在其收盘后,计算开盘价和收盘价之间的差异。后者是由OrderClosePrice()函数决定的。

OrderType()将返回你的类型(买/卖)。

[删除]  

对xrust:非常感谢你。


只是不清楚如何在交易条件中写明,如果平仓单的类型是OP_BUY,那么胡说八道(

我是这样想的。


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)&&....

在条件中,我正确地写道:如果订单类型 是OP_BUY,那么胡说八道?

 
xruss >> :

如果(ORDtype=1)&&....

我在条件中正确地写道:如果订单类型是OP_BUY,那么blablabla?

应该是这样。

如果(ORDtype==1)&&....

[删除]  
Everlost >> :

应该是这样。

如果(ORDtype==1)&&....

如果没有历史记录--在我的案例中,ORDtype ==0,会有什么后果?

 
xruss >> :

如果没有历史--在我的案例中,ORDtype ==0?

它将等于声明该变量时指定的值,即在你的例子中是0,因为没有明确地给它分配值。顺便说一下,我没有注意到在你之前的帖子中,你想选择OP_BUY订单--这个常数是0,而1是OP_SELL。所以最好用-1的值来声明变量ORDtype。

int ORDtype=-1;

为了避免混淆什么值对应什么类型的操作,你也可以在条件中指定它。


if (ORDtype==OP_BUY) ...

[删除]  
Everlost >> :

它将等于声明该变量时指定的值,即在你的例子中是0,因为没有明确的赋值给它。顺便说一下,我没有注意到在你之前的帖子中,你想选择OP_BUY订单--这个常数正好是0,而1是OP_SELL。所以最好用-1的值来声明变量ORDtype。

int ORDtype=-1;

为了避免混淆什么值对应什么类型的操作,你也可以在条件中指定它。


if (ORDtype==OP_BUY) ...

如果历史上有一个卖出订单,然后专家顾问关闭了它(在历史类型中,它(它的关闭)被显示为T/P或S/L - 它不会被认为是最后一个吗? 不能达到预期的效果(()。