売りポジションの決済の条件は、
<売りポジション>
・エントリーした足の高値を終値ベースで上抜ける時は【成行で決済】
・終値ベースで、為替レートとMACDラインが前日の値よりも大きくなる時は【成行で決済】
ですです。
買いの決済の場合と逆なのですが、売りの場合は高値が必要になりますので、
その処理を付け足す必要があります。
まずは、初期宣言項目に以下を付け足します。
double entryhigh;
この変数に、高値を覚えさせます。
そして、指標計算の箇所に、
if(entrybar==Bars) entryhigh=High[0];
を付け足します。
entrybar にポジションを持った時のローソク足の数 Bars を覚えさせているので、
次の足ができて、ローソク足の数が変わるまでは、entryhigh に高値の値を覚えさせます。
時間が進んで新しい足ができると、この処理は行われないので、
新しい足ができる前の、仕掛けた足の高値をずっと覚えていてくれます。
そして、決済処理の箇所に以下を付け足します。
//売りポジション判断
if(entrybar!=Bars && sellpos!=0
&& (entryhigh<Close[1] || (Close[1]>Close[2] && macd1>macd2)))
{
for(i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=magic01 || OrderSymbol()!=Symbol()) continue;
if(OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
}
}
}
仕掛の判断にはポジションの保有数で、買いと売りを合計したものを使用しましたが、
決済の場合は個別に処理するので、sellpos を使用します。
entryhigh<Close[1]
で、エントリーした足の高値と、終値を比べています。
Close[1]>Close[2] && macd1>macd2
で、為替レートとMACDの値が上昇しているのを確認します。
そして、そのどちらかの条件に当てはまる時に決済します。
この売りポジションの判断を買いポジションの判断の後ろに付け足します。
このようにして徐々に作成していけばOKです。
どのように作成しようと、最終的に自分の思ったように動けば問題ないですよ。