はじめに
システムトレードプログラマのmt4/mql4のメモノートです。
初心者向けの簡単なトピックから公開していきます。
.noteでEAそのものも公開していますので良ければそちらも見てください。
目次
処理内容
今のロングポジション数を確認したい場合の処理になります。
ロングということで「買い」です。「BUY」です。「ブル」です。
のポジションがいくつあるかをカウントするコードです。
使いどころとしては
・最大ポジション数を制限したいとき
→ポジションがあるなら追加エントリーしない。とか
・買い売りのどちらの処理を行えばいいかの判定のとき
→売りシグナルが出たので、買いポジションがあるなら決済する。とか
ですかね。
そんな時はこのコードでロングポジション数を算出してください。
mql4ソースコード
こちらが関数側のソースです。呼び出し側の前に記述されている必要があります。
//+------------------------------------------------------------------+
//| ロングポジション数を取得 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の中にポジション数が入ります。
int LPosCnt = LongPositionCnt();
取引所によっては、高頻度でアクセスしたりするとエラーではじかれたりします。
そんなときはsleepなどで間をあけるようコーディングしてみてください。
皆様の手助けになりますように。
間違いなどあればご指摘いただけると助かります。
以上です