KimIV的有用功能 - 页 74

 
allarkoms писал(а)>>

你好,伊戈尔!

我正在努力学习MQL4,由于缺乏对语言运算符的描述,有一个问题让我感到很棘手。我有一个指标,有8个缓冲区的累积数据。 我需要它在我选择的时间框架内显示下一个时间框架的周期。为此,它使用了iCustom()操作符。但它返回的是一个双倍的值,我不知道在这种情况下如何以及是否应该使用iCustom。

我真的希望得到你的帮助。

你好,Alexey!

你应该做一个新的指标,使用iCustom()函数。将该函数返回的值分配给新指标的缓冲区。

 
ProfitTrader писал(а)>>

你好,伊戈尔!大家下午好。

我感兴趣的是应该输入的代码,以便专家顾问在关闭交易时不会在该日进行任何更多的交易...

我已经找到了,但它在策略测试器中不起作用,我想测试它,我应该用什么代码代替?

那么我应该把它添加到条目条件中。

你好,Sergiy!

我甚至不明白为什么你给我的函数的使用不能在策略测试器中工作。如果它仍然与你有关,我建议你公布该EA的全部代码。让我们试着去弄清楚...

[Deleted]  

有关于SetOrder()和OpenPosition()函数在错误处理方面的差异和特殊性的问题。


SetOrder()。

      if ( err==8 || err==141) Sleep(1000*100);
      if ( err!=135 && err!=138) Sleep(1000*7.7);
      if ( err==139 || err==140 || err==148) break;

OpenPositions():错误8(ERR_TOO_FREQUENT_REQUESTS)、138(ERR_REQUOTE)和139(ERR_ORDER_LOCKED)未被处理, 与SetOrder()不同。

      if ( err==141) Sleep(1000*100);
      if ( err!=135) Sleep(1000*7.7);
      if ( err==140 || err==148 || err==4110 || err==4111) break;

在SetOrder()中,错误130(ERR_INVALID_STOPS) 由停止校正处理,但在OpenPositions()中,它没有任何处理方式。

在OpenPositions()处理中出现145(ERR_TRADE_MODIFY_DENIED)。在这里处理它的意义并不明确。

此外,在这个讨论的第一页中提到了错误处理,这两个函数中都没有。

KimIV >>:

На паузу 7.7 секунды нарвутся ошибки 129 (Неправильная цена bid или ask), 130 (Неправильные стопы), 134 (Недостаточно денег), 136 (Нет цен).

此外,没有处理其他(可能,在这种情况下很重要)的错误,例如, 3(ERR_INVALID_TRADE_PARAMETERS),6(ERR_NO_CONNECTION),7(ERR_NOT_ENOUGH_RIGHTS),9(ERR_MALFUNCTIONAL_TRADE), 137(ERR_BROKER_BUSY),144(!), 4067 (err_trade_error), 4106 (err_unknown_symbol), 4107 (err_invalid_price_param)


伊戈尔,请对描述的几点进行评论。

我提到的SetOrder()和OpenPositions()函数取自kimiv.ru网站2008年11月5日的b-Orders库和2008年10月29日的b-Positions。


我想补充一下。如果发生错误5 ERR_OLD_VERSION,可以用与2、64、65、133相同的方式处理;4109 ERR_TRADE_NOT_ALLOWED 的方式与4110、4111相同。

 
错误142是什么意思?我在错误代码 中找不到它。我还想知道,是否有可能在某处减少pipsator的延迟?
 
khorosh >> :
错误142是什么意思?我没有在错误代码中找到它。

https://docs.mql4.com/ru/trading/errors

142 有一个订单已经排队。这不是一个错误,而是客户终端和交易服务器之间的一个通信代码。在极少数情况下可以收到这个代码,即在交易操作过程中出现连接中断,之后恢复连接。它必须以与错误128相同的方式处理。

[删除]  
Здравствуйте Игорь! И всем Добрый день!

我对一个关于GEP的问题感兴趣,书中没有描述它们,而且这个话题有很多新内容。我想知道如何在每次出现GEP的时候使交易打开。我想知道当GEP出现时,如何打开订单。我有了,但由于某些原因,这种算法无法工作,这里的错误是什么?

extern int     Magic                = 777;
extern int       TP                 = 6;
extern int       SL                 = 2;
extern double  Lots                 = 0.01;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
if(  iClose(NULL,0,1)>iOpen(NULL,0,0) && (iClose(NULL,0,1)-iOpen(NULL,0,0))>1*Point )
   { //покупаем
  OrderSend(Symbol(),OP_BUY, Lots,Ask,2,Bid- SL*Point,Bid+ TP*Point,
                                               NULL, Magic,0,CLR_NONE);}
                                                  
if(  iClose(NULL,0,1)<iOpen(NULL,0,0) && (iClose(NULL,0,1)-iOpen(NULL,0,0))>1*Point )
   { //продаем
 OrderSend(Symbol(),OP_SELL, Lots,Bid,2,Ask+ SL*Point,Ask- TP*Point,
                                              NULL, Magic,0,CLR_NONE);}

   return(0);
  }
//+------------------------------------------------------------------+
 
在第一个条件中,第一个子条件是多余的,第二个条件出售根本就不可行。一个点是一个缺口吗?你有一个2的滑点和一个2的止损,可能会有重叠。
[删除]  
Roger >> :
在第一个条件中,第一个子条件是多余的,第二个出售条件是不可能的。一个点是一个缺口吗?你的滑点是2,止损是2。

谢谢你,但为什么第一个序言是多余的?你希望当一个新条形图的收盘价高于前一个条形图的收盘价时,买入头寸就会打开,反之亦然。>> 这是正确的方法吗?

if(  iClose(NULL,0,1)<iOpen(NULL,0,0) && (iClose(NULL,0,1)-iOpen(NULL,0,0))>2*Point )
   { //покупаем
  OrderSend(Symbol(),OP_BUY, Lots,Ask,2,Bid- SL*Point,Bid+ TP*Point,
                                               NULL, Magic,0,CLR_NONE);}
                                                  
if(  iClose(NULL,0,1)>iOpen(NULL,0,0) && (iClose(NULL,0,1)-iOpen(NULL,0,0))>2*Point )
   { //продаем
 OrderSend(Symbol(),OP_SELL, Lots,Bid,2,Ask+ SL*Point,Ask- TP*Point,
                                              NULL, Magic,0,CLR_NONE);}
 
这就对了
if(  iClose(NULL,0,1)-iOpen(NULL,0,0)>10*Point )
   { //покупаем
  OrderSend(Symbol(),OP_BUY, Lots,Ask,2,Bid- SL*Point,Bid+ TP*Point,
                                               NULL, Magic,0,CLR_NONE);}
                                                  
if( iOpen(NULL,0,0)- iClose(NULL,0,1)>10*Point )
   { //продаем
OrderSend(Symbol(),OP_SELL, Lots,Bid,2,Ask+ SL*Point,Ask- TP*Point,
                                              NULL, Magic,0,CLR_NONE);}
[删除]  
Roger >> :
>> 这就对了。

据我所知,第一个条件自动意味着收盘价大于开盘价。在第二种情况下,它是反过来的??????