Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 56

 

продолжаю дорабатывать :

 

если условие истинно

открыть ордер 1

если цена пошла куда надо или нет

открыть ордер2

LastLot= order 2   (или номер больше)

LastPrice= order2  (или номер больше)

если цена пошла куда надо или нет... 

 LastLot= order 3   (или номер больше)

LastPrice= order 3  (или номер больше)

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

Механизм привязки последнего первого или предпоследнего к остальным  оказалася неэффективен так как их количество меняется вместе с номерами.

результат должен быть примерно "если какой то из ордеров данной серии закрылся закрыть все остальные" 

отсчет серии - первый ордер текущего направления(другого типа не откроет) тут или какой то дополнительный идентификатор сделать или другие способы привязки. Ключ - первый ордер открыт согласно условиям, остальные вспомогательная доливка.

есть мысли? 

 
trader781:

продолжаю дорабатывать :

 

если условие истинно

открыть ордер 1

если цена пошла куда надо или нет

открыть ордер2

LastLot= order 2   (или номер больше)

LastPrice= order2  (или номер больше)

если цена пошла куда надо или нет... 

 LastLot= order 3   (или номер больше)

LastPrice= order 3  (или номер больше)

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

Механизм привязки последнего первого или предпоследнего к остальным  оказалася неэффективен так как их количество меняется вместе с номерами.

результат должен быть примерно "если какой то из ордеров данной серии закрылся закрыть все остальные" 

отсчет серии - первый ордер текущего направления(другого типа не откроет) тут или какой то дополнительный идентификатор сделать или другие способы привязки. Ключ - первый ордер открыт согласно условиям, остальные вспомогательная доливка.

есть мысли? 

Сумбурно, непонятно. Постарайтесь более ясно излагать свои мысли.

Вот это вот: "если цена пошла куда надо или нет - открыть ордер2" - это как понять, что в любом случае "открыть ордер2"?

И дальше таких "или" только больше...

А чтобы не было  вопросов типа "Как связать его с остальными при неизвестном количестве" - так сначала количество и выяснять надо.

 
Vitalie Postolache:

Сумбурно, непонятно. Постарайтесь более ясно излагать свои мысли.

Вот это вот: "если цена пошла куда надо или нет - открыть ордер2" - это как понять, что в любом случае "открыть ордер2"?

И дальше таких "или" только больше...

А чтобы не было  вопросов типа "Как связать его с остальными при неизвестном количестве" - так сначала количество и выяснять надо.

ок, с цифрами

курс EURUSD=1.10000

отдана команда открыть ордер  на покупку согласно ТЗ по текущей(уже написано)

если  EURUSD=1.10200 долить в покупку (уже написано)

если EURUSD=1.09800 долить в покупку  (уже написано)

 и так далее с шагом 200

если  какой - либо из этих ордеров закроется (стопы и тейки стоят, но не на всех)

закрыть всю сетку 

ищу способ идентифицировать сетку
 
trader781:

ок, с цифрами

курс EURUSD=1.10000

отдана команда открыть ордер  на покупку согласно ТЗ по текущей(уже написано)

если  EURUSD=1.10200 долить в покупку (уже написано)

если EURUSD=1.09800 долить в покупку  (уже написано)

 и так далее с шагом 200

если  какой - либо из этих ордеров закроется (стопы и тейки стоят)

закрыть всю сетку 

ищу способ идентифицировать сетку
Комментарии с номером ордера можно добавлять. А если вся серия ордеров одного типа - то и просто пересчитать их да зафиксировать количество.
 
Vitalie Postolache:
Комментарии с номером ордера можно добавлять. А если вся серия ордеров одного типа - то и просто пересчитать их да зафиксировать количество.

я думал насчет комментариев, но судя по отзывам повар считает их несъедобными и либо удаляет либо меняет на свои

а по поводу пересчитать, то есть мне нужно считать и фиксировать количество при добавлении очередного?

 
trader781:

а по поводу пересчитать, то есть мне нужно считать и фиксировать количество при добавлении очередного?

Да. И если количество с прошлого раза уменьшилось - закрывать все оставшиеся. 

Можно ещё мониторить закрытые ордера в истории. И как появится свежезакрытый ордер, соответствующий заданным характеристикам - закрывать серию.

Можно ещё не задавать ТП/СЛ в ордере, а считать общие ТП/СЛ в советнике на всю серию. И по ним закрывать серию. Преимущества - ДЦ не видит уровни останова, уходит проблема с поиском остатков серии, если на один ордер сработал ТП или СЛ.
 
Доброго дня ..Всех с Новым годом ..Желанию всех Благ и процветания ..В этом коде нужно изменить пожалуйста чтобы расчет лота происходил по возможному максимуму с учетом плеча счета 
//+------------------------------------------------------------------+
double volume(string symbol,double risk,double sl)
  {
   double lot=0.0;
   double procent=0.0;
   double balans=0.0;
   double tc = SymbolInfoDouble(symbol,SYMBOL_TRADE_CONTRACT_SIZE);
   double tv = SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE);
   double ts=SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE);
   double point=SymbolInfoDouble(symbol,SYMBOL_POINT);

   if(Type_Balanse==Balance) balans=AccountInfoDouble(ACCOUNT_BALANCE);
   if(Type_Balanse==Equity) balans=AccountInfoDouble(ACCOUNT_EQUITY);
   if(Type_Balanse==FreeMargin) balans=AccountInfoDouble(ACCOUNT_FREEMARGIN);

   procent=(balans/100.0)*risk;

   switch((int)MarketInfo(symbol,MODE_PROFITCALCMODE))
     {
      case 0: if(sl!=0 && tv!=0) lot=procent/(sl*tv);break;
      case 1: if(sl!=0 && point!=0 && tc!=0) lot=procent/(sl*point*tc);break;
      case 2: if(sl!=0 && point!=0 && tv!=0 && ts!=0) lot=procent/(sl*point*(tv/ts));break;
     }
   return(NormalizeVolume(symbol,lot));
  }
 
Ну хорошо спрошу на простом языке .Как прописать  в советнике автоматический расчет лота в зависимости от плеча ..Скажем плечо 1:50 депозит 3000..
 
Movlat Baghiyev:
Ну хорошо спрошу на простом языке .Как прописать  в советнике автоматический расчет лота в зависимости от плеча ..Скажем плечо 1:50 депозит 3000..

 Попробуйте вот так:

void OnTick()
{
  Comment( cLot(100) );
}
//===============================================================================================
//------------------------------------ Расчет лота по риску ------------------------------------+
//===============================================================================================
double cLot(double Percent=0) {
double Free=AccountFreeMargin(),
        One_Lot=MarketInfo(_Symbol,MODE_MARGINREQUIRED),
        Min_Lot=MarketInfo(_Symbol,MODE_MINLOT),
        cStep=MarketInfo(_Symbol,MODE_LOTSTEP),
        Lots_New=0;
if(Percent > 100) {
    Percent = 100;
  }
  if(Percent == 0) {
    Lots_New = 0;
     return(0);
   } else {
    Lots_New = MathFloor(Free*Percent/100/One_Lot/cStep)*cStep;
   }
  if(Lots_New < Min_Lot) {
    Lots_New = Min_Lot;
  }
  if(Lots_New*One_Lot > Free) {
    return(0);
  }
   return(NormalizeDouble(Lots_New,LotDigit()));
}
//===============================================================================================
//-------------------- Кол-во знаков после точки в значении торгового лота ---------------------+
//===============================================================================================
int LotDigit(){
  double lotStep = MarketInfo(_Symbol,MODE_LOTSTEP);
return((int)MathCeil(MathAbs(MathLog(lotStep)/MathLog(10))));
}
 
Извините мне нужно что был какой то выбор % риска  .Мне просто тупо  чтобы  сразу открывался самый возможный лот с шагом вплоть до 0.01 
Причина обращения: