Нужен скрипт, который рассчитывает размер открываемой позиции на бай и на селл.

 

Здравствуйте. Скажите, пожалуйста, есть ли у кого скрипт, который рассчитывает размер открываемой позиции (на бай и на селл) таким образом – есть, например, у меня на счету 3750 долл., чтобы мог внести в скрипт значения, что на каждую 1000 долл., рассчитан лот 0.1, т.е. в данном случае, лот открываемых ордеров автоматически был равен 0.3 (и по рынку, и отложенники). Когда же сумма, например, превысит 4000 долл., то лот открываемых ордеров автоматически был равен 0.4. Если депозит упал до уровня менее 3000 долл., то лот открываемых ордеров автоматически был равен 0.2. Только надо, чтобы мог именно задавать значения, что на такую-то сумму рассчитан такой-то лот. И чтобы минимальный допустимый шаг был равен 0.01 лота.

Товарищи программисты, помогите, пожалуйста! Тем более, такой скрипт было бы здорово выложить в Code Base.

Заранее благодарен.

 

А что в Code Base такого разве нет? В любом эксперте посмотрите блок определения размера лота. Как пример:

//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double LotsOptimized()
  {
   double lot=Lots;
   int    orders=HistoryTotal();     // history orders total
   int    losses=0;                  // number of losses orders without a break
//---- select lot size
   lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
//---- calcuulate number of losses orders without a break
   if(DecreaseFactor>0)
     {
      for(int i=orders-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
         if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;
         //----
         if(OrderProfit()>0) break;
         if(OrderProfit()<0) losses++;
        }
      if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
     }
//---- return lot size
   if(lot<0.1) lot=0.1;
   return(lot);
  }

Это простой, а вот покруче :

//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double LotsOptimized()
  {
   double Lot=Lots;
   int    orders=OrdersHistoryTotal();     // history orders total
   int    losses=0;                  // number of losses orders without a break
   int    winses=0;                  // number of winses orders without a break
   int    i;
//=====================================Select lot size======================================
//   Lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/(MarketLotSize/AccountLeverage()),1);
   Lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/(MarketLotSize/MarketLeverage),2);
//======================================= calcuulate number of losses orders without a break      
      for(i=orders-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
         if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL || 
         (OrderMagicNumber()!=MAGICM1 && OrderMagicNumber()!=MAGICH1 && OrderMagicNumber()!=MAGICH4 && OrderMagicNumber()!=MAGICD1 &&
          OrderMagicNumber()!=MAGICSM1 && OrderMagicNumber()!=MAGICSH1 && OrderMagicNumber()!=MAGICSH4 && OrderMagicNumber()!=MAGICSD1)) continue;
//===========================================================        
         if(OrderProfit()>0) break;
         else losses++; 
        }
//======================================= calcuulate number of wins orders without a break      
      for(i=orders-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
         if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL || 
         (OrderMagicNumber()!=MAGICM1 && OrderMagicNumber()!=MAGICH1 && OrderMagicNumber()!=MAGICH4 && OrderMagicNumber()!=MAGICD1 &&
          OrderMagicNumber()!=MAGICSM1 && OrderMagicNumber()!=MAGICSH1 && OrderMagicNumber()!=MAGICSH4 && OrderMagicNumber()!=MAGICSD1)) continue;
//===========================================================        
         if(OrderProfit()<0) break;
         else winses++; 
        }
//==========================================================        
/**/     if(losses>1) 
         {  
            Lot=NormalizeDouble(Lot-Lot*losses/DecreaseFactor,2); 
            TradingStatus=-1;
            TrailingStep=TTrailingStep;
            TrailingStop=TTrailingStop;
 
//            UseScalper  = false;
            UseLossless = true;
            UseReverce  = true;
 
            if(losses>2)
             {
               Lot=NormalizeDouble(Lot-Lot*losses/DecreaseFactor,2); 
               TradingStatus=-2;
               TrailingStep=TTrailingStep-MathRound(Lot);
               TrailingStop=TTrailingStop-MathRound(Lot);
//               UseScalper  = false;
               UseLossless = true;
               UseReverce  = true;
 
             }
         }
      else 
         {
            if(winses>2)
             {
               UseReverce  = true;   
               TrailingStep=TTrailingStep-MathRound(Lot);
               TrailingStop=TTrailingStop-MathRound(Lot); 
               TradingStatus=2;
 
             }
            else
             {
               UseReverce  = true;               
               TrailingStep=TTrailingStep+MathRound(Lot);
               TrailingStop=TTrailingStop+MathRound(Lot); 
               TradingStatus=1;
             }
            
 
         }
 
 
 
 
//            TrailingStep=TTrailingStep;
//            TrailingStop=TTrailingStop;
//=============================== return lot size================================
   if(Lot<MarketMinLot) Lot=MarketMinLot;
   if(MaximumLots!=0 && Lot>MaximumLots ) Lot=MaximumLots;
   if(Lot>MarketMaxLot)Lot=MarketMaxLot;
   return(Lot);
  }
 

Спасибо, конечно...

Вам, как знающему программное решение вопроса, труда не составляет...

Но, учитывая, что я полный ноль в программировании, думаю, что даже с этим куском, будут проблемы. Вы можете выложить уже готовый скрипт?

Выложите, пожалуйста, уже готовый скрипт. Готового скрипта точно нет в Code Base. Многим чайникам окажете услугу.

 
Готовый код чего? Всего эксперта? Возьмите из примеров эксперт Moving Average и экспериментируйте, первый кусок кода из него.
 
Cronex:
Готовый код чего? Всего эксперта? Возьмите из примеров эксперт Moving Average и экспериментируйте, первый кусок кода из него.

Странный народ, однако, большинство программистов...

Чайник просит такой-то скрипт, который для программиста как одна семечка. И вместо того, чтобы просто дать этот скрипт... или не дать и вообще промолчать, начинает умничать... показывать, что он знает... Нафиг Вам это надо (извините за выражение)? Самоудовлетворение получаете? И так же уже дал понять, что не смогу разобраться с этим куском кода. И не скрываю этого. И Вы это прекрасно поняли. Нет же - продолжаете умничать. Вы лучше свой ум направьте на разработку стратегии или её усовершенствование... Вам больше пользы будет.

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

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

 
Cronex:
Готовый код чего? Всего эксперта? Возьмите из примеров эксперт Moving Average и экспериментируйте, первый кусок кода из него.
Вот сюда идите и там умничайте - Построение торговой системы с использованием цифровых фильтров НЧ.
 

Блин, что за наезд? Вам нужен был код, пример Вы получили .... Если Вы не собираетесь разбираться и делать что-то самостоятельно, то Вам действительно лучше заказать.

Кстати Вам здесь никто и ничего не должен. Ожидать что все просто бросились выполнять Ваше пожелание не стоит.

 
Cronex:

Блин, что за наезд? Вам нужен был код, пример Вы получили .... Если Вы не собираетесь разбираться и делать что-то самостоятельно, то Вам действительно лучше заказать.

Кстати Вам здесь никто и ничего не должен. Ожидать что все просто бросились выполнять Ваше пожелание не стоит.


Где Вы увидели слово "код" в моей просьбе? Его нет. А разбираться... к сожалению, не собираюсь, т.к. разбор нужно делать с самых азов. Т.к. совершенно ничего не знаю.

И не надо наговаривать, что считаю, что кто-то что-то должен. Этого тоже нет в моей ПРОСЬБЕ. И старался просьбу свою озвучить достаточно вежливо. Странно, что Вы не заметили этого всего, и продолжаете непонятный диалог-разъяснения. Если не хотите помочь, не надо. ПРОСЬБА не относится именно к Вам. Не надо переживать. Может и встретится добрый человек, и выложит здесь такой скрипт. Вы же не думаете, что здесь все такие же демагоги как Вы. Есть и хорошие люди.

А, если уж никто не выложит, закажу. В этом тоже нет ничего страшного. Просто, опять-таки, сужу по себе, повторюсь: будь у меня возможность сделать такой скрипт, помог бы человеку.

 
А что скрипт должен делать? Выводить в ввиде комментария на график размер лота?
 
Lukyanov:
А что скрипт должен делать? Выводить в ввиде комментария на график размер лота?

Спасибо Вам за ответ. Чечтно говоря, хотел чтобы скрипт автоматически устанавливал необходимый размер лота уже в вызываемом окне ордера, чтобы не приходилось туда самому его вписывать. Просто бывает, что забываю лот корректировать, поэтому и решил, чтобы скрипт сам это отслеживал.
 
Смешной пошел народ, однако.
Причина обращения: