• 締切済み

メタトレーダー EAについて

ローソク足が21日移動平均線を下から上に(上から下に)ブレイクした時に買う(売る)場合のプログラムがわかりません。 それと、リミットとストップを指定する場合、レートではなくピプス数で指定する事はできないのでしょうか? よろしくお願いします。

みんなの回答

回答No.1

以下の条件で、サンプルプログラムをベタ張りしておきましたので、参考にどうぞ。 1.条件 (1)移動平均線の計算期間を指定できる。 (2)ポジションは2つ以上持たない。 (3)終値と移動平均線のクロスで必ずドテンをする。 (4)利食いと損切りをPIPSで指定できる。 (5)週末もポジションを持ち越す。 2.サンプルプログラム #property copyright "Copyright ゥ 2011, xchsshzo." int init() { return(0); } int deinit() { return(0); } //マジックナンバー #define MAGIC 0000 //パラメーター extern double Lots = 0.1; extern int Slip = 3; extern int MA_Period = 21; extern double SL = 50; extern double TP = 50; //ポジション決済関数 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 C1 = Close[1]; double C2 = Close[2]; double MA1 = iMA(NULL,0,MA_Period,0,MODE_SMA,PRICE_CLOSE,1); double MA2 = iMA(NULL,0,MA_Period,0,MODE_SMA,PRICE_CLOSE,2); int ticket = 0; //買いシグナル if(Pos1==0 && C2<=MA2 && C1>MA1) { ClosePositions(); ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,Ask-SL*Point,Ask+TP*Point,"",MAGIC,0); } //売りシグナル if(Pos2==0 && C2>=MA2 && C1<MA1) { ClosePositions(); ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,Bid+SL*Point,Bid-TP*Point,"",MAGIC,0); } return(0); }

関連するQ&A