[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 589

 
ilunga:
因为这些是局部变量,已经在第二次打钩时储存了垃圾,而不是票据。

非常感谢您!说实话,我一直都在想这个问题!"。
 
Roman.:


请看拖车。将其内容放在终端的Experts 文件夹中。选择你感兴趣的工具的时间框架,并把它放在专家顾问的图表上。

在MetaTrader的外部变量中设置开单的参数。

然后,你等待在所选工具的时间框架上形成一个新条形。

当专家顾问从市场上打开一个订单时,将其打开的时间与打开一个新条目的时间进行比较。

罗曼,正如承诺的那样,我想向你展示在 "开盘时打开 "的情况下使用专家顾问的实际情况。首先,该EA在放置在1小时图上后,在下一个tick上被触发,并在下一个蜡烛的开口处开启第二个 交易。为什么,我还不能理解。其次,交易的开盘价 与新蜡烛的开盘价并不一致。

2012.02.24,12:00,1.3392,1.3405,1.3383,1.3387,768 - 蜡烛在1.3392打开,订单在1.3390被触发。我在设置中指定滑移量为1点。如果我输入0点,EA根本就不会触发。

我附上了日志。对我来说,重要的仍然是开盘指令与蜡烛图的开盘价相吻合。

 

你好,先生们。我希望得到澄清。

我的理解是否正确,如果 在代码 OrderDelete OrderSend 命令是按顺序 写的如果 ,EA收到信号,在tick #1执行两个命令(撤回+设置),那么

- 这两条命令不能 在同一个tick #1上执行,而且它们的执行时间至少被拉长3个tick,并且

- 在打勾#1时,会发出OrderDelete命令。

- 在提交OrderDelete ,只有 在下一个tick #2时才会返回结果,并且只有在同一个tick #2时才能提交OrderSend命令。

-OrderSend命令 的结果只有在第3点时才会被知道

情况是这样吗?


而且,是否真的不可能在同一时间向MT发送两条指令?

我在MT4中编写一个EA。

谢谢你。

 
Les:

你好,先生们。我希望得到澄清。

我的理解是否正确,如果 在代码 OrderDelete 和OrderSend命令是按顺序 写的如果 ,EA收到信号,在tick #1执行两个命令(撤回+设置),那么

- 这两条命令不能 在同一个tick #1上执行,而且它们的执行时间至少被拉长3个tick,并且

- 在打勾#1时,会发出OrderDelete命令。

- 在提交OrderDelete ,只有 在下一个tick #2时才会返回结果,并且只有在同一个tick #2时才能提交OrderSend命令。

-OrderSend命令 的结果只有在第3点时才会被知道

情况是这样吗?


而且,是否真的不可能在同一时间向MT发送两条指令?

我在MT4中编写一个EA。

谢谢你。

打勾是一个新的报价。而且OrderDeleteOrderSend 命令之间没有任何联系。

如果有新闻更新和滑点,那么当一个简单的OrderSend被执行时,已经过去了十几个点。而如果市场处于夜间平仓状态,这两条指令可能在一个刻度内执行

 
Les:

这完全取决于蜱虫的速度有多快。一般来说,返回值的函数,OrderDelete,OrderSend等都不是异步执行的,也就是说,直到整个操作通过并产生错误代码(或成功时产生NO_ERROR),下一个操作者才会被执行。另一件事是,在这段时间内可能会有几个ticks运行,但它们不会被start()函数处理。


例如,当一个订单触发了止损,而你试图在同一时刻打开/关闭另一个订单时,也可能会发生碰撞。那么在某些情况下,服务器可能不允许你执行该操作。


也就是说,对你的问题的回答是不,不是))

 
ilunga:

打勾是一个新的报价。而且与OrderDelete OrderSend命令的执行时间没有关系。

如果有新闻更新和滑点,当一个简单的OrderSend被执行时,已经过去了十几个点。而如果市场处于夜间平仓状态,那么这两条指令可能会在一个刻度内执行。

据我所知,MT是通过滴答声从服务器上获取信息的(而服务器则是在发送新滴答声的同时给出指令答案,它通过时间来优化成本)。而在新的蜱虫到来之前,一切都不得而知。这就是我的意思。但也许我的这个假设是错误的?这 个问题更多的是与你提到的第二个选项有关,当嘀嗒声很慢时,而不是一打嘀嗒声。

因此,我是否正确地理解了你的意思,即在1号命令上得到回应并不是进入2号命令并完全处理的前提条件?

命令响应是命令的 "非必要 "部分?它的存在对进入下一个命令不是至关重要吗?

我们在下面和阿尔苏进行了讨论,我想我的假设和他一样:有回应是关键。你确实写了两个命令可以在一个刻度上执行。那么,来自服务器的信息与报价流程完全没有任何联系?


谢谢你。

 
alsu:
这完全取决于蜱虫的速度有多快。一般来说,返回值的函数,OrderDelete,OrderSend等都不是异步执行的,也就是说,直到整个操作通过并返回错误代码(或成功时的NO_ERROR),下一个操作者才会被执行。另一件事是,在这段时间内可能会有几个ticks运行,但它们不会被start()函数处理。


例如,当一个订单触发了止损,而你试图在同一时刻打开/关闭另一个订单时,也可能会发生碰撞。那么在某些情况下,服务器可能不允许你执行该操作。


也就是说,你的问题的答案是否定的,它不是))。

如果按照你自己的说法,结果完全是 "如此",怎么会不是这样呢?)) 还是我又误解了什么?你在回复中写道,函数的执行方式是,只有在处理完前一个运算符的错误代码 后,才能执行下一个运算符。我想这就是我的意思:"两个命令 不能 在同一个tick #1上执行",因为响应--那个响应或错误代码--最早出现在新tick 上。 或者说不是这样的吗?还是说命令的响应是在一个单独的定时流中进行的,与报价流无关?也许我的错误在于假设命令执行结果是以新的引号返回的?

当然,我主要指的是滴答声很慢的情况。

 
请告诉我,尽管指标发出了关闭交易的信号,但在下一个指标信号时,专家顾问是否有可能只关闭正向交易,因为他们出来获利?
 
Les:

据我所知,MT从potikovo服务器获取信息(而服务器则在发送新刻度的同时给予命令回应,这优化了时间成本)。而在新的蜱虫到来之前,一切都不得而知。这就是我的意思。但也许我的这个假设是错误的?这 个问题更多的是与你提到的第二个选项有关,当嘀嗒声很慢时,而不是一打嘀嗒声。

因此,我是否正确地理解了你的意思,即在1号命令上得到回应并不是进入2号命令并完全处理的前提条件?

命令响应是命令的 "非必要 "部分?它的存在对进入下一个命令不是至关重要吗?

我们在下面和阿尔苏进行了讨论,我想我的假设和他一样:有回应是关键。你确实写了两个命令可以在一个刻度上执行。那么,来自服务器的信息与报价流程完全没有任何联系?


谢谢你。

命令反应和蜱虫是分开的,没有关系。如果有一个死平,你可以 "抓住 "几个订单在同一刻度上打开/关闭。
 

你好。我根本就不擅长编程。我对编码不是很有经验,所以请帮助我在代码中添加StopLoss和TrailingStop的平仓。专家顾问不是我的,但策略还不错,所以试错重做EA对我来说--说实话,我已经在吹牛了,而且没有多少时间--工作。我已经试过了,而且坦率地说,我没有时间可以浪费--我必须工作。这就是我对它的处理方法。


//+------------------------------------------------------------------+
//|                                             stohastic_system.mq4 |
//|                                                    Анатолий      |                                                                  |
//+------------------------------------------------------------------+

extern double Lots=0.4;
extern int TakeProfit=50;
extern int NWave=2;
extern int K=9;
extern int D=3;
extern int slowing=5;
extern int Average_method=2;
extern int price_field=0;

int K_level=0;
int down=0;
int up=0;


int init()
  {

   return(0);
  }

int deinit()
  {

   return(0);
  }

int start()
  {
    int ticket=0;
    double stoch_1=iStochastic(NULL,0,K,D,slowing,Average_method,price_field,MODE_MAIN,1);
    double stoch_2=iStochastic(NULL,0,K,D,slowing,Average_method,price_field,MODE_MAIN,2);
    double stoch_3=iStochastic(NULL,0,K,D,slowing,Average_method,price_field,MODE_MAIN,3);
    int Hour_curr=TimeHour(TimeCurrent());
    
    if ((stoch_1>90)&&(stoch_2>70)) K_level=90;
    if ((stoch_1<10)&&(stoch_2<30)) K_level=10;  
    if(OrdersTotal()<1)
      {        
        if((Hour_curr>=1)&&(Hour_curr<24))//проверка сигналов только в этот промежуток времени
          {
            if((K_level==10)&&(stoch_1>10))//сигнал на покупку
              {
                RefreshRates();
                Print("Сигнал на покупку. stoch_1=",stoch_1," stoch_2=",stoch_2);
                ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,Ask+TakeProfit*Point,"buy_order1",1,0,Blue);
                
                K_level=10; 
                down=0;               
              }
            if((K_level==90)&&(stoch_1<90))//сигнал на продажу
              {
                RefreshRates();
                Print("Сигнал на продажу. stoch_1=",stoch_1," stoch_2=",stoch_2);
                ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,10,0,Ask-TakeProfit*Point,"sell_order1",1,0,Red);
               
                K_level=90;
                up=0; 
              }
          }
      }
    
   
   
    return(0);
  }
   
附加的文件: