Проверка минимального стопа в советниках, публикуемых в маркете. - страница 3

 
Ihor Herasko:

Прошу прощения, но не увидел, где в Вашем коде речь идет о значении переменной StopLevel? В том коде, который Вы привели, нет изменения значения такой переменной. Есть изменение значений стопа и профита. В итоге, один раз увеличив их, невозможно будет привести эти величины к начальным показателям. Так и будете гонять большие стопы, профиты в то время, как Stop Level уже давно уменьшился.

Не владею информацией по множеству брокеров (десятки, сотни). С теми брокерами, с которыми приходится иметь дело (т. к. у клиентов там счета), вижу цифру 2 спреда. Возможно, где-то есть другая величина.

На мой взгляд, это принципиально неправильный подход брокера по предоставлению информации. Есть стандартный механизм получения ограничений о стоплевеле. Будьте добры его и используйте. А то по запросу получаем 0, а на самом деле не ноль. Меняйте его тогда уже на каждом тике, в зависимости от величины спреда так, как нужно. Поэтому реал-счета завожу только у тех брокеров, которые правильно отображают значение Stop Level.

Сделал вывод на основании названии функции - OnInitLevels. Ассоциируется с однократным действием. 

тут Вы правы, функции у нас не похожи, но смысл один,

есть внешняя переменная и есть внутренняя переменная. я меняю внутреннюю переменную, внешняя остается одна, и когда стоп пляшет больше меньше - то все внутренние переменные перестраиваются, все ок.

а вот мин стоп = присваивать спред *2 попробую что скажет МетаквотсДЕмо сервер.  

 
Vitalii Ananev:

Я делал так

 В советнике есть возможность регулировать стоп 3-мя способами. Вручную задать размер стопа (StopLoss) или установить его равным нулю.

Если StopLoss равен нулю то его размер вычисляется исходя из рыночных условий но ограничивается переменно StopLimit.

А в OnInit() проверяются эти параметры на корректность, так как менее 10 пунктов ставить стоп нет смысла. 

да но если стоп = 8 например как у МетаквотсДемо сервера? 
 

сделал так

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 равен нулю то его размер вычисляется исходя из рыночных условий но ограничивается переменно StopLimit.

А в OnInit() проверяются эти параметры на корректность, так как менее 10 пунктов ставить стоп нет смысла. 

такое предлагать нельзя, в ваших проверках нет ни какой привязки к торговым условиям на счете, цифры с потолка
 
Alexander Bereznyak:
такое предлагать нельзя, в ваших проверках нет ни какой привязки к торговым условиям на счете, цифры с потолка
Это тут они с потолка, не буду же я вам весь код советника сюда писать. Это ваше дело соглашаться с моим подходом к данному вопросу или нет, я его вам не навязываю.
 
Vladislav Andruschenko:
да но если стоп = 8 например как у МетаквотсДемо сервера? 
Вы имеете в виду стоп левел = 8? В примере я устанавливаю минимальный размер стоп лосс не исходя из торговых условий. А из соображения целесообразности и торговой стратегии реализованной в эксперте.  
 
Vitalii Ananev:
Вы имеете в виду стоп левел = 8? В примере я устанавливаю минимальный размер стоп лосс не исходя из торговых условий. А из соображения целесообразности и торговой стратегии реализованной в эксперте.  

да это все понятно, стратегия и так далее

речь не идет о стратегии и так далее

когда ВЫ ставите эксперта в маркете - вашу стратегию режут  для проверки ставят стоп не 100 пунктов как для стратегии а 1!!!

получается ошибка 130, я про это спрашивал :-)  

 
Vitalii Ananev:
Вы имеете в виду стоп левел = 8? В примере я устанавливаю минимальный размер стоп лосс не исходя из торговых условий. А из соображения целесообразности и торговой стратегии реализованной в эксперте.  
целесообразность может случайно войти в противоречие с торговыми условиями на счете
 
Vladislav Andruschenko:

да это все понятно, стратегия и так далее

речь не идет о стратегии и так далее

когда ВЫ ставите эксперта в маркете - вашу стратегию режут  для проверки ставят стоп не 100 пунктов как для стратегии а 1!!!

получается ошибка 130, я про это спрашивал :-)  

Так я про это и говорил если стоп левел плавающий то или привязка к спреду как предложил Александр или установить некие граничные условия ниже которых нельзя установить размер стоп лоса.
 
Vitalii Ananev:
Так я про это и говорил если стоп левел плавающий то или привязка к спреду как предложил Александр или установить некие граничные условия ниже которых нельзя установить размер стоп лоса.

сделал пока проверку на спред*2 - посмотрим что скажут. 

Причина обращения: