检查在市场上发布的EA中的最小止损。 - 页 16

 
Vladislav Andruschenko:

将点差考虑在内,点差为8点。+最小止损18=26点

27是可以的。

而且,如果一个人需要设置100个点的止损,这意味着他将损失100个点,所以对于BAY来说,从ASC价格开始,你需要计算100个点。

和来自BID的销售。

我没有说把SL放在哪里。我说过检查时要用什么价格。
 
Andrey Khatimlianskii:
我没有说把SL放在哪里。我说过检查时要用什么价格。
谢谢你。这个选项也算。
 
Taras Slobodyanik:

所以你怎么能不猜呢?如果经纪人给出一个不合理的止损水平? %)

...很明显,在所有的检查之后,你必须猜测才能知道最小的缩进

你不能在布局中猜测。你必须了解一切。事先。以便不犯任何一个错误。虽然我相信来自服务器的错误并不是错误。这是一个警告。
 

我没有在市场上销售EA 的经验,但在阅读了所有的意见后,我将投入我的五分钱。

你可以尝试在菜单中选择几个选项

1个变体 - 默认。这时,最小停顿完全由MODE_STOPLEVEL 决定。一定要在订单的每个动作之前要求一个新的STOPLEVEL

2 变体,如果MODE_STOPLEVEL == 0,则止损点向左 移动。

3 可以选择,我们手动设置自己的止损水平,或一些乘数乘以价差。

有必要引入控制。如果一个EA正在被测试或优化,止损水平不能低于点差。我认为这将使市场通过任何压力测试,包括StopLoss=1的测试。

 
Dmytro Zelenskyy:

我没有在市场上销售EA 的经验,但在阅读了所有的意见后,我将投入我的五分钱。

你可以尝试在菜单中选择几个选项

1个变体 - 默认。这时,最小停顿完全由MODE_STOPLEVEL 决定。一定要在订单的每个动作之前要求一个新的STOPLEVEL

2 变体,如果MODE_STOPLEVEL == 0,则止损点向左 移动。

3 可以选择,我们手动设置自己的止损水平,或一些乘数乘以价差。

有必要引入控制。如果一个EA正在被测试或优化,止损水平不能低于点差。我认为这将使市场通过任何压力测试,包括StopLoss=1的测试。

不幸的是,没有。

在市场上,一切都应该自动进行。

现在这里有一个关于黄金的新的有趣的事情,有3个数字,但最后一个数字必须是四舍五入的,即最后一个数字应该是0。

最后一个数字应该是0,所以当四舍五入时,它是按照数学规则进行的,而不是按照允许你绕过最小停止规则的方向。

当然,我可以直接把--通过市场检查把所有级别放在10个停止级别--可以说,为了让版主通过,但我希望能妥善处理。

我必须在买入时四舍五入,在卖出时四舍五入。哦............

 
Vladislav Andruschenko:

不幸的是,没有。

在市场上,一切都应该自动进行。

现在,这里有一个关于黄金的新技巧,有3位数的报价,但最后一位数字必须是四舍五入的,即最后一位数字必须是0。

最后一个数字应该是0,所以当四舍五入时,它是按数学规则四舍五入的,而不是向允许你绕过最小止损规则的一边。

当然,我可以直接把--通过市场检查把所有级别放在10个停止级别--可以说,为了让版主通过,但我希望能妥善处理。

我必须在买入时四舍五入,卖出时四舍五入。哦............

我在测试黄金和白银时也遇到过这个问题。

double NormalizePrice(string symbol,double value)
  {
   double ts=SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE);
   if(ts==0)return(value);
   return(NormalizeDouble(value/ts,0)*ts);
  }

使用实例

      double ask=NormalizeDouble(SymbolInfoDouble(symbol,SYMBOL_ASK),digits);
      if(NormalizeDouble(NormalizePrice(symbol,ask),digits)!=ask)return;
 

例如,这是我的获利和止损功能的样子

void ModifyTP(string symbol,double tp)
  {
   if(tp<=0)return;
   bool res;
   double last=SymbolInfoDouble(symbol,SYMBOL_LAST);
   double bid=SymbolInfoDouble(symbol,SYMBOL_BID);
   double ask=SymbolInfoDouble(symbol,SYMBOL_ASK);
   double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
   int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);

   if(last<=0.0)
     {
      bid=SymbolInfoDouble(symbol,SYMBOL_BID);
      ask=SymbolInfoDouble(symbol,SYMBOL_ASK);
     }
   else
     {
      bid=SymbolInfoDouble(symbol,SYMBOL_LAST);
      ask=SymbolInfoDouble(symbol,SYMBOL_LAST);
     }

   if(bid<=0.0)return;
   if(ask<=0.0)return;

   int total=OrdersTotal();

   for(int i=0; i<total; i++)
     {
      if(!OrderSelect(i,SELECT_BY_POS))continue;
      if(OrderMagicNumber()!=Magic)continue;
      if(OrderSymbol()!=symbol)continue;
      if(OrderType()>1)continue;
      if(OrderTakeProfit()!=0)continue;

      if(OrderType()==OP_BUY) tp=NormalizeDouble(NormalizePrice(symbol,bid+tp*point),digits);
      if(OrderType()==OP_SELL) tp=NormalizeDouble(NormalizePrice(symbol,ask-tp*point),digits);
      if(tp<0)continue;
      res=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),tp,0);
      if(!res)
        {
         int error=GetLastError();
         rezult=StringConcatenate(OrderSymbol(),": error modifying TakeProfit order ",StrToType(OrderType())," №- ",error," ",ErrorDescription(error)," Ticket: ",OrderTicket());
         Print(rezult);
        }
     }
  }
 
Sergey Gritsay:

同样面临着在黄金和白银上测试的问题,我写了一个这样的函数

使用实例

如果我在MT5服务器上使用黄金--小数点后3位,但止损和开盘价 应设置为!!!!如果你还想玩小数点后2位的游戏,那就四舍五入到小数点后2位,而不是3位,你还可能看到一些幽默的技巧,在黄金和白银上的最小止损。

像这样。

   request.tp=NormalizeDouble(request.tp,SymbolInfoInteger(symToWork2,SYMBOL_DIGITS)-Rounding);
   request.sl=NormalizeDouble(request.sl,SymbolInfoInteger(symToWork2,SYMBOL_DIGITS)-Rounding);
   request.price=NormalizeDouble(request.price,SymbolInfoInteger(symToWork2,SYMBOL_DIGITS)-Rounding);

其中四舍五入=黄金mt5是1。

你需要把价格四舍五入,否则它会通知你价格是错误的,但当你四舍五入后,服务器会把它纠正为正确的价格,交易就会被关闭。

mt4没有这样的怪癖--有2位小数,你四舍五入到2位小数没有任何问题。

我对错误130的个人看法。

我对错误130进行了所有的检查--有一个错误日志输出。

还有就是正常化。

在市场上,他们让我以最小的止损点为标准,分别+价差,(例如,我应该从ASK价格买入,并在BID价格检查最小的止损点)。

因此,它应该是 强迫用户的,如果一个交易者使用EA并设置了例如20点的止损,那么EA应该自动覆盖50点(MinStop + Spread),这是不正确的。交易者必须看到错误的130,并在自己的风险上纠正停止。

另一个选择--如果用户设置的止损低于最小值--禁止交易和修改,因为版主不允许专家顾问出现130的错误。

禁止交易 是错误的,止损和价差是浮动的,现在低于最低限度--那么就可以了。

我不认为用市场来做这样的事情是个好主意。

IMHO:错误130应该是,用户应该从服务器上看到第130个错误,而不是从专家顾问那里看到:"你的止损点低于最低点,纠正它"。

市场规则:不要错过产生错误130的专家顾问--因为检查员在止损中放了1个点--好吧,这是一个失败。

一个相同的专家顾问版本可能通过也可能不通过。

我已经发布了一个版本--一切正常,过了一段时间,我看到EA打印了很多(只是止损小于最小值的事实),我迅速纠正了它,等了一周,直到他们开始测试,再次停滞了2周,因为我再次看到某些符号上有130个错误。

 
Vladislav Andruschenko:

在mt5服务器上的黄金--小数点后3位,但止损和开盘价 应设置为!!!!。如果你想改变黄金和白银的价格,你需要把它设置为小数点后2位,即四舍五入到小数点后2位,而不是3位,而且你的黄金和白银的最小止损也会有一个窍门。

像这样。

其中四舍五入=黄金mt5是1。

你需要把价格四舍五入,否则它会通知你价格不对,但当你四舍五入后,服务器会修正为正确的价格,交易会被关闭。

mt4没有这样的怪癖--有2位小数,你四舍五入到2位小数没有任何问题。

我对错误130的个人看法。

我对错误130进行了所有的检查--有一个错误日志输出。

还有就是正常化。

在市场上,他们让我以最小的止损点为标准,分别+价差,(例如,我应该从ASK价格买入,并在BID价格检查最小的止损点)。

因此,它应该是 强迫用户的,如果一个交易者使用EA并设置了例如20点的止损,那么EA应该自动覆盖50点(MinStop + Spread),这是不正确的。交易者必须看到错误的130,并在自己的风险上纠正停止。

另一个选择--如果用户设置的止损低于最小值--禁止交易和修改,因为版主不允许专家顾问出现130的错误。

禁止交易 是错误的,止损和价差是浮动的,现在低于最低限度--那么就可以了。

我不认为用市场来做这样的事情是个好主意。

IMHO:错误130应该是,用户应该从服务器上看到第130个错误,而不是从专家顾问那里看到:"你的止损点低于最低点,纠正它"。

市场规则:不要跳过产生错误130的专家顾问--因为检查器在止损中放了1个点--嗯,这是一个失败。

一个相同的专家顾问版本可能通过也可能不通过。

我已经发布了一个版本--一切正常,过了一段时间,我看到EA打印了很多(只是止损小于最小值的事实),我迅速纠正了它,等了一周,直到他们开始检查,再次停滞了2周,因为在一些符号上又出现了130的错误。

IMHO - 许多服务器信息 - 不是错误,以及返回代码。而它的目的不是要通过各种技巧来避免,而是要让专家顾问能够做出决定。这是基于服务器对他/她的行动的反应而做出的决定。否则,它将只是一个愚蠢的玩具,不允许监测市场并根据与服务器的 "通信 "纠正其行动。

因此,在错误130上对主持人进行 "分面 "是矫枉过正的。我们必须深思熟虑:当专家顾问在第130个错误之后继续敲打服务器是一回事,而对其作出反应并改变其行动则是另一回事。为什么不允许我们做后者?难道仅仅是因为有人(版主)不想仔细看一下EA的工作?感觉就像看到了130--在婚姻中。EA很可能需要从服务器获得这样的响应来实现自己的逻辑,这并不重要,重要的是要直接拒绝它,而不要再去寻找。这就是它的工作原理吗?

 
Artyom Trishkin:

IMHO - 许多服务器信息不是一个错误,而是一个返回代码。而你需要它不是为了通过各种技巧来避免它,而是为了让专家顾问能够做出决定。这是基于服务器对他/她的行动的反应而做出的决定。否则,它将只是一个愚蠢的玩具,不允许跟随市场并在与服务器相互 "沟通 "的基础上纠正其行动。

所以,"强迫 "版主犯第130个错误,是一种矫枉过正的做法。我们需要深思熟虑:如果专家顾问在第130个错误后继续敲打服务器是一回事,但它对其作出反应并改变其行动又是另一回事。为什么不允许我们做后者?难道仅仅是因为有人(版主)不想仔细看一下EA的工作?感觉就像看到130个--在婚姻中。专家可能为了自己的逻辑需要服务器的这种响应,这并不重要,重要的是直接拒绝它,不要再看下去了。这就是它的工作原理吗?

这就是为什么我的EA一直在捕捉最小/最大运动,因此它不是用1个点的止损来冲击服务器,而是用正常的最小水平+点差,但点差是浮动的。因此,EA会猛击服务器,直到它返回一个正常的价差。

换句话说,在打开的那一刻,它检查min stop--重建它的值--然后它击中服务器。但如果你需要设置10个点的止损,你必须等待最小点差,并击败服务器。