[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 236

 
Roman.:

Правой клавишей мыши кликаете на серый цвет индюка в терминале, далее в меню - "изменить" кликаете уже лев. мышью, далее в метаэдиторе компилите, далее перезагружаете терминал и радуетесь жизни...:-)


Не помогло. Все проделал, терминал перезагрузил, увы.

Исходник, кажется тут вообще ни причем, программа моя.

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

В общем, если никто с таким не сталкивался, то хрен с ним. Забуду это имя и нет проблем.

 
ramses:


//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{

if (OrdersTotal()>0)
{ <-- эта скобка лишняя.

 
DhP:

Маржа для ордера в 1 лот равна:

Далее разберетесь.

И еще надо проверить, хватит ли свободных средств:

А где же значения от AccountFreeMarginMode()? Которые могут быть равны 0, 1, 2, 3, 4 (кажется).


Вот моя функция по определению размера лота, но я так понял, что я не учел AccountFreeMarginMode()

double GetLots() {
   double lot;
   double Step   =MarketInfo(Symbol(),MODE_LOTSTEP);
   if(MoneyManagement) {
      RefreshRates();                              // Обновление данных
      double
         TickValue = MarketInfo(Symbol(),MODE_TICKVALUE),
         Min_Lot=MarketInfo(Symbol(),MODE_MINLOT),           // Миним. колич. лотов 
         Max_Lot=MathFloor(MarketInfo(Symbol(),MODE_MAXLOT)),// Макс. колич. лотов 
         Free   =GetFreeMargin()-NotUsedPart,                // Свободн средства
         One_Lot=MarketInfo(Symbol(),MODE_MARGINREQUIRED);   // Стоимость 1 лота
      //Print("Step=",Step);
      //GetFreeMargin();
      stimul = LossPercent*0.01;
      if (Free > MaxUsedPart) Free = MaxUsedPart;
      double free = AccountBalance() - AccountMargin();
      Print("free = ",free);
      if (Free > free) Free = free;
      lot = stimul*Free/(StopLoss*Cor*TickValue);
      if (lot >= 0) {
         if (stimul == 3*LossPercent*0.01) {
            Print("После убытка ЛОТ в пределах % утроенного риска от SL и равен ",MathFloor(lot/Step)*Step," или ",100*stimul,"% баланса");
         } else {
            if (stimul != LossPercent*0.01) {
               Print("После убытка ЛОТ в пределах % максимального риска от SL и равен ",MathFloor(lot/Step)*Step," или ",100*stimul,"% баланса");
             } else {
               Print("ЛОТ в пределах заданного % риска от SL и равен ",MathFloor(lot/Step)*Step," или ",100*stimul,"% баланса");
             }
         }

      }
      if (lot > Max_Lot && lot >= 0) {
         lot = Max_Lot;
         Print("ЛОТ ограничен максимумом и равен ",MathFloor(lot/Step)*Step);
      }
      //Print(lot,"*",One_Lot,"=",lot*One_Lot," > ",Free);
      //Print("AccountFreeMarginMode=",AccountFreeMarginMode()," AccountFreeMargin=",AccountFreeMargin()," Free=",Free);
      if (lot*One_Lot > stimul*Free && lot >= 0) {
         lot =stimul*Free/One_Lot;
         Print("ЛОТ ограничен свободными средствами и равен ",MathFloor(lot/Step)*Step);
      }
      int level=AccountStopoutLevel(); ///// ТОЛЬКО ЕСЛИ ВЫРАЖЕН В ПРОЦЕНТАХ!!!
      if (AccountStopoutMode() == 0 && lot >= 0) {
         if (lot > Free/(level*One_Lot/100.0 + StopLoss*Cor*TickValue)) {
            lot = Free/(level*One_Lot/100.0 + StopLoss*Cor*TickValue);
            Print("ЛОТ ограничен уровнем StopOut и равен ",MathFloor(lot/Step)*Step," или ",MathRound(100*lot*StopLoss*Cor*TickValue/Free),"% баланса");
         }
      }   
      if (lot < Min_Lot && lot >= 0) {
         if (2*lot > Min_Lot) {
            lot=Min_Lot;               // Не меньше минимальн
            Print("ЛОТ ограничен минимумом и равен ",MathFloor(lot/Step)*Step);
         } else lot=0;
      }
   } else lot=Lots;

   //if (Variant == 2)lot=0.5*lot;
   //if (Variant == 0)lot=0.2*lot;

   if (Accuracy == 0) 
      lot = MathFloor(lot/Step)*Step;
   else lot = NormalizeDouble(lot,Accuracy); 
   //Alert("lot=",lot);
   if (lot < 0) lot = 0;
   return(lot);
}
 

подскажите, можно ли в цикл for вставить другой цикл for?

приведите небольшой пример, если можно

 
CLAIN:

подскажите, можно ли в цикл for вставить другой цикл for?

приведите небольшой пример, если можно

можно

for (int i = 0; i < 10; i++)
{
   for (int j = 0; j < 10; j++)
   {
      Print("i = " + i + ", j = " + j);
   }
}
 
CLAIN:

подскажите, можно ли в цикл for вставить другой цикл for?

приведите небольшой пример, если можно

можно.

         for (int j = i-1; j >= i-trend_bars; j--)
            if (Close[j] - Open[i] > ternd_level*body) {
               ObjectDelete("TrendUp");
               ObjectCreate("TrendUp",OBJ_ARROW,0,Time[i],Low[i]-50*Point);
               ObjectSet("TrendUp",OBJPROP_ARROWCODE,SYMBOL_ARROWUP);
               ObjectSet("TrendUp",OBJPROP_COLOR,Red);
               if (!Is_Pattern(i)) {
                  ObjectSet("TrendUp",OBJPROP_COLOR,Green);
                  //========процедура сдвига всего 2-x мерного массива buf на 1 индекс========
                  ArraySetAsSeries(Pattern,true); //"переворачиваем" массив
                  ArrayCopy(Pattern, Pattern, ArrayRange(Pattern,1), 0);
                  ArraySetAsSeries(Pattern,false);//возвращаем в исходное значение
                  for (int k = 0; k < pattern_bars; k++) {
                     Pattern[0][k] = pattern[k];
                  }
                  for (int m = 0; m <= size; m++) {
                     if (Pattern[m][0] == 0 && Pattern[m][1] == 0 && Pattern[m][2] == 0 && Pattern[m][3] == 0) {
                        break;
                     }   
                  }
                  pattern_count = m;
                  if (prn) 
                     if (MathMod(m, 100) == 0) Print("В работе ",m," паттернов на ",Bars," барах");
                  if (m > 0.1*Bars) {
                     for (int l = MathRound(0.1*Bars); l <= size; l++) {
                        for (int n = 0; n < 4; n++) {
                           Pattern[l][n] = 0;
                        }
                     }
                  }
               }
               lst_patt = i;
               break;
            }
 
Здравствуйте, нужна малюсенькая помощь))

Может у Вас найдется в закромах программного кода такой вот эксперт:

нужно чтоб он обновлял для всех открытых графиков шаблоны (которые к ним прикреплены на момент обновления (важно! а не на момент запуска эксперта)) с определенным интервалом времени (например каждые 15 мин) .

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

ну у меня всего 4 графика, просто шаблоны формируются из экселя каждые 10 мин, потом их вручную прилепляю. но запаривает вручную то))

может подскажите название того эксперта, пожалуйста?

 
w-knot:

ну у меня всего 4 графика, просто шаблоны формируются из экселя каждые 10 мин, потом их вручную прилепляю. но запаривает вручную то))

может подскажите название того эксперта, пожалуйста?

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