客服热线:18391752892

可以套用的简单交易系统

   日期:2019-01-12     浏览:222    
马上注册,结交更多好友,下载更多资源

您需要 登录 才可以下载或查看,没有帐号?注册 本人在学习当中,拿出心得跟大家分享吧
 下面的代码是一个智能交易系统,并不是很麻烦,仅有200多行代码
 
 开仓手数为了方便并未使用资金管理,如果还有不明白的地方可以跟帖询问。
 
 复制内容到剪贴板
 
 代码:
 
 //+------------------------------------------------------------------+
 
 //|                 Designed by . China           |
 
 //|                 Copyright 2007,            |
 
 //|                这是一个智能交易系统,不是指标           |
 
 //+------------------------------------------------------------------+
 
 #property copyright Copyright 2007, haha
 
 #property link   
 
 #define MAGICMA 200708081234
 
 //+------------------------------------------------------------------+
 
 //|                注意没有指标文件那些property            |
 
 //+------------------------------------------------------------------+
 
 //在主函数和子函数外定义的变量为全局变量,全局变量的值在系统执行过程中是不变的,使用extern的作用是
 
 //定义时对全局变量进行赋值,系统使用过程中,用户可以修改.
 
 extern int whichmethod = 1;   //1~4 种下单方式
 
 extern double TakeProfit = 100; //这个参数是止赢
 
 extern   double StopLoss = 20;   //止损
 
 extern double MaximumRisk   = 0.3; //最大开仓量
 
 extern double TrailingStop =25;      //追止
 
 extern   int maxOpen = 3;   //最多持仓限制
 
 extern   int maxLots = 5;   //最多单仓限制
 
 extern int bb = 0;      //非零就跟踪止赢
 
 extern double MATrendPeriod=26;//使用26均线
 
 int i, p2, xxx,p1, res;
 
 double Lots;
 
 datetime lasttime;
 
 int init()   //初始化
 
 {
 
    Lots = 1;
 
    lasttime = NULL;
 
    return(0);
 
 }
 
 int deinit() { return(0); } //反初始化
 
 //主程序
 
 int start()
 
 {
 
    CheckForOpen();
 
    if (bb 0)   CTP();   //跟踪止赢
 
    return(0);
 
 }
 
 //+------下面是各子程序---------------------------+
 
 double LotsOptimized()   //确定下单量,开仓调用
 
 {
 
    double lot=Lots;
 
    int   orders=HistoryTotal();   // history orders total
 
    int   losses=0;          // number of losses orders without a break
 
    //MarketInfo(Symbol(),MODE_MINLOT);
 
    //MarketInfo(Symbol(),MODE_MAXLOT);
 
    //MarketInfo(Symbol(),MODE_LOTSTEP);
 
    lot=NormalizeDouble(MaximumRisk * AccountBalance()/AccountLeverage(),1);
 
    if(lotmaxLots) lot=maxLots;
 
    return(lot);
 
 }
 
 //平仓持有的买单
 
 void CloseBuy()
 
 {
 
    if (OrdersTotal( ) 0 ) 
 
    {
 
     for(i=OrdersTotal()-1;i i--)
 
     {
 
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)   break;
 
     if(OrderType()==OP_BUY)
 
     {
 
        OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
 
        Sleep(5000);
 
     }
 
     }
 
    }
 
 }
 
 //平仓持有的卖单
 
 void CloseSell()
 
 {
 
    if (OrdersTotal( ) 0 ) 
 
    {
 
     for(i=OrdersTotal()-1;i i--)
 
     {
 
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)   break;
 
     if(OrderType()==OP_SELL)
 
     {
 
        OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
 
        Sleep(5000);
 
     }
 
     }
 
    }
 
 }
 
 //判断买或卖或平仓
 
 int buyorsell()   //在这个函数计算设置你的交易信号
 
 {
 
    double MacdCurrent, MacdPrevious, SignalCurrent;
 
    double SignalPrevious, MaCurrent, MaPrevious;
 
   
 
    MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
 
    MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
 
    SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
 
    SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
 
    MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
 
    MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);
 
   
 
    if(MacdCurrentSignalCurrent MacdPreviousMaPrevious)
 
     return (1); // 买 Ma在上升,Macd在0线上,并且两线上交叉
 
    if(MacdCurrent 0 MacdCurrentSignalPrevious MaCurrent 19 ) return; //周五晚11点后不做
 
    }
 
   
 
    if (OrdersTotal( ) = maxOpen) return ; 
 
    //如果已持有开仓数达到最大,不做
 
    if (nowbuyorsell==0) return;   //不交易
 
    TradeOK();   //去下单交易
 
 }
 
 void TradeOK()   //下单交易
 
 {
 
    int error ;
 
    if (nowbuyorsell == 1) //买
 
    {
 
     switch (whichmethod)
 
     {
 
     case 1:   res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0, ,MAGICMA,0,Blue);break;
 
     case 2:   res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,Ask-StopLoss*Point,0, ,MAGICMA,0,Blue); break;
 
     case 3:   res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,Ask+TakeProfit*Point, ,MAGICMA,0,Blue);break;
 
     case 4:   res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point, ,MAGICMA,0,Blue);break;
 
     default : res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0, ,MAGICMA,0,Blue);break;
 
     }
 
     if (res (TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT)))
 
     {
 
        if ((OrderStopLoss()) (Ask + TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT)))
 
        {   
 
         bs = OrderModify(OrderTicket(), OrderOpenPrice(),
 
         Ask + TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(),0, Tan);
 
        }
 
     }
 
     }
 
    }
 
 }
 
 以上代码已编译通过,可直接在mt4上编译执行,感兴趣的可以下载编译后进行测试
外汇交易有很大的风险性,本站所有资源均来自网络,请选择使用,如若出现亏损,本站不承担任何责任!


特别提示:本信息由相关企业自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


0相关评论
相关行情
推荐行情
点击排行