在交易的過程中,投資人可能建立了許多不同的商品部位,若要查詢單一商品的持倉均價及口數,可透過以下函數查詢。
PositionGetSymbol:取得未平倉的商品名稱。
PositionsTotal:取得未平倉總量。
PositionGetDouble(POSITION_VOLUME):取得未平倉的成交量。
PositionGetDouble(POSITION_PRICE_OPEN):取得未平倉的成交價格。
以下是範例:
假設帳戶中有不同的商品,若要查詢單一商品的持倉均價及口數(以USDJPY.為例)。
該商品成交價格有113.647(成交1手)、113.619(成交0.01手)、113.664(成交0.02手)共1.03口。
總成本應為11705.647,單位數以0.01計算。
查詢結果如下:
平均成本為:113.647=11705.647/103
原始碼範例:
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
void OnStart()
{
int USDJPY_symbolsum=0;
int USDCHF_symbolsum=0;
int CHFJPY_symbolsum=0;
double USDJPY_price,USDJPY_sumprice,USDJPY_avgprice,USDJPY_volume,USDJPY_sumvolume;
double USDCHF_price,USDCHF_sumprice,USDCHF_avgprice,USDCHF_volume,USDCHF_sumvolume;
double CHFJPY_price,CHFJPY_sumprice,CHFJPY_avgprice,CHFJPY_volume,CHFJPY_sumvolume;
int Total_lot=PositionsTotal();//宣告未平倉總量
for(int i=0;i<Total_lot;i++)
{
ResetLastError();
string symbol=PositionGetSymbol(i);//宣告全部未平倉的商品名稱
if(symbol=="USDJPY.")
{
USDJPY_symbolsum=USDJPY_symbolsum+1; //累加USDJPY的成交筆數
USDJPY_volume =PositionGetDouble(POSITION_VOLUME); //取得USDJPY成交量
USDJPY_price =PositionGetDouble(POSITION_PRICE_OPEN); //取得USDJPY成交價格
if(USDJPY_volume >=0.01) //只要取得數量大於0.01
{
USDJPY_volume *=100; //將取得數量*100,使它變成次數
USDJPY_price= USDJPY_price * USDJPY_volume; //將取得的價格*次數
}
USDJPY_sumvolume += USDJPY_volume; //累加USDJPY的未平倉量
USDJPY_sumprice += USDJPY_price; //累加USDJPY成交價格
}
if(symbol=="USDCHF.")
{
USDCHF_symbolsum=USDCHF_symbolsum+1;
USDCHF_volume =PositionGetDouble(POSITION_VOLUME);
USDCHF_price =PositionGetDouble(POSITION_PRICE_OPEN);
if(USDCHF_volume >=0.01)
{
USDCHF_volume *=100;
USDCHF_price= USDCHF_price * USDCHF_volume;
}
USDCHF_sumvolume += USDCHF_volume;
USDCHF_sumprice += USDCHF_price;
}
if(symbol=="CHFJPY.")
{
CHFJPY_symbolsum=CHFJPY_symbolsum+1;
CHFJPY_volume =PositionGetDouble(POSITION_VOLUME);
CHFJPY_price =PositionGetDouble(POSITION_PRICE_OPEN);
if(CHFJPY_volume >=0.01)
{
CHFJPY_volume *=100;
CHFJPY_price= CHFJPY_price * CHFJPY_volume;
}
CHFJPY_sumvolume += CHFJPY_volume;
CHFJPY_sumprice += CHFJPY_price;
}
}
//計算平均價格
USDJPY_avgprice=USDJPY_sumprice/USDJPY_sumvolume;
USDCHF_avgprice=USDCHF_sumprice/USDCHF_sumvolume;
CHFJPY_avgprice=CHFJPY_sumprice/CHFJPY_sumvolume;
MessageBox("USDJPY成交筆數:"+USDJPY_symbolsum+"\n"+"未平倉量:"+USDJPY_sumvolume+"\n"+"平均價格:"+USDJPY_avgprice+"\n"+"\n"+
"USDCHF成交筆數:"+USDCHF_symbolsum+"\n"+"未平倉量:"+USDCHF_sumvolume+"\n"+"平均價格:"+USDCHF_avgprice+"\n"+"\n"+
"CHFJPY成交筆數:"+CHFJPY_symbolsum+"\n"+"未平倉量:"+CHFJPY_sumvolume+"\n"+"平均價格:"+CHFJPY_avgprice+"\n",
"興小弟");
}
以上只是個人程式學習心得分想
留言列表