「GU/GDで検証」の意味がよくわかりません。
ゴールデンクロス(GC)/デッドクロス(DC)でしたら、以下のサンプルをどうぞ。
//マジックナンバー
#define MAGIC 0000
//パラメーター
extern double Lots = 0.1;
extern int Slip = 3;
extern int MAF_Period = 5;
extern int MAS_Period =25;
//ポジション決済関数
void ClosePositions()
{
for(int i=0; i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slip,White);
break;
}
}
}
//スタート関数
int start()
{
//トレード可否
if(IsTradeAllowed()==false) return(0);
//ポジション数の確認
int Pos1 = 0;
int Pos2 = 0;
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS) == false) break;
if(OrderSymbol() != Symbol() || OrderMagicNumber() != MAGIC) continue;
{
if(OrderType() == OP_BUY) Pos1++;
if(OrderType() == OP_SELL) Pos2++;
}
}
//各種変数の宣言
double MAF1 = iMA(NULL,0,MAF_Period,0,MODE_SMA,PRICE_CLOSE,1);
double MAF2 = iMA(NULL,0,MAF_Period,0,MODE_SMA,PRICE_CLOSE,2);
double MAS1 = iMA(NULL,0,MAS_Period,0,MODE_SMA,PRICE_CLOSE,1);
double MAS2 = iMA(NULL,0,MAS_Period,0,MODE_SMA,PRICE_CLOSE,2);
//買いシグナル
if(MAF2<=MAS2 && MAF1>MAS1 && Pos1==0)
{
ClosePositions();
OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,"",MAGIC,0);
}
//売りシグナル
if(MAF2>=MAS2 && MAF1<MAS1 && Pos2==0)
{
ClosePositions();
OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,0,0,"",MAGIC,0);
}
return(0);
}