Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 763

 
Alexey Viktorov:

In OnTick() wird das Drücken der Taste gesteuert. Wenn es im Tester funktioniert - Kontrolle in OnTick(), aber im wirklichen Leben wird dieser Kontrollblock nicht ausgeführt und wird in OnChartEvent() kontrolliert werden

Wie kommt das? An OnTick() werden keine Ereignisparameter übergeben.

 
Ilya Prozumentov:

Wie kann das sein? An OnTick() werden keine Ereignisparameter übergeben.

Aber der Druck auf den Knopf wird überwacht

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


Es ist genau das gleiche Steuerelement in OnChartEvent() mit dem Unterschied, dass es nur im Moment des Drückens geprüft wird, nicht bei jedem Tick.
 
Alexey Viktorov:

Aber das Drücken der Taste wird kontrolliert


Genau dasselbe Steuerelement in OnChartEvent() mit dem einzigen Unterschied, dass die Prüfung ausnahmsweise im Moment des Klicks und nicht bei jedem Tick erfolgt.

Ist es nicht zum Zeitpunkt der Veröffentlichung? Ein Klick auf ein Objekt wird nur gezählt, wenn Sie innerhalb des Objekts die Taste loslassen. Wenn Sie auf ein Objekt klicken, den Cursor davon wegbewegen, während Sie die Taste gedrückt halten, und sie dann loslassen, ist das Objekt dann angeklickt?

Ich habe jedoch noch nicht damit experimentiert.

 
Artyom Trishkin:

Ist es nicht im Moment des Pressens? Ein Klick auf ein Objekt zählt nur, wenn Sie innerhalb des Objekts drücken und loslassen. Wenn Sie auf ein Objekt klicken, den Cursor davon wegbewegen, während Sie die Taste gedrückt halten, und sie dann loslassen, ist das Objekt dann angeklickt?

Ich habe jedoch noch nicht damit experimentiert.

Ich habe auch keine Experimente gemacht, kann also nichts Genaues sagen. Aber es scheint, als ob es sich um ein Drängen handelt. Es gab sogar einen Thread, in dem dies diskutiert wurde. Wenn ich mich recht erinnere, haben sie sogar darum gebeten, das Ereignis für das Drücken und Loslassen der Maustaste zu trennen.

 
Ghabo:

OnChartEvent() funktioniert in der Testversion nicht.

Bitte zeigen Sie die Schaltfläche, die im Tester funktionieren kann. Klicken Sie z. B. auf die, wird die Flagge Handel = wahr gesetzt; klicken Sie erneut? Handel = falsch;


Ilya Prozumentov:

Wie lässt sich das bewerkstelligen? An OnTick() werden keine Ereignisparameter übergeben.

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

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

Zerlegen des Codes des Indikators EquityChartModeller.

Es hat 2 benutzerdefinierte Funktionen:

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

Ich verstehe nicht, wo das gelb hervorgehoben ist. Wenn die Portfolioformel wie folgt aussieht: "USDSEK-4 USDCAD+9 EURJPY-5 AUDNZD-5 EURAUD-1 GBPJPY+6 USDNOK-2", wie kann dann die Schleife while(p>=0) in if(p==0) umgewandelt werden, wenn sie nur bricht, wenn (X=="+"||X=="-") break; ??

Und dann unten, if(p==0) , warum wird das Los auf 1 gesetzt -Lots[Total-1]=1; ?

Indikator hier: https://www.mql5.com/ru/code/10962

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

Zerlegen des Codes des Indikators EquityChartModeller.

Es hat 2 benutzerdefinierte Funktionen:

...


Indikator hier: https://www.mql5.com/ru/code/10962

Code korrekteinfügen:


 
Artyom Trishkin:

Fügen Sie den Code korrektein:


korrigiert

 
Guten Tag, bitte helfen Sie mir bei einer technischen Frage, wie ich das Skript in ein Diagramm übersetzen kann
 
Sergey:

korrigiert

Wie wäre es mit einem Styler? Strg+, (Komma auf Englisch)

Ich will nicht auf Ihnen herumhacken. Es ist nur so, dass Sie derjenige sind, der Hilfe braucht, also liegt es an Ihnen, die Informationen in einer brauchbaren Form weiterzugeben, und nicht in einem Müllhaufen.

Grund der Beschwerde: