Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 763

 
Alexey Viktorov:

En OnTick() controla la pulsación del botón. Si funciona en el probador - control en OnTick(), pero en la vida real este bloque de control no se ejecutará y se controlará en OnChartEvent()

¿Por qué? No se pasan parámetros del evento a OnTick().

 
Ilya Prozumentov:

¿Cómo puede ser esto? No se pasan parámetros del evento a OnTick().

Pero la pulsación del botón se supervisa

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


Es exactamente el mismo control en OnChartEvent() con la diferencia de que se comprueba sólo en el momento de pulsar, no en cada tick.
 
Alexey Viktorov:

Pero al pulsar el botón se controla


Exactamente el mismo control en OnChartEvent() con la única diferencia de que la comprobación tiene lugar exclusivamente en el momento del clic, no en cada tick.

¿No es en el momento del lanzamiento? Hacer clic en un objeto sólo se cuenta si se pulsa-suelta dentro del objeto. Si haces clic en un objeto, alejas el cursor de él mientras mantienes pulsado el botón y luego lo sueltas, ¿se ha hecho clic en el objeto?

Sin embargo, aún no he experimentado.

 
Artyom Trishkin:

¿No es en el momento del retroceso? Hacer clic en un objeto sólo cuenta si se pulsa y suelta dentro del objeto. Si haces clic en un objeto, alejas el cursor de él mientras mantienes pulsado el botón y luego lo sueltas, ¿se ha hecho clic en el objeto?

Sin embargo, aún no he experimentado.

Yo tampoco he experimentado, así que no puedo asegurar nada. Pero parece que es por empuje. Incluso había un hilo en alguna parte discutiendo esto. Si la memoria no me falla, parece que incluso pidieron separar el evento de pulsar y soltar el botón del ratón.

 
Ghabo:

OnChartEvent() no funciona en el probador.

Por favor, muestre el botón que puede funcionar en el probador. Por ejemplo, al hacer clic en el cual, se levantará la bandera trade = true; ¿hacer clic de nuevo? trade = false;


Ilya Prozumentov:

¿Cómo se puede hacer esto? No se pasan parámetros del evento a OnTick().

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

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

Desmontando el código del indicador EquityChartModeller.

Tiene 2 funciones personalizadas:

///////////////////////////////////////////////////////////////////////////
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="";
           }                                                                                    // Запоминаем фрагмент в массиве; обнуляем фрагмент для след. итерации цикла
     }
  }

No entiendo dónde está resaltado en amarillo. Si la fórmula de la cartera se parece: "USDSEK-4 USDCAD+9 EURJPY-5 AUDNZD-5 EURAUD-1 GBPJPY+6 USDNOK-2", entonces, ¿cómo se puede sustituir el bucle while(p>=0) por if(p==0) si sólo se rompe al llegar al signo if(X=="+"||X=="-") break;?

Y a continuación, if(p==0) , ¿por qué el lote se establece en 1 -Lots[Total-1]=1; ?

Indicador aquí: https://www.mql5.com/ru/code/10962

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

Desmontando el código del indicador EquityChartModeller.

Tiene 2 funciones personalizadas:

...


Indicador aquí: https://www.mql5.com/ru/code/10962

Inserte el código correctamente:


 
Artyom Trishkin:

Introduzca el código correctamente:


corregido

 
Buenas tardes, por favor, ayuda con una pregunta técnica sobre cómo traducir el script a un gráfico
 
Sergey:

corregido

¿Qué tal un estilista? Ctrl+, (coma en inglés)

No me estoy metiendo contigo. Es que tú eres el que necesita ayuda, así que eres tú quien debe dar la información de forma utilizable, no un volcado.

Razón de la queja: