0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【mt4/mql4】ロングポジション(買いポジション数)カウント処理

Last updated at Posted at 2021-10-25

はじめに

システムトレードプログラマのmt4/mql4のメモノートです。
初心者向けの簡単なトピックから公開していきます。
.noteでEAそのものも公開していますので良ければそちらも見てください。

目次

  1. 処理内容
  2. mql4ソースコード

処理内容

今のロングポジション数を確認したい場合の処理になります。
ロングということで「買い」です。「BUY」です。「ブル」です。
のポジションがいくつあるかをカウントするコードです。

使いどころとしては
・最大ポジション数を制限したいとき
 →ポジションがあるなら追加エントリーしない。とか

・買い売りのどちらの処理を行えばいいかの判定のとき
 →売りシグナルが出たので、買いポジションがあるなら決済する。とか
 
ですかね。
そんな時はこのコードでロングポジション数を算出してください。

mql4ソースコード

こちらが関数側のソースです。呼び出し側の前に記述されている必要があります。

test.mq4
//+------------------------------------------------------------------+
//| ロングポジション数を取得      LongPositionCnt
//|  code by KOUSHIROU
//|  https://note.com/mt4_coder                 
//+------------------------------------------------------------------+

input int MAGIC = 12345;

int LongPositionCnt()//ロングポジション数を取得
{
	 int buys=0;
	 for(int i=0;i<OrdersTotal();i++)
	 {
		 if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
		 {
			 if(OrderType()==OP_BUY)  buys++;
		 }
	 }
	 return(buys);
}
//+------------------------------------------------------------------+

こちらは呼び出し側の例
呼び出したいタイミングに合わせてOnTick()、OnInit()とかOnTimer()の中で記述してみてください。
LPosCntの中にポジション数が入ります。

test.mq4
int LPosCnt = LongPositionCnt();

取引所によっては、高頻度でアクセスしたりするとエラーではじかれたりします。
そんなときはsleepなどで間をあけるようコーディングしてみてください。

皆様の手助けになりますように。
間違いなどあればご指摘いただけると助かります。
以上です

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?