
一定期間内のポジション制御
EAで自動売買をしていると、一定期間内に複数のポジションを持ってしまうことがあります。建玉調整の都合、好ましくないので、ポジションどうしの間隔を空けたり、一定期間内に保持できるポジション数を制御する必要があります。本記事では、 一定期間内に保持できるポジション数を制御する サンプルソースを紹介します。
サンプルソース
//---------------------------------------------------------
// ポジション取得制御
// 一定期間内の重複ポジション禁止
//---------------------------------------------------------
extern string ポジション取得制限 = "==========================================================";
extern double postionTerm = 100; //ポジション間隔
extern double postionTermCount = 10; //ポジション間隔内の許容ポジション数
printf("ポジション取得制御");
int inTermPosition = 0;
for(int i = OrdersTotal() - 1; i >= 0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;
if(OrderType()==OP_BUY){
if(MathAbs(OrderOpenPrice()-MarketInfo(SymbolPaire,MODE_ASK))<postionTerm* MarketInfo(SymbolPaire, MODE_POINT)){
inTermPosition = inTermPosition +1;
}
}
if(OrderType()==OP_SELL){
if(MathAbs(OrderOpenPrice()-MarketInfo(SymbolPaire,MODE_BID))<postionTerm* MarketInfo(SymbolPaire, MODE_POINT)){
inTermPosition = inTermPosition +1;
}
}
}
if(inTermPosition > postionTermCount){
printf("ポジション取得制御該当状態:" + "期間内のポジション数:" + DoubleToStr(inTermPosition,0));
return;
}
サンプルソースの解説
パラメータ値の設定
postionTerm で指定した間隔内に、postionTermCount で指定したポジション数を許容しています。エントリーのサインが出ても、 postionTermCount を超える場合は、新しいポジションを持たないようにしています。
extern double postionTerm = 100; //ポジション間隔
extern double postionTermCount = 10; //ポジション間隔内の許容ポジション数
許容数オーバー時の処理
許容数オーバーの判定を行い、オーダーしている場合は、returnにて処理を中断し、後続処理を行わないようにしています。
if(inTermPosition > postionTermCount){
printf("ポジション取得制御該当状態:" + "期間内のポジション数:" + DoubleToStr(inTermPosition,0));
return;
}