Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 763

 
Alexey Viktorov:

Em OnTick() controle o apertar do botão. Se funcionar no testador - controle em OnTick(), mas na vida real este bloco de controle não será executado e será controlado em OnChartEvent()

Como assim? Nenhum parâmetro de evento é passado para OnTick().

 
Ilya Prozumentov:

Como isso pode ser? Nenhum parâmetro de evento é passado para OnTick().

Mas o apertar do botão é monitorado

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


É exatamente o mesmo controle no OnChartEvent() com a diferença de que ele é verificado somente no momento da pressão, não em cada carrapato.
 
Alexey Viktorov:

Mas o acionamento do botão é controlado


Exatamente o mesmo controle no OnChartEvent() com a única diferença é que a verificação ocorre excepcionalmente no momento do clique, não em cada tic-tac.

Não está no momento da liberação? Clicar em um objeto só é contado se você pressionar o lançamento dentro do objeto. Se você clicar em um objeto, mover o cursor para longe dele enquanto segura o botão, e depois soltá-lo, o objeto está clicado?

No entanto, ainda não experimentei.

 
Artyom Trishkin:

Não está no momento da prensagem? Clicar em um objeto só conta se você pressionar e liberar dentro do objeto. Se você clicar em um objeto, mover o cursor para longe dele enquanto segura o botão, e depois soltá-lo, o objeto está clicado?

No entanto, ainda não experimentei.

Eu também não experimentei, portanto, não posso dizer nada com certeza. Mas parece ser por empurrar. Havia até mesmo um fio em algum lugar discutindo isso. Se a memória me serve corretamente, parece que eles até pediram para separar o evento para pressionar e soltar o botão do mouse.

 
Ghabo:

OnChartEvent() não funciona no testador.

Por favor, mostre o botão que pode funcionar no testador. Por exemplo, clique sobre qual, a bandeira de comércio = verdadeiro será hasteada; clique novamente? comércio = falso;


Ilya Prozumentov:

Como isso pode ser feito? Nenhum parâmetro de evento é passado para OnTick().

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

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

Desmontando o código do indicador EquityChartModeller.

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

Não entendo onde está destacado em amarelo. Se a fórmula do portfólio for parecida: "USDSEK-4 USDCAD+9 EURJPY-5 AUDNZD-5 EURAUD-1 GBPJPY+6 USDNOK-2", então como o loop while(p>=0) pode ser anulado para if(p==0) se apenas quebra if(X==="+"||X=="-") quebra; ??

E então abaixo, se(p==0) , por que o lote está definido para 1 -Lotes[Total-1]=1;? ?

Indicador aqui: https://www.mql5.com/ru/code/10962

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

Desmontando o código do indicador EquityChartModeller.

Ela tem 2 funções personalizadas:

...


Indicador aqui: https://www.mql5.com/ru/code/10962

Insira o código corretamente:


 
Artyom Trishkin:

Insira o código corretamente:


corrigido

 
Boa tarde, favor ajudar com uma pergunta técnica sobre como traduzir o roteiro para um gráfico.
 
Sergey:

corrigido

Que tal um modelador? Ctrl+, (vírgula em inglês)

Eu não estou me metendo com você. É só que você é que precisa de ajuda, então cabe a você dar as informações de uma forma utilizável, não uma lixeira.

Razão: