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

 


如何正确使用RefreshRates()函数?

 int ticket;
   while(true)
     {
      ticket=OrderSend(Symbol(),OP_BUY,1.0,Ask,3,0,0,"комментарий эксперта",255,0,CLR_NONE);
      if( ticket<=0)
        {
         ......
         RefreshRates();
        }
      else
        {
         .....
        }
     }

还在论坛上看到 "ERROR: code=138- requote" 。

我有 "OrderSend error 138 "在测试器中每秒钟产生几次......这是一个重新报价吗?如果是这样,如何与之斗争)?

 

在阅读了20个关于重新报价的主题后...我终于知道我的错误是什么了)

我有一个" 假的 "重新报价。原因是触发了进入条件,因此价格被发送到了.在现实中,真实的价格低于或高于.中公布的价格。每次OrderSend 试图打开一个订单时,都会出现138号错误,当然了。

解决办法是在OrderSend之前检查真实价格是否等于信号传递的价格)

RefreshRates();
      if (Bid == ( цена переданная сигналом на продажу))
         OrderSend (....); //продажа

尚待完成的是对OrderModify订单的错误检查,因为这可能会导致不好的后果--没有停顿!

我认为我们不需要检查OrderSend,让它在信号给出的价格上跳动它的脉搏)如果重新报价,这并不重要--我将有时间购买或出售。最主要的是,一切按计划进行)

 
ALex2008 писал(а)>>

在阅读了20个关于重新报价的主题后...我终于知道我的错误是什么了)

我有一个" 假的 "重新报价。原因是进入条件被触发,因此价格被传递到OrderSend。而实际上,真实的价格比我在OrderSend中输入的价格要低或高。每次OrderSend试图打开一个订单时,都会出现错误138。

解决办法是在OrderSend前检查真实价格,是否等于信号传递的价格)。

只剩下检查OrderModify订单的错误了,因为这可能会导致不好的后果--------------不止步!

我认为没有必要检查OrderSend,让它在信号设定的价格上跳动它的脉搏)如果重新报价来了,那就无所谓了--我有时间买入或卖出。最主要的是,一切按计划进行)

RefreshRates()
在访问Ask Bid之前要做的事情很有用

如果您想在计算止损和进场价格的区块之前检查所有的卖出或买入限价值--如果不是根据当前价格计算,长距离挂单可能不受影响。

 
YuraZ >> :

RefreshRates()
在访问Ask Bid之前,这样做是有用的。

这不正是我所做的吗......在投标之前

if (Bid == (цена переданная сигналом на продажу))

在计算止损和进场价格的区块之前 - 如果不按当前价格计算,长距离订单可能不受影响

向我解释一下...所以,在我的情况下,这里不需要,因为它不算,但比较起来呢?我没看错吧?
 
ALex2008 писал(а)>>

这不正是我所做的吗......在转向Bid之前


>>请解释。所以在我的情况下,这里不需要,因为它不是在计算,而是在比较?我没看错吧?

你做了正确的事情 :-)

这不是一个问题。

只是,你获取价格的区块最好是在一个地方。

最好是在应用前有这个命令

你的地址是 "买入 "和 "卖出",在计算了所有的止损后,你必须毫不迟疑地进入市场。

---

在代码中加入以下内容

简言之

1 - 收到信号 - 为执行设置标志。

2refresh() 计算外卖站

3英寸

4台服务器被拒绝

5-解码错误

6-信号仍然有效--执行标志设置?

7- 转到第1页

并有必要打破这种循环

因为它可以变得相当长

但我们必须

1-决定错误

2 - 尽量不要在周期要求的时间内与经销商发生冲突。

2.1 例如,你可以计算一下你敲击了多少次

2.2 你可以做一个量级的时间

2.3 在发出执行命令之前,必须跟踪你是否有信号!

或者你可能想取消它!

 
YuraZ >> :

...只是,你应该把访问价格的区块最好放在一个地方

而且最好是在你调用这个命令之前就有这个命令

你去看买入卖出,并计算所有的止损,以便毫不拖延地进入市场...

在一个地方...我不太明白......我正在做一个长时间的指标,但我无法完成循环)。

我是这样想的。

-进入的价格由检查信号的函数UpTrend()和DownTrend()定义。

-检查(如果)与信号中的价格是否一致

-要输入的价格和价格是由OrderSend处理的

-止损价格在OrderSend之后的ModifyPos()函数中被处理。


1- 收到信号--设置执行的标志//信号检查函数通过顺序设置函数。
2-refresh() 计算起飞量//检查与价格的一致性--信号的价格(如果它仍然是活动的)。
3-entry //计算起飞量在OrderSend函数中是静态的,在OrderModify函数中停止。
4-服务器拒绝//如果没有下单,但有信号,则以信号的价格重新进入(如果它仍然有效)。
5-解码错误//你自己需要它,以防有新的问题出现
6号信号仍然活跃--执行的标志?//价格匹配的条件 - 信号中的价格(如果它仍然有效)。
7-进入步骤1 //进入步骤3

而我们必须打破这个循环。
它可以变得相当长//只要价格==信号的价格,我不这么认为,但它可能是频繁的)
但我们必须

1-确定错误//我想我今天会努力解决这个问题。
2-试图敲打庄家的时间不要太长,因为它应该是//价格==信号的价格
2.1 你可以为你需要做多少次长线做一个计数器//要考虑一下,在测试器中查看你的历史记录。
2.2 你可以在一个量级的时间内完成//可能会错过价格==信号的价格(如果它仍在活动)。
2.3 在下达执行每个系列的指令之前,你必须检查是否有信号!
现在可能是取消信号的时候了 //信号检查函数通过订单设置函数。


 

现在我不明白如何正确实现OrderModify?没有它,我就不能设置停止......打开时的直流限制......

- 如果开盘后价格发生变化,并且越来越接近,会出现130的错误。

-有可能得到一个重新报价的错误138,价格会走高,然后根本就没有设置止损。

-有可能得到138的重新报价,价格会走低,这并不关键,因为以后会设置止损。

所以...

сигнал действует

RefreshRates
();
if (Bid == ( цена сигнала))
{
OrderSend(Symbol(), OP_SELL, Lot, ( Low_candl - Proboy*Point), Slippage, 0, ldTake, lsComm, MAGIC,0, clOpenSell);
OrderModify(....);
}

这种变体的缺点是

-如果价格低于开盘价,则永远不会设置止损。

如果价格低于开盘价,则永远不会设置止损--它将始终尝试修改订单。还是不会?


左右...


сигнал действует

RefreshRates
();
if (Bid == ( цена сигнала))
OrderSend(Symbol(), OP_SELL, Lot, ( Low_candl - Proboy*Point), Slippage, 0, ldTake, lsComm, MAGIC,0, clOpenSell);
OrderModify(....);

这种变体的缺点

-如果价格逆向移动,会有很多错误。


 

目前,我正在考虑在停止上的这个选项,把它放上,直到它被设置好)

void ModifyPos()
   {
        if (OrderSelect(0, SELECT_BY_POS)==true) // Если есть открытый ордер
            { 
               if (OrderType()==OP_BUY)
                     double SLB = Bid- Stop*Point;
                     bool ModifyB = OrderModify(OrderTicket(),OrderOpenPrice(), SLB,OrderTakeProfit(),0,Red);
                        if ( ModifyB == false)
                           for (int i=0; ModifyB==true; i++)
                              {
                                 SLB = SLB+ i*Point;
                                 RefreshRates();
                                 ModifyB;
                              }
               if (OrderType()==OP_SELL)
                     double SLS = Ask+ Stop*Point;
                     bool ModifyS = OrderModify(OrderTicket(),OrderOpenPrice(), SLS,OrderTakeProfit(),0,Red);
                        if ( ModifyS == false)
                           for (int j=0; ModifyS==true; j++)
                              {
                                 SLS = SLS+ j*Point;
                                 RefreshRates();
                                 ModifyS;
                              }                                                   
            }      
   }

但在有ModifyB; ModifyB的行中出现了错误

- ';' - 已经定义的变量

- ';' - 已经定义的变量




 

另一个选项,但也有错误(

void ModifyPos()
   {
        if (OrderSelect(0, SELECT_BY_POS)==true) // Если есть открытый ордер
            { 
               if (OrderType()==OP_BUY)
                     double SLB = Bid- Stop*Point;
                     bool ModifyB = OrderModify(OrderTicket(),OrderOpenPrice(), SLB,OrderTakeProfit(),0,Red);
                        if ( ModifyB == false)
                           for (int i=0 ;; i++)
                              {
                                 SLB = SLB+ i*Point;
                                 RefreshRates();
                                 bool ModifyB = OrderModify(OrderTicket(),OrderOpenPrice(), SLB,OrderTakeProfit(),0,Red);
                                    if ( ModifyB==true)
                                       continue; 
                              }
               if (OrderType()==OP_SELL)
                     double SLS = Ask+ Stop*Point;
                     bool ModifyS = OrderModify(OrderTicket(),OrderOpenPrice(), SLS,OrderTakeProfit(),0,Red);
                        if ( ModifyS == false)
                           for (int j=0 ;; j++)
                              {
                                 SLS = SLS+ j*Point;
                                 RefreshRates();
                                 bool ModifyS = OrderModify(OrderTicket(),OrderOpenPrice(), SLS,OrderTakeProfit(),0,Red);
                                    if ( ModifyS==true)
                                       continue; 
                              }                                                   
            }      
   }
 
ALex2008 писал(а)>>

另一个选项,但也有错误(

ticket=OrderSend( symb, bs, lot, op, slippage,0,0, comm, magic);
      if( ticket==-1) {
Print("Не получилось открыть ордер, ошибка ",GetLastError());
      }
      if( ticket>0) {
         OrderSelect( ticket, SELECT_BY_TICKET);
         if(OrderType()==OP_BUY) {
            sl= расчет стопа;
            tp= расчет тейка;
         }
         if(OrderType()==OP_SELL) {
            sl= расчет стопа;
            tp= расчет тейка;
         }
         ... Проверка стопов на стоплевел
            if(!OrderModify( ticket, OrderOpenPrice(), sl, tp, 0, CLR_NONE)) {
               Print("Не получилось модифицировать ордер, ошибка ",GetLastError());
           }
这样试试吧。