ごきげんよう、FX貴族です。
いまEA作りを学んでいる人や
これから学びたい!という人向けに、
もっと基本的なテクニカルである、
移動平均線のクロスを利用したEAの
サンプルコードをご紹介します。
コピペして使えますので、
ぜひ試してみてくださいね。
このまま使う人は少ないと思いますが、
実際のトレードでの利用に際しては
ご自身の責任でお願いします。
#property strict
#property version "1.00"
#property copyright "FX-KIZOKU"
//+------------------------------------------------------------------+
// 基本設定
//+------------------------------------------------------------------+
input string Comment = "GOLDEN_CROSS_SAMPLE_v1.00"; //コメント
input double Lots = 0.1; //取引するロット数
input int Magic = 20230422; //マジックナンバー
input int FastMAPeriod = 10; //短期移動平均線の期間
input int SlowMAPeriod = 20; //長期移動平均線の期間
input int MaxSpread = 30; //許容する最大スプレッド(points)
//+------------------------------------------------------------------+
// 現在のポジション状況を確認
//+------------------------------------------------------------------+
int CheckPos() {
int buys=0,sells=0;
for(int i=0;i<OrdersTotal();i++) {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
if(buys>0) return(buys);
else return(-sells);
}
//+------------------------------------------------------------------+
// 新規注文
//+------------------------------------------------------------------+
void ChechForOpen() {
double FastMA1 = iMA(_Symbol, 0, FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
double FastMA2 = iMA(_Symbol, 0, FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 2);
double SlowMA1 = iMA(_Symbol, 0, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
double SlowMA2 = iMA(_Symbol, 0, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 2);
if (CheckPos() == 0 && Volume[0] <= 10 && MarketInfo(Symbol(),MODE_SPREAD) <= MaxSpread) {
int Ticket;
if(FastMA1 > SlowMA1 && FastMA2 < SlowMA2) {
Ticket = OrderSend(_Symbol, OP_BUY, Lots, Ask, 0, 0, 0, Comment, Magic, 0, Green);
}
if(FastMA1 < SlowMA1 && FastMA2 > SlowMA2) {
Ticket = OrderSend(_Symbol, OP_SELL, Lots, Bid, 0, 0, 0, Comment, Magic, 0, Red);
}
}
}
//+------------------------------------------------------------------+
// ポジションの決済
//+------------------------------------------------------------------+
void CheckForClose() {
double FastMA1 = iMA(_Symbol, 0, FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
double FastMA2 = iMA(_Symbol, 0, FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 2);
double SlowMA1 = iMA(_Symbol, 0, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
double SlowMA2 = iMA(_Symbol, 0, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 2);
if (CheckPos() != 0) {
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) {
if(FastMA1 < SlowMA1 && FastMA2 > SlowMA2) {
if(!OrderClose(OrderTicket(),OrderLots(),Bid,0,White))
Print("OrderClose error ",GetLastError());
}
}
if(OrderType()==OP_SELL) {
if(FastMA1 > SlowMA1 && FastMA2 < SlowMA2) {
if(!OrderClose(OrderTicket(),OrderLots(),Ask,0,White))
Print("OrderClose error ",GetLastError());
}
}
}
}
}
//+------------------------------------------------------------------+
// 価格が動いたら以下の内容を実行
//+------------------------------------------------------------------+
void OnTick() {
CheckForClose();
ChechForOpen();
}
コメント