初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1206

 
Artyom Trishkin:

nnc_arr_in 配列のサイズを構造体配列のセル 0 のサイズより 1 つ多くリサイズする。

ありがとうございます。

 

質問 mql5

2つのオープンポジションと シグナル(Flag==true)があります。

このシグナルによって決済されるべきポジションは1つだけ、つまり、より大きな利益を得たポジションだけです。

利益の 大きい方だけを 決済するには

このイベントにはどのような対処が必要でしょうか?

私はこの方法でやろうとしています。

if (invertStart == true) // получил событие, о том что есть две позиции и одну можно закрыть.
   {     
   int npos_L1=0;   NPos_L1(npos_L1);
   if(npos_L1==1)
   {
   int positions=PositionsTotal();
   for(int i=0;i<=positions;i++)
   {
   ulong ticket=PositionGetTicket(i);
   if(ticket!=0 && PositionGetInteger(POSITION_TYPE)== POSITION_TYPE_SELL && POSITION_PROFIT>=50) //  50  допустим...
   {
   m_trade.PositionClose(ticket); 
   i--;
   invertStart = false;
   return;  
   }
   }
   }
   }  

その結果、最後のオープンポジションがクローズされます。

正しいやり方をアドバイスしてください、例が欲しいです。 参考書や入門書を読みますが、微妙なところが分からないことがあります。

 
Vladpedro:

質問 mql5

2つのオープンポジションと シグナル(Flag==true)があります。

このシグナルによって決済されるべきポジションは1つだけ、つまり、より大きな利益を得たポジションだけです。

利益の 大きい方だけを 決済するには

このイベントにはどのような対処が必要でしょうか?

私はこの方法でやろうとしています。

その結果、最後のオープンポジションがクローズされます。

参考文献は読んでいるのですが、細かいところがよくわからないことが多いので、正しいやり方を教えてください。

コード

   ulong ticket=ULONG_MAX;
   double profit=DBL_MIN;
   if(invertStart == true)  // получил событие, о том что есть две позиции и одну можно закрыть.
     {
      int positions=PositionsTotal();
      for(int i=PositionsTotal()-1; i>=0; i--)
        {
         ulong tmp_ticket=PositionGetTicket(i);
         if(ticket!=0)
           {
            double tmp_profit=PositionGetDouble(POSITION_PROFIT);
            if(tmp_profit>profit)
              {
               ticket=tmp_ticket;
               profit=tmp_profit;
              }
           }
        }
      //---
      if(ticket!=ULONG_MAX)
         m_trade.PositionClose(ticket);
     }
 
Vladimir Karputov:

コード

すでにそのようなローカル変数 があるため、チケットについてのみ不満があります。

ticket' の宣言でローカル変数が隠れる Lim_Stop_03_Sell_pos_06.mq5 299 10

このチケットの中には、中に隠す必要があるものもあるかもしれません。

 
Vladpedro:

どうもありがとうございます、動作しているようです。 ただ、すでにそのようなローカル 変数があるため、ticketについて文句を言われました。

ticket' の宣言でローカル変数が隠れる Lim_Stop_03_Sell_pos_06.mq5 299 10

このチケットの中には、中に隠す必要があるものもあるかもしれません。

変数名を変更する

ulong ticket=ULONG_MAX;

в

ulong close_ticket=ULONG_MAX;

そしてもちろん、コード内で名前を変更することを忘れないでください。

 
Vladimir Karputov:

変数名を変更する

в

で、もちろん、コードの中で名前を変えることも忘れないでください。

はい、ありがとうございます。すでに整理しました...名前を変更しました。

 

ごきげんよう。

価格がトップラインより 上、またはボトムライン(水平または傾斜線、チャート上で移動可能)より下にある場合、メールまたはプッシュレターを送信するEAを見つけることができる場所を教えてください。

もしかしたら、どなたかが持っているかもしれませんので、教えてください。

MT5のみ

ありがとうございました。

 

EAでインジケータを接続すると

int OnInit()
{
   ind_handle = iCustom(_Symbol, indperiod, "MyInd", indParam);
   return(INIT_SUCCEEDED);
}

そして、CopyBuffer(ind_handle, 0, 1, 3, buffer1) を使って、インジケータバッファを取得します。


インジケータのバッファを 1ティックごとに読み込む必要があるのでしょうか?

また、できればソース(ドキュメント、記事)を教えてほしい。

1. インジケータは常に並列に計算されます。

2. CopyBuffer()を呼び出した時点のインジケータのみ計算される。

 
Igor Makanu:

EAでインジケータを接続すると

そして、CopyBuffer(ind_handle, 0, 1, 3, buffer1) を使って、インジケータバッファを取得します。


インジケータのバッファを 1ティックごとに読み込む必要があるのでしょうか?

また、できればソース(ドキュメント、記事)を教えてほしい。

1. インジケータは常に並列に計算されます。

2. CopyBuffer()を呼び出した時点のインジケータのみ計算される。

Igorさん、インジケータが正しく書かれていれば、現在のバーの値だけを変更することができます。したがって、現在の値が必要な場合は、これらの新鮮な値を使用する直前にCopyBufferを使用する必要があります。また、ヒストリーバリューが必要な場合も、それは変わりませんし、読み直す理由もないのです。

ティック毎のインジケーターの計算について、どこかに情報があります。私の記憶では、デフォルトではインジケータにアクセスしたときのみ再計算されますが、毎ティックごとに再計算するようにすることも可能です。やり方は、ドキュメントを見てください。

 
Alexey Viktorov:
Igorさん、インジケータが正しく書かれていれば、現在のバーの値だけを変更することができます。したがって、現在の値が必要な場合は、これらの新鮮な値を使用する直前にCopyBufferを使用する必要があります。また、ヒストリーバリューが必要な場合も、それは変わりませんし、読み直す理由もないのです。

ティック毎のインジケーターの計算について、どこかに情報があるはずです。私の記憶では、デフォルトではインジケータが呼び出されたときのみ再計算されますが、毎ティックごとに再計算させることも可能です。その方法はドキュメントに記載されています。

OK、ではとにかくテストしてみないと。

問題はインジケータの再描画 なので、まだインジケータを書き換えたくない

理由: