MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 763

 
Alexey Viktorov:

OnTick()では、ボタン押下を制御します。テスターで動作する場合 - OnTick()で制御しますが、現実にはこの制御ブロックは実行されず、OnChartEvent()で制御されます。

どうして?OnTick()にイベントパラメータは渡さない。

 
Ilya Prozumentov:

どうしてでしょう?OnTick()にイベントパラメータは渡さない。

しかし、ボタンを押すと監視される

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


OnChartEvent()での制御と全く同じですが、ティック毎 ではなく、押した瞬間のみチェックされる点が異なります。
 
Alexey Viktorov:

しかし、ボタンを押すと制御される


OnChartEvent()での制御は全く同じで、唯一の違いは、チェックがクリックの瞬間だけ行われることで、毎回の目盛り ではありません。

発売の瞬間ではないですか?オブジェクトをクリックした場合は、オブジェクト内でプレスリリースを行った場合のみカウントされます。オブジェクトをクリックし、ボタンを押したままカーソルを遠ざけ、ボタンを離した場合、オブジェクトはクリックされたことになるのでしょうか?

ただし、まだ実験していません。

 
Artyom Trishkin:

プレスの瞬間ではないでしょうか?オブジェクトをクリックすると、オブジェクト内でプレス&リリースした場合のみカウントされます。オブジェクトをクリックし、ボタンを押したままカーソルを遠ざけ、ボタンを離した場合、オブジェクトはクリックされるのでしょうか?

ただし、まだ実験していません。

私も実験したことがないので、何とも言えません。しかし、それは押すことによってのようです。どこかで議論しているスレッドがあったくらいです。記憶が正しければ、マウスボタンを押したときと離したときのイベントを分けてほしいという要望まであったような気がします。

 
Ghabo:

OnChartEvent()がテスターで動作しない。

テスターで動作可能なボタンを表示してください。例えば、whichをクリックするとtrade = trueのフラグが立ち、もう一度クリックするとtrade = falseのフラグが立つ。


イリヤ・プロズメントフ

どうすればいいのでしょうか。OnTick()にイベントパラメータは渡さない。

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

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

EquityChartModellerインジケーターのコードを分解してみる。

2つのカスタム機能を搭載しています。

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

どこが黄色で強調されて いるのか理解できない。ポートフォリオ式のような場合。"USDSEK-4 USDCAD+9 EURJPY-5 AUDNZD-5 EURAUD-1 GBPJPY+6 USDNOK-2" では、ループ while(p>=0) をどのように if(p==0) に上書きできるかというと、符号に達したときだけブレークするなら if(X=="+"||X=="-") break; ?である。

そして以下、if(p=0)で、なぜLotが1になっているのか -Lots[Total-1]=1;?。

インジケータはこちら:https://www.mql5.com/ru/code/10962

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

EquityChartModellerインジケーターのコードを分解してみる。

2つのカスタム機能を搭載しています。

...


インジケータはこちら:https://www.mql5.com/ru/code/10962

コードを 正しく挿入してください。


 
Artyom Trishkin:

コードを 正しく挿入してください。


 
こんにちは、スクリプトをチャートに変換する方法について、技術的な質問をお願いします。
 
Sergey:

スタイリング 剤はいかがでしょうか?Ctrl+、(英語ではコンマ)

いじめてるわけじゃないよ。ただ、助けを求めているのはあなたなのですから、捨て駒ではなく、使える形で情報を提供するのがあなたの役目です。