MT5への願い - ページ 62

 
Yedelkin:

存在しない ウィンドウ番号を指定すればいいのです。

すなわち、INT_MAXを 指定する、など。あるいは負の値(私自身は試していませんが、アイデアとして試してみてはいかがでしょうか)。


int win_ind=1;

int OnInit()
  {
//---
   chart_id=ChartID();
//--- set balans ind

   MqlParam params[1];
   params[0].type         =TYPE_STRING;
   params[0].string_value =name_ind;
   handle=IndicatorCreate(ChartSymbol(chart_id),ChartPeriod(chart_id),IND_CUSTOM,win_ind,params); // вот тут ещё 
                                                                              // прокатит несуществующее окно
   ChartIndicatorAdd(chart_id,win_ind,handle); // а вот тут уже нужно точно знать его номер
   win_ind=ChartWindowFind(chart_id,name_ind); // а получить его можно только тут   
//---
   return(0);
  }

そのため、win_indを明示的に指定しないと動作しません。

 

Urain:

イェデルキン

存在しない ウィンドウ番号を指定すればいいのです。

すなわち、INT_MAXを 指定する、など。 あるいは負の値(私自身は試していませんが、アイデアとして、試してみてはいかがでしょうか)。

試していないからこそ、そうアドバイスしてくれるのでしょう

よし、負の値を指定するアイデアを確認して、それが証明されないなら、最初のヒントで止めておこう。

"INT_MAXを 指定する" など、存在しない ウィンドウ番号を指定すればいいのです。つまり、上記の例では、次のように指定します。

ChartIndicatorAdd(chart_id,INT_MAX,handle); // указываем заранее несуществующий номер подокна

それとも、あなたの場合、存在しないウィンドウ番号を指定すると、ChartIndicatorAdd 関数が動作を拒否して、新しいサブウィンドウを作成するのでしょうか?

ところで、なぜあなたのコードに同じ変数があるのか、よく分かりませんが

int win_ind=1;
は、まずIndicatorCreate 関数の第4パラメータ(第4パラメータ==parameters_array[]配列に渡されたパラメータ数)として使われ、次にChartIndicatorAdd 関数の第2パラメータ(第2パラメータ==チャートサブウィンドウ数)として使用されます。
 
Документация по MQL5: Операции с графиками / ChartIndicatorsTotal
Документация по MQL5: Операции с графиками / ChartIndicatorsTotal
  • www.mql5.com
Операции с графиками / ChartIndicatorsTotal - Документация по MQL5
 
TheXpert:

よく読んでみてください。

https://www.mql5.com/ru/docs/chart_operations/chartindicatorstotal

こういうことですか?

chart_windows_total

チャートウィンドウの総数(インジケータサブウィンドウを含む

int r/o

 
タキ はい。)二重ループにすることで、すべてのチャートのインデックスを問題なく通過することができます。
 
Yedelkin:

ところで、なぜあなたのコードに同じ変数があるのか、よく分かりませんが

まず、IndicatorCreate 関数の4番目のパラメータとして使われ(4番目のパラメータ== parameters_array[]配列に渡されたパラメータの数)、次にChartIndicatorAdd 関数の2番目のパラメータとして使われます(2番目のパラメータ== chart subwindow number)。

セミョーンセミョーニッチ、その通りです。win_indをどこでも明示的に1と書いておいて、変数に置き換えるときに、1を全部win_indに変えてしまったのが不注意でした。それが電気ショックを与えたのですね :o)

正しいコードは次のようになります。

int win_ind=-1;

int OnInit()
  {
//---
   chart_id=ChartID();
//--- set balans ind

   MqlParam params[1];
   params[0].type         =TYPE_STRING;
   params[0].string_value =name_ind;
   handle=IndicatorCreate(ChartSymbol(chart_id),ChartPeriod(chart_id),IND_CUSTOM,1,params);// 1- количество параметров 
                                                                              
   ChartIndicatorAdd(chart_id,win_ind,handle); // тут поскольку win_ind=-1 создаём новое окно
   win_ind=ChartWindowFind(chart_id,name_ind); // а тут получаем значение win_ind 
//---
   return(0);
  }

これではい、すべて自動で動きます。コードの解析ありがとうございます。1つの頭も良いですが、2つの方がより良いです :o)

 
TheXpert:
タキ はい。)二重ループにすることで、すべてのチャートのインデックスを問題なく通過することができます。
大丈夫です!しかし、私の目的では、何とかループを回避することができました。
 
半年ほど前にも、保留 リストを拡張する案がありました。例えば、OCO型オーダーの導入など。それらのアイデアは、現在どのような形で進行しているのでしょうか。新しいタイプの保留注文の出現を(少なくとも1年後には)期待してもいいのでしょうか?
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
残念ながら、そうではありません。令状制度は変わりません。
 
Renat:
残念ながら、そうではありません。令状制度は変わりません。
よし、じゃあ、今あるもので行こう。