⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prizmal.mq4

📁 外汇交易系统,mt4,交易货币是eur/gbp
💻 MQ4
字号:
//+---------------------------------------------------------------------+
//|                                                         PrizmaL.mq4 |
//|                                                                 xxx |
//|                                                                  xx |
//+---------------------------------------------------------------------+
//EURGBP 5 min
#property copyright "xxx"
#property link      "http://xxx"
extern int    EA_magic          = 2009384;
extern double POS_tp            = 5;
extern double POS_sl            = 30;
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;
}

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, " ", 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, " ", 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);
     }


   return(0);


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -