我正在学习写顾问... - 页 4

 

如果你的专家顾问是多币种,你必须。

越是这样,因为买入价 卖出价可能已经通过 MarketInfo()设置(说明)

有一次,我开始了一个多货币专家顾问的分支。看一看,一些问题就会清晰起来....

多币种专家顾问问题"。

 

而在这里特别是关于修改的问题

多币种顾问问题

 

我做了这个变体...打开后,我立即调用ModifyPos()

OrderSend (...);

ModifyPos();



void ModifyPos()
  {
   if (OrderSelect(0, SELECT_BY_POS)==true) // Если есть открытый ордер
    { 
     if (OrderType()==OP_BUY)
     OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Stop*Point,Bid- TakeProfit*Point,0,Red);
     if (OrderType()==OP_SELL)
     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ Stop*Point,Ask+ TakeProfit*Point,0,Red);
    }  
  }

停止 - 20。

获利 - 100

日志中的信息 -OrderModify 错误130

 

尝试买入仓位的取舍

Ask+ TakeProfit*Point

想一想吧!为什么买入头寸的止盈会突然低于当前价格

难怪产生了一个错误

而卖出位置也是如此......

如果你不需要改变Take Profit,那么最好这样做。

OrderModify(OrderTicket(), OrderOpenPrice(), Bid- Stop*Point,
                                                     OrderTakeProfit(), 0, Blue);
同样地,对于卖方来说
 
rid >> :

想一想吧!为什么你的买入头寸的止盈突然低于当前价格?

难怪产生了一个错误!

Rid非常感谢!

我没有注意到)...成功了,甚至成功了)

void ModifyPos()
   {
        if (OrderSelect(0, SELECT_BY_POS)==true) // Если есть открытый ордер
            { 
               if (OrderType()==OP_BUY)
                   OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Stop*Point,OrderTakeProfit(),0,Red);
               if (OrderType()==OP_SELL)
                   OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ Stop*Point,OrderTakeProfit(),0,Red);
            }      
   }
 

在测试过程中,现在日志中出现的最后一个错误是OrderSend 错误138。

当没有交易时,这个错误不间断地发生,也就是说,每一个tick都会发生这个错误。

一旦订单被触发,错误就消失了......订单关闭,错误又出现了......。

看起来它正试图在没有任何信号的情况下发送一个订单...但我不明白为什么,因为有一个卖出和买入的(如果)条件

 
ALex2008 писал(а)>>

在测试过程中,现在日志中出现的最后一个错误是OrderSend错误138

当没有交易时,这个错误不间断地发生,也就是说,每一个tick都会发生这个错误。

一旦订单被触发,错误就消失了......订单关闭,错误又出现了......。

看起来它正试图在没有任何信号的情况下发送一个订单...但我不明白为什么,因为我们有条件(如果)出售和购买。

不要仔细阅读https://book.mql4.com/ru/content,都在那里。

 

阅读和理解是不同的事情...我想在实践中了解)

进入有一个条件,在这些条件满足后,控制被传递给打开订单的函数...

我不明白OrderSend 是如何绕过条件进行工作的......在逻辑上它产生了一个错误......因为没有进入条件

 
boolRefreshRates( )

刷新预定义变量和时间序列数组 中的数据。当专家顾问或脚本已经进行了很长时间的计算,需要更新数据时,可以使用这个功能。如果数据被更新,它返回TRUE,否则返回FALSE。数据可能不会被更新,只因为它对应于客户终端的当前状态。专家顾问和脚本使用他们自己的历史数据副本工作。当前符号上的数据副本是在专家顾问或脚本首次启动时创建的。在每次启动专家顾问时(记住,该脚本只执行 一次,不依赖于传入的点数),最初创建的副本会被更新。在专家顾问或脚本运行期间,可能会出现一个或多个新的点,所以数据可能会过时。

//------------------------------------------------------------------------------

尝试在执行OrderSend 之前插入这个函数

另见:2008-05号开庭和设置令。 ::

开幕和设置命令2008-05-05 14:26:13

"为了使程序稳定工作,使被拒绝的交易订单数量最少,在执行OrderSend()函数之前,应使用MarketInfo()和RefreshRates()函数更新程序所使用的信息环境参数。"

 
   RefreshRates();
   OrderSend(Symbol(), OP_SELL, Lot, Price, Slippage, 0, Profit, Comment, MAGIC,0, colorsell);

无济于事...