Нужна помощь в модернизации советника ММ функции

指定


стратегий в одном терминале может быть много

нужен ММ для (баланс - сумма всех рисков)


//Maximum amount of money to risk
double moneyToRisk = NormalizeDouble( (AccountBalance() - Total_Current_Risk() )* RiskInPercent / 100, 7);


Total_Current_Risk() {


calculates all potential losses of all opened and all pending orders
+
all swaps
+
all commissions


return (Total_Current_Amount_At_Risk)

}



double sqMMRiskFixedBalancePct(string symbol, int orderType, double price, double sl, double RiskInPercent, int decimals, double LotsIfNoMM, double MaximumLots, double multiplier, double sizeStep) {
   Verbose("Computing Money Management for order -  Risk fixed % of account balance");

   if(UseMoneyManagement == false) {
      Verbose("Use Money Management = false, MM not used");
      return (mmLotsIfNoMM);
   }
      
   symbol = correctSymbol(symbol);
   sl = NormalizeDouble(sl, (int) MarketInfo(symbol, MODE_DIGITS));
   
   double openPrice = price > 0 ? price : (orderType == OP_BUY ? sqGetAsk(symbol) : sqGetBid(symbol));
   double LotSize=0;

   if(RiskInPercent < 0 ) {
      Verbose("Computing Money Management - Incorrect RiskInPercent size, it must be above 0");
      return(0);
   }
   
   double PointValue = MarketInfo(symbol, MODE_TICKVALUE) / MarketInfo(symbol, MODE_TICKSIZE);    
   double Smallest_Lot = MarketInfo(symbol, MODE_MINLOT);
   double Largest_Lot = MarketInfo(symbol, MODE_MAXLOT);    
   double LotStep = MarketInfo(symbol, MODE_LOTSTEP);

   //Maximum amount of money to risk 
   double moneyToRisk = NormalizeDouble(AccountBalance() * RiskInPercent / 100, 7);
                                                                                                                                                       
   //Maximum drawdown of this order if we buy 1 lot 
   double oneLotSLDrawdown = NormalizeDouble(PointValue * MathAbs(openPrice - sl), 7);
   if(oneLotSLDrawdown > 0) {
  LotSize = moneyToRisk / oneLotSLDrawdown;
   }
   else {
  LotSize = 0;
   }

   LotSize = LotSize * multiplier;
   
   // round computed trade size 
   LotSize = roundDown(LotSize, sizeStep, decimals);

   //--- MAXLOT and MINLOT management

   Verbose("Computing Money Management - Smallest_Lot: ", DoubleToStr(Smallest_Lot), ", Largest_Lot: ", DoubleToStr(Largest_Lot),", Computed LotSize: ", DoubleToStr(LotSize));
   Verbose("Max money to risk: ", DoubleToStr(moneyToRisk), ", SL:", DoubleToStr(sl), ", One lot drawdown: ", DoubleToStr(oneLotSLDrawdown), ", Point value: ", DoubleToStr(PointValue));

   if(LotSize <= 0) {
      Verbose("Calculated LotSize is <= 0. Using LotsIfNoMM value: ", DoubleToStr(LotsIfNoMM), ")");
LotSize = LotsIfNoMM;
}
   
   if(LotSize > MaximumLots) {
      Verbose("LotSize is too big. LotSize set to maximal allowed value (MaximumLots): ", DoubleToStr(MaximumLots));
      LotSize = MaximumLots;
   }

   //--------------------------------------------

   if (LotSize < Smallest_Lot) {
      Verbose("Calculated LotSize is too small. Minimal allowed lot size from the broker is: ", DoubleToStr(Smallest_Lot), ". Please, increase your risk or set fixed LotSize.");
      LotSize = 0;
   }
   else if (LotSize > Largest_Lot) {
      Verbose("LotSize is too big. LotSize set to maximal allowed market value: ", DoubleToStr(Largest_Lot));
      LotSize = Largest_Lot;
   }

   return (LotSize);
}

ファイル:

応答済み

1
開発者 1
評価
(54)
プロジェクト
102
23%
仲裁
12
25% / 17%
期限切れ
13
13%
2
開発者 2
評価
(190)
プロジェクト
246
20%
仲裁
22
50% / 18%
期限切れ
0
仕事中
3
開発者 3
評価
(4)
プロジェクト
4
0%
仲裁
4
25% / 75%
期限切れ
1
25%
4
開発者 4
評価
(297)
プロジェクト
476
40%
仲裁
105
40% / 24%
期限切れ
81
17%
取り込み中
パブリッシュした人: 2 codes
類似した注文
Нужно создать торговый советник для МТ5 для автоматической торговли золотом, серебром и нефти, газа. Торговля будет происходить на основании данных индикаторов, корреляции данных инструментов. Должна быть панель управления с настройками на английском языке
AO - при пересечении уровня 0 в какую-либо сторону открывать соответствующий ордер. RSI - при пересечении отметки 30 пунктов снизу открывать ордер на покупку, при пересечении отметки 70 пунктов сверху открывать ордер на продажу. Стратегии не зависят друг от друга. Предустановка размеров ТП и СЛ, предустановка уровней ТС
Нужно разработать торгового советника для MetaTrader 5. Логика стратегии: работа на M1 (таймфрейм изменяемый) уровни Fibonacci задаются вручную (0 и 100) вход осуществляется в зоне 0–38.2 Fibonacci используется RSI BUY — RSI ≤ 30 SELL — RSI ≥ 70 дополнительный сигнал — пересечение RSI и его скользящей средней Функции управления позицией: Stop Loss за сигнальной свечой Break Even два типа Trailing Stop (обычный и
1. Общая концепция Советник предназначен для автоматического обнаружения ценовых волн, их визуализации с помощью инструмента «Сетка Фибоначчи» и циклической торговли на откатах. Основная особенность — мультиволновой режим: советник должен одновременно отслеживать и отрисовывать все движения, подходящие под фильтр размера. 2. Логика поиска и визуализации волн Динамическое натяжение: Советник сканирует рынок на глубину
Требуется создать советник на основе разворотных паттернов, используя дополнительные индикаторы такие как скользящее среднее, отклонение от скользящей средней, угол наклона скользящей средней. Возможно будет добавлено что то еще по ходу работы
к примеру 10 стратегий выстреливают одновременно в одну и ту же милисекунду при открытие бара надо их сделать последовательными один за другим, с проверкой, что предыдущий ордер был открыт и модифицирован SL TP оредра могут быть отложенные и маркет пока один ордер исполняется другие ждут в очереди так как используется ММ настоящий баланс double Total_Current_Risk() { double res = 0; for (int i = 0; i <

プロジェクト情報

予算
30 - 50 USD