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

 
ilnur17021992:
SELL_Lvlは売りグリッドのニー(注文)数、SELL_NoLossLevelは これらの注文のCUの合計レベル(価格)です。つまり、「買いライン」のレベルに線を引いておき、新しい「買いライン」ができたときに、それぞれ線を引き直すというものです。どうすればいいのかわからない。

すべての注文のBUラインを決定する方法がわからない?

 

資源の節約と最新の価格を知るために、どのように書けばいいか教えてください。

  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...

とか、こんな感じ?

 SymbolInfoTick(symb,Last_Tick); <<<
  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...
 
Vitaly Muzichenko:

資源の節約と最新の価格を知るために、どのように書けばいいか教えてください。

  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...

とか、こんな感じ?

SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...


最初の選択肢はより正しいです。 2番目の選択肢では、次の行を書くべきです。SymbolInfoTick(symb,Last_Tick); <<<<
 
Vitaly Muzichenko:

資源の節約と最新の価格を知るために、どのように書けばいいか教えてください。

  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...

とか、こんな感じ?

SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...


OrdersTotal() のサイズと、サイクル中の価格変動の確率によると思います。

私見では、新鮮なデータを直接ループで取得する方が正しいと思います。

そして、追加の変数(コードで強調されている)は絶対に不要だと思います。

 
Alexey Viktorov:

ドキュメントに例があります。

ループ内のオーダーを通過し、次のオーダーが前のオーダーより低いことを条件に、それを選択してさらに作業する方がよいかもしれません。したがって、ループを抜けた後は、削除するオーダーが 既に選択 されている状態です。

あるいは、まずオーダーリスト内の位置を記憶しておき、ループを抜けた後に記憶したインデックスを使って選択することもできます。

の場合、高次と低次の両方を設定するのはそう簡単ではありません。
 
Sergey Gritsay:
最初の選択肢はより正しく、2番目の選択肢はSymbolInfoTick(symb,Last_Tick); <<<< と書くべきでしょう。

はい、コピーしただけなので気が付きませんでした。

SymbolInfoTickは ループの中に入れるのが正しいのか、そこに必要なのか、ループの前に入れてもいいのか、悩んでいます。トレーリングストップで使用し、最大50pcのグリッドを引くことができる。

 
Vitaly Muzichenko:

はい、コピーしただけなので気が付きませんでした。

SymbolInfoTickは 必要であればループ内に入れるのが正しいのか、それともループの前に入れるのが良いのか悩んでいます。トレーリングストップに使用し、最大50pcのグリッドを引くことができる。

トレーリングストップの場合は、もちろんサイクルの前に一度置くのがよいでしょう。
 
Alexey Viktorov:

全注文のBUラインを決定する方法がわからない?

BUの決め方はわかったから、このレベルでラインを引いてほしい
 
Alexey Viktorov:
トレーリングストップの場合は、もちろんサイクルの前に一度だけ行うのがよいでしょう。

今は5用にゆっくり書き換えています。 価格の変動が激しく、レベルがストップロスの値より低くなってエラーになる可能性があるという意味です。価格が急激に変化して、レベルが許容ストップレベルより低くなり、エラーになる可能性があるということです。

この"SymbolInfoTick"ハットは、実際の価格を取得するために必要なものだと理解しているのですが?

 
プライスレス