真macd 金叉死叉
mt4吧
全部回复
仅看楼主
level 1
timeofsky2012 楼主
//+------------------------------------------------------------------+
//| Macd.mq4 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
double TakeProfitLevel;
double StopLossLevel;
double minstoplevel=60;//100 point to stop and take
//Alert("Minimum Stop Level=",minstoplevel*Point," points");
double stoploss=NormalizeDouble(Bid-minstoplevel*Point,Digits);
double takeprofit=NormalizeDouble(Bid+minstoplevel*Point,Digits);
//---
// Alert("TakeProfitLevel =",TakeProfitLevel);
// Alert("StopLossLevel =",StopLossLevel);
//Buy(stoploss,takeprofit);
// Alert("Cross =",Macd());
//longtrade();
shorttrade();
}
//+------------------------------------------------------------------+
int Macd(){
int result=2;
double DIF=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
double Bar=iOsMA(Symbol(),PERIOD_CURRENT,12,26,9,PRICE_CLOSE,0);
double DEA=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
double preDIF=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
double preBar=iOsMA(Symbol(),PERIOD_CURRENT,12,26,9,PRICE_CLOSE,1);
double preDEA=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
//Golden cross under water
if(DIF<0&&DEA<0&&preDIF<preDEA&&DIF>DEA){
result=1;
}
//Death cross above water
if(DIF>0&&DEA>0&&preDIF>preDEA&&DIF<DEA){
result=0;
}
return result;
}
int Buy(double stoploss,double takeprofit ){
int ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,stoploss,takeprofit,"My order",16384,0,clrGreen);
Alert("ticket =",ticket);
if(ticket<0)
{
Alert("buy GetLastError() =",GetLastError());
Print("BUY OrderSend failed with error #",GetLastError());
}
else{
Print("OrderSend placed successfully");
}
return ticket;
}
int Sell(double stoploss,double takeprofit ){
int ticket=OrderSend(Symbol(),OP_SELL,1,Bid,3,takeprofit,stoploss,"My sell order",16384,0,clrGreen);
Alert("ticket =",ticket);
if(ticket<0)
{
Alert("GetLastError() =",GetLastError());
Print("OrderSend failed with error #",GetLastError());
}
else{
Print("OrderSend placed successfully");
}
return ticket;
}
void closeOrders(int op){
if(op==0){
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderType()==OP_BUY){
OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
}
}
//break;
}
if(op==1){
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderType()==OP_SELL){
OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
}
}
//break;}
}
}
void longtrade(){
if(Macd()==1){
Buy(0,0);
Sleep(60);
}
if(Macd()==0){
closeOrders(0);
//Sell(stoploss,takeprofit);
}
}
void shorttrade(){
if(Macd()==0){
Sell(0,0);
Sleep(60);
}
if(Macd()==1){
closeOrders(1);
//Sell(stoploss,takeprofit);
}
}
2016年06月06日 09点06分 1
1