[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 236

 
Roman.:

Il tasto destro del mouse clicca sul colore grigio di un indicatore nel terminale, poi nel menu - "cambiare" clicca già il sinistro del mouse, poi compila nel meta editor, poi riavvia il terminale e vivi felicemente...:-)


Non ha aiutato. Fatto tutto, riavviato il terminale, ahimè.

Il codice sorgente non sembra avere nulla a che fare con questo, il programma è mio.

Per qualche motivo è tutto sul nome, cancellato tutto il testo, caricato un semplice nonsense che invece funziona, ricompilato, stesso risultato.

Comunque, se nessuno ha incontrato questo tipo di cose, fanculo. Dimenticherò questo nome e nessun problema.

 
ramses:


//+------------------------------------------------------------------+
//| funzione di avvio esperto |
//+------------------------------------------------------------------+
int start()
{

if (OrdersTotal()>0)
{ <-- questa parentesi è ridondante.

 
DhP:

Il margine per un ordine di 1 lotto è uguale:

Si può capire da lì.

E dobbiamo anche controllare se ci sono abbastanza fondi disponibili:

Dove sono i valori di AccountFreeMarginMode()? Che può essere 0, 1, 2, 3, 4 (credo).


Ecco la mia funzione per determinare la dimensione del lotto, ma ho capito che non ho preso in considerazione 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);
}
 

Potete dirmi se un altro ciclo for può essere inserito in un ciclo for?

Fammi un piccolo esempio, se possibile

 
CLAIN:

Potete dirmi se un altro ciclo for può essere inserito in un ciclo for?

Dammi un piccolo esempio se puoi

è possibile

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

Potete dirmi se un altro ciclo for può essere inserito in un ciclo for?

Fai un piccolo esempio se puoi

è possibile.

         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;
            }
 
Ciao, ho bisogno di un piccolo aiuto))

Forse puoi trovare un Expert Advisor nel magazzino del codice:

Ho bisogno che aggiorni tutti i modelli di grafici aperti (che sono collegati ad essi al momento dell'aggiornamento (importante! Non all'inizio dell'EA)) ad un certo intervallo (ad esempio ogni 15 min).

Grazie per qualsiasi aiuto in anticipo)
 
Huh... Una volta ho messo uno di questi su una dozzina di cartelle, non sapevo come sbarazzarmene :))
 

Beh, ho solo 4 grafici, solo i modelli sono generati da excel ogni 10 minuti, poi li attacco manualmente. ma è estenuante farlo manualmente))

Può dirmi il nome di questo esperto, per favore?

 
w-knot:

Beh, ho solo 4 grafici, solo i modelli sono generati da excel ogni 10 minuti, poi li attacco manualmente. ma è estenuante farlo manualmente))

Può dirmi il nome di quell'esperto, per favore?

È la tua rozza auto-scrittura. Se non lo programmate, ordinatelo a qualcun altro.