[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 236

 
Roman.:

El botón derecho del ratón haga clic en el color gris de un indicador en el terminal, a continuación, en el menú - "cambiar" clic ya la izquierda del ratón, a continuación, compilar en el editor de meta, a continuación, reiniciar el terminal y vivir felizmente ...:-)


No ayudó. Lo hice todo, reinicié la terminal, por desgracia.

El código fuente no parece tener nada que ver, el programa es mío.

Por alguna razón se trata del nombre, borré todo el texto, cargué una simple tontería que funciona en su lugar, recompilé, mismo resultado.

En fin, si nadie se ha encontrado con este tipo de cosas, que se joda. Olvidaré este nombre y no habrá problema.

 
ramses:


//+------------------------------------------------------------------+
//| función de inicio experto |
//+------------------------------------------------------------------+
int start()
{

if (OrdersTotal()>0)
{ <-- este paréntesis es redundante.

 
DhP:

El margen para una orden de 1 lote es igual:

A partir de ahí, ya puedes imaginarlo.

Y también hay que comprobar si hay suficientes fondos disponibles:

¿Dónde están los valores de AccountFreeMarginMode()? Que puede ser 0, 1, 2, 3, 4 (creo).


Esta es mi función para determinar el tamaño del lote, pero entendí que no tuve en cuenta 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);
}
 

¿Pueden decirme si se puede insertar otro bucle for en un bucle for?

Dame un pequeño ejemplo, si es posible

 
CLAIN:

¿Pueden decirme si se puede insertar otro bucle for en un bucle for?

dame un pequeño ejemplo si puedes

puedes

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

¿Pueden decirme si se puede insertar otro bucle for en un bucle for?

dar un pequeño ejemplo si se puede

puedes.

         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;
            }
 
Hola, necesito un poco de ayuda))

Tal vez pueda encontrar un Asesor Experto en el almacén de código:

Lo necesito para actualizar las plantillas de todos los gráficos abiertos (que se adjuntan a ellos en el momento de la actualización (¡importante! No en el momento de lanzar el EA)) en un determinado intervalo (por ejemplo, cada 15 min).

Gracias por cualquier ayuda de antemano)
 
Huh... Puse uno de estos en una docena de gráficos una vez, no sabía cómo deshacerse de él :))
 

Bueno, solo tengo 4 gráficos, solo se generan plantillas desde excel cada 10 minutos, luego las adjunto manualmente. pero es agotador hacerlo manualmente))

¿Puede decirme el nombre de ese experto, por favor?

 
w-knot:

Bueno, solo tengo 4 gráficos, solo se generan plantillas desde excel cada 10 minutos, luego las adjunto manualmente. pero es agotador hacerlo manualmente))

¿Puede decirme el nombre de ese experto, por favor?

Es tu propia y cruda auto-escritura. Si no lo programas, pídelo a otro.