平均を使用したオシレーターです。
最近レポートを書いているのですが
レポートネタに作成したEAですが、没ネタにしました・・・
平均をあえてオシレーターとして使用しています。
さーて、どうでしょうか
#property strict
sinput int MAGIC = 884;
input double Lots = 0.1;
extern int ShortMAPeriod = 45;//短期平均の期間
extern int LongMAPeriod = 380;//長期平均の期間
extern double Gap = 0;
datetime OldTime;
int i,RV;
double HighestPrice,LowestPrice,ShortMA,LongMA;
void OnTick(){
if(Time[0] != OldTime){
OldTime = Time[0];
ShortMA = iMA(Symbol(),PERIOD_CURRENT,ShortMAPeriod,0,MODE_SMA,PRICE_CLOSE,0);
LongMA = iMA(Symbol(),PERIOD_CURRENT, LongMAPeriod,0,MODE_SMA,PRICE_CLOSE,0);
HighCheck();
LowCheck();
CloseAll();
}
}
void HighCheck(){
HighestPrice = 0;
for(i = OrdersTotal() - 1;i >= 0;i--){
RV = OrderSelect(i,SELECT_BY_POS);
if(OrderMagicNumber() == MAGIC){
if(HighestPrice < OrderOpenPrice()){
HighestPrice = OrderOpenPrice();
}
}
}
if(HighestPrice < Close[0] - Gap && ShortMA > LongMA){RV=OrderSend(Symbol(),OP_SELL,Lots,Bid,5,0,0,NULL,MAGIC);}
}
void LowCheck(){
LowestPrice = Close[0] *3;
for(i = OrdersTotal() - 1;i >= 0;i--){
RV = OrderSelect(i,SELECT_BY_POS);
if(OrderMagicNumber() == MAGIC){
if(LowestPrice > OrderOpenPrice()){
LowestPrice = OrderOpenPrice();
}
}
}
if(LowestPrice > Close[0] + Gap && ShortMA < LongMA){RV=OrderSend(Symbol(),OP_BUY,Lots,Ask,5,0,0,NULL,MAGIC);}
}
void CloseAll(){
for(i=OrdersTotal() - 1;i >= 0;i--){
RV=OrderSelect(i,SELECT_BY_POS);
if(OrderMagicNumber() == MAGIC){
if(OrderType() && ShortMA < LongMA ){RV=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5);}
if(!OrderType()&& ShortMA > LongMA){RV=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5);}
}
}
}