Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 763

 
Alexey Viktorov:

In OnTick() controlla la pressione del pulsante. Se funziona nel tester - controllo in OnTick(), ma nella vita reale questo blocco di controllo non sarà eseguito e sarà controllato in OnChartEvent()

Come mai? Nessun parametro dell'evento viene passato a OnTick().

 
Ilya Prozumentov:

Come può essere? Nessun parametro dell'evento viene passato a OnTick().

Ma la pressione del pulsante è monitorata

 if(ObjectGetInteger(0, "name", OBJPROP_STATE) == true)
  {
   // Делаем что надо по нажатию кнопки и возвращаем прежнее её состояние
   ObjectSetInteger(0, "name", OBJPROP_STATE, false);
  }


È esattamente lo stesso controllo in OnChartEvent() con la differenza che viene controllato solo al momento della pressione, non ad ogni tick.
 
Alexey Viktorov:

Ma la pressione del pulsante è controllata


Esattamente lo stesso controllo in OnChartEvent() con l'unica differenza che il controllo avviene eccezionalmente al momento del click, non ad ogni tick.

Non è al momento del rilascio? Il clic su un oggetto viene contato solo se si preme-rilascia all'interno dell'oggetto. Se clicchi su un oggetto, allontani il cursore da esso tenendo premuto il pulsante e poi lo rilasci, l'oggetto è cliccato?

Tuttavia, non ho ancora sperimentato.

 
Artyom Trishkin:

Non è al momento di premere? Cliccare su un oggetto conta solo se si preme e si rilascia all'interno dell'oggetto. Se clicchi su un oggetto, allontani il cursore da esso tenendo premuto il pulsante e poi lo rilasci, l'oggetto è cliccato?

Tuttavia, non ho ancora sperimentato.

Nemmeno io ho sperimentato, quindi non posso dire nulla con certezza. Ma sembra che sia spingendo. C'era anche un thread da qualche parte che ne discuteva. Se la memoria non mi inganna, sembra che abbiano anche chiesto di separare l'evento per la pressione e il rilascio del pulsante del mouse.

 
Ghabo:

OnChartEvent() non funziona nel tester.

Si prega di mostrare il pulsante che può funzionare nel tester. Per esempio, cliccate su quale, la bandiera trade = true sarà sollevata; cliccate di nuovo? trade = false;


Ilya Prozumentov:

Come si può fare? Nessun parametro dell'evento viene passato a OnTick().

https://www.mql5.com/ru/forum/171668#comment_10574757

Демо счет работающий в выходные дни (Есть ли сие чудо)
Демо счет работающий в выходные дни (Есть ли сие чудо)
  • 2017.03.04
  • www.mql5.com
Доброго времени, очень увлекся разработкой на mql, но к сожалению позволить себе это могу лишь в выходные дни‌, но в выходные дни проблема с отладк...
 

Smontare il codice dell'indicatore EquityChartModeller.

Ha 2 funzioni personalizzate:

///////////////////////////////////////////////////////////////////////////
void SetPositions(string name,int number)                                           // 69 SetPositions(Portfolio_Formula_A,1)
  {
   BlocksLastN=BlocksTotal;                                                         //
   SeparateBlocks(name);                                                            // Разбиваем строку на блоки
   for(int i=BlocksLastN;i<BlocksTotal;i++)                                         // Перебираем блоки формулы
     {
      Total++;                                                                      // Увеличиваем кол-во инструментов ++;
      ArrayResize(Lots,Total);                                                      // Устанавливаем размер массива Lots размером Total;
      ArrayResize(Instrument,Total);                                                // Устанавливаем размер массива Instrument размером Total;
      ArrayResize(OpenPrice,Total);                                                 // Устанавливаем размер массива OpenPrice размером Total;
      ArrayResize(ClosePrice,Total);                                                // Устанавливаем размер массива ClosePrice размером Total;
      ArrayResize(Index,Total);                                                     // Устанавливаем размер массива Index размером Total;
      int length=StringLen(Block[i]);                                               // Определяем кол-во символов в блоке;
      int p=length-1;                                                               // Для перебора создаем переменную меньше на единицу;
      while(p>=0)                                                                   // До тех пор пока есть символ
        {
         string X=StringSubstr(Block[i],p,1);                                       // определяем символ;
         if(X=="+"||X=="-") break;                                                  // если дошли до знака то прекращаем;
         if(p==0) break                                                           // Если дошли до первого символа то прекращаем;
         else p--;                                                                  // Иначе переходим к следующему символу 
        }
      Index[Total-1]=number;
      Instrument[Total-1]=StringSubstr(Block[i],0,p);                               // Запоминаем элемент массива Instrument - название инструмента;
      if(p==0) Lots[Total-1]=1;
      else Lots[Total-1]=StrToDouble(StringSubstr(Block[i],p,length-p));            // Запоминаем элемент массива Lots - направление и размер лота;
      if(MarketInfo(Instrument[Total-1],MODE_POINT)==0)                             // Если размера пункта инструмента нет
        {Missing=StringConcatenate(Missing," ",Instrument[Total-1]);Error=true;}    // Запоминаем потерявшийся инструмент "Название инструмента ERROR"
     }
  }
///////////////////////////////////////////////////////////////////////////                     // Функция разбиения строки формулы на блоки
void SeparateBlocks(string text) // 218 SeparateBlocks(name); 
  {
   string fragment="";                                                                          // инструмент с направлением и лотом (до порбела)
   int length=StringLen(text);                                                                  // Возвращает число символов в строке (Portfolio_Formula_A)
   for(int position=0;position<length;position++)                                               // Перебор символов строки
     {
      int sym=StringGetChar(text,position);                                                     // Возвращает значение символа, расположенного в указанной позиции строки
      if(sym!=32&&sym!=9&&sym!=10&&sym!=13) fragment=fragment+StringSubstr(text,position,1);    // Если не пробел, не таб, не перевод строки, не возврат каретки - добавляем символ фрагменту
      if(sym==32||sym==9||sym==10||sym==13||position==length-1)                                 // Если пробел или таб или перевод строки или возврат каретки или последний символ строки формулы
         if(StringLen(fragment)>0)                                                              // Если у фрагмента есть символы 
           {
            BlocksTotal++;ArrayResize(Block,BlocksTotal);                                       // Кол-во блоков++; Изменяем размер массива Block;
            Block[BlocksTotal-1]=fragment;fragment="";
           }                                                                                    // Запоминаем фрагмент в массиве; обнуляем фрагмент для след. итерации цикла
     }
  }

Non capisco dove è evidenziato in giallo. Se la formula del portafoglio assomiglia a: "USDSEK-4 USDCAD+9 EURJPY-5 AUDNZD-5 EURAUD-1 GBPJPY+6 USDNOK-2", allora come può il ciclo while(p>=0) essere sovrascritto a if(p==0) se interrompe solo if(X=="+"||X=="-") break; ?

E poi sotto, if(p==0) , perché il lotto è impostato a 1 -Lots[Total-1]=1; ?

Indicatore qui: https://www.mql5.com/ru/code/10962

Equity Chart Modeller
Equity Chart Modeller
  • www.mql5.com
Данный индикатор создан на базе одной из версий известного индикатора Virtual Equity (автор: Xupypr) и был адаптирован для целей портфельного моделирования и парного трейдинга. Индикатор предназначен для быстрого анализа графиков изменения стоимости портфелей/синтетиков непосредственно перед открытием позиций. Есть два основных сценария...
 
Sergey:

Smontare il codice dell'indicatore EquityChartModeller.

Ha 2 funzioni personalizzate:

...


Indicatore qui: https://www.mql5.com/ru/code/10962

Inserire il codice correttamente:


 
Artyom Trishkin:

Inserire il codice correttamente:


corretto

 
Buon pomeriggio per favore aiutatemi con una domanda tecnica su come tradurre lo script in un grafico
 
Sergey:

corretto

Che ne dici di uno styler? Ctrl+, (virgola in inglese)

Non me la prendo con te. È solo che sei tu quello che ha bisogno di aiuto, quindi sta a te dare le informazioni in una forma utilizzabile, non una discarica.