初学者的问题 MQL5 MT5 MetaTrader 5 - 页 555

 
Alexey Viktorov:

我读过这些论点。但这不是争论,只是不愿意理解解释和试图证明终端的错误。你的话没有得到任何支持。你太懒了,懒得做截图,懒得解释清楚你的想法

什么截图?我已经提供了代码,它在MT4上运行,在MT5上会崩溃。错误的类型写在代码中,也被注释出来。
 
comp:
什么截图?提供的代码,在MT4上运行,在MT5上崩溃,出现错误。错误的类型写在代码中,也被注释出来。

这很好。这是你的观点。你认为每个人都要做一些事情来理解你的观点,但你不认为不和你争论更容易,要求太高确实更容易被禁。

幸运的是,我没有禁止的权利,所以我只是停止了这种对话。

 
请告诉我为什么订单无法打开
void OnTick()
  {
   int pos;
   int rsi;
   int uroven1;
   int uroven2;
   int kolpos;
   uroven1=RSI_uroven1;
   uroven2=RSI_uroven2;

   rsi=iRSI(Symbol(),0,RSI,0,1);

//==================================================================
   for(int pos=0; pos<OrdersTotal(); pos++)
     {
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         kolpos++;

     }
//====================================================================
   if(kolpos==0)
     {
      if(rsi>uroven1 || rsi<uroven1 || rsi>uroven2 || rsi<uroven2)
        {
         OrderSend(Symbol(),OP_BUY,Lot,Ask,30,0,0,"",Magic,0,clrAliceBlue);
         OrderSend(Symbol(),OP_SELL,Lot,Bid,30,0,0,"",Magic,0,clrRed);

        }
     }
  }
请告诉我为什么订单无法打开。
 
edutak:
请告诉我为什么订单无法打开。

我至少有4个错误

'RSI_uroven1' - 未宣布的标识符 32.mq4 13 12

'RSI_uroven2' - 未宣布的标识符 32.mq4 14 12

'RSI' - 未宣布的标识符 32.mq4 16 24

'pos' - 已经定义的变量 32.mq4 19 12

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property strict
int RSI=23;
int RSI_uroven1=100;
int RSI_uroven2=100;
int Magic=777;
double Lot=0.1;
void OnTick()
  {
   int pos;
   int rsi;
   int uroven1;
   int uroven2;
   int kolpos;
   uroven1=RSI_uroven1;
   uroven2=RSI_uroven2;

   rsi=iRSI(Symbol(),0,RSI,0,1);

//==================================================================
   for(int pos=0; pos<OrdersTotal(); pos++)
     {
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         kolpos++;

     }
//====================================================================
   if(kolpos==0)
     {
      if(rsi>uroven1 || rsi<uroven1 || rsi>uroven2 || rsi<uroven2)
        {
         OrderSend(Symbol(),OP_BUY,NormalizeDouble(Lot,2),Ask,30,0,0,"",Magic,0,clrAliceBlue);
         OrderSend(Symbol(),OP_SELL,NormalizeDouble(Lot,2),Bid,30,0,0,"",Magic,0,clrRed);

        }
     }
  }
//+------------------------------------------------------------------+

все октрывает

1	2015.01.02 09:00	buy	1	0.10	120.42	0.00	0.00	0.00	10000.00
2	2015.01.02 09:00	sell	2	0.10	120.39	0.00	0.00	0.00	10000.00
3	2016.04.04 13:08	close at stop	2	0.10	111.66	0.00	0.00	3.26	10003.26
4	2016.04.04 13:08	close at stop	1	0.10	111.63	0.00	0.00	-11.85	9991.41

 
edutak:
请告诉我为什么订单没有打开。

首先我给了你一个计算订单数量的正常函数,但你仍然继续使用你的错误函数。

其次,如果(rsi>uroven1 || rsi<uroven1 || rsi>uroven2 || rsi<uroven2)条件是相互矛盾的。

 
Vitalii Ananev:

首先我给了你一个计算订单数量的正常函数,但你仍然继续使用你的错误函数。

其次,如果(rsi>uroven1 || rsi<uroven1 || rsi>uroven2 || rsi<uroven2)条件是相互不一致的。

我将使用正常的函数,这只是暂时的草案,为测试者准备的--我只是在块中复制,这样更快。

如果在越过RSI的任何一个水平时,订单打开,而在越过任何其他水平时--它关闭并立即打开另一个,那么就不存在矛盾。

或者有吗?

 
Vladislav Andruschenko:

我至少有4个错误

'RSI_uroven1' - 未宣布的标识符 32.mq4 13 12

'RSI_uroven2' - 未宣布的标识符 32.mq4 14 12

'RSI' - 未宣布的标识符 32.mq4 16 24

'pos' - 已经定义的变量 32.mq4 19 12


谢谢你,这很有效。
 
edutak:

我将使用正常的功能,这是目前的一个粗略的草案,为测试者 - 我只是在块中复制,这样更快。

如果当RSI越过任何一个水平时,订单打开,当它越过任何其他水平时,它关闭并立即打开另一个,那么就不存在矛盾。

或者有吗?

想想看吧。我们假设uroven1=80;rsi=30;条件rsi>80或rsi<80意味着(30>80[假]或30<80[真])在自然界不存在。虽然这个条件会是真的,因为它使用了OR运算符,但它本质上是没有意义的。

表达式的第二部分 Suppose uroven2 = 20; rsi = 30 (30 > 20 [true] or 30< 20[false] ) 是相同的。

 

表达式的第二部分 Suppose uroven2 = 20; rsi = 30 (30 > 20 [true] or 30< 20[false] ) 是相同的。

当我写到 "或 "时,我的意思是在任何级别的交叉点,订单都会被打开。当第二个条件30<20[false]发生时,在那一刻,之前的订单将被关闭,它将成为真的。

如果我理解正确的话。

 
如果你证明是正确的,我将增加第二个RSI。