close

 

在交易的過程中,投資人可能建立了許多不同的商品部位,若要查詢單一商品的持倉均價及口數,可透過以下函數查詢。

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計算

Positions001.png

查詢結果如下:

平均成本為:113.647=11705.647/103

Position002.png

原始碼範例:

#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",
             "興小弟");
  }

以上只是個人程式學習心得分想

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 興小弟讀書筆記 的頭像
    興小弟讀書筆記

    興小弟讀書筆記

    興小弟讀書筆記 發表在 痞客邦 留言(0) 人氣()