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

 
Ihor Herasko:

对不起,你的代码中哪里讨论了StopLevel变量的值?在你引用的代码中,这个变量的值没有变化。止损和盈利值有变化。因此,如果你增加一次,你将无法将这些值恢复到初始值。因此,你会追逐大的止损和利润,而止损水平早已下降。

我不掌握许多经纪人(几十、几百)的信息。对于那些我必须处理的经纪商(因为客户在那里有账户),我看到的数字是2个点差。也许在某个地方有一个不同的价值。

在我看来,这从根本上说是经纪人提供信息的错误做法。有一个标准的机制来获得对止血带的限制。如果我们在请求时收到0,但实际上并不是0。然后根据你的需要,在每一个刻度上改变它,取决于价差值。如果我的经纪人有正确的止损水平值,那么我不能实时改变它。

我根据函数名称--OnInitLevels--做出了一个结论。它与一个单一的行动相关。

你是对的,我们的职能不相似,但意义是一样的。

当我改变内部变量时,外部变量保持不变,当止损点变大或变小时--那么所有的内部变量都被重新排列,一切都很好。

我将尝试MetakvotesDemo服务器的说法。

 
Vitalii Ananev:

我是这样做的

专家顾问有能力以3种方式调整止损。手动设置止损大小(StopLoss)或将其设置为零。

如果StopLoss等于0,它的大小是根据市场情况 计算的,但受StopLimit变量限制。

而在OnInit()中,这些参数被检查是否正确,因为在10点以下设置止损是没有意义的。

是的,但如果停止=8,像MetacvotesDemo服务器中那样呢?
 

我这样做了。

int OnInitLevels(string symToWorkmodify)
  {
   int stoplevel;
   stoplevel=SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL);
   double ask=SymbolInfoDouble(symToWorkmodify,SYMBOL_ASK);
   double bid=SymbolInfoDouble(symToWorkmodify,SYMBOL_BID);
   double point=SymbolInfoDouble(symToWorkmodify,SYMBOL_POINT);
   int SPREAD=(ask-bid)/point;
   if(stoplevel==0)stoplevel=SPREAD*2;
   if(lot<SymbolInfoDouble(symToWorkmodify,SYMBOL_VOLUME_MIN))lots=SymbolInfoDouble(symToWorkmodify,SYMBOL_VOLUME_MIN);else
   if(lot>SymbolInfoDouble(symToWorkmodify,SYMBOL_VOLUME_MAX))lots=SymbolInfoDouble(symToWorkmodify,SYMBOL_VOLUME_MAX);else lots=lot;
   if(StopLoss>0 && StopLoss<stoplevel)StopLosss=(int)stoplevel;else StopLosss=StopLoss;
   if(TakeProfit>0 && TakeProfit<stoplevel)TakeProfits=(int)stoplevel;else TakeProfits=TakeProfit;
   if(TrailingStop>0 && TrailingStop<stoplevel)TrallingStops=(int)stoplevel;else TrallingStops=TrailingStop;
   if(TakeProfitALL>0 && TakeProfitALL<stoplevel)TakeProfitsAver=(int)stoplevel;else TakeProfitsAver=(int)TakeProfitALL;
   if(TrailingStop>0 && TrailingStop<stoplevel)TrallingStops=(int)stoplevel;else TrallingStops=TrailingStop;

   return(0);
  }

我等着听主持人怎么说。

 
Vitalii Ananev:

我是这样做的

专家顾问有能力以3种方式调整止损。手动设置止损大小(StopLoss)或将其设置为零。

如果StopLoss等于0,它的大小是根据市场情况 计算的,但受StopLimit变量限制。

而在OnInit()中,这些参数被检查是否正确,因为在10点以下设置止损是没有意义的。

你不应该这样建议,你的检查中没有提到账户的交易条件,这些数字是来自天花板的。
 
Alexander Bereznyak:
你不能这样建议,你的检查没有提到账户上的交易条件,这些数字是来自天花板的。
它们是来自这里的天花板,我不打算在这里给你写专家顾问的全部代码。你是否同意我的方法取决于你,我不打算强迫你。
 
Vladislav Andruschenko:
是的,但如果stop = 8,例如像MetakwotsDemo服务器那样?
你是说止损=8吗?在这个例子中,我不是根据交易条件来设置最小止损。但基于权宜之计和EA中实施的交易策略。
 
Vitalii Ananev:
你的意思是停止水平=8吗?在这个例子中,我不是根据交易条件来设置最小止损 规模。但由于权宜之计和EA中实施的交易策略的原因。

是的,我明白,战略等等。

这与战略等问题无关。

当你在市场上投放EA时,他们会削减你的策略来检查它,所以他们设置的止损点不是策略的100点,而是1点!

原来是130的错误,这就是我所问的问题 :-)

 
Vitalii Ananev:
你的意思是停止水平=8吗?在这个例子中,我不是根据交易条件来设置最小止损。它是基于权宜之计和EA中实施的交易策略。
合理性可能在无意中与账户中的交易条件发生冲突
 
Vladislav Andruschenko:

是的,我明白,战略等等。

这与战略等问题无关。

当你在市场上投放EA时,他们会削减你的策略来检查它,所以他们设置的止损点不是策略的100点,而是1点!

原来是130的错误,这就是我所问的问题 :-)

如果止损水平是浮动的,那么要么像亚历山大建议的那样将其与价差挂钩,要么设置一些边界条件,在此条件下你不能设置止损 大小。
 
Vitalii Ananev:
这就是我所说的,如果止损水平是浮动的,那么要么像亚历山大建议的那样将其与价差挂钩,要么设置一些边界条件,低于这些条件你就不能设置止损 规模。

我检查了传播*2 - 让我们看看他们怎么说。