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

 
Vladislav Andruschenko:

там спред учитывается, спред равнялся 8 пунктов. + мин стоп 18=26 пунктов

вот на 27 все ок.  

и далее, если человеку нужно поставить стоплосс на 100 пунктов это значит что он потеряет 100 пунктов, значит для БАЙ от цены АСК нужно считать 100 пунктов.  

а для СЕЛЛ от БИД соответственно.

Я не говорил, где ставить СЛ. Я говорил, какую цену использовать при проверке.
 
Andrey Khatimlianskii:
Я не говорил, где ставить СЛ. Я говорил, какую цену использовать при проверке.
Спасибо. Этот вариант также в зачёт. 
 
Taras Slobodyanik:

так а как не гадать? если брокер дает невреный стоплевел? %)

...понятно, что после  всех проверок  уже угадывать надо, чтобы узнать минимальный отступ

В макете гадать нельзя. Нужно все знать. Заранее. Чтоб без единой ошибки. Хотя считаю что ошибки с сервера это не ошибка. А предупреждение. 
 

У меня нет опыта продажи советников в маркете, но после прочтения всех мнений и свои 5 копеек вставлю.

Можно попробовать в меню сделать выбор нескольких вариантов

1 Вариант, сделать по умолчанию. Это когда мин стоп всецело определяет MODE_STOPLEVEL. Обязательно обращаемся за свежим STOPLEVEL перед каждым действием с ордером.

2 Вариант, если MODE_STOPLEVEL == 0, то стоп левел спреду.

3 Вариант ставим вручную свой стоп левел, или некий коэффициент умноженый на спред.

 

Обязательно ввести контроль. Если советник тестируется или оптимизируется, то стоплевел не может быть меньше чем спред. Я думаю, что это позволит пройти маркет при любом стресс тесте, в том числе и и с Стоплос = 1.

 
Dmytro Zelenskyy:

У меня нет опыта продажи советников в маркете, но после прочтения всех мнений и свои 5 копеек вставлю.

Можно попробовать в меню сделать выбор нескольких вариантов

1 Вариант, сделать по умолчанию. Это когда мин стоп всецело определяет MODE_STOPLEVEL. Обязательно обращаемся за свежим STOPLEVEL перед каждым действием с ордером.

2 Вариант, если MODE_STOPLEVEL == 0, то стоп левел спреду.

3 Вариант ставим вручную свой стоп левел, или некий коэффициент умноженый на спред.

 

Обязательно ввести контроль. Если советник тестируется или оптимизируется, то стоплевел не может быть меньше чем спред. Я думаю, что это позволит пройти маркет при любом стресс тесте, в том числе и и с Стоплос = 1.

к сожалению нет.

В маркете все должно идти автоматом.

теперь вот новый прикол на золоте, там котировки 3 значные, но последний знак нужно округлять тоесть последняя цифра должна быть 0,

так вот при округлении он округляет по математическому правилу, и не в ту сторону которая позволяет обойти правило мин стопа.

 

понятное дело что можно тупо поставить - через проверку маркета ставить все уровни в 10 стоплевелов - так сказать чтоб модераторы пропустили, но хотелось бы как то по нормальному справится.

 

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

 
Vladislav Andruschenko:

к сожалению нет.

В маркете все должно идти автоматом.

теперь вот новый прикол на золоте, там котировки 3 значные, но последний знак нужно округлять тоесть последняя цифра должна быть 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:

Тоже столкнулся с проблемой тестирования на золоте и серебре, написал такую функцию

 

пример использования 

на золоте на сервере мт5 - 3 знака после запятой, но стопы и цену открытия надо ставить на !!!! 2 знака после запятой, т.е. округлять не до 3 знака а до 2 знака, и там еще будут приколы у Вас с мин стопом на золоте и серебре,

типо так:

   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);

 где Rounding= для золота мт5 это 1. 

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

на мт4 таких приколов нет - там 2 знака после запятой и округляешь до 2 знака без проблем.

 

 

лично мое мнение по поводу ошибки 130:

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

есть также нормализация.

 В маркете заставили делать нормализацию до мин стопа, соответственно + спред, (ибо ставить надо например на бай от цены АСК а вот проверять на мин стоп по цене БИД)

так вот, это нужно сделать принудительно для пользователя, если трейдер - пользуется советником и ставит например стоплосс 20 пунктов, то советник должен автоматом перебить его на 50 пунктов (минстоп + спред) что как бы неправильно. Трейдер сам должен видать ошибку 130 и сам поправлять стопы на свой страх и риск.

Другой вариант - если пользователь установил стоплосс меньше минимального - запрещать торговлю и модификацию? потому что модераторы не пропустят эксперта с ошибкой 130

Но запрещать торговлю - это неправильно, стоп и спред плавающий, сейчас он меньше минимального - потом все ок.

 

Те кто разрабатывают экспертов и постят в маркет - меня поймут.

ИМХО: ошибка 130 должна быть и пользователь должен видеть 130 ошибку от сервера, а не от эксперта мол : "Ваш стоп меньше минимального поправьте". 

Правило маркета: не пропускать эксперта который выдал ошибку 130 - потому что проверяющий поставил 1 пункт в стоплоссе - ну это провал.

при чем одна и та же версия эксперта может пройти может не пройти.

Запостил версию - все ок,  через время увидел что эксперт много принтит (как раз о том, что стоплосс меньше минимального) быстро исправил - ждал неделю пока начнут проверять, опять на 2 недели застой потому что опять на каком то символе вылезла 130 ошибка 

 
Vladislav Andruschenko:

на золоте на сервере мт5 - 3 знака после запятой, но стопы и цену открытия надо ставить на !!!! 2 знака после запятой, т.е. округлять не до 3 знака а до 2 знака, и там еще будут приколы у Вас с мин стопом на золоте и серебре,

типо так:

 где Rounding= для золота мт5 это 1. 

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

на мт4 таких приколов нет - там 2 знака после запятой и округляешь до 2 знака без проблем.

 

 

лично мое мнение по поводу ошибки 130:

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

есть также нормализация.

 В маркете заставили делать нормализацию до мин стопа, соответственно + спред, (ибо ставить надо например на бай от цены АСК а вот проверять на мин стоп по цене БИД)

так вот, это нужно сделать принудительно для пользователя, если трейдер - пользуется советником и ставит например стоплосс 20 пунктов, то советник должен автоматом перебить его на 50 пунктов (минстоп + спред) что как бы неправильно. Трейдер сам должен видать ошибку 130 и сам поправлять стопы на свой страх и риск.

Другой вариант - если пользователь установил стоплосс меньше минимального - запрещать торговлю и модификацию? потому что модераторы не пропустят эксперта с ошибкой 130

Но запрещать торговлю - это неправильно, стоп и спред плавающий, сейчас он меньше минимального - потом все ок.

 

Те кто разрабатывают экспертов и постят в маркет - меня поймут.

ИМХО: ошибка 130 должна быть и пользователь должен видеть 130 ошибку от сервера, а не от эксперта мол : "Ваш стоп меньше минимального поправьте". 

Правило маркета: не пропускать эксперта который выдал ошибку 130 - потому что проверяющий поставил 1 пункт в стоплоссе - ну это провал.

при чем одна и та же версия эксперта может пройти может не пройти.

Запостил версию - все ок,  через время увидел что эксперт много принтит (как раз о том, что стоплосс меньше минимального) быстро исправил - ждал неделю пока начнут проверять, опять на 2 недели застой потому что опять на каком то символе вылезла 130 ошибка 

ИМХО - многие сообщения сервера - не ошибка, а код возврата. И нужен он не для того, чтобы всяческими уловками его избегать, а для того, чтобы эксперт мог принимать решения. Именно решения на основе ответа от сервера на свои действия. По-другому выйдет просто тупая игрушка, не позволяющая следить за рынком и корректировать свои действия на основе взаимного "общения" с сервером.

Так что "фас" модераторов на 130-ю ошибку - перегиб. Нужно подходить к вопросу вдумчиво: если советник продолжает тупо долбить сервер после 130-й ошибки - это одно дело, совсем другое - когда он реагирует на неё, меняя свои действия. Почему второе нам запрещено делать? Просто потому, что кто-то (модератор) не хочет внимательнее смотреть на работу эксперта? Ощущение, что увидели 130 - в брак. Не важно, что эксперту вполне вероятно нужен такой ответ от сервера для своей логики, важно просто забраковать, и дальше не глядеть. Так что-ли?

 
Artyom Trishkin:

ИМХО - многие сообщения сервера - не ошибка, а код возврата. И нужен он не для того, чтобы всяческими уловками его избегать, а для того, чтобы эксперт мог принимать решения. Именно решения на основе ответа от сервера на свои действия. По-другому выйдет просто тупая игрушка, не позволяющая следить за рынком и корректировать свои действия на основе взаимного "общения" с сервером.

Так что "фас" модераторов на 130-ю ошибку - перегиб. Нужно подходить к вопросу вдумчиво: если советник продолжает тупо долбить сервер после 130-й ошибки - это одно дело, совсем другое - когда он реагирует на неё, меняя свои действия. Почему второе нам запрещено делать? Просто потому, что кто-то (модератор) не хочет внимательнее смотреть на работу эксперта? Ощущение, что увидели 130 - в брак. Не важно, что эксперту вполне вероятно нужен такой ответ от сервера для своей логики, важно просто забраковать, и дальше не глядеть. Так что-ли?

у меня эксперт ловит мин движения поэтому он долбит сервер, но не с 1 пунктом стоплосса, а с нормальный мин уровень+спред, но спред плавающий. Поэтому советник долбит сервер пока тот не вернет нормальный. не расширенный спред. 

другими словами, в момент открытия он проверяет на мин стоп - перестраивает свои значения - потом долбит сервер. Но если надо поставить 10 пунктов стопа, надо дождаться мин спреда и долбить сервер.