[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 374

 
Arles:
请告知如何解决这个问题:同一个EA在几个图表上,一个开单的信号同时出现在两个图表上,比如说。然而,我们需要第二个订单不要打开。EA有一个检查未平仓订单的功能,但这并没有帮助,因为第一个EA必须打开订单,第二个EA也发出了打开订单的请求。你有什么解决办法吗?
不太清楚在几个图表上使用几个相同的EA是出于什么目的。- 基于这种理解,提出一些建议会更符合逻辑。然而,根据我们掌握的信息,如果你只想让一个EA进行交易,你可以在设置中(如果EA内部提供了任何设置)或在 "常规"-允许EA交易(取消选择复选框)中禁止第二个EA进行交易。
顺便说一下,所有的专家顾问并不是在同一个终端上并行工作,而是按顺序工作。- 在第一台完成工作之前,第二台不会处理数据。因此,如果EA的编写是正确的,即它检查所下的订单,那么第二个将已经考虑到这个订单。- 这是一个。但这只有在专家顾问被设置为连贯工作的情况下才会发生。比方说,他们有相同的魔力和资金管理的会计。否则,只能通过停用 "多余的 "EA。- 那为什么把它们放在......?
 
Chiripaha:
不太清楚在几个图表上使用几个相同的EA的目的是什么。

专家顾问只分析它所盘旋的货币对。在哪一对信号首先出现,它就开出一个订单。但有时一个信号会同时出现在两个对上。而且,看起来很奇怪,2个订单被打开了,尽管在专家顾问中对每个打开的订单都有检查,它不应该打开第二个订单。这是必要的,因为我们没有足够的资金用于存款。

在第一项工作没有完成之前,第二项将不处理数据。

是的,但当第一个人已经完成工作并开了一个订单,第二个人在开始工作后,短时间内看不到已经有一个订单。要么他在订单开启前就开始工作。
--

还有一件事:当第一个EA是Sleep(1000)时,第二个EA是等待还是开始工作?

 

大家下午好!

编码的想法如下

条件 N1 ...如果High[1]超过某个最大X

并同时

条件 N2 .接下来的150根蜡烛中的第一根 的High[1]和Low之间的差值>=150 p。

------------------------------------------------------------------

行动 N1 .删除以前的订单

行动 N2 ...下挂单

行动 N3 .为变量赋值。

问题。尽管事实上,只有在 市场上没有订单,或者最后一个订单没有在当前条形图上放置,才应该放置挂单。 如果(ot==0||last_order_bar>0)

当条件N1和条件N2被满足时,多个 待定订单 被同时下达。

我只想下一个挂单。

-----------------------------------------------

otlast_order_bar 的值是在上述代码中计算的

                                                                                                                        
                                                                                                                
int last_order_bar = 0;                                                                                                                 
int ot = OrdersTotal();                                                                                                                 
                                                                                                                        
 if (ot>0) //если есть ордера в рынке                                                                                                                   
 {                                                                                                                      
   if (OrderSelect (ot-1,SELECT_BY_POS)) //выбрали последний ордер                                                                                                                      
      if ( OrderType ()==OP_SELLSTOP) //проверили тип
        last_order_bar = iBarShift (Symbol (),0,T ); //запомнили, на каком  баре открыт последний ордер (если он есть)                                                                                                                  
 }                                                                                                                      
if(High[1] > X )
 {
   
   for(int i=1;i<150;i++)
     {
      if((High[1]-Low[i])>=1500*Point)//
      break;         //
             {
     if (ot>0) 
         {
           bool R = OrderDelete(OrderTicket());  
         }
if(R==0)                      //если последний выставленный SELLSTOP удален
         {
if (ot==0 || last_order_bar>0)        
int Ticket=OrderSend(Symbol(),OP_SELLSTOP,0.1,iHigh( Symbol (), 0,1)-1500*Point,1,iHigh( Symbol (), 0,1),iHigh( Symbol (), 0,1)-1610*Point,"jfh",123 );//выставить новый SELLSTOP       
if (Ticket>0)                // если SELLSTOP выставлен
 N = (OrderTicket());        //запомнить в глобальную переменную N тикета данного SELLSTOP .
 T = Time [0];               //запомнить в глобальную переменную время выставления данного SELLSTOP
 X=iHigh( Symbol (), 0,1);   //запомнить в глобальную переменную High свечи N1 после которой был выставлен данный SELLSTOP
   
 }
 }
 }
 }
}
 }   
                        
return(0);
 
Arles:

专家顾问只分析它所盘旋的货币对。信号首先出现在哪一对上,它就开出一个订单。但有时一个信号会同时出现在两个对上。而且,看起来很奇怪,2个订单被打开了,尽管专家顾问有对任何未结订单的检查,它不应该打开第二个订单。这是必要的,因为我们没有足够的资金用于存款。

是的,但当第一个完成工作并打开一个订单时,第二个开始工作,短时间内不会看到订单已经存在。或者他在订单开启前就开始工作了。
--

还有一件事:当第一个EA是Sleep(1000),第二个EA是等待还是开始工作?

关于第一个问题:我已经规定,如果EA写得正确...当然,如果在EA中 没有检查 下单(开仓)和计算资金管理,也可能发生你所描述的情况--这一切都取决于程序员的水平(和懒惰)--他是否考虑过这些事情并在EA中规定。如果一切都能正确实施,那么你的担忧就不会发生。- 信号,是的,可能同时出现在2对,但(见前一篇文章),专家顾问是按顺序工作的。因此,在第一个EA没有处理报价之前,下一个EA将不会开始工作。- 我想这是我们决定使用顺序的原因(即使有可能并行处理报价,这将是另一个讨论的话题)。

这也取决于EA的水平。因为你问的所有东西都是相当麻烦的处方--非常不是一个小工作,需要财务方面的知识。这就是为什么EA倾向于 "简单",并面向被赋予当前货币的整个账户。通常交易的是一种货币。因为,例如要交易几种货币,你需要有相当不同类型的存款,而这种简单的系统并不真正适用于那里。唯一的例外是对冲的操作(我忘了确切的术语,我会用不同的方式重新表述),当一个人以一个价格开盘,并立即以另一个(甚至几个)价格重新开盘--差额是给自己的。但这是一个不同类型的EA,一切都将在那里得到说明(全部在一起)。- 而一般来说,在我看来,如果在一个货币对上没有比流动性更多的资金,那么同时在所有货币对上进行交易是一个不好的基调。(但这是我的私人意见)公文包等。- 这不是用于投机性交易。由于某些原因,人们根本没有考虑到这一点。- 如果你不是一家生产或进行国际贸易的公司,那么你根本不需要很多货币。- 这就是我的观点--为什么他们通常不在EA中实现这种核算不同货币的区块--因为它们是不相关的。

对于第二个问题:坦率地说,我自己也有这个问题--我不太清楚当Sleep(1000)功能时终端是如何反应的--我呼吁那些知道这个问题的人给我一个答案。理想情况下,此刻的终端将只处理流媒体价格 - 即接收报价并绘制图表和指标。但是,在这个EA "等待 "的时候,它不会把它转给其他人。- 但这是我的假设,我并不完全确定。也许,这个 "队列 "的另一个例外是可以在EA等待时启动执行的脚本。- 我也有同样的问题。

然而,我通过根据第一点的正确性建立我的专家顾问系统来摆脱这种无知。

 
solnce600:

大家下午好!

编码的想法如下

条件 N1 ...如果High[1]超过某个最大X

而在这种情况下

条件 N2 .接下来的150根蜡烛中的第一根 的High[1]和Low之间的差值>=150 p。

------------------------------------------------------------------

行动 N1 .删除以前的订单

行动 N2 ...下挂单

行动 N3 .为变量赋值。

问题。尽管事实上,只有在 市场上没有订单,或者最后一个订单没有在当前条形图上放置,才应该放置挂单。 如果(ot==0 || last_order_bar>0)

当条件N1和条件N2被满足时,多个 待定订单被同时下达。

我只需要一个待定订单。

:))安德烈,你所问的那些问题在教科书中已经解释过了。请看教程中的终端例子,其中详细描述了需要考虑订单的原则和逻辑。- 然后你的大部分问题会自己消失。总的来说,该教程是建立在一个事实之上的,即任何有能力的专家顾问的结构都是作为一个例子完全呈现的。- 这就是它的魅力所在。+ 给出了编程的基本理论概念。但其中有一个难题--它不是为懒惰的读者准备的--它是根据所写的结构来的。也就是说,要消除关于具体要点的问题,你必须阅读整本教科书。 但很少有人会同意复述它(教科书)。

你在订单的核算上建桩。- 你需要一个更简单的方法。订单要么在那里,要么不在那里--它在哪个酒吧(在你的条件下)打开并不重要。- 由于这些复杂性,我们在考虑订单和条件时感到困惑。- 因此,任何程序员都应该寻找的算法错误。改变编写程序的 逻辑,算法上的错误就会消失(自己)。

 
好的,谢谢你。
 
Arles:

专家顾问只分析它所盘旋的货币对。信号首先出现在哪一对上,它就开出一个订单。但有时一个信号会同时出现在两个对上。而且,看起来很奇怪,2个订单被打开了,尽管在专家顾问中对每个打开的订单都有检查,它不应该打开第二个订单。这是必要的,因为我们没有足够的资金用于存款。

这是很基本的!第一个专家顾问开出一个订单。如果哪个EA开单并不重要......那么就在这两个EA中创建一个条件。创建一个布尔函数,找到最后打开的订单,并分别提取其打开的时间。如果这个开盘时间 等于当前条形的开盘时间,我们以TRU退出函数。将该功能放在开始的位置,如果模式是TRU,那么就 从开始退出。
 
Chiripaha:

至于第二个问题:说实话,我自己也有这个问题--我不完全确定当Sleep(1000)功能时终端是如何反应的--我呼吁那些知道的人--给我一个答案。理想情况下,此刻的终端将只处理流媒体价格 - 即接收报价并绘制图表和指标。但是,在这个EA "等待 "的时候,它不会把它转给其他人。- 但这是我的假设,我并不完全确定。也许,这个 "队列 "的另一个例外是可以在EA等待时启动执行的脚本。- 我也有同样的问题。

然而,我试图通过在第一点的正确性基础上建立我的专家顾问来摆脱这种无知。



据我所知,在Sleep() 之后,专家顾问只是睡着了,也就是说,它的工作暂停了,在这个时候,它接收到的报价和反应都没有。因此,终端将 "队列 "传给另一个。

如果有人不同意,请纠正我的观点!

 
hoz:


据我所知,当Sleep() 被处理后,专家顾问只是睡着了,即它的工作被暂停,此刻它既没有接收报价,也没有对任何事情作出反应。因此,终端将 "队列 "传给另一个。

如果有人不同意,请纠正我的观点!

我不准备同意。- 因为从这个位置开始,专家顾问的正确工作和计算资金和头寸的逻辑就失去了。- 这是一个。第二。- 如果我的EA正在睡觉,例如100毫秒,而另一个在同一时间开始工作,那么会发生什么,一旦这100毫秒过去,另一个将不得不停止工作......。并把它传回给中间的这个人,如此无限地进行下去......另一方面。我曾在EA中看到(并不罕见),当他们发送 "睡眠 "几分钟,并在每个执行块中多次发送。- 那么,如果所有其他的猫头鹰在这段时间都不工作,那也是有一定的问题。- 因此,这个问题是相当贴切的。我想了解这时的操作逻辑。但我没有在官方文件中看到任何详细的解释。

但在两害之中,我会选择后者。在这种情况下,我会直接留下我确定的猫头鹰。如果没有,那也一样:至少重新计算的正确性得到了保留,尽管他们的工作被放慢了。

这个问题并不像它看起来那样微不足道。- 重点是,我的实验表明,如果不勾选"允许EA交易"的方框,那么EA的工作不会停止--所有的计算都是以同样的方式在每个tick上进行。只是EA的交易不会被发送到服务器。但是,如果这些计算中充满了这些 "滑点"(不完全正确),那么如果有5-10个这样的EA,它们会专门减缓当前正在交易的实际EA的执行。

是的,一些程序员将控制权放在交易的权限上,在此基础上跳过猫头鹰的工作。但它没有更经常地进行。而如果代码是封闭的,我们根本无法了解该操作是否是制动的(以及到底是哪个猫头鹰)。- 现在我将在论坛搜索中探究这个话题。有些东西已经放慢了速度。

感谢阿尔勒 的问题,感谢他提醒我和更新我的信息。我没有足够的经验来理解关于这个问题的内容。我现在再做一次。

 
Arles:

专家顾问只分析它所盘旋的货币对。信号首先出现在哪一对上,它就开出一个订单。但有时一个信号会同时出现在两个对上。而且,看起来很奇怪,2个订单被打开了,尽管在专家顾问中对每个打开的订单都有检查,它不应该打开第二个订单。这是必要的,因为我们没有足够的资金用于存款。

是的,但当第一个完成工作并打开一个订单时,第二个开始工作,在短时间内没有看到这个订单已经存在。或者他在订单开启前就开始工作了。
--

还有一件事:当第一个EA睡眠(1000)时,第二个等待或开始工作?

有了小额存款,就不会在几个货币对上进行交易(世俗的建议)。

从技术上讲,为了使不同的EA考虑到订单的总数,我们可以尝试这个方案。

    int li_total - OrdersTotal();
    if (li_total == 0) Sleep (1000);
    li_total - OrdersTotal();
    if (li_total == 0) OrderSend();

我不知道它的工作效果如何(应该可以用2个)。通过终端的全局变量 安排 "Semaphore "按顺序工作会更安全。那么,多少个专家顾问并行工作就不重要了。