見出し画像

MT4/MQLソースサンプル:ロングポジション数の取得

処理内容

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

外国為替証拠金取引では、「買い」の方の通貨をロング、「売り」の方の通貨をショート、と呼ぶ。常に何らかの通貨を売り、何らかの通貨を買う、という表現をするわけである。2つの通貨のペア間の比率の変動を取引の対象とするから、このような表現となる。通貨のペアは USD/JPY、EUR/JPY、EUR/USD 、などと表記が決まっており、左側の通貨を右側の通貨で売買した場合の数値が取引の数値(=通貨レート)となり、また左側の通貨をどう取引するかを呼称する。たとえばUSDを買って円を売る場合はUSD/JPYのロングと言う。
by wikipedia

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

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

使い方

ロングポジション数(int) = LongPositionCnt();

■引数
なし

■返り値
ロング数(int)

ソースコード

■関数側のコードです。
呼び出し側の前に記述されている必要があります。

//+------------------------------------------------------------------+
//| ロングポジション数を取得      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);
}
//+------------------------------------------------------------------+

■呼び出し側のコードです。
呼び出したいタイミングに合わせてvoid OnTick()、OnInit()とかOnTimer()の中で記述してみてください。

int LPosCnt = LongPositionCnt();

以上でございます。
間違い・アドバイスなどあればご連絡くださいませ。

この記事が気に入ったらサポートをしてみませんか?