<
[转帖]智能交易系统基础
RE>//+------------------------------------------------------------------+
//| Designed by OKwh, China |
//| Copyright 2006, OKwh |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright 2006, OKwh "
#property link ""
#define MAGICMA 200610011231
//+------------------------------------------------------------------+
//| 注意没有指标文件那些property |
//+------------------------------------------------------------------+
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 0 )
{
for(i=OrdersTotal()-1;i0 && 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 r / {br / if (OrderStopLoss() < Bid - TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT)) br / {br / bs = OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(),0, Green);br / }br / }br / } br / else if (OrderType() == OP_SELL) br / {br / if ((OrderOpenPrice() - Ask) > (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);
}
}
}
}
} |