[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 236

 
Roman.:

O botão direito do mouse clicar na cor cinza de um indicador no terminal, depois no menu - "mudar" clique no mouse já esquerdo, depois compilar no meta editor, depois reiniciar o terminal e viver feliz...:-)


Não ajudou. Fez tudo isso, reiniciou o terminal, infelizmente.

O código fonte não parece ter nada a ver com isso, o programa é meu.

Por alguma razão é tudo sobre o nome, apagou todo o texto, carregou um simples disparate que funciona em seu lugar, recompilou, mesmo resultado.

De qualquer forma, se ninguém encontrou este tipo de coisa, que se foda. Vou esquecer este nome e não há problema.

 
ramses:


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

se (OrdersTotal()>0)
{ <-- este parêntese é redundante.

 
DhP:

A margem para uma ordem de 1 lote é igual:

Você pode descobrir a partir daí.

E também precisamos verificar se há fundos suficientes disponíveis:

Onde estão os valores do AccountFreeMarginMode()? Que pode ser 0, 1, 2, 3, 4 (penso eu).


Aqui está minha função para determinar o tamanho do lote, mas entendi que não levei em conta o ModoMarginMode() da FreeMarginMode

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);
}
 

Você pode me dizer se outro para loop pode ser inserido em um loop para loop?

Dê-me um pequeno exemplo, se possível

 
CLAIN:

Você pode me dizer se outro para loop pode ser inserido em um loop para loop?

me dê um pequeno exemplo, se você puder

você pode

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

Você pode me dizer se outro para loop pode ser inserido em um loop para loop?

dar um pequeno exemplo, se você puder

você pode.

         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;
            }
 
Olá, preciso de uma pequena ajuda))

Talvez você possa encontrar um Expert Advisor no armazém de códigos:

Preciso dele para atualizar todos os modelos de gráficos abertos (que estão anexados a eles no momento da atualização (importante! Não no início da EA)) a um certo intervalo (por exemplo, a cada 15 min).

Obrigado por qualquer ajuda prévia)
 
Huh... Colocar uma vez um destes em uma dúzia de gráficos, não sabia como se livrar dele :))
 

Bem, eu só tenho 4 gráficos, apenas modelos são gerados a partir do Excel a cada 10 minutos, depois eu os prendo manualmente. mas é exaustivo fazer isso manualmente))

Você pode me dizer o nome desse especialista, por favor?

 
w-knot:

Bem, eu só tenho 4 gráficos, apenas modelos são gerados a partir do Excel a cada 10 minutos, depois eu os prendo manualmente. mas é exaustivo fazer isso manualmente))

Você pode me dizer o nome desse especialista, por favor?

É a sua própria e crua auto-escrita. Se você não o programar, encomende-o a outra pessoa.