📅 财经日历 📊 实时波动 📈 大盘云图 📶 行情走势 🆚 投机情绪 🚀 今日热点

    MT4 EA编程速成班——基础篇

    2012-11-13 · 8032 阅读
    # 什么是MT4?
    我就当你了解什么是MT4了
    MT4就是META. TRADER 4
    # 什么是EA?
    我也当你了解什么是EA了
    EA 就是 Expert Adviser
    EA 就是智能交易系统
    智能教育系统就是:
    -软件自己判断下订单
    -软件自己判断提成利润
    -软件自己判断砍仓止输
    # 什么是速成班?
    就是你在很短很快的时间内就可以学会如何编写EA
    是的,快则8个学习小时
    慢则24个学习小时
    # 什么叫“易学难精”?
    就是你很快的就上手,难在成为厉害的高手。
    这需要时间慢慢的去研究编写。
    久而久之你就可以是EA编写高手了。
    05-25-2009 08:56 AM
    yes810
    第一课::了解EA的形式

    * 以下就是EA的编写形式//
    +------------------------------------------------------------------+
    //| MT4-EA制作速成班.mq4 |
    //| Copyright ?2007, MetaQuotes Software Corp. |
    //| http://www.FXunion.com |
    //+------------------------------------------------------------------+
    #property copyright "Copyright ?2007, MetaQuotes Software Corp."
    #property link. "http://www.FXunion.com"
    //+------------------------------------------------------------------+
    //| expert initialization function |
    //+------------------------------------------------------------------+
    int init()
    {
    //----
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| expert deinitialization function |
    //+------------------------------------------------------------------+
    int deinit()
    {
    //----
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| expert start function |
    //+------------------------------------------------------------------+
    int start()
    {
    //----
    //----
    return(0);
    }
    //+------------------------------------------------------------------+ 

    * //+------------------------------------------------------------------+
    //| MT4-EA制作速成班.mq4 |
    //| Copyright ?2007, MetaQuotes Software Corp. |
    //| http://www.FXunion.com |
    //+------------------------------------------------------------------+
    这个是在上面的垃圾
    写与不写都无所谓
    我们就不用理他

    * #property copyright "Copyright ?2007, MetaQuotes Software Corp."
    #property link. "http://www.FXunion.com"
    这个也是在上面的垃圾
    写与不写都无所谓
    我们也不用理他

    * //+------------------------------------------------------------------+
    //| expert initialization function |
    //+------------------------------------------------------------------+
    int init()
    {
    //----
    //以后可能有用到
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| expert deinitialization function |
    //+------------------------------------------------------------------+
    int deinit()
    {
    //----
    //以后可能有用到
    //----
    return(0);
    }
    这两个很少用到。高高手才会用
    速成班的话,这个可以不用理他。
    放在一边先,以后才学怎样用它。

    * //+------------------------------------------------------------------+
    //| expert start function |
    //+------------------------------------------------------------------+
    int start()
    {
    //----
    //主程式
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    这个就是EA开始操作的重要部分
    以上的EA的编写形式我们改成如下:

    * //+------------------------------------------------------------------+
    //| MT4-EA制作速成班.mq4 |
    //| Copyright 2007, MT4-EA制作速成班. |
    //| http://www.FXunion.com |
    //+------------------------------------------------------------------+
    #property copyright "Copyright 2007, MT4-EA制作速成班."
    #property link. "http://www.FXunion.com"
    //+------------------------------------------------------------------+
    //| expert initialization function |
    //+------------------------------------------------------------------+
    int init()
    {
    //----
    /以后可能有用到
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| expert deinitialization function |
    //+------------------------------------------------------------------+
    int deinit()
    {
    //----
    /以后可能有用到
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| expert start function |
    //+------------------------------------------------------------------+
    int start()
    {
    //----
    //主程式
    //----
    return(0);
    }
    //+------------------------------------------------------------------+ 

    * 什么是“.mq4”?
    EA制作好了就save成.mq4的文件
    这文件是可以修改的
    * 什么是“.ex4”?
    EA制作好了
    按“编写”就会自动save成.ex4的文件
    这文件是不可以被修改的
    这文件是加密的
    可以出售的文件。
    * 有什么问题要问吗?
    但是我告诉你
    不要问太深的问题,我是不会的。
    05-25-2009 08:59 AM
    yes810
    第二课:EA重要部分

     
    * 回到EA重要部分

    //+------------------------------------------------------------------+
    //| expert start function |
    //+------------------------------------------------------------------+
    int start()
    {
    //----
    //主程式
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
     
    * 我们要知道EA是由上面往下读的
    所以我们在编写方面要有逻辑思考
    以下是速成班编写的形式
    //+------------------------------------------------------------------+
    //| expert start function |
    //+------------------------------------------------------------------+
    int start()
    {
    //----
    MoneyManagement();
    macd();
    ma();
    zhangchang();
    buyme();
    sellme();
    xianshi();
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    void MoneyManagement() {
    }
    //+------------------------------------------------------------------+
    void macd() {
    }
    //+------------------------------------------------------------------+
    void ma() {
    }
    //+------------------------------------------------------------------+
    void zhangchang() {
    }
    //+------------------------------------------------------------------+
    void buyme() {
    }
    //+------------------------------------------------------------------+
    void sellme() {
    }
    //+------------------------------------------------------------------+
    void buyme() {
    }
    //+------------------------------------------------------------------+
    void xianshi() {
    }
    //+------------------------------------------------------------------+
    /////end

    * // 这两划代表右边的不要读
    也可以说是注解
    注意:EA不会读中文符号。比如这个“”
    这个就可以 ""
    * 我们可以完整他
    //+------------------------------------------------------------------+
    //| MT4-EA制作速成班.mq4 |
    //| Copyright 2007, MT4-EA制作速成班. |
    //| http://www.FXunion.com |
    //+------------------------------------------------------------------+
    #property copyright "Copyright 2007, MT4-EA制作速成班."
    #property link. "http://www.FXunion.com"
    //+------------------------------------------------------------------+
    //| expert initialization function |
    //+------------------------------------------------------------------+
    int init()
    {
    //----
    //以后可能有用到
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| expert deinitialization function |
    //+------------------------------------------------------------------+
    int deinit()
    {
    //----
    //以后可能有用到
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| expert start function |
    //+------------------------------------------------------------------+
    int start()
    {
    //----
    //主程式
    MoneyManagement();//资金管理
    macd();//指标管理
    ma();//指标管理
    zhangchang();//战场管理
    buyme();//买上
    sellme();//买下
    xianshi();//显示管理
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    void MoneyManagement() {
    //子程式
    //这边要写一些东西
    }
    //+------------------------------------------------------------------+
    void macd() {
    //子程式
    //这边要写一些东西
    }
    //+------------------------------------------------------------------+
    void ma() {
    //子程式
    //这边要写一些东西
    }
    //+------------------------------------------------------------------+
    void zhangchang() {
    ///子程式
    //这边要写一些东西
    }
    //+------------------------------------------------------------------+
    void buyme() {
    //子程式
    //这边要写一些东西
    }
    //+------------------------------------------------------------------+
    void sellme() {
    //子程式
    //这边要写一些东西
    }
    //+------------------------------------------------------------------+
    void buyme() {
    //子程式
    //这边要写一些东西
    }
    //+------------------------------------------------------------------+
    void xianshi() {
    //子程式
    //这边要写一些东西
    }
    //+------------------------------------------------------------------+
    /////end
     
    * 如果你在上面加这个xianshi2();
    下面就加这个
    //////////////////////////
    void xianshi2() {
    //这边要写一些东西
    }
    ////////////////////////////
    可以任意无限的加。。。
    * 有什么问题要问吗?
    但是我老实告诉你
    不要问太深的问题,我是不会回答的。
    05-25-2009 09:03 AM
    yes810
    第三课::加入指标

    * //////////////////////////////
    void ma()
    {
    ma1now = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_CLOSE,0);
    ma1now2 = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_CLOSE,1);
    ma2now = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_CLOSE,0);
    ma2now2 = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_CLOSE,1);
    ma1bnow = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_OPEN,0);
    ma2bnow = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_OPEN,0);
    }
    ////////////////////////
    ma1now是代表的字
    你可以写成什么都可以
    PRICE_CLOSE是ma最新的参数
    PRICE_OPEN是ma开始的参数
    ma1now = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_CLOSE,0);
    这个整句是死的。
    你只要copy&press就可以用了
    ma1是ma的参数号码或bar
    如果这样写法,他人不能更改参数
    double ma1=1,ma2=2;
    double ma1now,ma1now2,ma2now,ma2now2,ma1bnow,ma2bnow;

    这样写法,他人可以更改参数
    extern double ma1=1,ma2=2;
    这个是要放在#property上面那边的

    * 其它指标的写法
    macd1now=iMACD(NULL,0,macd1,macd1*2,1,PRICE_CLOSE, MODE_MAIN,0);
    zigzag1now=iCustom(NULL,0,"ZigZag",2,deviation,bac kstep,0,0);
    Highest1now=High[iHighest(NULL,0,MODE_HIGH,Highest1,0)];
    Lowest1now=Low[iLowest(NULL,0,MODE_LOW,Lowest1,0)];
    iTrend1now=iCustom(NULL,0,"iTrend",2,0,0,iTrend1,0 ,iTrend1,0,0,1);
    wpr1now = iWPR(Symbol(),0,wpr1,0);
    指标写法是不用记住的
    网上可以找到很多指标的写法

    * 有了指标
    我们可以更改我们的EA了
    更改如下:
    注意看看
    刚刚的指标加在什么地方
    什么位置
    //+------------------------------------------------------------------+
    //| MT4-EA制作速成班.mq4 |
    //| Copyright 2007, MT4-EA制作速成班. |
    //| http://www.FXunion.com |
    //+------------------------------------------------------------------+
    #property copyright "Copyright 2007, MT4-EA制作速成班."
    #property link. "http://www.FXunion.com"
    extern double ma1=1,ma2=2;
    double ma1now,ma1now2,ma2now,ma2now2,ma1bnow,ma2bnow;
    //+------------------------------------------------------------------+
    //| expert initialization function |
    //+------------------------------------------------------------------+
    int init()
    {
    //----
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| expert deinitialization function |
    //+------------------------------------------------------------------+
    int deinit()
    {
    //----
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| expert start function |
    //+------------------------------------------------------------------+
    int start()
    {
    //----
    MoneyManagement();//资金管理
    macd();//指标管理
    ma();//指标管理
    zhangchang();//战场管理
    buyme();//买上
    sellme();//买下
    xianshi();//显示管理
    //----
    return(0);
    }
    //+------------------------------------------------------------------
    +void MoneyManagement() {
    //这边要写一些东西
    }
    //+------------------------------------------------------------------+
    void macd() {
    //这边要写一些东西
    }
    //+------------------------------------------------------------------+
    void ma()
    {
    ma1now = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_CLOSE,0);
    ma1now2 = iMA(NULL,0,ma10,0,MODE_EMA,PRICE_CLOSE,1);
    ma2now = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_CLOSE,0);
    ma2now2 = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_CLOSE,1);
    ma1bnow = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_OPEN,0);
    ma2bnow = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_OPEN,0);
    }
    //+------------------------------------------------------------------+
    void zhangchang() {
    //这边要写一些东西
    }
    //+------------------------------------------------------------------+
    void buyme() {
    //这边要写一些东西
    }
    //+------------------------------------------------------------------+
    void sellme() {
    //这边要写一些东西
    }
    //+------------------------------------------------------------------+
    void buyme() {
    //这边要写一些东西
    }
    //+------------------------------------------------------------------+
    void xianshi() {
    //这边要写一些东西
    }
    //+------------------------------------------------------------------+
    /////end

    * 注意这个{},不要糊涂的删除了也不知道
    会出错的
    注意这个可以写成这样
    效果一样
    double ma1=1;
    double ma2=2;
    double ma1now;
    double ma1now2;
    double ma2now;
    double ma2now2;
    double ma1bnow;
    double ma2bnow;

    * extern double ma1=1;
    extern double ma2=2;
    这样写可以显示在EA开始的修改处

    * 有什么问题要问吗?
    但是我老实告诉你
    不要问太深的问题
    可能我也不会回答的。
    05-25-2009 09:07 AM
    yes810
    第四课-资金管理

    * 这个将放在#property上面那边
    ////////////////////////
    extern string _资金管理_ ="任选一个";
    extern bool zijiguanli1 = true;//false true、、
    extern bool zijiguanli2= false;//false true、、
    extern bool zijiguanli3= false;//false true、、
    ///////////////////////////////////
    true=要
    false =不要用
    我提供了三个资金管理作为参考
    你可以自己增加自己喜欢的资金管理方案
    * /////////////////////////////////////
    void MoneyManagement() {
    lotstart=(AccountBalance()*lotab/10000);
    lots=lotstart;
    if(cheng==0){cheng=1;}
    CurrentBasket=AccountEquity()-AccountBalance();
    /////////////////////////////////////////////////////////////////
    if(zijiguanli1){ LotMM = lots;}
    /////////////////////////////////////////////////////////////////
    if(zijiguanli2){
    if(CurrentBasket<0 ) {LotMM=NormalizeDouble(lots*(OrdersTotal()*cheng)+ lotstart,2); }
    if(CurrentBasket==0 ) {LotMM=NormalizeDouble(LotMM*0,2); }
    }
    /////////////////////////////////////////////////////////////////
    if(zijiguanli3){
    if(s+b==0){aa=1;}
    if(s+b==1){aa=3;}
    if(s+b==2){aa=7;}
    if(s+b==3){aa=11;}
    if(s+b==4){aa=20;}
    if(s+b==5){aa=31;}
    if(s+b==6){aa=42;}
    if(s+b==7){aa=54;}
    if(s+b==8){aa=66;}
    if(s+b==9){aa=76;}
    if(s+b>=10){aa=66;}
    if(CurrentBasket<0 ) {LotMM=NormalizeDouble(lotstart*aa,2); }
    if(CurrentBasket==0 ) {LotMM=NormalizeDouble(LotMM*0,2); }
    }
    /////////////////////////////////////////////////////////////////
    if(LotMM<lots){LotMM=0.01;}
    if(LotMM>LotsMax){LotMM=LotsMax;}
    }//end zijiguanli
    //////////////////////////////////////////
    注意:这个资金管理加了很多新的词句
    所以我们要加上去#property上面那边
    不然会出错

    * 新的词句:
    extern double cheng=1;
    double aa=0;
    int s=0,b=0;
    intdouble CurrentBasket=0;
    double LotMM=0;
    double lotstart=0;
    double LotsMax=100;
    extern double lotab=0.1;
    double lots=0;
    * 注意:
    double 是有小数点的
    int 是没有小数点的
    * 注意:
    if(){}
    很容易用,比如:
    if(LotMM<lots){LotMM=0.01;}
    意思就是:
    如果LotMM小过lots,LotMM就等于0.01。
    if(LotMM>LotsMax){LotMM=LotsMax;}
    意思就是:
    如果LotMM大过LotsMax,LotMM就等于LotsMax。
    不会的话,不要紧
    copy&press就可以用了
    把void MoneyManagement() { }
    copy&press到我们EA模板去
    结果如下://
    * +------------------------------------------------------------------+
    //| MT4-EA制作速成班.mq4 |
    //| Copyright 2007, MT4-EA制作速成班. |
    //| http://www.FXunion.com |
    //+------------------------------------------------------------------+
    #property copyright "Copyright 2007, MT4-EA制作速成班."
    #property link. "http://www.FXunion.com"
    extern double ma1=1,ma2=2;
    double ma1now,ma1now2,ma2now,ma2now2,ma1bnow,ma2bnow;
    ////////////////////////
    extern string _资金管理_ ="任选一个";
    extern bool zijiguanli1= true;//false true、、
    extern bool zijiguanli2= false;//false true、、
    extern bool zijiguanli3= false;//false true、、
    ///////////////////////////////////
    extern double cheng=1;
    double aa=0;
    int s=0,b=0;
    int double CurrentBasket=0;
    double LotMM=0;
    double lotstart=0;
    double LotsMax=100;
    extern double lotab=0.1;
    double lots=0;
    //+------------------------------------------------------------------+
    //| expert initialization function |
    //+------------------------------------------------------------------+
    int init()
    {
    //----
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| expert deinitialization function |
    //+------------------------------------------------------------------+
    int deinit()
    {
    //----
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| expert start function |
    //+------------------------------------------------------------------+
    int start()
    {
    //----
    MoneyManagement();//资金管理
    macd();//指标管理
    ma();//指标管理
    zhangchang();//战场管理
    buyme();//买上
    sellme();//买下
    xianshi();//显示管理
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    void MoneyManagement() {
    lotstart=(AccountBalance()*lotab/10000);
    lots=lotstart;
    if(cheng==0){cheng=1;}
    CurrentBasket=AccountEquity()-AccountBalance();
    /////////////////////////////////////////////////////////////////
    if(zijiguanli1){ LotMM = lots;}
    /////////////////////////////////////////////////////////////////
    if(zijiguanli2){
    if(CurrentBasket<0 ) {LotMM=NormalizeDouble(lots*(OrdersTotal()*cheng)+ lotstart,2); }
    if(CurrentBasket==0 ) {LotMM=NormalizeDouble(LotMM*0,2); }
    }
    /////////////////////////////////////////////////////////////////
    if(zijiguanli3){
    if(s+b==0){aa=1;}
    if(s+b==1){aa=3;}
    if(s+b==2){aa=7;}
    if(s+b==3){aa=11;}
    if(s+b==4){aa=20;}
    if(s+b==5){aa=31;}
    if(s+b==6){aa=42;}
    if(s+b==7){aa=54;}
    if(s+b==8){aa=66;}
    if(s+b==9){aa=76;}
    if(s+b>=10){aa=66;}
    if(CurrentBasket<0 ) {LotMM=NormalizeDouble(lotstart*aa,2); }
    if(CurrentBasket==0 ) {LotMM=NormalizeDouble(LotMM*0,2); }
    }
    /////////////////////////////////////////////////////////////////
    if(LotMM<lots){LotMM=lots;}
    if(LotMM>LotsMax){LotMM=LotsMax;}
    }//end zijiguanli
    //+------------------------------------------------------------------+
    void macd() {
    //这边要写一些东西
    }
    //+------------------------------------------------------------------+
    void ma()
    {
    ma1now = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_CLOSE,0);
    ma1now2 = iMA(NULL,0,ma10,0,MODE_EMA,PRICE_CLOSE,1);
    ma2now = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_CLOSE,0);
    ma2now2 = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_CLOSE,1);
    ma1bnow = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_OPEN,0);
    ma2bnow = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_OPEN,0);
    }
    //+------------------------------------------------------------------+
    void zhangchang() {
    //这边要写一些东西
    }
    //+------------------------------------------------------------------+
    void buyme() {
    //这边要写一些东西
    }
    //+------------------------------------------------------------------+
    void sellme() {
    //这边要写一些东西
    }
    //+------------------------------------------------------------------+
    void buyme() {
    //这边要写一些东西
    }
    //+------------------------------------------------------------------+
    void xianshi() {
    //这边要写一些东西
    }
    //+------------------------------------------------------------------+
    /////end

    * 资金管理有三个方案:
    资金管理1=平注
    资金管理2=1,2,3,4,5...
    可以乘,如果你把cheng改成2或3或0.2
    资金管理3是固定式,1,3,7,11.。。
    * 不明白?别急,用了就明白。
    有什么问题要问吗?
    但是我老实告诉你
    我是自学成功的,没有上过什么EA课程
    不要问太深的问题
    可能我也不会回答的。
    05-25-2009 09:14 AM
    yes810
    第五课:策略:战场

    * 这里是整个EA最重要的地方
    这里策略变化无穷
    高深莫测就是这里作怪

    * 在这里你要想:。。。
    你的EA要怎样下注
    什么时候买上?
    什么时候买下?
    怎样买上?
    怎样买下?
    有买上又买下?
    什么时候离场?
    条件满足是很重要的

    * 在这里我给个简单的策略
    -ma1黄金交叉ma2,EA买上
    -ma1死亡交叉ma2,EA买下
    -有赚25点就出场
    -如果亏的时候亏50点就出场
    * 是这样编写的:
    ma1now>ma2now
    这样一句是不够条件的
    ma1now>ma2now
    && ma1now2<ma2now2
    这个就是黄金交叉的编写法
    * 反过来
    ma1now<ma2now
    && ma1now2>ma2now2
    这个就是死亡交叉的编写法
    * 但是条件还是不够的
    再加
    ma1now>ma2now
    && ma1now2<ma2now2
    && s+b==0
    s+b==0 意思就是 买上+买下等于没有
    没有下注,如果遇到条件符合就可以下注的意思
    && 的意思就是“再加”什么什么的条件
    那么整句是这样编写
    if(什么什么){就什么什么}
    就是用这个
    if(ma1now>ma2now
    && ma1now2<ma2now2
    && s+b==0
    ){buyme();}
    if(ma1now<ma2now
    && ma1now2>ma2now2
    && s+b==0
    ){sellme();}
    * 现在我们就把这两句copy&press到战场去
    注意:
    现在又多了两个新的东西
    buyme()和sellme()
    你就copy&press buyme()和sellme()的编写法就可以了。
    * 结果如下:
    //+------------------------------------------------------------------+
    //| MT4-EA制作速成班.mq4 |
    //| Copyright 2007, MT4-EA制作速成班. |
    //| http://www.FXunion.com |
    //+------------------------------------------------------------------+
    #property copyright "Copyright 2007, MT4-EA制作速成班."
    #property link. "http://www.FXunion.com"
    extern double ma1=1,ma2=2;
    double ma1now,ma1now2,ma2now,ma2now2,ma1bnow,ma2bnow;
    ////////////////////////
    extern string _资金管理_ ="任选一个";
    extern bool zijiguanli1= true;//false true、、
    extern bool zijiguanli2= false;//false true、、
    extern bool zijiguanli3= false;//false true、、
    ///////////////////////////////////
    extern double cheng=1;
    double aa=0;
    int s=0,b=0;
    intdouble CurrentBasket=0;
    double LotMM=0;
    double lotstart=0;
    double LotsMax=100;
    extern double lotab=0.1;
    double lots=0;
    double TP=0,TPP=0,SL=0,SLL=0;
    //+------------------------------------------------------------------+
    //| expert initialization function |
    //+------------------------------------------------------------------+
    int init()
    {
    //----
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| expert deinitialization function |
    //+------------------------------------------------------------------+
    int deinit()
    {
    //----
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| expert start function |
    //+------------------------------------------------------------------+
    int start()
    {
    //----
    MoneyManagement();//资金管理
    macd();//指标管理
    ma();//指标管理
    zhangchang();//战场管理
    buyme();//买上
    sellme();//买下
    xianshi();//显示管理
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    void MoneyManagement() {
    lotstart=(AccountBalance()*lotab/10000);
    lots=lotstart;
    if(cheng==0){cheng=1;}
    CurrentBasket=AccountEquity()-AccountBalance();
    /////////////////////////////////////////////////////////////////
    if(zijiguanli1){ LotMM = lots;}
    /////////////////////////////////////////////////////////////////
    if(zijiguanli2){
    if(CurrentBasket<0 ) {LotMM=NormalizeDouble(lots*(OrdersTotal()*cheng)+ lotstart,2); }
    if(CurrentBasket==0 ) {LotMM=NormalizeDouble(LotMM*0,2); }
    }
    /////////////////////////////////////////////////////////////////
    if(zijiguanli3){
    if(s+b==0){aa=1;}
    if(s+b==1){aa=3;}
    if(s+b==2){aa=7;}
    if(s+b==3){aa=11;}
    if(s+b==4){aa=20;}
    if(s+b==5){aa=31;}
    if(s+b==6){aa=42;}
    if(s+b==7){aa=54;}
    if(s+b==8){aa=66;}
    if(s+b==9){aa=76;}
    if(s+b>=10){aa=66;}
    if(CurrentBasket<0 ) {LotMM=NormalizeDouble(lotstart*aa,2); }
    if(CurrentBasket==0 ) {LotMM=NormalizeDouble(LotMM*0,2); }
    }
    /////////////////////////////////////////////////////////////////
    if(LotMM<lots){LotMM=lots;}
    if(LotMM>LotsMax){LotMM=LotsMax;}
    }//end zijiguanli
    //+------------------------------------------------------------------+
    void macd() {
    //这边要写一些东西
    }
    //+------------------------------------------------------------------+
    void ma()
    {
    ma1now = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_CLOSE,0);
    ma1now2 = iMA(NULL,0,ma10,0,MODE_EMA,PRICE_CLOSE,1);
    ma2now = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_CLOSE,0);
    ma2now2 = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_CLOSE,1);
    ma1bnow = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_OPEN,0);
    ma2bnow = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_OPEN,0);
    }
    //+------------------------------------------------------------------+
    void zhangchang() {
    //这边要写一些东西
    if(ma1now>ma2now
    && ma1now2<ma2now2
    && s+b==0
    ){buyme();}
    if(ma1now<ma2now
    && ma1now2>ma2now2
    && s+b==0
    ){sellme();}
    }
    //+------------------------------------------------------------------+
    void buyme(){
    if (TP==0) { TPP=0; } if(TP>0) { TPP=Ask+TP*Point; }
    if (SL==0) { SLL=0; } if(SL>0) { SLL=Ask-SL*Point; }
    OrderSend(Symbol(),OP_BUY,LotMM,Ask,slip,SLL,TPP," M"+Period()+"",0,0,Violet);
    return(0); }
    //+------------------------------------------------------------------+
    void sellme(){
    if (TP==0) { TPP=0; } if(TP>0) { TPP=Bid-(TP*Point); }
    if (SL==0) { SLL=0; } if(SL>0) { SLL=Bid+(SL*Point); }
    ticket=OrderSend(Symbol(),OP_SELL,LotMM,Bid,2,SLL, TPP,"M"+Period()+"",0,0,GreenYellow);
    return(0); }
    //+------------------------------------------------------------------+
    void buyme() {
    //这边要写一些东西
    }
    //+------------------------------------------------------------------
    +void xianshi() {
    //这边要写一些东西
    }
    //+------------------------------------------------------------------+/////end
     

    * 在buyme()和sellme()
    我们又发现新的词句
    TP,TPP,SL,SLL
    我们必须在#property上面加上他们
    不然会出错
    我已经加上去了上面的结果了
    你注意到了吗?
    * ok,这个EA可以用了
    现在你copy&press 去你的METAEDITOR
    save as 一个新的名字就可以了
    * 试一试,用一用
    告诉你,它肯定是“垃圾”EA
    因为是亏钱的EA
    哈哈和。。。
    * 有什么问题要问吗?
    但是我老实告诉你
    我是自学成功的,没有上过什么EA课程
    不要问太深奥或无聊的问题
    我可能不知道怎样答你的问题。
    哈哈和。。。

    * 你会发现问题??。。。
    然后告诉我上面问题。。。
    这就是你今天的功课
    再见
    哈哈和。。。
    05-25-2009 09:18 AM
    yes810
    第六课-解决出错问题

     
    * 如果你有做功课
    你会知道以上的EA还是不能用
    因为出错了
    出错是常事
    没有什么了不起
    没有什么大事
    * 当你按在METAEDITOR按“编写”时
    最下方会告诉你出错了
    按一按下方的出错
    他会告诉你在那里出错了
    第一:intdouble CurrentBasket=0;
    多了 int
    删掉 int 就可以了
    //int 是表示要“整数”比如:1,2,3,4...
    //double 表示要有小数点,比如:1.1,7.987.56.897.....
    * 之后你在按一下“编写”
    他告诉你
    第二:ma1now2 = iMA(NULL,0,ma10,0,MODE_EMA,PRICE_CLOSE,1);
    ma10,意思就是没有ma10这个新词句
    其实我们没有用到ma10
    是编写错误
    不是ma10,是多了个0
    应该是ma1
    删掉 0 就可以了
    * 之后你在按一下“编写”
    他告诉你
    第三:OrderSend(Symbol(),OP_BUY,LotMM,Ask,slip,SLL,TP P,"M"+Period()+"",0,0,Violet);
    问题是slip
    应该是新的词句
    slip 是什么?
    听他们讲是滑点?管他
    因为我们不可以删掉slip
    所以在上方加上新的词句吧!
    比如:
    int slip=6;
    就可以了
    * 再来。。。
    ticket=OrderSend(Symbol(),OP_SELL,LotMM,Bid,2,SLL, TPP,"M"+Period()+"",0,0,GreenYellow);
    ticket?
    我们没有用到ticket
    所以可以删掉 ticket= 就可以了
    * 再来。。。他告诉你多了这个
    void buyme() {
    //这边要写一些东西
    }
    因为已经有了的,哈哈和。。。
    是糊涂多了一个
    删掉 整句多余的buyme() 就可以了

    * 再来。。。
    0错误 0警告
    哈哈和。。。
    成功了
    恭喜你已经学会编写EA了

    * 试一试用一用?
    效果怎样?
    是不是有一点怪怪?
    又出错了?
    又是功课的时间
    告诉我又发生什么事情。。。

    * 编写EA就是解决问题
    当你是解决问题高手
    你就是编写EA高手
    哈哈和。。。
    05-25-2009 09:22 AM
    yes810
    第七课-填写盈亏
    上一回我们讲到
    -有赚25点就出场
    -如果亏的时候亏50点就出场
    这个还没有加上去
    编写方法就是
    Take Profit=25
    Stop Loss=50
    我把他们简写成
    TP=25;
    SL=50;
    你想到了什么吗?
    对,这字眼很熟吧!
    记得吗?
    double TP=0,TPP=0,SL=0,SLL=0;
    我们改成
    double TP=25,TPP=0,SL=50,SLL=0;
    你发现吗?
    不过下注方面还是有问题!
    其实是这EA没有判断
    什么是B
    什么是S
    B是buy
    S是sell
    速成班不必学会怎样写
    你只要copy&prss下面的子程式
    放进去就可以了
    我把它称为检查
    //////////////////////////////////////////
    void jiancha()
    {
    b=0;s=0;
    for (int cnt=0; cnt<=OrdersTotal(); cnt++)
    {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol()==Symbol() )
    {
    mode=OrderType();LastOrderType=OrderType();
    if (OrderType() == OP_SELL){ s++; LastPricesell=OrderOpenPrice();}
    if (OrderType() == OP_BUY ){ b++; LastPricebuy=OrderOpenPrice();}
    LastPrice=OrderOpenPrice();
    if (OrderType()==OP_SELL) {OpenSells++;}
    if (OrderType()==OP_SELLSTOP) {OpenSellStops++;}
    if (OrderType()==OP_BUY) {OpenBuys++;}
    if (OrderType()==OP_BUYSTOP) {OpenBuyStops++;}
    }
    }
    }//end jiancha
    //////////////////////////////////////////////////
    要记得:在start那边也加入
    jiancha();
    这样就可以了。
    当我们按“编写”
    会出错
    因为有了新的词句
    我们没有加在#property上面那边
    新的词句:
    mode
    LastOrderType
    LastPricesell
    LastPricebuy
    LastPrice
    OpenSells
    OpenSellStops
    OpenBuys
    OpenBuyStops
    我们更正如下:
    double mode=0;
    double LastOrderType;
    double LastPricesell;
    double LastPricebuy;
    double LastPrice;
    double OpenSells;
    double OpenSellStops;
    double OpenBuys;
    double OpenBuyStops;
    按“编写”。。。
    0错误 0警告
    ok了
    按“终端”试一试效果怎样
    还是不行
    还是buy sell buy sell buy sell
    你知道什么事情发生了吗?
    跟你讲一个逻辑
    什么是主程式
    就是主要的程式
    什么是子程式
    就是不是主要的程式
    了解了这些
    现在一个问题,这些子程式
    MoneyManagement();//资金管理
    macd();//指标管理
    ma();//指标管理
    zhangchang();//战场管理
    buyme();//买上
    sellme();//买下
    xianshi();//显示管理
    那些是不需要一直用的就不可以在主程式这里
    对啦!
    buyme();//买上
    sellme();//买下
    是有时用到,有时没有用
    所以我们删掉它
    现在这个EA可以正常的操作了
    其编写程式如下:
    注意颜色部分的位置
    //+------------------------------------------------------------------+
    //| MT4-EA制作速成班.mq4 |
    //| Copyright 2007, MT4-EA制作速成班. |
    //| http://www.FXunion.com |
    //+------------------------------------------------------------------+
    #property copyright "Copyright 2007, MT4-EA制作速成班."
    #property link. "http://www.FXunion.com"
    extern double ma1=1,ma2=2;
    double ma1now,ma1now2,ma2now,ma2now2,ma1bnow,ma2bnow;
    ////////////////////////
    extern string _资金管理_ ="任选一个";
    extern bool zijiguanli1= true;//false true、、
    extern bool zijiguanli2= false;//false true、、
    extern bool zijiguanli3= false;//false true、、
    ///////////////////////////////////
    extern double cheng=1;
    double aa=0;
    int s=0,b=0;
    double CurrentBasket=0;
    double LotMM=0;
    double lotstart=0;
    double LotsMax=100;
    extern double lotab=0.1;
    double lots=0;
    double TP=25,TPP=0,SL=50,SLL=0;
    int slip=6;
    ///////////////////////////////////////
    double mode=0;
    double LastOrderType;
    double LastPricesell;
    double LastPricebuy;
    double LastPrice;
    double OpenSells;
    double OpenSellStops;
    double OpenBuys;
    double OpenBuyStops;
    //+------------------------------------------------------------------+
    //| expert initialization function |
    //+------------------------------------------------------------------+
    int init()
    {
    //----
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| expert deinitialization function |
    //+------------------------------------------------------------------+
    int deinit()
    {
    //----
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| expert start function |
    //+------------------------------------------------------------------+
    int start()
    {
    //----
    jiancha();//检查判断
    MoneyManagement();//资金管理
    macd();//指标管理
    ma();//指标管理
    zhangchang();//战场管理
    xianshi();//显示管理
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    void jiancha()
    {
    b=0;s=0;
    for (int cnt=0; cnt<=OrdersTotal(); cnt++)
    {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol()==Symbol() )
    {
    mode=OrderType();LastOrderType=OrderType();
    if (OrderType() == OP_SELL){ s++; LastPricesell=OrderOpenPrice();}
    if (OrderType() == OP_BUY ){ b++; LastPricebuy=OrderOpenPrice();}
    LastPrice=OrderOpenPrice();
    if (OrderType()==OP_SELL) {OpenSells++;}
    if (OrderType()==OP_SELLSTOP) {OpenSellStops++;}
    if (OrderType()==OP_BUY) {OpenBuys++;}
    if (OrderType()==OP_BUYSTOP) {OpenBuyStops++;}
    }
    }
    }//end jiancha
    //+------------------------------------------------------------------+
    void MoneyManagement() {
    lotstart=(AccountBalance()*lotab/10000);
    lots=lotstart;
    if(cheng==0){cheng=1;}
    CurrentBasket=AccountEquity()-AccountBalance();
    /////////////////////////////////////////////////////////////////
    if(zijiguanli1){ LotMM = lots;}
    /////////////////////////////////////////////////////////////////
    if(zijiguanli2){
    if(CurrentBasket<0 ) {LotMM=NormalizeDouble(lots*(OrdersTotal()*cheng)+ lotstart,2); }
    if(CurrentBasket==0 ) {LotMM=NormalizeDouble(LotMM*0,2); }
    }
    /////////////////////////////////////////////////////////////////
    if(zijiguanli3){
    if(s+b==0){aa=1;}
    if(s+b==1){aa=3;}
    if(s+b==2){aa=7;}
    if(s+b==3){aa=11;}
    if(s+b==4){aa=20;}
    if(s+b==5){aa=31;}
    if(s+b==6){aa=42;}
    if(s+b==7){aa=54;}
    if(s+b==8){aa=66;}
    if(s+b==9){aa=76;}
    if(s+b>=10){aa=66;}
    if(CurrentBasket<0 ) {LotMM=NormalizeDouble(lotstart*aa,2); }
    if(CurrentBasket==0 ) {LotMM=NormalizeDouble(LotMM*0,2); }
    }
    /////////////////////////////////////////////////////////////////
    if(LotMM<lots){LotMM=lots;}
    if(LotMM>LotsMax){LotMM=LotsMax;}
    }//end zijiguanli
    //+------------------------------------------------------------------+
    void macd() {
    //这边要写一些东西
    }
    //+------------------------------------------------------------------+
    void ma()
    {
    ma1now = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_CLOSE,0);
    ma1now2 = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_CLOSE,1);
    ma2now = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_CLOSE,0);
    ma2now2 = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_CLOSE,1);
    ma1bnow = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_OPEN,0);
    ma2bnow = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_OPEN,0);
    }
    //+------------------------------------------------------------------+
    void zhangchang() {
    //这边要写一些东西
    if(ma1now>ma2now
    && ma1now2<ma2now2
    && s+b==0
    ){buyme();}
    if(ma1now<ma2now
    && ma1now2>ma2now2
    && s+b==0
    ){sellme();}
    }
    //+------------------------------------------------------------------+
    void buyme(){
    if (TP==0) { TPP=0; } if(TP>0) { TPP=Ask+TP*Point; }
    if (SL==0) { SLL=0; } if(SL>0) { SLL=Ask-SL*Point; }
    OrderSend(Symbol(),OP_BUY,LotMM,Ask,slip,SLL,TPP," M"+Period()+"",0,0,Violet);
    return(0); }
    //+------------------------------------------------------------------+
    void sellme(){
    if (TP==0) { TPP=0; } if(TP>0) { TPP=Bid-(TP*Point); }
    if (SL==0) { SLL=0; } if(SL>0) { SLL=Bid+(SL*Point); }
    OrderSend(Symbol(),OP_SELL,LotMM,Bid,2,SLL,TPP,"M" +Period()+"",0,0,GreenYellow);
    return(0); }
    //+------------------------------------------------------------------+
    //+------------------------------------------------------------------+
    void xianshi() {
    //这边要写一些东西
    }
    //+------------------------------------------------------------------+
    ///////////////////////////////end

    恭喜!恭喜,这EA可以正常操作了
    有什么问题要问吗?
    但是我老实告诉你
    我是自学成功的
    没有上过什么EA课程
    不要问太深奥或无聊的问题
    我可能不知道怎样答你的问题
    其实也不用问什么
    自己想出答案会更好更刻骨铭心
    哈哈和。。。
    05-25-2009 09:25 AM
    yes810
    第八课-移动止赢

    移动止赢就是到口的肉就不要吐出去了
    哈哈和。。。
    这样形容你明白吗?
    其实也不是这个意思
    是赢到尽头的意思
    速成班不必学会怎样写Traingstop
    copy&Press就可以了
    子程式如下:

    ///////////////////////
    void TrailingStop()
    {
    for(cnt=OrdersTotal();cnt>=0;cnt--)
    {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol() )//&& OrderMagicNumber()==MAGICMA)
    {
    if (OrderType()==OP_SELL)
    {
    if(TrailingStop>0)
    {
    if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
    {
    if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
    {
    OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Poi nt*TrailingStop,OrderTakeProfit(),0,Red);
    return(0);
    }
    }
    }
    }
    if (OrderType()==OP_BUY)
    {
    if(TrailingStop>0)
    {
    if(Bid-OrderOpenPrice()>Point*TrailingStop)
    {
    if(OrderStopLoss()<Bid-Point*TrailingStop)
    {
    OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
    return(0);
    }
    }
    }
    }
    }
    }
    }//end TrailingStop
    ////////////////////////////////////

    这TrailingStop是可以一直用的
    所以我们要加在start那边加
    TrailingStop();
    发现新的词句
    cnt
    TrailingStop
    我们更正如下:
    int cnt;
    double TrailingStop=0;
    按“编写”
    0错误 0警告
    厉害,哈哈和。。。
    加入成功
    把double TrailingStop=0;
    0改成10,就可以操作了
    改成这样也可以
    extern double TrailingStop=10;
    自己试一试看看效果如何?
    怎样?容易吗?
    哈哈和。。。
    05-25-2009 09:30 AM
    yes810
    第九课-显示画面

    显示的子程式如下
    //////////////////////////////////////////////
    void xianshi()
    {
    string name_8 = "xianshi1";
    ObjectDelete(name_8);
    ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
    ObjectSetText(name_8, "伺服器时间::"+TimeToStr(CurTime( ))+"", 13, "Arial", White);
    ObjectSet(name_8, OBJPROP_CORNER, 0);
    ObjectSet(name_8, OBJPROP_XDISTANCE, 15);
    ObjectSet(name_8, OBJPROP_YDISTANCE, 15);
    text="EA制作速成班";
    name_8 = "xianshi2";
    ObjectDelete(name_8);
    ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
    ObjectSetText(name_8, ""+text+"", 15, "Arial", Yellow);
    ObjectSet(name_8, OBJPROP_CORNER, 1);
    ObjectSet(name_8, OBJPROP_XDISTANCE, 15);
    ObjectSet(name_8, OBJPROP_YDISTANCE, 5);
    name_8 = "Lableyeddrice1";
    ObjectDelete(name_8);
    ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
    ObjectSetText(name_8, "M"+Period()+" 货币 "+Symbol()+"", 10, "Arial", Silver);
    ObjectSet(name_8, OBJPROP_CORNER, 1);
    ObjectSet(name_8, OBJPROP_XDISTANCE, 130);
    ObjectSet(name_8, OBJPROP_YDISTANCE, 32);
    //////这个显示上方
    name_8 = "LableCurPrice2";
    ObjectDelete(name_8);
    ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
    ObjectSetText(name_8,""+DoubleToStr(Ask, Digits)+"::买上", 15, "Arial", Lime);
    ObjectSet(name_8, OBJPROP_CORNER, 1);
    ObjectSet(name_8, OBJPROP_XDISTANCE, 15);
    ObjectSet(name_8, OBJPROP_YDISTANCE, 30);
    //////这个显示下方
    name_8 = "Lab345rPrice3";
    ObjectDelete(name_8);
    ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
    ObjectSetText(name_8,""+DoubleToStr(Bid, Digits)+"::卖下", 15, "Arial", Lime);
    ObjectSet(name_8, OBJPROP_CORNER, 1);
    ObjectSet(name_8, OBJPROP_XDISTANCE, 15);
    ObjectSet(name_8, OBJPROP_YDISTANCE, 50);
    name_8 = "Acc87lance";
    ObjectDelete(name_8);
    ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
    ObjectSetText(name_8,""+DoubleToStr( AccountBalance(), 2)+"::账面资金", 13, "Arial", Lime);
    ObjectSet(name_8, OBJPROP_CORNER, 1);
    ObjectSet(name_8, OBJPROP_XDISTANCE, 15);
    ObjectSet(name_8, OBJPROP_YDISTANCE, 70);
    name_8 = "LableC5rice6";
    ObjectDelete(name_8);
    ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
    ObjectSetText(name_8,""+DoubleToStr( AccountEquity(), 2)+"::净值资金", 13, "Arial", Lime);
    ObjectSet(name_8, OBJPROP_CORNER, 1);
    ObjectSet(name_8, OBJPROP_XDISTANCE, 15);
    ObjectSet(name_8, OBJPROP_YDISTANCE, 90);
    name_8 = "Labl456rice6";
    ObjectDelete(name_8);
    ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
    ObjectSetText(name_8,""+DoubleToStr( AccountMargin(), 2)+"::保证资金", 13, "Arial", Lime);
    ObjectSet(name_8, OBJPROP_CORNER, 1);
    ObjectSet(name_8, OBJPROP_XDISTANCE, 15);
    ObjectSet(name_8, OBJPROP_YDISTANCE, 110);
    name_8 = "Labl4hcjce6";
    ObjectDelete(name_8);
    ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
    ObjectSetText(name_8,""+DoubleToStr( AccountFreeMargin(), 2)+"::可用资金", 13, "Arial", Lime);
    ObjectSet(name_8, OBJPROP_CORNER, 1);
    ObjectSet(name_8, OBJPROP_XDISTANCE, 15);
    ObjectSet(name_8, OBJPROP_YDISTANCE, 130);
    name_8 = "Accvf7lance";
    ObjectDelete(name_8);
    ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
    ObjectSetText(name_8,""+DoubleToStr( AccountProfit(), 2)+"::账面盈亏", 13, "Arial", Lime);
    ObjectSet(name_8, OBJPROP_CORNER, 1);
    ObjectSet(name_8, OBJPROP_XDISTANCE, 15);
    ObjectSet(name_8, OBJPROP_YDISTANCE, 150);
    //我们可以无限的加
    }
    ////////////////////////////////////////////////////
    研究一下
    你应该会用了
    这显示有什么了不起吗?
    有什么作用吗?
    用你的脚想一想你应该会领悟的
    哈哈和。。。
    05-25-2009 09:33 AM
    yes810
    第十课-解决问题2

    每一个程式的开始就是一个问题
    没有问题就是有问题
    有问题就有答案
    没有答案就不是问题
    哈哈和。。。
    速成班基础篇教程到这里就结束了
    结束就是新的开始
    开始什么
    开始更上一层楼
    其它基础的东东
    你可以在Metaeditor的右边找到
    有中文的
    所以我也不必重复
    接下来
    我们要快速的学习“策略篇”
    因为一个成败的EA取决于策略
    什么是策略?
    策略就是战略
    什么是战略?
    战略就是你怎样把EA弄到直线上升
    而不是楼梯下降
    如果你要学习这一篇
    可以,你必须交功课
    功课:
    在上面EA的基础上
    请加上以下指标
    a)macd
    如果你做不出来
    你的基础都有问题
    怎样更上一层楼呢!
    是不是
    哈哈和。。。
    05-25-2009 09:36 AM
    yes810
    第十一课::偷师

    * EA速成班的学员是不必学会如何编写头痛的程式
    不过这一招一定要会“偷师”
    * 偷师就是“移花接木”
    偷师就是“借花献佛”
    * 怎样偷师?
    就是copy&press那些公开的EA源码
    * 比如:
    以下是牛版主公开的源码
    [原创]MT4阻力支撑源码公布
    本指标为CDP公式在MT4上的实现,使用MT4的Expert调用方式,代码如下:
    ==================================================
    //+------------------------------------------------------------------+
    //| CDP.mq4 |
    //| Copyright ?2005,520FXCorp. |
    //| http://www.FXunion.com |
    //+------------------------------------------------------------------+
    #property copyright "Copyright, 520FX Corp."
    #property link. "http://www.FXunion.com"
    //+------------------------------------------------------------------+
    //| expert start function |
    //+------------------------------------------------------------------+
    int start()
    {
    //----
    double cdp,H,L,C,Hn,Ln;
    double PT,AH,NH,AL,NL;
    //----
    H=iMA(NULL,0,1,0,MODE_SMA,PRICE_HIGH,1);
    L=iMA(NULL,0,1,0,MODE_SMA,PRICE_LOW,1);
    C=iMA(NULL,0,1,0,MODE_SMA,PRICE_CLOSE,1);
    Hn=iMA(NULL,0,1,0,MODE_SMA,PRICE_HIGH,2);
    Ln=iMA(NULL,0,1,0,MODE_SMA,PRICE_LOW,2);
    cdp=(H+L+2*C)/4;
    PT=Hn-Ln;
    AH=cdp+PT;
    NH=cdp*2-L;
    AL=cdp-PT;
    NL=cdp*2-H;
    Comment("强支撑:",AL,"弱支撑:",NL,"弱阻力",NH,"强阻力",AH);
    ObjectDelete("水平线");
    ObjectDelete("水平线1");
    ObjectDelete("水平线2");
    ObjectDelete("水平线3");
    ObjectCreate("水平线",OBJ_HLINE,0,D'2005.11.01 10:30',AL);
    ObjectCreate("水平线1",OBJ_HLINE,0,D'2005.11.01 10:30',NL);
    ObjectCreate("水平线2",OBJ_HLINE,0,D'2005.11.01 10:30',NH);
    ObjectCreate("水平线3",OBJ_HLINE,0,D'2005.11.01 10:30',AH);
    return(0);
    }
    //+------------------------------------------------------------------+
    *  比如我们也不知道是什么东东
    什么水平线?
    * 第一步要做的就是把它当着是一个“子程式”
    这样想你应该知道怎样加入你的EA里去
    * 首先在“主程式”加入
    水平线();
    然后:
    水平线(){
    //这里加入程式


    * 就是
    水平线(){
    //----
    double cdp,H,L,C,Hn,Ln;
    double PT,AH,NH,AL,NL;
    //----
    H=iMA(NULL,0,1,0,MODE_SMA,PRICE_HIGH,1);
    L=iMA(NULL,0,1,0,MODE_SMA,PRICE_LOW,1);
    C=iMA(NULL,0,1,0,MODE_SMA,PRICE_CLOSE,1);
    Hn=iMA(NULL,0,1,0,MODE_SMA,PRICE_HIGH,2);
    Ln=iMA(NULL,0,1,0,MODE_SMA,PRICE_LOW,2);
    cdp=(H+L+2*C)/4;
    PT=Hn-Ln;
    AH=cdp+PT;
    NH=cdp*2-L;
    AL=cdp-PT;
    NL=cdp*2-H;
    Comment("强支撑:",AL,"弱支撑:",NL,"弱阻力",NH,"强阻力",AH);
    ObjectDelete("水平线");
    ObjectDelete("水平线1");
    ObjectDelete("水平线2");
    ObjectDelete("水平线3");
    ObjectCreate("水平线",OBJ_HLINE,0,D'2005.11.01 10:30',AL);
    ObjectCreate("水平线1",OBJ_HLINE,0,D'2005.11.01 10:30',NL);
    ObjectCreate("水平线2",OBJ_HLINE,0,D'2005.11.01 10:30',NH);
    ObjectCreate("水平线3",OBJ_HLINE,0,D'2005.11.01 10:30',AH);
    return(0);

    * 这样就完成“偷师”的方案。
    * 希望牛版主不介意,把这个当教材
    哈哈和。。。
    05-25-2009 09:54 AM
    yes810
    第拾贰课:偷师2

    * 看看这个EA,学习学习
    * /* 尚未通过检测
    //+------------------------------------------------------------------+
    //| WYD_AE_H1.mq4 |
    //| Copyright 2008, Xilin Lu ( Zhejiang Lanxi ) |
    //| http://www.FXunion.com |
    //+------------------------------------------------------------------+
    ================================================== =========================
    功能简介: 本智能的中文名字:开门见喜。
    工作原理:本智能交易以一小线的开盘价和收盘价为触发器。
    在每H1线形成的过程中,开盘3分钟内执行。
    当 Minute()<=3 时:
    第一步,首先检查是否未平仓的单子,若有则平仓。
    第二步,开新单,开仓前检查资金是否足够。不够时不能下单。
    注意事项:虽然本智能对图表的运行时间没有要求,但它只在( Minute()>0 && Minute()<=3 )
    时段才有可能下单,这样做不仅能保证是H1的开盘价送单,而且可大大节约运算时间。
    ================================================== =================== + */
    #property copyright "Copyright 2008, Xilin Lu ( Zhejiang Lanxi )"
    #property link. "http://www.FXunion.com"
    //+------------------------------------------------------------------+
    //| 交易变量。
    //+------------------------------------------------------------------+
    extern double nLotsNumber = 0.1; // 每次交易手数
    extern double nMaXMargin = 0.3; // 最大保证金使用比率
    extern double nGainPoint = 20; // 止赢点数
    extern double nLossPoint = 50; // 止损点数
    //+------------------------------------------------------------------+
    //| 全局变量。
    //+------------------------------------------------------------------+
    int nAllowSend=0; // 是否允许下单变量
    //+------------------------------------------------------------------+
    int start() {
    double YyBaoZhenJing,KyBaoZhenJing,XyBaoZhenJing;
    int cnt,total,nTradingMode,i;
    //--- 判断K线开盘时间,以减少运行次数。 ------------------
    if( Minute() ==0 ) { return(0); } // 正点时间任何时间段均不运行。
    if( Minute()>3 ) { nAllowSend=0; return(0); } // 从此行起可以编写您认为有价值的交易时间,我们现在是开盘3分钟内。
    //-------------------------------------------------------------
    //--- 判断是否已下单。 ----------------------------------------
    if( nAllowSend==1 ) { return(0); } // 本次循环已下单,不能重复下单。 它在Minute()>=3时重新置为可下单
    //-------------------------------------------------------------
    //-- 检查开仓信息于,若有则平仓 -------------------------------
    total=OrdersTotal();
    if( total != 0 )
    {
    for(cnt=0;cnt<total;cnt++)
    {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if(OrderSymbol()!=Symbol()) continue;
    if(OrderType()==OP_BUY)
    {
    OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
    break;
    }
    if(OrderType()==OP_SELL)
    {
    OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
    break;
    }
    }
    }
    //-------------------------------------------------------------
    //--- 如果开仓保证金超过上限,则返还不交易。 ------------------
    KyBaoZhenJing = AccountFreeMargin();
    YyBaoZhenJing = AccountMargin();
    if( YyBaoZhenJing / (YyBaoZhenJing + KyBaoZhenJing) >= nMaxMargin ) { return(0); }
    //-------------------------------------------------------------
    //--- 重新评估开仓保证金,如果开仓保证金超过上限,则返还不交易。 ------
    XyBaoZhenJing = MarketInfo( Symbol(), MODE_MARGINREQUIRED); // 一个标准手需保证金金额。
    XyBaoZhenJing = XyBaoZhenJing * nLotsNumber ; // 下单需用的保证金
    if( (YyBaoZhenJing+XyBaoZhenJing) / (YyBaoZhenJing+KyBaoZhenJing) >= nMaxMargin ) { return(0); }
    //---------------------------------------------------------------------
    //+--- 判断条件 -----------------------------------------------------+
    // 注意:你可以在这里编写一些判断条件,
    // 当条件满足时再发出下定单指令,否则 return(0);
    // 它就是你的智能交易系统了,祝你成功!
    //+------------------------------------------------------------------+
    //--- 发送定单。 ----------------------------
    i=OrderSend( Symbol(),OP_BUY,nLotsNumber,Ask,3,Ask-nLossPoint*Point,Ask+nGainPoint*Point,"H1 Open Buy",1234,0,Green);
    if(i>0 ) { Alert( "买进",Symbol(),",开仓成功!" ); nAllowSend=1; } // 发送成功,将nAllowSend=1防止重复下单。
    else { Alert( "买进",Symbol(), ",开仓不成功!" ); }
    //-------------------------------------------------------------
    return(0);
    }
    //+------------------------------------------------------------------+
    * 以上EA是“一气呵成”的写法
    * 这种编写方式是“有经验”的写法
    不值得速成班学员学习
    只能看看就好
    * 这EA有一段可取之处
    就是保证金的处理
    //--- 如果开仓保证金超过上限,则返还不交易。 ------------------
    KyBaoZhenJing = AccountFreeMargin();
    YyBaoZhenJing = AccountMargin();
    if( YyBaoZhenJing / (YyBaoZhenJing + KyBaoZhenJing) >= nMaxMargin ) { return(0); }
    //-------------------------------------------------------------
    //--- 重新评估开仓保证金,如果开仓保证金超过上限,则返还不交易。 ------
    XyBaoZhenJing = MarketInfo( Symbol(), MODE_MARGINREQUIRED); // 一个标准手需保证金金额。
    XyBaoZhenJing = XyBaoZhenJing * nLotsNumber ; // 下单需用的保证金
    if( (YyBaoZhenJing+XyBaoZhenJing) / (YyBaoZhenJing+KyBaoZhenJing) >= nMaxMargin ) { return(0); }

    * 这一小段,我们可以放在
    战场策略开始那边,一开始策略就先判断保证金
    * 怎样“偷师”呢!

    这就是重要的两段话,我把它弄简单一点
    //--- 如果开仓保证金超过上限,则返还不交易。 ------------------
    if( AccountMargin() / (AccountMargin() + AccountFreeMargin()) >= 1 ) { return(0); }
    BaoZhenJing = MarketInfo( Symbol(), MODE_MARGINREQUIRED); // 一个标准手需保证金金额。
    BaoZhenJing = BaoZhenJing * LotMM ; // 下单需用的保证金
    if( (AccountMargin()+BaoZhenJing) / (AccountMargin()+AccountFreeMargin()) >= 1 ) { return(0); }
    //---------------------------------------------------------------------
    copy&press这段去
    zhangchang(){
    //开始这边
    * 然后,应该有一个新的词句
    加到#property上面就可以了。
    * 我不知道有没有效
    你自己试一试看看
    * 为什么要你试
    因为学习就是试一试
    05-25-2009 10:10 AM
    yes810
    第拾叁课:偷师3
    * 看看这个某位网友发表的EA,学习学习
    * 一些交易系统的编写心得我编写EA的目的:建立系统的交易方法,
    机械化运行,排除情感的影响,实现稳定赢利。
    做EA一年了,最初做的是突破系统,依据突破方向追买追卖,
    测试近半年,效果一般,决定放弃,但这个EA使我坚信了一点,
    即只有跟着趋势交易才能实现EA的稳定赢利。
    因此,我认为要做一个成功的EA,关键就在于如何应用一切可能的方法去判断趋势。
    我发现很多很普通的指标都很容易做到这点,
    举个例子,GBP/USD日线图,用一个长周期的RVI做趋势判断(RVI-110),
    当RVI在“0”值上方趋势为上升,反之则为下降,
    开仓及平仓用一个短周期RVI做信号指示(RVI-13),
    在上升趋势时,采用RVI MAIN 上穿RVI SIGNAL作为买入信号;
    在下降趋势时,采用RVI MAIN 下破RIV SIGNAL作卖出信号,
    这个系统很简单,却很实用,配合好的止损止赢策略,
    赢利是有保证的,我还为此编写了一个EA,
    有兴趣的可以看看(附MQ4文件,写得很粗糙,高手别笑话)。
    //+------------------------------------------------------------------+
    //| RVITradeSys.mq4 |
    //| Copyright 2007, ABKCN|
    //| service@fxunion.com|
    //+-----------------------------------------------------------------
    extern double TakeProfit = 400;
    extern double Lots = 0.1;
    extern double TrailingStop = 80;
    extern double Stops=200;
    extern double RVIPERIODSHORT=13;
    extern double RVIPERIODLONG=110;
    double Points;
    //+------------------------------------------------------------------+
    //| |
    //+------------------------------------------------------------------+
    int init ()
    {
    Points = MarketInfo (Symbol(), MODE_POINT);
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| |
    //+------------------------------------------------------------------+
    int deinit()
    {
    return(0);
    }
    //+------------------------------------------------------------------+
    //| |
    //+------------------------------------------------------------------+
    int start()
    {
    double RVISIGNAL_C=0, RVISIGNAL_P=0,RVIMAIN_C=0,RVIMAIN_P=0;
    double RVISIGNAL15_C,RVISIGNAL15_P,RVIMAIN15_C,RVIMAIN15_ P;
    double TRENDSIDE=2,BSSIGNAL=2;
    double LONGRVISIGNAL_C=0, LONGRVISIGNAL_P=0;
    int cnt=0, total;
    if(Bars<100)
    {
    Print("bars less than 100");
    return(0);
    }
    if(TakeProfit<10)
    {
    Print("TakeProfit less than 10");
    return(0);
    }
    //================================================== ===========
    RVISIGNAL_C=iRVI(NULL,0,RVIPERIODSHORT,MODE_SIGNAL ,0);
    RVISIGNAL_P=iRVI(NULL,0,RVIPERIODSHORT,MODE_SIGNAL ,1);
    RVIMAIN_C =iRVI(NULL,0,RVIPERIODSHORT,MODE_MAIN,0);
    RVIMAIN_P =iRVI(NULL,0,RVIPERIODSHORT,MODE_MAIN,1);
    LONGRVISIGNAL_C=iRVI(NULL,0,RVIPERIODLONG,MODE_SIG NAL,0);
    //================================================== ===========
    if(OrdersTotal()<1)
    {
    if(AccountFreeMargin()<(1000*Lots))
    {
    Print("We have no money");
    return(0);
    }
    //计算大方向及买卖信号
    if (LONGRVISIGNAL_C>0) { TRENDSIDE=0; }//0为上升1为下降
    if (LONGRVISIGNAL_C<0) { TRENDSIDE=1; }
    if (RVIMAIN_P<=RVISIGNAL_P && RVIMAIN_C>RVISIGNAL_C) { BSSIGNAL=0; } //0买入1卖出
    if (RVIMAIN_P>=RVISIGNAL_P && RVIMAIN_C<RVISIGNAL_C) { BSSIGNAL=1; }
    //BUY CONDITIONS
    if(TRENDSIDE==0 && BSSIGNAL==0)
    {
    OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-Stops*Points,Ask+TakeProfit*Points,"macd sample",16384,0,Red);
    if(GetLastError()==0)Print("Order opened : ",OrderOpenPrice());
    return(0);
    }
    //SELL CONDITIONS
    if(TRENDSIDE==1 && BSSIGNAL==1)
    {
    OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+Stops*Po ints,Bid-TakeProfit*Points,"macd sample",16384,0,Red);
    if(GetLastError()==0)Print("Order opened : ",OrderOpenPrice());
    return(0);
    }
    return(0);
    }
    //平仓处理及追踪止损
    total=OrdersTotal();
    for(cnt=0;cnt<total;cnt++)
    {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if(OrderType()<=OP_SELL &&
    OrderSymbol()==Symbol())
    {
    if(OrderType()==OP_BUY)
    {
    if(TRENDSIDE==1 && BSSIGNAL==1)
    {
    OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ;
    return(0);
    }
    if(TrailingStop>0)
    {
    if(Bid-OrderOpenPrice()>Points*TrailingStop)
    {
    if(OrderStopLoss()<Bid-Points*TrailingStop)
    {
    OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Points*TrailingStop,OrderTakeProfit(),0,Red);
    return(0);
    }
    }
    }
    }
    else
    {
    if(TRENDSIDE==0 && BSSIGNAL==0)
    {
    OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ;
    return(0);
    }
    if(TrailingStop>0)
    {
    if((OrderOpenPrice()-Ask)>(Points*TrailingStop))
    {
    if(OrderStopLoss()==0.0 ||
    OrderStopLoss()>(Ask+Points*TrailingStop))
    {
    OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Poi nts*TrailingStop,OrderTakeProfit(),0,Red);
    return(0);
    }
    }
    }
    }
    }
    }
    return(0);
    }
    // the end.
    * 这个EA也是“一气呵成”的EA
    说过了
    不值得速成班学员为学习EA的榜样
    * 那看来作什么呢?
    答案是:自我学习
    * 学习什么呢?
    * 因为速成班学员个个都是“编写懒惰虫”
    也不可以这么讲
    因为我们不会什么C++啊!
    怎样编怎样写啊!
    没有办法
    总得找出路嘛!
    因此我们最精通的就是“移花接木”
    * 请学员们把以上的EA
    移花接木的放到自己的EA上去
    * 方法简单:
    第一步:copy&press指标
    把他弄成子程式
    * 第二步
    把他的战场策略移植到我们的
    战场策略,完毕。
    就是这么简单。
    * 为什么可以这样的简单?
    其它的源码呢!
    对,其它的就不要了
    * 为什么?
    因为我们的速成班EA结构no1啊!
    无限发展空间啊!
    你还不知道吗?
    哈哈和。。。
    * 如果你做不到
    你就别想成为EA策略高手!
    哈哈和。。。
    05-26-2009 01:31 AM
    yes810
    第拾肆课:如何加其它指标
    * 如何添加macd指标
    //+------------------------------------------------------------------+
    //| MT4-EA制作速成班.mq4 |
    //| Copyright 2007, MT4-EA制作速成班. |
    //| http://www.FXunion.com |
    //+------------------------------------------------------------------+
    #property copyright "Copyright 2007, MT4-EA制作速成班."
    #property link. "http://www.FXunion.com"
    extern double ma1=1,ma2=2;
    double ma1now,ma1now2,ma2now,ma2now2,ma1bnow,ma2bnow;
    ////////////////////////
    extern string _资金管理_ ="任选一个";
    extern bool zijiguanli1= true;//false true、、
    extern bool zijiguanli2= false;//false true、、
    extern bool zijiguanli3= false;//false true、、
    extern bool maok= false;//false true、、
    extern bool macdok= true;//false true、、
    ///////////////////////////////////
    extern double cheng=1;
    double aa=0;
    int s=0,b=0;
    double CurrentBasket=0;
    double LotMM=0;
    double lotstart=0;
    double LotsMax=100;
    extern double lotab=0.1;
    double lots=0;
    double TP=100,TPP=0,SL=200,SLL=0;
    int slip=6;
    //////////////////////////////////
    double mode=0;
    double LastOrderType;
    double LastPricesell;
    double LastPricebuy;
    double LastPrice;
    double OpenSells;
    double OpenSellStops;
    double OpenBuys;
    double OpenBuyStops;
    ///////////////////////////////
    int cnt;
    extern int TrailingStop=0;
    ///////////////////////////////
    string text="";
    ////////////////////////
    double MacdCurrent, MacdPrevious;
    double Macd_1, Macd_2, Macd_3, Macd_4, Ma_Quick, Ma_Slow;
    double MaCurrent, MaPrevious;
    double top, bottom;
    ////////////////////////////
    //+------------------------------------------------------------------+
    //| expert initialization function |
    //+------------------------------------------------------------------+
    int init()
    {
    //----
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| expert deinitialization function |
    //+------------------------------------------------------------------+
    int deinit()
    {
    //----
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| expert start function |
    //+------------------------------------------------------------------+
    int start()
    {
    //----
    jiancha();//检查判断
    MoneyManagement();//资金管理
    macd();//指标管理
    ma();//指标管理
    zhangchang();//战场管理
    xianshi();//显示管理
    TrailingStop();//移动止赢
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    void jiancha()
    {
    b=0;s=0;
    for (int cnt=0; cnt<=OrdersTotal(); cnt++)
    {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol()==Symbol() )
    {
    mode=OrderType();LastOrderType=OrderType();
    if (OrderType() == OP_SELL){ s++; LastPricesell=OrderOpenPrice();}
    if (OrderType() == OP_BUY ){ b++; LastPricebuy=OrderOpenPrice();}
    LastPrice=OrderOpenPrice();
    if (OrderType()==OP_SELL) {OpenSells++;}
    if (OrderType()==OP_SELLSTOP) {OpenSellStops++;}
    if (OrderType()==OP_BUY) {OpenBuys++;}
    if (OrderType()==OP_BUYSTOP) {OpenBuyStops++;}
    }
    }
    }//end jiancha
    //+------------------------------------------------------------------+
    void MoneyManagement() {
    lotstart=(AccountBalance()*lotab/10000);
    lots=lotstart;
    if(cheng==0){cheng=1;}
    CurrentBasket=AccountEquity()-AccountBalance();
    /////////////////////////////////////////////////////////////////
    if(zijiguanli1){ LotMM = lots;}
    /////////////////////////////////////////////////////////////////
    if(zijiguanli2){
    if(CurrentBasket<0 ) {LotMM=NormalizeDouble(lots*(OrdersTotal()*cheng)+ lotstart,2); }
    if(CurrentBasket==0 ) {LotMM=NormalizeDouble(LotMM*0,2); }
    }
    /////////////////////////////////////////////////////////////////
    if(zijiguanli3){
    if(s+b==0){aa=1;}
    if(s+b==1){aa=3;}
    if(s+b==2){aa=7;}
    if(s+b==3){aa=11;}
    if(s+b==4){aa=20;}
    if(s+b==5){aa=31;}
    if(s+b==6){aa=42;}
    if(s+b==7){aa=54;}
    if(s+b==8){aa=66;}
    if(s+b==9){aa=76;}
    if(s+b>=10){aa=66;}
    if(CurrentBasket<0 ) {LotMM=NormalizeDouble(lotstart*aa,2); }
    if(CurrentBasket==0 ) {LotMM=NormalizeDouble(LotMM*0,2); }
    }
    /////////////////////////////////////////////////////////////////
    if(LotMM<lots){LotMM=lots;}
    if(LotMM>LotsMax){LotMM=LotsMax;}
    }//end zijiguanli
    //+------------------------------------------------------------------+
    void macd() {
    Macd_1 = iMACD(NULL,0,3,20,9,PRICE_CLOSE,MODE_MAIN,1);
    Macd_2 = iMACD(NULL,0,3,20,9,PRICE_CLOSE,MODE_MAIN,2);
    Macd_3 = iMACD(NULL,0,3,20,9,PRICE_CLOSE,MODE_MAIN,3);
    Macd_4 = iMACD(NULL,0,3,20,9,PRICE_CLOSE,MODE_MAIN,4);
    Ma_Quick = iMA(NULL,0,20,0,MODE_EMA,PRICE_CLOSE,0);
    Ma_Slow = iMA(NULL,0,65,0,MODE_EMA,PRICE_CLOSE,0);
    top = High[iHighest(NULL,0,MODE_HIGH,10,1)];
    bottom = Low[iLowest(NULL,0,MODE_LOW,10,1)];
    }
    //+------------------------------------------------------------------+
    void ma()
    {
    ma1now = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_CLOSE,0);
    ma1now2 = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_CLOSE,1);
    ma2now = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_CLOSE,0);
    ma2now2 = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_CLOSE,1);
    ma1bnow = iMA(NULL,0,ma1,0,MODE_EMA,PRICE_OPEN,0);
    ma2bnow = iMA(NULL,0,ma2,0,MODE_EMA,PRICE_OPEN,0);
    }
    //+------------------------------------------------------------------+
    void zhangchang() {
    //这边要写一些东西
    if(maok){
    if(ma1now>ma2now
    && ma1now2<ma2now2
    && s+b==0
    ){buyme();}
    if(ma1now<ma2now
    && ma1now2>ma2now2
    && s+b==0
    ){sellme();}
    }//end ma
    if(macdok){
    if(
    s+b==0
    && Macd_1 < Macd_2
    && Macd_2 > Macd_3
    && Ma_Quick < Ma_Slow
    && Bid < Low[1]
    && Macd_2 > 0
    //||
    // s+b==0
    //&& Macd_2 < Macd_3
    //&& Macd_3 > Macd_4
    //&& Ma_Quick < Ma_Slow
    //&& Bid < Low[2] && Macd_3 > 0
    )
    {sellme(); }
    /////////
    if( s+b==0
    && Macd_1 > Macd_2 && Macd_2 < Macd_3
    && Ma_Quick > Ma_Slow && Ask > High[1] && Macd_2 < 0
    //||
    //s+b==0
    //&& Macd_2 > Macd_3
    //&& Macd_3 < Macd_4 && Ma_Quick > Ma_Slow
    //&& Ask > High[2] && Macd_3 < 0
    )
    { buyme(); }

    } //end macd
    }//end EAjujishou

    ""
    还没有人打赏,支持一下
    回复

    举报

     

    回答|共 17 个

    加Q2219910020 LV5

    发表于 2012-11-13 22:58:51 | 显示全部楼层

    说的不错  

    pop LV4

    发表于 2012-11-13 22:58:51 | 显示全部楼层

    本人研究EA3年多 未发现十分稳定的EA EA倒是可以用来辅助交易  

    信和赢汇1 LV5

    发表于 2012-11-13 22:58:51 | 显示全部楼层

    楼主福如东海,万寿无疆!  

    pop LV4

    发表于 2012-11-13 22:58:51 | 显示全部楼层

    原来这样也可以  

    1000美金 LV5

    发表于 2012-11-14 00:05:18 | 显示全部楼层

    现在还真的要重视EA了  

    elliott LV4

    发表于 2012-11-14 00:05:18 | 显示全部楼层

    先顶后看  

    lljia LV4

    发表于 2012-11-14 00:05:18 | 显示全部楼层

    支持你就顶你  

    wwxlj LV3

    发表于 2013-3-14 13:16:24 | 显示全部楼层

    太感谢了,真实用!

    闫登科 LV3

    发表于 2013-8-28 06:49:31 | 显示全部楼层

    太感谢了,我就是个新手,很有启发。还是不大明白,我还要多看几遍。
    12下一页
    您需要登录后才可以回帖 登录 | 注册

    提醒: 禁止引战、谩骂、灌水内容

    微信二维码

    有问题联系客服