{
o
检测: 账户上的可用保证金...
在分析市场状况之前,检测你的账户上可用的自由保证金可以开仓。
if(AccountFreeMargin()<(1000*Lots)) {
Print(\没有资金.自由保证金 = \AccountFreeMargin()); return(0); }
o
可能是看涨仓位 (BUY)?
进入看涨仓位的条件: MACD 低于零, 向上并且穿过信号线向下。这就是我们在 MQL4中描述的 (注意我们在指标上的业务值保存在先前的变量中):
// 尽可能检测看涨仓位 (BUY)
if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious
MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious) {
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,
\ if(ticket>0) {
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print(\开单 : \ }
else Print(\错误 opening BUY order : \ return(0); }
附加的检验‘山丘’的大小上面已经给出了描述。 MACDOpenLevel变量是一个用户指定变量,它不可能改变程序文本,但是却有很大的灵活性。在程序开始我们插入这个变量的描述。
o
能交易示范 2
2010年02月18日 星期四 10:15 ? 可能是卖空仓位(SELL)?
进入卖空仓位的条件: MACD高于零,向上并且穿过信号线向下。注解如下: // 尽可能的检测卖空仓位(SELL)
if(MacdCurrent>0 && MacdCurrentSignalPrevious && MacdCurrent>(MACDOpenLevel*Point) && MaCurrent {
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, \ if(ticket>0) {
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print(\开单 : \ }
else Print(\错误SELL定单开仓 : \ return(0); } return(0); }
? 周期循环检验先前开仓
//进入市场的正确性非常重要 // 但是更重要的是安全退出... for(cnt=0;cnt {
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && // 检验开仓 OrderSymbol()==Symbol()) // 检验货币对 {
\– \是一个循环的变量必须在程序开始指定如下: int cnt = 0;
?
如果是看涨仓位
if(OrderType()==OP_BUY) // 打开看张仓位 {
o
应该平仓吗?
退出看涨仓位的条件: MACD 穿过信号线, MACD 高于零,向上并穿过信号线向下。
if(MacdCurrent>0 && MacdCurrentSignalPrevious && MacdCurrent>(MACDCloseLevel*Point)) {
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); //平仓
return(0); //退出 }
o
应该重设追踪止损马?
我们设定追踪止损只有在仓位盈利已经超过追踪水平点,并且新的止损水平点好于先前的水平。
// 检测追踪止损
if(TrailingStop>0) {
if(Bid-OrderOpenPrice()>Point*TrailingStop) {
if(OrderStopLoss() {
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,
OrderTakeProfit(),0,Green); return(0); } } }
我们停止操作符。 } ? 如果是卖空仓位 else //卖空仓位 {
?
应该平仓吗?
退出卖空仓位的条件: MACD穿过信号线,MACD低于零,向上并且穿过信号线向下。
if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious(MACDCloseLevel*Point)) {
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); //平仓 return(0); // 退出 }
?
应该重设追踪止损吗?
我们设定追踪止损只有在仓位盈利已经超过追踪水平点,并且新的止损水平点好于先前的水平。
// 检测追踪止损
if(TrailingStop>0) {
if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) {
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) {
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,
OrderTakeProfit(),0,Red); return(0); } } }
关闭所有残留开仓。 } } }
return(0); }
这样一步一步地编写我们的智能交易...
智能交易示范 3
2010年02月18日 星期四 10:16