有您的持续关注
我们会做得更好

PrizmaL EA



PrizmaL EA根据均线和RSI信号在进行交易。可以按照账户净值控制开仓手数。在盈亏比上面严重失调。

本网收集整理智能交易EA仅为MQL4编程爱好者提供语法及相关编程技巧的学习研究之用,智能交易存在极高的风险测试请用模拟盘,请勿用于实盘。PrizmaL EA源码:

//+------------------------------------------------------------------+
//|                                                      PrizmaL.mq4 |
//|                                     Copyright 2014, QQ:125808047 |
//+------------------------------------------------------------------+
#property copyright "www.125808047.com"
#property link      "http://www.125808047.com/"
extern int    EA_magic          = 2010888;
extern double POS_tp            = 50;
extern double POS_sl            = 300;
extern double POS_slippage      = 3;
extern int    POS_num_max       = 1;
extern double        minLots           = 0.1;
extern double        maxLots           = 15;
extern int           Risk_percent      = 57;
#define DEF_MA_TYP              5
#define DEF_MA_NUM              4
double Buf_MA[DEF_MA_TYP][DEF_MA_NUM];
int MA_prm_1                    = 8;
int MA_prm_2                    = 17;
int MA_prm_3                    = 20;
int MA_prm_4                    = 29;
int MA_prm_5                    = 37;
int    RSI_period5              = 11;
int    RSI_period1              = 38;
double RSI_upper                = 51;
double RSI_lower                = 50;
double   Lots;
int     POS_n_BUY;
int     POS_n_SELL;
int     POS_n_total;
#define SIG_Buy                 0
#define SIG_Sell                1
#define SIG_MAX                 2
bool    TradeSign[SIG_MAX];

void count_position()
{
    POS_n_BUY  = 0;
    POS_n_SELL = 0;

    for( int i = 0 ; i < OrdersTotal() ; i++ ){
        if( OrderSelect( i, SELECT_BY_POS, MODE_TRADES ) == false ){
            break;
        }
        if( OrderMagicNumber() != EA_magic ){
            continue;
        }
        if( OrderSymbol() != Symbol() ){
            continue;
        }
        if( OrderType() == OP_BUY ){
            POS_n_BUY++;
        }
        else if( OrderType() == OP_SELL ){
            POS_n_SELL++;
        }
    }
    POS_n_total = POS_n_BUY + POS_n_SELL;
}

void deinit() {
   Comment("www.125808047.com");
}

int start()
{
    double pos_tp  = 0.0;
    double pos_sl  = 0.0;
    int   spread = MarketInfo(Symbol(),MODE_SPREAD);
    int    ticket;
    int    signal = 0;
    if( IsTradeAllowed() != true ){
        return(0);
    }

    if( Hour()<21 && Hour()>6)
      return(0);

    if( get_signal() == true ){
        count_position();
        Call_MM();
        if( POS_n_total < POS_num_max ){
            if( TradeSign[SIG_Buy]== true ){
                pos_tp = Ask + (POS_tp * Point);
                pos_sl = Ask - (POS_sl * Point);
                ticket = OrderSend( Symbol(), OP_BUY, Lots, Ask, POS_slippage, pos_sl, pos_tp, 0, EA_magic, 0, Blue );
                Print("ticket ",GetLastError());
                if( ticket < 0 ){
                    Sleep(5000);
                }
            }
            if( TradeSign[SIG_Sell] == true ){
                pos_tp = Bid - (POS_tp * Point);
                pos_sl = Bid + (POS_sl * Point);
                ticket = OrderSend( Symbol(), OP_SELL, Lots, Bid, POS_slippage, pos_sl, pos_tp, 0, EA_magic, 0, Red );
                Print("ticket ",GetLastError());
                if( ticket < 0 ){
                    Sleep(5000);
                }
            }
        }
    }

    return(0);
}

bool get_signal()
{
    bool enable_trade = false;
    int  trend_up   = 0;
    int  trend_down = 0;
    int  i;

    ArrayInitialize( TradeSign, false );

    if( Bars >= 100 ){
        for( i = 0 ; i < DEF_MA_NUM ; i++ ){
            Buf_MA[0][ i ] = calc_SMA( PERIOD_M30, MA_prm_1, i );
            Buf_MA[1][ i ] = calc_SMA( PERIOD_M30, MA_prm_2, i );
            Buf_MA[2][ i ] = calc_SMA( PERIOD_M30, MA_prm_3, i );
            Buf_MA[3][ i ] = calc_SMA( PERIOD_M30, MA_prm_4, i );
            Buf_MA[4][ i ] = calc_SMA( PERIOD_M30, MA_prm_5, i );
        }
        double vRSI   = iRSI( Symbol(), PERIOD_M5, RSI_period5, PRICE_CLOSE, 0 );
        double vRSI2  = iRSI( Symbol(), PERIOD_M1, RSI_period1, PRICE_CLOSE, 0 );

        for( i = 0 ; i < DEF_MA_TYP ; i++ ){
            if((Buf_MA[i][2] < Buf_MA[i][1]) && (Buf_MA[i][1] < Buf_MA[i][0])){
                trend_up++;
            }
        }
        if((trend_up > 3) && (vRSI <= RSI_lower) && (vRSI2 <= RSI_lower)){
            TradeSign[SIG_Buy] = true;
            enable_trade = true;
        }

        for( i = 0 ; i < DEF_MA_TYP ; i++ ){
            if((Buf_MA[i][2] > Buf_MA[i][1]) && (Buf_MA[i][1] > Buf_MA[i][0])){
                trend_down++;
            }
        }
        if((trend_down > 3) && (vRSI >= RSI_upper) && (vRSI2 >= RSI_upper)){
            TradeSign[SIG_Sell] = true;
            enable_trade = true;
        }
    }

    return(enable_trade);
}

double calc_SMA( int timeframe, int period, int offset )
{
    double vMA = 0;
    double sum=0;
    int    i;

    for( i = 0 ; i < period ; i++ ){
        sum += iClose( Symbol(), timeframe, i + offset );
    }
    vMA = sum / period;

    return(vMA);
}

void Call_MM()
{
   Lots=AccountFreeMargin()/100000*Risk_percent;

   Lots=MathMin(maxLots,MathMax(minLots,Lots));
   if(minLots<0.1) 
     Lots=NormalizeDouble(Lots,2);
   else
     {
     if(minLots<1) Lots=NormalizeDouble(Lots,1);
     else          Lots=NormalizeDouble(Lots,0);
     }
}

如您喜欢此文章请点下面分享按钮↴峰汇在线 » PrizmaL EA
上一篇:
下一篇:
分享到:更多 ()