0
1

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ソースコード

処理内容

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

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

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

mql4ソースコード

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

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

input int MAGIC = 12345;//マジックナンバーを設定

int ShortPositionCnt()
{
	 int sells=0;
	 for(int i=0;i<OrdersTotal();i++)
	 {
		 if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
		 {
			 if(OrderType()==OP_SELL) sells++;
		 }
	 }
	 return(sells);
}
//+------------------------------------------------------------------+

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

test.mq4
int SPosCnt = ShortPositionCnt();

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

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

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?