[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 236

 
Roman.:

Le bouton droit de la souris cliquer sur la couleur grise d'un indicateur dans le terminal, puis dans le menu - "changer" cliquer déjà la souris gauche, puis compiler dans l'éditeur méta, puis redémarrer le terminal et vivre heureux...:-)


Ça n'a pas aidé. J'ai tout fait, j'ai redémarré le terminal, hélas.

Le code source ne semble pas avoir d'importance, le programme est le mien.

Pour une raison quelconque, tout tourne autour du nom, j'ai supprimé tout le texte, chargé un simple non-sens qui fonctionne à la place, recompilé, même résultat.

Bref, si personne n'a rencontré ce genre de chose, tant pis. Je vais oublier ce nom et pas de problème.

 
ramses:


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

if (OrdersTotal()>0)
{ <-- cette parenthèse est redondante.

 
DhP:

La marge pour un ordre de 1 lot est égale :

Vous pouvez le découvrir à partir de là.

Et nous devons également vérifier si les fonds disponibles sont suffisants :

Où sont les valeurs de AccountFreeMarginMode() ? Qui peut être 0, 1, 2, 3, 4 (je pense).


Voici ma fonction pour déterminer la taille du lot, mais j'ai compris que je n'ai pas pris en compte 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);
}
 

Pouvez-vous me dire si une autre boucle for peut être insérée dans une boucle for ?

Donnez-moi un petit exemple, si possible

 
CLAIN:

Pouvez-vous me dire si une autre boucle for peut être insérée dans une boucle for ?

donnez-moi un petit exemple si vous le pouvez

vous pouvez

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

Pouvez-vous me dire si une autre boucle for peut être insérée dans une boucle for ?

donnez un petit exemple si vous le pouvez

vous pouvez.

         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;
            }
 
Bonjour, j'ai besoin d'un peu d'aide))

Peut-être pouvez-vous trouver un Expert Advisor dans la réserve de code :

J'ai besoin qu'il mette à jour les modèles pour tous les graphiques ouverts (qui sont attachés à eux au moment de la mise à jour (important ! Pas au moment du lancement de l'EA)) à un certain intervalle (par exemple toutes les 15 min).

Merci d'avance pour toute aide)
 
Huh... J'en ai mis un sur une douzaine de cartes une fois, je ne savais pas comment m'en débarrasser :)))
 

Eh bien, je n'ai que 4 graphiques, juste des modèles sont générés à partir d'Excel toutes les 10 minutes, puis je les attache manuellement. mais c'est épuisant de le faire manuellement ;))

Pouvez-vous me dire le nom de cet expert, s'il vous plaît ?

 
w-knot:

Eh bien, je n'ai que 4 graphiques, juste des modèles sont générés à partir d'Excel toutes les 10 minutes, puis je les attache manuellement. mais c'est épuisant de le faire manuellement ;))

Pouvez-vous me dire le nom de cet expert, s'il vous plaît ?

C'est votre propre écriture brute. Si vous ne le programmez pas, commandez-le à quelqu'un d'autre.